diff --git a/.bazelrc.common b/.bazelrc.common index e210b06ed2706b..8d865f904d600a 100644 --- a/.bazelrc.common +++ b/.bazelrc.common @@ -132,6 +132,9 @@ coverage --instrument_test_targets # Metadata settings build --workspace_status_command="node ./src/dev/bazel_workspace_status.js" +# Load remote cache settings, if they exist +try-import %workspace%/.bazelrc.cache + # Load any settings specific to the current user. # .bazelrc.user should appear in .gitignore so that settings are not shared with team members # This needs to be last statement in this diff --git a/.buildkite/scripts/common/env.sh b/.buildkite/scripts/common/env.sh index 43e02500313770..1f7c289c80fd40 100755 --- a/.buildkite/scripts/common/env.sh +++ b/.buildkite/scripts/common/env.sh @@ -22,6 +22,9 @@ KIBANA_PKG_BRANCH="$(jq -r .branch "$KIBANA_DIR/package.json")" export KIBANA_PKG_BRANCH export KIBANA_BASE_BRANCH="$KIBANA_PKG_BRANCH" +KIBANA_PKG_VERSION="$(jq -r .version "$KIBANA_DIR/package.json")" +export KIBANA_PKG_VERSION + export GECKODRIVER_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" export CHROMEDRIVER_CDNURL="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" export RE2_DOWNLOAD_MIRROR="https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache" diff --git a/.buildkite/scripts/lifecycle/pre_command.sh b/.buildkite/scripts/lifecycle/pre_command.sh index 46235b63161cd7..ec2b55ecb2a7d2 100755 --- a/.buildkite/scripts/lifecycle/pre_command.sh +++ b/.buildkite/scripts/lifecycle/pre_command.sh @@ -92,6 +92,15 @@ export KIBANA_DOCKER_USERNAME KIBANA_DOCKER_PASSWORD="$(retry 5 5 vault read -field=password secret/kibana-issues/dev/container-registry)" export KIBANA_DOCKER_PASSWORD +SYNTHETICS_SERVICE_USERNAME="$(retry 5 5 vault read -field=username secret/kibana-issues/dev/kibana-ci-synthetics-credentials)" +export SYNTHETICS_SERVICE_USERNAME + +SYNTHETICS_SERVICE_PASSWORD="$(retry 5 5 vault read -field=password secret/kibana-issues/dev/kibana-ci-synthetics-credentials)" +export SYNTHETICS_SERVICE_PASSWORD + +SYNTHETICS_SERVICE_MANIFEST="$(retry 5 5 vault read -field=manifest secret/kibana-issues/dev/kibana-ci-synthetics-credentials)" +export SYNTHETICS_SERVICE_MANIFEST + # Setup Failed Test Reporter Elasticsearch credentials { TEST_FAILURES_ES_CLOUD_ID=$(retry 5 5 vault read -field=cloud_id secret/kibana-issues/dev/failed_tests_reporter_es) diff --git a/.buildkite/scripts/steps/package_testing/build.sh b/.buildkite/scripts/steps/package_testing/build.sh index 813713dff2fe3c..e132128c250b53 100755 --- a/.buildkite/scripts/steps/package_testing/build.sh +++ b/.buildkite/scripts/steps/package_testing/build.sh @@ -4,9 +4,10 @@ set -euo pipefail .buildkite/scripts/bootstrap.sh -echo "--- Build Kibana Distribution" node scripts/build --all-platforms --debug --skip-docker-cloud --skip-docker-ubi --skip-docker-contexts +DOCKER_FILE="kibana-$KIBANA_PKG_VERSION-SNAPSHOT-docker-image.tar.gz" + cd target -buildkite-agent artifact upload "./*-docker-image.tar.gz;./*.deb;./*.rpm" +buildkite-agent artifact upload "./$DOCKER_FILE;./*.deb;./*.rpm" cd .. diff --git a/.buildkite/scripts/steps/package_testing/test.sh b/.buildkite/scripts/steps/package_testing/test.sh index eb2f20eea45259..8fcb665b67a979 100755 --- a/.buildkite/scripts/steps/package_testing/test.sh +++ b/.buildkite/scripts/steps/package_testing/test.sh @@ -15,7 +15,7 @@ elif [[ "$TEST_PACKAGE" == "rpm" ]]; then buildkite-agent artifact download 'kibana-*.rpm' . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" KIBANA_IP_ADDRESS="192.168.50.6" elif [[ "$TEST_PACKAGE" == "docker" ]]; then - buildkite-agent artifact download 'kibana-*-docker-image.tar.gz' . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" + buildkite-agent artifact download "kibana-$KIBANA_PKG_VERSION-SNAPSHOT-docker-image.tar.gz" . --build "${KIBANA_BUILD_ID:-$BUILDKITE_BUILD_ID}" KIBANA_IP_ADDRESS="192.168.50.7" fi cd .. diff --git a/.gitignore b/.gitignore index cd79644e5d060c..7cf2e31ac0a010 100644 --- a/.gitignore +++ b/.gitignore @@ -87,8 +87,9 @@ report.asciidoc /bazel /bazel-* .bazelrc.user +.bazelrc.cache elastic-agent-* fleet-server-* elastic-agent.yml -fleet-server.yml \ No newline at end of file +fleet-server.yml diff --git a/docs/apm/troubleshooting.asciidoc b/docs/apm/troubleshooting.asciidoc index 814a7d374506fe..4693ed7f0d6fb7 100644 --- a/docs/apm/troubleshooting.asciidoc +++ b/docs/apm/troubleshooting.asciidoc @@ -47,37 +47,14 @@ This section can help with any of the following: There are a number of factors that could be at play here. One important thing to double-check first is your index template. -*Index template* -An APM index template must exist for the APM app to work correctly. -By default, this index template is created by APM Server on startup. -However, this only happens if `setup.template.enabled` is `true` in `apm-server.yml`. -You can create the index template manually by running `apm-server setup`. +*Index templates* +For the APM app to work correctly, an index template must exist for each APM data stream. +By default, {fleet} sets up APM index templates when the APM integration is installed. Take note that index templates *cannot* be applied retroactively -- they are only applied at index creation time. More information is available in {apm-guide-ref}/apm-server-configuration.html[Set up and configure]. -You can check for the existence of an APM index template using the -{ref}/indices-get-template.html[Get index template API]. -If you're using the default index naming pattern, that request would be: - -[source,js] --------------------------------------------------- -GET /_template/apm-{version} --------------------------------------------------- -// CONSOLE - -*Using Logstash, Kafka, etc.* -If you're not outputting data directly from APM Server to Elasticsearch (perhaps you're using Logstash or Kafka), -then the index template will not be set up automatically. Instead, you'll need to -{apm-guide-ref}/apm-server-template.html[load the template manually]. - -*Using a custom index names* -This problem can also occur if you've customized the index name that you write APM data to. -If you change the default, you must also configure the `setup.template.name` and `setup.template.pattern` options. -See {apm-guide-ref}/configuration-template.html[Load the Elasticsearch index template]. -If the Elasticsearch index template has already been successfully loaded to the index, -you can customize the indices that the APM app uses to display data. -Navigate to *APM* > *Settings* > *Indices*, and change all `xpack.apm.indices.*` values to -include the new index pattern. For example: `customIndexName-*`. +You can check for the existence of APM index templates in Kibana. +Go to **Stack Management** > **Index Management** > **Index Templates** and search for `apm`. [float] [[troubleshooting-too-many-transactions]] @@ -164,20 +141,24 @@ You can also use the Agent's public API to manually set a name for the transacti === Fields are not searchable In Elasticsearch, index templates are used to define settings and mappings that determine how fields should be analyzed. -The recommended index template file for APM Server is installed by the APM Server packages. -This template, by default, enables and disables indexing on certain fields. +The recommended index templates for APM are installed by {fleet} when the Elastic APM integration is installed. +These templates, by default, enable and disable indexing on certain fields. As an example, some agents store cookie values in `http.request.cookies`. Since `http.request` has disabled dynamic indexing, and `http.request.cookies` is not declared in a custom mapping, the values in `http.request.cookies` are not indexed and thus not searchable. -*Ensure an index pattern exists* -As a first step, you should ensure the correct index pattern exists. -Open the main menu, then click *Stack Management > Index Patterns*. -In the pattern list, you should see an apm index pattern; The default is `apm-*`. -If you don't, the index pattern doesn't exist. See <> for information on how to fix this problem. +*Ensure an APM data view exists* +As a first step, you should ensure the correct data view exists. +In {kib}, go to *Stack Management* > *Data views*. +You should see the APM data view--the default is +`traces-apm*,apm-*,logs-apm*,apm-*,metrics-apm*,apm-*`. +If you don't, the data view doesn't exist. +To fix this, navigate to the APM app in {kib} and select *Add data*. +In the APM tutorial, click *Load Kibana objects* to create the APM data view. -Selecting the `apm-*` index pattern shows a listing of every field defined in the pattern. +If creating an APM data view doesn't solve the problem, +see <> for further troubleshooting. *Ensure a field is searchable* There are two things you can do to if you'd like to ensure a field is searchable: @@ -185,18 +166,9 @@ There are two things you can do to if you'd like to ensure a field is searchable 1. Index your additional data as {apm-guide-ref}/metadata.html[labels] instead. These are dynamic by default, which means they will be indexed and become searchable and aggregatable. -2. Use the `append_fields` feature. As an example, -adding the following to `apm-server.yml` will enable dynamic indexing for `http.request.cookies`: - -[source,yml] ----- -setup.template.enabled: true -setup.template.overwrite: true -setup.template.append_fields: - - name: http.request.cookies - type: object - dynamic: true ----- +2. Create a custom mapping for the field. +// link will be added in a later PR. +// docs will be added in https://github.com/elastic/apm-server/pull/6940 [float] [[service-map-rum-connections]] diff --git a/docs/developer/advanced/running-elasticsearch.asciidoc b/docs/developer/advanced/running-elasticsearch.asciidoc index 36f9ee420d41db..c04c53f66cf191 100644 --- a/docs/developer/advanced/running-elasticsearch.asciidoc +++ b/docs/developer/advanced/running-elasticsearch.asciidoc @@ -71,13 +71,6 @@ elasticsearch.password: {{ password }} elasticsearch.ssl.verificationMode: none ---- -If many other users will be interacting with your remote cluster, you'll want to add the following to avoid causing conflicts: - -[source,bash] ----- -kibana.index: '.{YourGitHubHandle}-kibana' ----- - ==== Running remote clusters Setup remote clusters for cross cluster search (CCS) and cross cluster replication (CCR). diff --git a/docs/development/core/public/kibana-plugin-core-public.doclinksstart.links.md b/docs/development/core/public/kibana-plugin-core-public.doclinksstart.links.md index 154332ccc76f39..03862cedf5477b 100644 --- a/docs/development/core/public/kibana-plugin-core-public.doclinksstart.links.md +++ b/docs/development/core/public/kibana-plugin-core-public.doclinksstart.links.md @@ -147,6 +147,7 @@ readonly links: { readonly significant_terms: string; readonly terms: string; readonly terms_doc_count_error: string; + readonly rare_terms: string; readonly avg: string; readonly avg_bucket: string; readonly max_bucket: string; diff --git a/docs/development/core/public/kibana-plugin-core-public.doclinksstart.md b/docs/development/core/public/kibana-plugin-core-public.doclinksstart.md index 933c7c99486c7d..618aef54423bb0 100644 --- a/docs/development/core/public/kibana-plugin-core-public.doclinksstart.md +++ b/docs/development/core/public/kibana-plugin-core-public.doclinksstart.md @@ -17,5 +17,5 @@ export interface DocLinksStart | --- | --- | --- | | [DOC\_LINK\_VERSION](./kibana-plugin-core-public.doclinksstart.doc_link_version.md) | string | | | [ELASTIC\_WEBSITE\_URL](./kibana-plugin-core-public.doclinksstart.elastic_website_url.md) | string | | -| [links](./kibana-plugin-core-public.doclinksstart.links.md) | { readonly settings: string; readonly elasticStackGetStarted: string; readonly upgrade: { readonly upgradingElasticStack: string; }; readonly apm: { readonly kibanaSettings: string; readonly supportedServiceMaps: string; readonly customLinks: string; readonly droppedTransactionSpans: string; readonly upgrading: string; readonly metaData: string; }; readonly canvas: { readonly guide: string; }; readonly cloud: { readonly indexManagement: string; }; readonly console: { readonly guide: string; }; readonly dashboard: { readonly guide: string; readonly drilldowns: string; readonly drilldownsTriggerPicker: string; readonly urlDrilldownTemplateSyntax: string; readonly urlDrilldownVariables: string; }; readonly discover: Record<string, string>; readonly filebeat: { readonly base: string; readonly installation: string; readonly configuration: string; readonly elasticsearchOutput: string; readonly elasticsearchModule: string; readonly startup: string; readonly exportedFields: string; readonly suricataModule: string; readonly zeekModule: string; }; readonly auditbeat: { readonly base: string; readonly auditdModule: string; readonly systemModule: string; }; readonly metricbeat: { readonly base: string; readonly configure: string; readonly httpEndpoint: string; readonly install: string; readonly start: string; }; readonly appSearch: { readonly apiRef: string; readonly apiClients: string; readonly apiKeys: string; readonly authentication: string; readonly crawlRules: string; readonly curations: string; readonly duplicateDocuments: string; readonly entryPoints: string; readonly guide: string; readonly indexingDocuments: string; readonly indexingDocumentsSchema: string; readonly logSettings: string; readonly metaEngines: string; readonly precisionTuning: string; readonly relevanceTuning: string; readonly resultSettings: string; readonly searchUI: string; readonly security: string; readonly synonyms: string; readonly webCrawler: string; readonly webCrawlerEventLogs: string; }; readonly enterpriseSearch: { readonly configuration: string; readonly licenseManagement: string; readonly mailService: string; readonly usersAccess: string; }; readonly workplaceSearch: { readonly apiKeys: string; readonly box: string; readonly confluenceCloud: string; readonly confluenceServer: string; readonly customSources: string; readonly customSourcePermissions: string; readonly documentPermissions: string; readonly dropbox: string; readonly externalIdentities: string; readonly gitHub: string; readonly gettingStarted: string; readonly gmail: string; readonly googleDrive: string; readonly indexingSchedule: string; readonly jiraCloud: string; readonly jiraServer: string; readonly oneDrive: string; readonly permissions: string; readonly salesforce: string; readonly security: string; readonly serviceNow: string; readonly sharePoint: string; readonly slack: string; readonly synch: string; readonly zendesk: string; }; readonly heartbeat: { readonly base: string; }; readonly libbeat: { readonly getStarted: string; }; readonly logstash: { readonly base: string; }; readonly functionbeat: { readonly base: string; }; readonly winlogbeat: { readonly base: string; }; readonly aggs: { readonly composite: string; readonly composite\_missing\_bucket: string; readonly date\_histogram: string; readonly date\_range: string; readonly date\_format\_pattern: string; readonly filter: string; readonly filters: string; readonly geohash\_grid: string; readonly histogram: string; readonly ip\_range: string; readonly range: string; readonly significant\_terms: string; readonly terms: string; readonly terms\_doc\_count\_error: string; readonly avg: string; readonly avg\_bucket: string; readonly max\_bucket: string; readonly min\_bucket: string; readonly sum\_bucket: string; readonly cardinality: string; readonly count: string; readonly cumulative\_sum: string; readonly derivative: string; readonly geo\_bounds: string; readonly geo\_centroid: string; readonly max: string; readonly median: string; readonly min: string; readonly moving\_avg: string; readonly percentile\_ranks: string; readonly serial\_diff: string; readonly std\_dev: string; readonly sum: string; readonly top\_hits: string; }; readonly runtimeFields: { readonly overview: string; readonly mapping: string; }; readonly scriptedFields: { readonly scriptFields: string; readonly scriptAggs: string; readonly painless: string; readonly painlessApi: string; readonly painlessLangSpec: string; readonly painlessSyntax: string; readonly painlessWalkthrough: string; readonly luceneExpressions: string; }; readonly search: { readonly sessions: string; readonly sessionLimits: string; }; readonly indexPatterns: { readonly introduction: string; readonly fieldFormattersNumber: string; readonly fieldFormattersString: string; readonly runtimeFields: string; }; readonly addData: string; readonly kibana: { readonly guide: string; readonly autocompleteSuggestions: string; }; readonly upgradeAssistant: { readonly overview: string; readonly batchReindex: string; readonly remoteReindex: string; }; readonly rollupJobs: string; readonly elasticsearch: Record<string, string>; readonly siem: { readonly privileges: string; readonly guide: string; readonly gettingStarted: string; readonly ml: string; readonly ruleChangeLog: string; readonly detectionsReq: string; readonly networkMap: string; readonly troubleshootGaps: string; }; readonly securitySolution: { readonly trustedApps: string; readonly eventFilters: string; }; readonly query: { readonly eql: string; readonly kueryQuerySyntax: string; readonly luceneQuery: string; readonly luceneQuerySyntax: string; readonly percolate: string; readonly queryDsl: string; }; readonly date: { readonly dateMath: string; readonly dateMathIndexNames: string; }; readonly management: Record<string, string>; readonly ml: Record<string, string>; readonly transforms: Record<string, string>; readonly visualize: Record<string, string>; readonly apis: Readonly<{ bulkIndexAlias: string; byteSizeUnits: string; createAutoFollowPattern: string; createFollower: string; createIndex: string; createSnapshotLifecyclePolicy: string; createRoleMapping: string; createRoleMappingTemplates: string; createRollupJobsRequest: string; createApiKey: string; createPipeline: string; createTransformRequest: string; cronExpressions: string; executeWatchActionModes: string; indexExists: string; multiSearch: string; openIndex: string; putComponentTemplate: string; painlessExecute: string; painlessExecuteAPIContexts: string; putComponentTemplateMetadata: string; putSnapshotLifecyclePolicy: string; putIndexTemplateV1: string; putWatch: string; searchPreference: string; simulatePipeline: string; timeUnits: string; unfreezeIndex: string; updateTransform: string; }>; readonly observability: Readonly<{ guide: string; infrastructureThreshold: string; logsThreshold: string; metricsThreshold: string; monitorStatus: string; monitorUptime: string; tlsCertificate: string; uptimeDurationAnomaly: string; }>; readonly alerting: Record<string, string>; readonly maps: Readonly<{ guide: string; importGeospatialPrivileges: string; gdalTutorial: string; }>; readonly monitoring: Record<string, string>; readonly security: Readonly<{ apiKeyServiceSettings: string; clusterPrivileges: string; elasticsearchSettings: string; elasticsearchEnableSecurity: string; elasticsearchEnableApiKeys: string; indicesPrivileges: string; kibanaTLS: string; kibanaPrivileges: string; mappingRoles: string; mappingRolesFieldRules: string; runAsPrivilege: string; }>; readonly spaces: Readonly<{ kibanaLegacyUrlAliases: string; kibanaDisableLegacyUrlAliasesApi: string; }>; readonly watcher: Record<string, string>; readonly ccs: Record<string, string>; readonly plugins: { azureRepo: string; gcsRepo: string; hdfsRepo: string; s3Repo: string; snapshotRestoreRepos: string; mapperSize: string; }; readonly snapshotRestore: Record<string, string>; readonly ingest: Record<string, string>; readonly fleet: Readonly<{ beatsAgentComparison: string; guide: string; fleetServer: string; fleetServerAddFleetServer: string; settings: string; settingsFleetServerHostSettings: string; settingsFleetServerProxySettings: string; troubleshooting: string; elasticAgent: string; datastreams: string; datastreamsNamingScheme: string; installElasticAgent: string; installElasticAgentStandalone: string; upgradeElasticAgent: string; upgradeElasticAgent712lower: string; learnMoreBlog: string; apiKeysLearnMore: string; onPremRegistry: string; }>; readonly ecs: { readonly guide: string; }; readonly clients: { readonly guide: string; readonly goOverview: string; readonly javaIndex: string; readonly jsIntro: string; readonly netGuide: string; readonly perlGuide: string; readonly phpGuide: string; readonly pythonGuide: string; readonly rubyOverview: string; readonly rustGuide: string; }; readonly endpoints: { readonly troubleshooting: string; }; } | | +| [links](./kibana-plugin-core-public.doclinksstart.links.md) | { readonly settings: string; readonly elasticStackGetStarted: string; readonly upgrade: { readonly upgradingElasticStack: string; }; readonly apm: { readonly kibanaSettings: string; readonly supportedServiceMaps: string; readonly customLinks: string; readonly droppedTransactionSpans: string; readonly upgrading: string; readonly metaData: string; }; readonly canvas: { readonly guide: string; }; readonly cloud: { readonly indexManagement: string; }; readonly console: { readonly guide: string; }; readonly dashboard: { readonly guide: string; readonly drilldowns: string; readonly drilldownsTriggerPicker: string; readonly urlDrilldownTemplateSyntax: string; readonly urlDrilldownVariables: string; }; readonly discover: Record<string, string>; readonly filebeat: { readonly base: string; readonly installation: string; readonly configuration: string; readonly elasticsearchOutput: string; readonly elasticsearchModule: string; readonly startup: string; readonly exportedFields: string; readonly suricataModule: string; readonly zeekModule: string; }; readonly auditbeat: { readonly base: string; readonly auditdModule: string; readonly systemModule: string; }; readonly metricbeat: { readonly base: string; readonly configure: string; readonly httpEndpoint: string; readonly install: string; readonly start: string; }; readonly appSearch: { readonly apiRef: string; readonly apiClients: string; readonly apiKeys: string; readonly authentication: string; readonly crawlRules: string; readonly curations: string; readonly duplicateDocuments: string; readonly entryPoints: string; readonly guide: string; readonly indexingDocuments: string; readonly indexingDocumentsSchema: string; readonly logSettings: string; readonly metaEngines: string; readonly precisionTuning: string; readonly relevanceTuning: string; readonly resultSettings: string; readonly searchUI: string; readonly security: string; readonly synonyms: string; readonly webCrawler: string; readonly webCrawlerEventLogs: string; }; readonly enterpriseSearch: { readonly configuration: string; readonly licenseManagement: string; readonly mailService: string; readonly usersAccess: string; }; readonly workplaceSearch: { readonly apiKeys: string; readonly box: string; readonly confluenceCloud: string; readonly confluenceServer: string; readonly customSources: string; readonly customSourcePermissions: string; readonly documentPermissions: string; readonly dropbox: string; readonly externalIdentities: string; readonly gitHub: string; readonly gettingStarted: string; readonly gmail: string; readonly googleDrive: string; readonly indexingSchedule: string; readonly jiraCloud: string; readonly jiraServer: string; readonly oneDrive: string; readonly permissions: string; readonly salesforce: string; readonly security: string; readonly serviceNow: string; readonly sharePoint: string; readonly slack: string; readonly synch: string; readonly zendesk: string; }; readonly heartbeat: { readonly base: string; }; readonly libbeat: { readonly getStarted: string; }; readonly logstash: { readonly base: string; }; readonly functionbeat: { readonly base: string; }; readonly winlogbeat: { readonly base: string; }; readonly aggs: { readonly composite: string; readonly composite\_missing\_bucket: string; readonly date\_histogram: string; readonly date\_range: string; readonly date\_format\_pattern: string; readonly filter: string; readonly filters: string; readonly geohash\_grid: string; readonly histogram: string; readonly ip\_range: string; readonly range: string; readonly significant\_terms: string; readonly terms: string; readonly terms\_doc\_count\_error: string; readonly rare\_terms: string; readonly avg: string; readonly avg\_bucket: string; readonly max\_bucket: string; readonly min\_bucket: string; readonly sum\_bucket: string; readonly cardinality: string; readonly count: string; readonly cumulative\_sum: string; readonly derivative: string; readonly geo\_bounds: string; readonly geo\_centroid: string; readonly max: string; readonly median: string; readonly min: string; readonly moving\_avg: string; readonly percentile\_ranks: string; readonly serial\_diff: string; readonly std\_dev: string; readonly sum: string; readonly top\_hits: string; }; readonly runtimeFields: { readonly overview: string; readonly mapping: string; }; readonly scriptedFields: { readonly scriptFields: string; readonly scriptAggs: string; readonly painless: string; readonly painlessApi: string; readonly painlessLangSpec: string; readonly painlessSyntax: string; readonly painlessWalkthrough: string; readonly luceneExpressions: string; }; readonly search: { readonly sessions: string; readonly sessionLimits: string; }; readonly indexPatterns: { readonly introduction: string; readonly fieldFormattersNumber: string; readonly fieldFormattersString: string; readonly runtimeFields: string; }; readonly addData: string; readonly kibana: string; readonly upgradeAssistant: { readonly overview: string; readonly batchReindex: string; readonly remoteReindex: string; }; readonly rollupJobs: string; readonly elasticsearch: Record<string, string>; readonly siem: { readonly privileges: string; readonly guide: string; readonly gettingStarted: string; readonly ml: string; readonly ruleChangeLog: string; readonly detectionsReq: string; readonly networkMap: string; readonly troubleshootGaps: string; }; readonly securitySolution: { readonly trustedApps: string; readonly eventFilters: string; }; readonly query: { readonly eql: string; readonly kueryQuerySyntax: string; readonly luceneQuerySyntax: string; readonly percolate: string; readonly queryDsl: string; }; readonly date: { readonly dateMath: string; readonly dateMathIndexNames: string; }; readonly management: Record<string, string>; readonly ml: Record<string, string>; readonly transforms: Record<string, string>; readonly visualize: Record<string, string>; readonly apis: Readonly<{ bulkIndexAlias: string; byteSizeUnits: string; createAutoFollowPattern: string; createFollower: string; createIndex: string; createSnapshotLifecyclePolicy: string; createRoleMapping: string; createRoleMappingTemplates: string; createRollupJobsRequest: string; createApiKey: string; createPipeline: string; createTransformRequest: string; cronExpressions: string; executeWatchActionModes: string; indexExists: string; openIndex: string; putComponentTemplate: string; painlessExecute: string; painlessExecuteAPIContexts: string; putComponentTemplateMetadata: string; putSnapshotLifecyclePolicy: string; putIndexTemplateV1: string; putWatch: string; simulatePipeline: string; timeUnits: string; updateTransform: string; }>; readonly observability: Readonly<{ guide: string; infrastructureThreshold: string; logsThreshold: string; metricsThreshold: string; monitorStatus: string; monitorUptime: string; tlsCertificate: string; uptimeDurationAnomaly: string; }>; readonly alerting: Record<string, string>; readonly maps: Readonly<{ guide: string; importGeospatialPrivileges: string; gdalTutorial: string; }>; readonly monitoring: Record<string, string>; readonly security: Readonly<{ apiKeyServiceSettings: string; clusterPrivileges: string; elasticsearchSettings: string; elasticsearchEnableSecurity: string; elasticsearchEnableApiKeys: string; indicesPrivileges: string; kibanaTLS: string; kibanaPrivileges: string; mappingRoles: string; mappingRolesFieldRules: string; runAsPrivilege: string; }>; readonly spaces: Readonly<{ kibanaLegacyUrlAliases: string; kibanaDisableLegacyUrlAliasesApi: string; }>; readonly watcher: Record<string, string>; readonly ccs: Record<string, string>; readonly plugins: { azureRepo: string; gcsRepo: string; hdfsRepo: string; s3Repo: string; snapshotRestoreRepos: string; mapperSize: string; }; readonly snapshotRestore: Record<string, string>; readonly ingest: Record<string, string>; readonly fleet: Readonly<{ beatsAgentComparison: string; guide: string; fleetServer: string; fleetServerAddFleetServer: string; settings: string; settingsFleetServerHostSettings: string; settingsFleetServerProxySettings: string; troubleshooting: string; elasticAgent: string; datastreams: string; datastreamsNamingScheme: string; installElasticAgent: string; installElasticAgentStandalone: string; upgradeElasticAgent: string; upgradeElasticAgent712lower: string; learnMoreBlog: string; apiKeysLearnMore: string; onPremRegistry: string; }>; readonly ecs: { readonly guide: string; }; readonly clients: { readonly guide: string; readonly goOverview: string; readonly javaIndex: string; readonly jsIntro: string; readonly netGuide: string; readonly perlGuide: string; readonly phpGuide: string; readonly pythonGuide: string; readonly rubyOverview: string; readonly rustGuide: string; }; readonly endpoints: { readonly troubleshooting: string; }; } | | diff --git a/docs/settings/general-infra-logs-ui-settings.asciidoc b/docs/settings/general-infra-logs-ui-settings.asciidoc index d56c38f120170a..5fb20d6622b43c 100644 --- a/docs/settings/general-infra-logs-ui-settings.asciidoc +++ b/docs/settings/general-infra-logs-ui-settings.asciidoc @@ -21,4 +21,7 @@ Field used to identify hosts. Defaults to `host.name`. Field used to identify Docker containers. Defaults to `container.id`. `xpack.infra.sources.default.fields.pod`:: -Field used to identify Kubernetes pods. Defaults to `kubernetes.pod.uid`. \ No newline at end of file +Field used to identify Kubernetes pods. Defaults to `kubernetes.pod.uid`. + +`xpack.infra.alerting.metric_threshold.group_by_page_size`:: +Controls the size of the composite aggregations used by the Metric Threshold group by feature. Defaults to `10000`. \ No newline at end of file diff --git a/docs/setup/docker.asciidoc b/docs/setup/docker.asciidoc index df140dbd00b701..3128ff98269fa3 100644 --- a/docs/setup/docker.asciidoc +++ b/docs/setup/docker.asciidoc @@ -5,7 +5,7 @@ ++++ Docker images for {kib} are available from the Elastic Docker registry. The -base image is https://hub.docker.com/_/kibana[kibana]. +base image is https://hub.docker.com/_/ubuntu[ubuntu:20.04]. A list of all published Docker images and tags is available at https://www.docker.elastic.co[www.docker.elastic.co]. The source code is in diff --git a/docs/user/ml/index.asciidoc b/docs/user/ml/index.asciidoc index 842d7cb054f320..f6a47d7b9d6186 100644 --- a/docs/user/ml/index.asciidoc +++ b/docs/user/ml/index.asciidoc @@ -47,10 +47,8 @@ pane: [role="screenshot"] image::user/ml/images/ml-job-management.png[Job Management] -You can use the *Settings* pane to create and edit -{ml-docs}/ml-ad-finding-anomalies.html#ml-ad-calendars[calendars] and the -filters that are used in -{ml-docs}/ml-ad-finding-anomalies.html#ml-ad-rules[custom rules]: +You can use the *Settings* pane to create and edit calendars and the +filters that are used in custom rules: [role="screenshot"] image::user/ml/images/ml-settings.png[Calendar Management] diff --git a/package.json b/package.json index 53eb65b4455fed..429d1ea67e73f2 100644 --- a/package.json +++ b/package.json @@ -227,7 +227,7 @@ "deep-freeze-strict": "^1.1.1", "deepmerge": "^4.2.2", "del": "^5.1.0", - "elastic-apm-node": "^3.26.0", + "elastic-apm-node": "^3.27.0", "execa": "^4.0.2", "exit-hook": "^2.2.0", "expiry-js": "0.1.7", @@ -411,7 +411,6 @@ "venn.js": "0.2.20", "vinyl": "^2.2.0", "vt-pbf": "^3.1.1", - "wellknown": "^0.5.0", "whatwg-fetch": "^3.0.0", "xml2js": "^0.4.22", "yauzl": "^2.10.0" diff --git a/packages/kbn-dev-utils/src/serializers/recursive_serializer.ts b/packages/kbn-dev-utils/src/serializers/recursive_serializer.ts index 6e6572addbc833..15d3f033a85a12 100644 --- a/packages/kbn-dev-utils/src/serializers/recursive_serializer.ts +++ b/packages/kbn-dev-utils/src/serializers/recursive_serializer.ts @@ -6,11 +6,26 @@ * Side Public License, v 1. */ -export function createRecursiveSerializer(test: (v: any) => boolean, print: (v: any) => string) { +class RawPrint { + static fromString(s: string) { + return new RawPrint(s); + } + constructor(public readonly v: string) {} +} + +export function createRecursiveSerializer( + test: (v: any) => boolean, + print: (v: any, printRaw: (v: string) => RawPrint) => string | RawPrint +) { return { test: (v: any) => test(v), serialize: (v: any, ...rest: any[]) => { - const replacement = print(v); + const replacement = print(v, RawPrint.fromString); + + if (replacement instanceof RawPrint) { + return replacement.v; + } + const printer = rest.pop()!; return printer(replacement, ...rest); }, diff --git a/packages/kbn-es-archiver/src/cli.ts b/packages/kbn-es-archiver/src/cli.ts index e54b4d5fbdb52c..fbb5784afe5ac9 100644 --- a/packages/kbn-es-archiver/src/cli.ts +++ b/packages/kbn-es-archiver/src/cli.ts @@ -18,7 +18,7 @@ import readline from 'readline'; import Fs from 'fs'; import { RunWithCommands, createFlagError, CA_CERT_PATH } from '@kbn/dev-utils'; -import { readConfigFile, KbnClient } from '@kbn/test'; +import { readConfigFile, KbnClient, EsVersion } from '@kbn/test'; import { Client, HttpConnection } from '@elastic/elasticsearch'; import { EsArchiver } from './es_archiver'; @@ -45,7 +45,7 @@ export function runCli() { if (typeof configPath !== 'string') { throw createFlagError('--config must be a string'); } - const config = await readConfigFile(log, Path.resolve(configPath)); + const config = await readConfigFile(log, EsVersion.getDefault(), Path.resolve(configPath)); statsMeta.set('ftrConfigPath', configPath); let esUrl = flags['es-url']; diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index fc92d186981322..3896c67454b902 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -94,7 +94,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _cli__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "run", function() { return _cli__WEBPACK_IMPORTED_MODULE_0__["run"]; }); -/* harmony import */ var _production__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(563); +/* harmony import */ var _production__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(564); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildBazelProductionProjects", function() { return _production__WEBPACK_IMPORTED_MODULE_1__["buildBazelProductionProjects"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildNonBazelProductionProjects", function() { return _production__WEBPACK_IMPORTED_MODULE_1__["buildNonBazelProductionProjects"]; }); @@ -108,7 +108,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_package_json__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(343); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transformDependencies", function() { return _utils_package_json__WEBPACK_IMPORTED_MODULE_4__["transformDependencies"]; }); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(562); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(563); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getProjectPaths", function() { return _config__WEBPACK_IMPORTED_MODULE_5__["getProjectPaths"]; }); /* @@ -141,7 +141,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _kbn_dev_utils_tooling_log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5); /* harmony import */ var _kbn_dev_utils_tooling_log__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_kbn_dev_utils_tooling_log__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _commands__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(129); -/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(557); +/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(558); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(220); /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one @@ -8819,12 +8819,12 @@ exports.ToolingLogCollectingWriter = ToolingLogCollectingWriter; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "commands", function() { return commands; }); /* harmony import */ var _bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(130); -/* harmony import */ var _build__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(527); -/* harmony import */ var _clean__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(528); -/* harmony import */ var _reset__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(552); -/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(553); -/* harmony import */ var _watch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(555); -/* harmony import */ var _patch_native_modules__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(556); +/* harmony import */ var _build__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(528); +/* harmony import */ var _clean__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(529); +/* harmony import */ var _reset__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(553); +/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(554); +/* harmony import */ var _watch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(556); +/* harmony import */ var _patch_native_modules__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(557); /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License @@ -8868,6 +8868,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_sort_package_json__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(411); /* harmony import */ var _utils_validate_dependencies__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(419); /* harmony import */ var _utils_bazel__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(421); +/* harmony import */ var _utils_bazel_setup_remote_cache__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(527); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -8891,6 +8892,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope + const BootstrapCommand = { description: 'Install dependencies and crosslink projects', name: 'bootstrap', @@ -8920,7 +8922,9 @@ const BootstrapCommand = { await Object(_utils_bazel__WEBPACK_IMPORTED_MODULE_9__["ensureYarnIntegrityFileExists"])(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(kibanaProjectPath, 'node_modules')); // Install bazel machinery tools if needed - await Object(_utils_bazel__WEBPACK_IMPORTED_MODULE_9__["installBazelTools"])(rootPath); // Bootstrap process for Bazel packages + await Object(_utils_bazel__WEBPACK_IMPORTED_MODULE_9__["installBazelTools"])(rootPath); // Setup remote cache settings in .bazelrc.cache if needed + + await Object(_utils_bazel_setup_remote_cache__WEBPACK_IMPORTED_MODULE_10__["setupRemoteCache"])(rootPath); // Bootstrap process for Bazel packages // Bazel is now managing dependencies so yarn install // will happen as part of this // @@ -58934,6 +58938,109 @@ function observeReadable(readable) { /* 527 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupRemoteCache", function() { return setupRemoteCache; }); +/* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2); +/* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dedent__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(132); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _child_process__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(221); +/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(220); +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + + + + + + +async function isVaultAvailable() { + try { + await Object(_child_process__WEBPACK_IMPORTED_MODULE_3__["spawn"])('vault', ['--version'], { + stdio: 'pipe' + }); + return true; + } catch { + return false; + } +} + +async function isElasticCommitter() { + try { + const { + stdout: email + } = await Object(_child_process__WEBPACK_IMPORTED_MODULE_3__["spawn"])('git', ['config', 'user.email'], { + stdio: 'pipe' + }); + return email.trim().endsWith('@elastic.co'); + } catch { + return false; + } +} + +async function setupRemoteCache(repoRootPath) { + // The remote cache is only for Elastic employees working locally (CI cache settings are handled elsewhere) + if (process.env.CI || !(await isElasticCommitter())) { + return; + } + + _log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] setting up remote cache settings if necessary`); + const settingsPath = Object(path__WEBPACK_IMPORTED_MODULE_2__["resolve"])(repoRootPath, '.bazelrc.cache'); + + if (Object(fs__WEBPACK_IMPORTED_MODULE_1__["existsSync"])(settingsPath)) { + _log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] remote cache settings already exist, skipping`); + return; + } + + if (!(await isVaultAvailable())) { + _log__WEBPACK_IMPORTED_MODULE_4__["log"].info('[bazel_tools] vault is not available, unable to setup remote cache settings.'); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].info('[bazel_tools] building packages will work, but will be slower in many cases.'); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].info('[bazel_tools] reach out to Operations if you need assistance with this.'); + return; + } + + let apiKey = ''; + + try { + const { + stdout + } = await Object(_child_process__WEBPACK_IMPORTED_MODULE_3__["spawn"])('vault', ['read', '-field=readonly-key', 'secret/ui-team/kibana-bazel-remote-cache'], { + stdio: 'pipe' + }); + apiKey = stdout.trim(); + } catch (ex) { + _log__WEBPACK_IMPORTED_MODULE_4__["log"].info('[bazel_tools] unable to read bazel remote cache key from vault, are you authenticated?'); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].info('[bazel_tools] building packages will work, but will be slower in many cases.'); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].info('[bazel_tools] reach out to Operations if you need assistance with this.'); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].info(`[bazel_tools] ${ex}`); + return; + } + + const contents = dedent__WEBPACK_IMPORTED_MODULE_0___default.a` + # V1 - This file is automatically generated by 'yarn kbn bootstrap' + # To regenerate this file, delete it and run 'yarn kbn bootstrap' again. + build --bes_results_url=https://app.buildbuddy.io/invocation/ + build --bes_backend=grpcs://cloud.buildbuddy.io + build --remote_cache=grpcs://cloud.buildbuddy.io + build --remote_timeout=3600 + build --remote_header=${apiKey} + `; + Object(fs__WEBPACK_IMPORTED_MODULE_1__["writeFileSync"])(settingsPath, contents); + _log__WEBPACK_IMPORTED_MODULE_4__["log"].info(`[bazel_tools] remote cache settings written to ${settingsPath}`); +} + +/***/ }), +/* 528 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BuildCommand", function() { return BuildCommand; }); @@ -58965,7 +59072,7 @@ const BuildCommand = { }; /***/ }), -/* 528 */ +/* 529 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -58975,7 +59082,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dedent__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(240); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(del__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(529); +/* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(530); /* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(ora__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_3__); @@ -59082,20 +59189,20 @@ const CleanCommand = { }; /***/ }), -/* 529 */ +/* 530 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const readline = __webpack_require__(530); -const chalk = __webpack_require__(531); -const cliCursor = __webpack_require__(534); -const cliSpinners = __webpack_require__(536); -const logSymbols = __webpack_require__(538); -const stripAnsi = __webpack_require__(544); -const wcwidth = __webpack_require__(546); -const isInteractive = __webpack_require__(550); -const MuteStream = __webpack_require__(551); +const readline = __webpack_require__(531); +const chalk = __webpack_require__(532); +const cliCursor = __webpack_require__(535); +const cliSpinners = __webpack_require__(537); +const logSymbols = __webpack_require__(539); +const stripAnsi = __webpack_require__(545); +const wcwidth = __webpack_require__(547); +const isInteractive = __webpack_require__(551); +const MuteStream = __webpack_require__(552); const TEXT = Symbol('text'); const PREFIX_TEXT = Symbol('prefixText'); @@ -59448,13 +59555,13 @@ module.exports.promise = (action, options) => { /***/ }), -/* 530 */ +/* 531 */ /***/ (function(module, exports) { module.exports = require("readline"); /***/ }), -/* 531 */ +/* 532 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59464,7 +59571,7 @@ const {stdout: stdoutColor, stderr: stderrColor} = __webpack_require__(121); const { stringReplaceAll, stringEncaseCRLFWithFirstIndex -} = __webpack_require__(532); +} = __webpack_require__(533); // `supportsColor.level` → `ansiStyles.color[name]` mapping const levelMapping = [ @@ -59665,7 +59772,7 @@ const chalkTag = (chalk, ...strings) => { } if (template === undefined) { - template = __webpack_require__(533); + template = __webpack_require__(534); } return template(chalk, parts.join('')); @@ -59694,7 +59801,7 @@ module.exports = chalk; /***/ }), -/* 532 */ +/* 533 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59740,7 +59847,7 @@ module.exports = { /***/ }), -/* 533 */ +/* 534 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59881,12 +59988,12 @@ module.exports = (chalk, temporary) => { /***/ }), -/* 534 */ +/* 535 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const restoreCursor = __webpack_require__(535); +const restoreCursor = __webpack_require__(536); let isHidden = false; @@ -59923,7 +60030,7 @@ exports.toggle = (force, writableStream) => { /***/ }), -/* 535 */ +/* 536 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59939,13 +60046,13 @@ module.exports = onetime(() => { /***/ }), -/* 536 */ +/* 537 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const spinners = Object.assign({}, __webpack_require__(537)); +const spinners = Object.assign({}, __webpack_require__(538)); const spinnersList = Object.keys(spinners); @@ -59963,18 +60070,18 @@ module.exports.default = spinners; /***/ }), -/* 537 */ +/* 538 */ /***/ (function(module) { module.exports = JSON.parse("{\"dots\":{\"interval\":80,\"frames\":[\"⠋\",\"⠙\",\"⠹\",\"⠸\",\"⠼\",\"⠴\",\"⠦\",\"⠧\",\"⠇\",\"⠏\"]},\"dots2\":{\"interval\":80,\"frames\":[\"⣾\",\"⣽\",\"⣻\",\"⢿\",\"⡿\",\"⣟\",\"⣯\",\"⣷\"]},\"dots3\":{\"interval\":80,\"frames\":[\"⠋\",\"⠙\",\"⠚\",\"⠞\",\"⠖\",\"⠦\",\"⠴\",\"⠲\",\"⠳\",\"⠓\"]},\"dots4\":{\"interval\":80,\"frames\":[\"⠄\",\"⠆\",\"⠇\",\"⠋\",\"⠙\",\"⠸\",\"⠰\",\"⠠\",\"⠰\",\"⠸\",\"⠙\",\"⠋\",\"⠇\",\"⠆\"]},\"dots5\":{\"interval\":80,\"frames\":[\"⠋\",\"⠙\",\"⠚\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠲\",\"⠴\",\"⠦\",\"⠖\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠓\",\"⠋\"]},\"dots6\":{\"interval\":80,\"frames\":[\"⠁\",\"⠉\",\"⠙\",\"⠚\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠲\",\"⠴\",\"⠤\",\"⠄\",\"⠄\",\"⠤\",\"⠴\",\"⠲\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠚\",\"⠙\",\"⠉\",\"⠁\"]},\"dots7\":{\"interval\":80,\"frames\":[\"⠈\",\"⠉\",\"⠋\",\"⠓\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠖\",\"⠦\",\"⠤\",\"⠠\",\"⠠\",\"⠤\",\"⠦\",\"⠖\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠓\",\"⠋\",\"⠉\",\"⠈\"]},\"dots8\":{\"interval\":80,\"frames\":[\"⠁\",\"⠁\",\"⠉\",\"⠙\",\"⠚\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠲\",\"⠴\",\"⠤\",\"⠄\",\"⠄\",\"⠤\",\"⠠\",\"⠠\",\"⠤\",\"⠦\",\"⠖\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠓\",\"⠋\",\"⠉\",\"⠈\",\"⠈\"]},\"dots9\":{\"interval\":80,\"frames\":[\"⢹\",\"⢺\",\"⢼\",\"⣸\",\"⣇\",\"⡧\",\"⡗\",\"⡏\"]},\"dots10\":{\"interval\":80,\"frames\":[\"⢄\",\"⢂\",\"⢁\",\"⡁\",\"⡈\",\"⡐\",\"⡠\"]},\"dots11\":{\"interval\":100,\"frames\":[\"⠁\",\"⠂\",\"⠄\",\"⡀\",\"⢀\",\"⠠\",\"⠐\",\"⠈\"]},\"dots12\":{\"interval\":80,\"frames\":[\"⢀⠀\",\"⡀⠀\",\"⠄⠀\",\"⢂⠀\",\"⡂⠀\",\"⠅⠀\",\"⢃⠀\",\"⡃⠀\",\"⠍⠀\",\"⢋⠀\",\"⡋⠀\",\"⠍⠁\",\"⢋⠁\",\"⡋⠁\",\"⠍⠉\",\"⠋⠉\",\"⠋⠉\",\"⠉⠙\",\"⠉⠙\",\"⠉⠩\",\"⠈⢙\",\"⠈⡙\",\"⢈⠩\",\"⡀⢙\",\"⠄⡙\",\"⢂⠩\",\"⡂⢘\",\"⠅⡘\",\"⢃⠨\",\"⡃⢐\",\"⠍⡐\",\"⢋⠠\",\"⡋⢀\",\"⠍⡁\",\"⢋⠁\",\"⡋⠁\",\"⠍⠉\",\"⠋⠉\",\"⠋⠉\",\"⠉⠙\",\"⠉⠙\",\"⠉⠩\",\"⠈⢙\",\"⠈⡙\",\"⠈⠩\",\"⠀⢙\",\"⠀⡙\",\"⠀⠩\",\"⠀⢘\",\"⠀⡘\",\"⠀⠨\",\"⠀⢐\",\"⠀⡐\",\"⠀⠠\",\"⠀⢀\",\"⠀⡀\"]},\"dots8Bit\":{\"interval\":80,\"frames\":[\"⠀\",\"⠁\",\"⠂\",\"⠃\",\"⠄\",\"⠅\",\"⠆\",\"⠇\",\"⡀\",\"⡁\",\"⡂\",\"⡃\",\"⡄\",\"⡅\",\"⡆\",\"⡇\",\"⠈\",\"⠉\",\"⠊\",\"⠋\",\"⠌\",\"⠍\",\"⠎\",\"⠏\",\"⡈\",\"⡉\",\"⡊\",\"⡋\",\"⡌\",\"⡍\",\"⡎\",\"⡏\",\"⠐\",\"⠑\",\"⠒\",\"⠓\",\"⠔\",\"⠕\",\"⠖\",\"⠗\",\"⡐\",\"⡑\",\"⡒\",\"⡓\",\"⡔\",\"⡕\",\"⡖\",\"⡗\",\"⠘\",\"⠙\",\"⠚\",\"⠛\",\"⠜\",\"⠝\",\"⠞\",\"⠟\",\"⡘\",\"⡙\",\"⡚\",\"⡛\",\"⡜\",\"⡝\",\"⡞\",\"⡟\",\"⠠\",\"⠡\",\"⠢\",\"⠣\",\"⠤\",\"⠥\",\"⠦\",\"⠧\",\"⡠\",\"⡡\",\"⡢\",\"⡣\",\"⡤\",\"⡥\",\"⡦\",\"⡧\",\"⠨\",\"⠩\",\"⠪\",\"⠫\",\"⠬\",\"⠭\",\"⠮\",\"⠯\",\"⡨\",\"⡩\",\"⡪\",\"⡫\",\"⡬\",\"⡭\",\"⡮\",\"⡯\",\"⠰\",\"⠱\",\"⠲\",\"⠳\",\"⠴\",\"⠵\",\"⠶\",\"⠷\",\"⡰\",\"⡱\",\"⡲\",\"⡳\",\"⡴\",\"⡵\",\"⡶\",\"⡷\",\"⠸\",\"⠹\",\"⠺\",\"⠻\",\"⠼\",\"⠽\",\"⠾\",\"⠿\",\"⡸\",\"⡹\",\"⡺\",\"⡻\",\"⡼\",\"⡽\",\"⡾\",\"⡿\",\"⢀\",\"⢁\",\"⢂\",\"⢃\",\"⢄\",\"⢅\",\"⢆\",\"⢇\",\"⣀\",\"⣁\",\"⣂\",\"⣃\",\"⣄\",\"⣅\",\"⣆\",\"⣇\",\"⢈\",\"⢉\",\"⢊\",\"⢋\",\"⢌\",\"⢍\",\"⢎\",\"⢏\",\"⣈\",\"⣉\",\"⣊\",\"⣋\",\"⣌\",\"⣍\",\"⣎\",\"⣏\",\"⢐\",\"⢑\",\"⢒\",\"⢓\",\"⢔\",\"⢕\",\"⢖\",\"⢗\",\"⣐\",\"⣑\",\"⣒\",\"⣓\",\"⣔\",\"⣕\",\"⣖\",\"⣗\",\"⢘\",\"⢙\",\"⢚\",\"⢛\",\"⢜\",\"⢝\",\"⢞\",\"⢟\",\"⣘\",\"⣙\",\"⣚\",\"⣛\",\"⣜\",\"⣝\",\"⣞\",\"⣟\",\"⢠\",\"⢡\",\"⢢\",\"⢣\",\"⢤\",\"⢥\",\"⢦\",\"⢧\",\"⣠\",\"⣡\",\"⣢\",\"⣣\",\"⣤\",\"⣥\",\"⣦\",\"⣧\",\"⢨\",\"⢩\",\"⢪\",\"⢫\",\"⢬\",\"⢭\",\"⢮\",\"⢯\",\"⣨\",\"⣩\",\"⣪\",\"⣫\",\"⣬\",\"⣭\",\"⣮\",\"⣯\",\"⢰\",\"⢱\",\"⢲\",\"⢳\",\"⢴\",\"⢵\",\"⢶\",\"⢷\",\"⣰\",\"⣱\",\"⣲\",\"⣳\",\"⣴\",\"⣵\",\"⣶\",\"⣷\",\"⢸\",\"⢹\",\"⢺\",\"⢻\",\"⢼\",\"⢽\",\"⢾\",\"⢿\",\"⣸\",\"⣹\",\"⣺\",\"⣻\",\"⣼\",\"⣽\",\"⣾\",\"⣿\"]},\"line\":{\"interval\":130,\"frames\":[\"-\",\"\\\\\",\"|\",\"/\"]},\"line2\":{\"interval\":100,\"frames\":[\"⠂\",\"-\",\"–\",\"—\",\"–\",\"-\"]},\"pipe\":{\"interval\":100,\"frames\":[\"┤\",\"┘\",\"┴\",\"└\",\"├\",\"┌\",\"┬\",\"┐\"]},\"simpleDots\":{\"interval\":400,\"frames\":[\". \",\".. \",\"...\",\" \"]},\"simpleDotsScrolling\":{\"interval\":200,\"frames\":[\". \",\".. \",\"...\",\" ..\",\" .\",\" \"]},\"star\":{\"interval\":70,\"frames\":[\"✶\",\"✸\",\"✹\",\"✺\",\"✹\",\"✷\"]},\"star2\":{\"interval\":80,\"frames\":[\"+\",\"x\",\"*\"]},\"flip\":{\"interval\":70,\"frames\":[\"_\",\"_\",\"_\",\"-\",\"`\",\"`\",\"'\",\"´\",\"-\",\"_\",\"_\",\"_\"]},\"hamburger\":{\"interval\":100,\"frames\":[\"☱\",\"☲\",\"☴\"]},\"growVertical\":{\"interval\":120,\"frames\":[\"▁\",\"▃\",\"▄\",\"▅\",\"▆\",\"▇\",\"▆\",\"▅\",\"▄\",\"▃\"]},\"growHorizontal\":{\"interval\":120,\"frames\":[\"▏\",\"▎\",\"▍\",\"▌\",\"▋\",\"▊\",\"▉\",\"▊\",\"▋\",\"▌\",\"▍\",\"▎\"]},\"balloon\":{\"interval\":140,\"frames\":[\" \",\".\",\"o\",\"O\",\"@\",\"*\",\" \"]},\"balloon2\":{\"interval\":120,\"frames\":[\".\",\"o\",\"O\",\"°\",\"O\",\"o\",\".\"]},\"noise\":{\"interval\":100,\"frames\":[\"▓\",\"▒\",\"░\"]},\"bounce\":{\"interval\":120,\"frames\":[\"⠁\",\"⠂\",\"⠄\",\"⠂\"]},\"boxBounce\":{\"interval\":120,\"frames\":[\"▖\",\"▘\",\"▝\",\"▗\"]},\"boxBounce2\":{\"interval\":100,\"frames\":[\"▌\",\"▀\",\"▐\",\"▄\"]},\"triangle\":{\"interval\":50,\"frames\":[\"◢\",\"◣\",\"◤\",\"◥\"]},\"arc\":{\"interval\":100,\"frames\":[\"◜\",\"◠\",\"◝\",\"◞\",\"◡\",\"◟\"]},\"circle\":{\"interval\":120,\"frames\":[\"◡\",\"⊙\",\"◠\"]},\"squareCorners\":{\"interval\":180,\"frames\":[\"◰\",\"◳\",\"◲\",\"◱\"]},\"circleQuarters\":{\"interval\":120,\"frames\":[\"◴\",\"◷\",\"◶\",\"◵\"]},\"circleHalves\":{\"interval\":50,\"frames\":[\"◐\",\"◓\",\"◑\",\"◒\"]},\"squish\":{\"interval\":100,\"frames\":[\"╫\",\"╪\"]},\"toggle\":{\"interval\":250,\"frames\":[\"⊶\",\"⊷\"]},\"toggle2\":{\"interval\":80,\"frames\":[\"▫\",\"▪\"]},\"toggle3\":{\"interval\":120,\"frames\":[\"□\",\"■\"]},\"toggle4\":{\"interval\":100,\"frames\":[\"■\",\"□\",\"▪\",\"▫\"]},\"toggle5\":{\"interval\":100,\"frames\":[\"▮\",\"▯\"]},\"toggle6\":{\"interval\":300,\"frames\":[\"ဝ\",\"၀\"]},\"toggle7\":{\"interval\":80,\"frames\":[\"⦾\",\"⦿\"]},\"toggle8\":{\"interval\":100,\"frames\":[\"◍\",\"◌\"]},\"toggle9\":{\"interval\":100,\"frames\":[\"◉\",\"◎\"]},\"toggle10\":{\"interval\":100,\"frames\":[\"㊂\",\"㊀\",\"㊁\"]},\"toggle11\":{\"interval\":50,\"frames\":[\"⧇\",\"⧆\"]},\"toggle12\":{\"interval\":120,\"frames\":[\"☗\",\"☖\"]},\"toggle13\":{\"interval\":80,\"frames\":[\"=\",\"*\",\"-\"]},\"arrow\":{\"interval\":100,\"frames\":[\"←\",\"↖\",\"↑\",\"↗\",\"→\",\"↘\",\"↓\",\"↙\"]},\"arrow2\":{\"interval\":80,\"frames\":[\"⬆️ \",\"↗️ \",\"➡️ \",\"↘️ \",\"⬇️ \",\"↙️ \",\"⬅️ \",\"↖️ \"]},\"arrow3\":{\"interval\":120,\"frames\":[\"▹▹▹▹▹\",\"▸▹▹▹▹\",\"▹▸▹▹▹\",\"▹▹▸▹▹\",\"▹▹▹▸▹\",\"▹▹▹▹▸\"]},\"bouncingBar\":{\"interval\":80,\"frames\":[\"[ ]\",\"[= ]\",\"[== ]\",\"[=== ]\",\"[ ===]\",\"[ ==]\",\"[ =]\",\"[ ]\",\"[ =]\",\"[ ==]\",\"[ ===]\",\"[====]\",\"[=== ]\",\"[== ]\",\"[= ]\"]},\"bouncingBall\":{\"interval\":80,\"frames\":[\"( ● )\",\"( ● )\",\"( ● )\",\"( ● )\",\"( ●)\",\"( ● )\",\"( ● )\",\"( ● )\",\"( ● )\",\"(● )\"]},\"smiley\":{\"interval\":200,\"frames\":[\"😄 \",\"😝 \"]},\"monkey\":{\"interval\":300,\"frames\":[\"🙈 \",\"🙈 \",\"🙉 \",\"🙊 \"]},\"hearts\":{\"interval\":100,\"frames\":[\"💛 \",\"💙 \",\"💜 \",\"💚 \",\"❤️ \"]},\"clock\":{\"interval\":100,\"frames\":[\"🕛 \",\"🕐 \",\"🕑 \",\"🕒 \",\"🕓 \",\"🕔 \",\"🕕 \",\"🕖 \",\"🕗 \",\"🕘 \",\"🕙 \",\"🕚 \"]},\"earth\":{\"interval\":180,\"frames\":[\"🌍 \",\"🌎 \",\"🌏 \"]},\"material\":{\"interval\":17,\"frames\":[\"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"███████▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"██████████▁▁▁▁▁▁▁▁▁▁\",\"███████████▁▁▁▁▁▁▁▁▁\",\"█████████████▁▁▁▁▁▁▁\",\"██████████████▁▁▁▁▁▁\",\"██████████████▁▁▁▁▁▁\",\"▁██████████████▁▁▁▁▁\",\"▁██████████████▁▁▁▁▁\",\"▁██████████████▁▁▁▁▁\",\"▁▁██████████████▁▁▁▁\",\"▁▁▁██████████████▁▁▁\",\"▁▁▁▁█████████████▁▁▁\",\"▁▁▁▁██████████████▁▁\",\"▁▁▁▁██████████████▁▁\",\"▁▁▁▁▁██████████████▁\",\"▁▁▁▁▁██████████████▁\",\"▁▁▁▁▁██████████████▁\",\"▁▁▁▁▁▁██████████████\",\"▁▁▁▁▁▁██████████████\",\"▁▁▁▁▁▁▁█████████████\",\"▁▁▁▁▁▁▁█████████████\",\"▁▁▁▁▁▁▁▁████████████\",\"▁▁▁▁▁▁▁▁████████████\",\"▁▁▁▁▁▁▁▁▁███████████\",\"▁▁▁▁▁▁▁▁▁███████████\",\"▁▁▁▁▁▁▁▁▁▁██████████\",\"▁▁▁▁▁▁▁▁▁▁██████████\",\"▁▁▁▁▁▁▁▁▁▁▁▁████████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"██████▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"███████████▁▁▁▁▁▁▁▁▁\",\"████████████▁▁▁▁▁▁▁▁\",\"████████████▁▁▁▁▁▁▁▁\",\"██████████████▁▁▁▁▁▁\",\"██████████████▁▁▁▁▁▁\",\"▁██████████████▁▁▁▁▁\",\"▁██████████████▁▁▁▁▁\",\"▁▁▁█████████████▁▁▁▁\",\"▁▁▁▁▁████████████▁▁▁\",\"▁▁▁▁▁████████████▁▁▁\",\"▁▁▁▁▁▁███████████▁▁▁\",\"▁▁▁▁▁▁▁▁█████████▁▁▁\",\"▁▁▁▁▁▁▁▁█████████▁▁▁\",\"▁▁▁▁▁▁▁▁▁█████████▁▁\",\"▁▁▁▁▁▁▁▁▁█████████▁▁\",\"▁▁▁▁▁▁▁▁▁▁█████████▁\",\"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\"]},\"moon\":{\"interval\":80,\"frames\":[\"🌑 \",\"🌒 \",\"🌓 \",\"🌔 \",\"🌕 \",\"🌖 \",\"🌗 \",\"🌘 \"]},\"runner\":{\"interval\":140,\"frames\":[\"🚶 \",\"🏃 \"]},\"pong\":{\"interval\":80,\"frames\":[\"▐⠂ ▌\",\"▐⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂▌\",\"▐ ⠠▌\",\"▐ ⡀▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐⠠ ▌\"]},\"shark\":{\"interval\":120,\"frames\":[\"▐|\\\\____________▌\",\"▐_|\\\\___________▌\",\"▐__|\\\\__________▌\",\"▐___|\\\\_________▌\",\"▐____|\\\\________▌\",\"▐_____|\\\\_______▌\",\"▐______|\\\\______▌\",\"▐_______|\\\\_____▌\",\"▐________|\\\\____▌\",\"▐_________|\\\\___▌\",\"▐__________|\\\\__▌\",\"▐___________|\\\\_▌\",\"▐____________|\\\\▌\",\"▐____________/|▌\",\"▐___________/|_▌\",\"▐__________/|__▌\",\"▐_________/|___▌\",\"▐________/|____▌\",\"▐_______/|_____▌\",\"▐______/|______▌\",\"▐_____/|_______▌\",\"▐____/|________▌\",\"▐___/|_________▌\",\"▐__/|__________▌\",\"▐_/|___________▌\",\"▐/|____________▌\"]},\"dqpb\":{\"interval\":100,\"frames\":[\"d\",\"q\",\"p\",\"b\"]},\"weather\":{\"interval\":100,\"frames\":[\"☀️ \",\"☀️ \",\"☀️ \",\"🌤 \",\"⛅️ \",\"🌥 \",\"☁️ \",\"🌧 \",\"🌨 \",\"🌧 \",\"🌨 \",\"🌧 \",\"🌨 \",\"⛈ \",\"🌨 \",\"🌧 \",\"🌨 \",\"☁️ \",\"🌥 \",\"⛅️ \",\"🌤 \",\"☀️ \",\"☀️ \"]},\"christmas\":{\"interval\":400,\"frames\":[\"🌲\",\"🎄\"]},\"grenade\":{\"interval\":80,\"frames\":[\"، \",\"′ \",\" ´ \",\" ‾ \",\" ⸌\",\" ⸊\",\" |\",\" ⁎\",\" ⁕\",\" ෴ \",\" ⁓\",\" \",\" \",\" \"]},\"point\":{\"interval\":125,\"frames\":[\"∙∙∙\",\"●∙∙\",\"∙●∙\",\"∙∙●\",\"∙∙∙\"]},\"layer\":{\"interval\":150,\"frames\":[\"-\",\"=\",\"≡\"]},\"betaWave\":{\"interval\":80,\"frames\":[\"ρββββββ\",\"βρβββββ\",\"ββρββββ\",\"βββρβββ\",\"ββββρββ\",\"βββββρβ\",\"ββββββρ\"]},\"aesthetic\":{\"interval\":80,\"frames\":[\"▰▱▱▱▱▱▱\",\"▰▰▱▱▱▱▱\",\"▰▰▰▱▱▱▱\",\"▰▰▰▰▱▱▱\",\"▰▰▰▰▰▱▱\",\"▰▰▰▰▰▰▱\",\"▰▰▰▰▰▰▰\",\"▰▱▱▱▱▱▱\"]}}"); /***/ }), -/* 538 */ +/* 539 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const chalk = __webpack_require__(539); +const chalk = __webpack_require__(540); const isSupported = process.platform !== 'win32' || process.env.CI || process.env.TERM === 'xterm-256color'; @@ -59996,16 +60103,16 @@ module.exports = isSupported ? main : fallbacks; /***/ }), -/* 539 */ +/* 540 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const escapeStringRegexp = __webpack_require__(357); -const ansiStyles = __webpack_require__(540); -const stdoutColor = __webpack_require__(541).stdout; +const ansiStyles = __webpack_require__(541); +const stdoutColor = __webpack_require__(542).stdout; -const template = __webpack_require__(543); +const template = __webpack_require__(544); const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); @@ -60231,7 +60338,7 @@ module.exports.default = module.exports; // For TypeScript /***/ }), -/* 540 */ +/* 541 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60404,13 +60511,13 @@ Object.defineProperty(module, 'exports', { /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(116)(module))) /***/ }), -/* 541 */ +/* 542 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const os = __webpack_require__(122); -const hasFlag = __webpack_require__(542); +const hasFlag = __webpack_require__(543); const env = process.env; @@ -60542,7 +60649,7 @@ module.exports = { /***/ }), -/* 542 */ +/* 543 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60557,7 +60664,7 @@ module.exports = (flag, argv) => { /***/ }), -/* 543 */ +/* 544 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60692,18 +60799,18 @@ module.exports = (chalk, tmp) => { /***/ }), -/* 544 */ +/* 545 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const ansiRegex = __webpack_require__(545); +const ansiRegex = __webpack_require__(546); module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; /***/ }), -/* 545 */ +/* 546 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60720,14 +60827,14 @@ module.exports = ({onlyFirst = false} = {}) => { /***/ }), -/* 546 */ +/* 547 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var defaults = __webpack_require__(547) -var combining = __webpack_require__(549) +var defaults = __webpack_require__(548) +var combining = __webpack_require__(550) var DEFAULTS = { nul: 0, @@ -60826,10 +60933,10 @@ function bisearch(ucs) { /***/ }), -/* 547 */ +/* 548 */ /***/ (function(module, exports, __webpack_require__) { -var clone = __webpack_require__(548); +var clone = __webpack_require__(549); module.exports = function(options, defaults) { options = options || {}; @@ -60844,7 +60951,7 @@ module.exports = function(options, defaults) { }; /***/ }), -/* 548 */ +/* 549 */ /***/ (function(module, exports, __webpack_require__) { var clone = (function() { @@ -61016,7 +61123,7 @@ if ( true && module.exports) { /***/ }), -/* 549 */ +/* 550 */ /***/ (function(module, exports) { module.exports = [ @@ -61072,7 +61179,7 @@ module.exports = [ /***/ }), -/* 550 */ +/* 551 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61088,7 +61195,7 @@ module.exports = ({stream = process.stdout} = {}) => { /***/ }), -/* 551 */ +/* 552 */ /***/ (function(module, exports, __webpack_require__) { var Stream = __webpack_require__(173) @@ -61239,7 +61346,7 @@ MuteStream.prototype.close = proxy('close') /***/ }), -/* 552 */ +/* 553 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -61249,7 +61356,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dedent__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(240); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(del__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(529); +/* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(530); /* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(ora__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_3__); @@ -61362,7 +61469,7 @@ const ResetCommand = { }; /***/ }), -/* 553 */ +/* 554 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -61372,7 +61479,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dedent__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utils_errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(341); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(220); -/* harmony import */ var _utils_parallelize__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(554); +/* harmony import */ var _utils_parallelize__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(555); /* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(340); /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one @@ -61431,7 +61538,7 @@ const RunCommand = { }; /***/ }), -/* 554 */ +/* 555 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -61486,7 +61593,7 @@ async function parallelize(items, fn, concurrency = 4) { } /***/ }), -/* 555 */ +/* 556 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -61523,7 +61630,7 @@ const WatchCommand = { }; /***/ }), -/* 556 */ +/* 557 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -61603,7 +61710,7 @@ const PatchNativeModulesCommand = { }; /***/ }), -/* 557 */ +/* 558 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -61615,7 +61722,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(220); /* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(340); /* harmony import */ var _utils_projects_tree__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(420); -/* harmony import */ var _utils_kibana__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(558); +/* harmony import */ var _utils_kibana__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(559); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -61734,7 +61841,7 @@ function toArray(value) { } /***/ }), -/* 558 */ +/* 559 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -61744,13 +61851,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(132); /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var multimatch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(559); +/* harmony import */ var multimatch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(560); /* harmony import */ var multimatch__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(multimatch__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var is_path_inside__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(333); /* harmony import */ var is_path_inside__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(is_path_inside__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _yarn_lock__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(408); /* harmony import */ var _projects__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(340); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(562); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(563); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -61914,15 +62021,15 @@ class Kibana { } /***/ }), -/* 559 */ +/* 560 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const minimatch = __webpack_require__(247); const arrayUnion = __webpack_require__(242); -const arrayDiffer = __webpack_require__(560); -const arrify = __webpack_require__(561); +const arrayDiffer = __webpack_require__(561); +const arrify = __webpack_require__(562); module.exports = (list, patterns, options = {}) => { list = arrify(list); @@ -61946,7 +62053,7 @@ module.exports = (list, patterns, options = {}) => { /***/ }), -/* 560 */ +/* 561 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61961,7 +62068,7 @@ module.exports = arrayDiffer; /***/ }), -/* 561 */ +/* 562 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61991,7 +62098,7 @@ module.exports = arrify; /***/ }), -/* 562 */ +/* 563 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -62051,15 +62158,15 @@ function getProjectPaths({ } /***/ }), -/* 563 */ +/* 564 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _build_bazel_production_projects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(564); +/* harmony import */ var _build_bazel_production_projects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(565); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildBazelProductionProjects", function() { return _build_bazel_production_projects__WEBPACK_IMPORTED_MODULE_0__["buildBazelProductionProjects"]; }); -/* harmony import */ var _build_non_bazel_production_projects__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(811); +/* harmony import */ var _build_non_bazel_production_projects__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(812); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildNonBazelProductionProjects", function() { return _build_non_bazel_production_projects__WEBPACK_IMPORTED_MODULE_1__["buildNonBazelProductionProjects"]; }); /* @@ -62073,19 +62180,19 @@ __webpack_require__.r(__webpack_exports__); /***/ }), -/* 564 */ +/* 565 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildBazelProductionProjects", function() { return buildBazelProductionProjects; }); -/* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(565); +/* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(566); /* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cpy__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var globby__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(777); +/* harmony import */ var globby__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(778); /* harmony import */ var globby__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(globby__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _build_non_bazel_production_projects__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(811); +/* harmony import */ var _build_non_bazel_production_projects__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(812); /* harmony import */ var _utils_bazel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(421); /* harmony import */ var _utils_fs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(231); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(220); @@ -62180,7 +62287,7 @@ async function applyCorrectPermissions(project, kibanaRoot, buildRoot) { } /***/ }), -/* 565 */ +/* 566 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62188,14 +62295,14 @@ async function applyCorrectPermissions(project, kibanaRoot, buildRoot) { const EventEmitter = __webpack_require__(164); const path = __webpack_require__(4); const os = __webpack_require__(122); -const pMap = __webpack_require__(566); -const arrify = __webpack_require__(561); -const globby = __webpack_require__(569); -const hasGlob = __webpack_require__(761); -const cpFile = __webpack_require__(763); -const junk = __webpack_require__(773); -const pFilter = __webpack_require__(774); -const CpyError = __webpack_require__(776); +const pMap = __webpack_require__(567); +const arrify = __webpack_require__(562); +const globby = __webpack_require__(570); +const hasGlob = __webpack_require__(762); +const cpFile = __webpack_require__(764); +const junk = __webpack_require__(774); +const pFilter = __webpack_require__(775); +const CpyError = __webpack_require__(777); const defaultOptions = { ignoreJunk: true @@ -62346,12 +62453,12 @@ module.exports = (source, destination, { /***/ }), -/* 566 */ +/* 567 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const AggregateError = __webpack_require__(567); +const AggregateError = __webpack_require__(568); module.exports = async ( iterable, @@ -62434,12 +62541,12 @@ module.exports = async ( /***/ }), -/* 567 */ +/* 568 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const indentString = __webpack_require__(568); +const indentString = __webpack_require__(569); const cleanStack = __webpack_require__(338); const cleanInternalStack = stack => stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, ''); @@ -62488,7 +62595,7 @@ module.exports = AggregateError; /***/ }), -/* 568 */ +/* 569 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62530,17 +62637,17 @@ module.exports = (string, count = 1, options) => { /***/ }), -/* 569 */ +/* 570 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(132); -const arrayUnion = __webpack_require__(570); +const arrayUnion = __webpack_require__(571); const glob = __webpack_require__(244); -const fastGlob = __webpack_require__(572); -const dirGlob = __webpack_require__(755); -const gitignore = __webpack_require__(758); +const fastGlob = __webpack_require__(573); +const dirGlob = __webpack_require__(756); +const gitignore = __webpack_require__(759); const DEFAULT_FILTER = () => false; @@ -62685,12 +62792,12 @@ module.exports.gitignore = gitignore; /***/ }), -/* 570 */ +/* 571 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var arrayUniq = __webpack_require__(571); +var arrayUniq = __webpack_require__(572); module.exports = function () { return arrayUniq([].concat.apply([], arguments)); @@ -62698,7 +62805,7 @@ module.exports = function () { /***/ }), -/* 571 */ +/* 572 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62767,10 +62874,10 @@ if ('Set' in global) { /***/ }), -/* 572 */ +/* 573 */ /***/ (function(module, exports, __webpack_require__) { -const pkg = __webpack_require__(573); +const pkg = __webpack_require__(574); module.exports = pkg.async; module.exports.default = pkg.async; @@ -62783,19 +62890,19 @@ module.exports.generateTasks = pkg.generateTasks; /***/ }), -/* 573 */ +/* 574 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var optionsManager = __webpack_require__(574); -var taskManager = __webpack_require__(575); -var reader_async_1 = __webpack_require__(726); -var reader_stream_1 = __webpack_require__(750); -var reader_sync_1 = __webpack_require__(751); -var arrayUtils = __webpack_require__(753); -var streamUtils = __webpack_require__(754); +var optionsManager = __webpack_require__(575); +var taskManager = __webpack_require__(576); +var reader_async_1 = __webpack_require__(727); +var reader_stream_1 = __webpack_require__(751); +var reader_sync_1 = __webpack_require__(752); +var arrayUtils = __webpack_require__(754); +var streamUtils = __webpack_require__(755); /** * Synchronous API. */ @@ -62861,7 +62968,7 @@ function isString(source) { /***/ }), -/* 574 */ +/* 575 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62899,13 +63006,13 @@ exports.prepare = prepare; /***/ }), -/* 575 */ +/* 576 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var patternUtils = __webpack_require__(576); +var patternUtils = __webpack_require__(577); /** * Generate tasks based on parent directory of each pattern. */ @@ -62996,16 +63103,16 @@ exports.convertPatternGroupToTask = convertPatternGroupToTask; /***/ }), -/* 576 */ +/* 577 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = __webpack_require__(4); -var globParent = __webpack_require__(577); +var globParent = __webpack_require__(578); var isGlob = __webpack_require__(266); -var micromatch = __webpack_require__(580); +var micromatch = __webpack_require__(581); var GLOBSTAR = '**'; /** * Return true for static pattern. @@ -63151,15 +63258,15 @@ exports.matchAny = matchAny; /***/ }), -/* 577 */ +/* 578 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var path = __webpack_require__(4); -var isglob = __webpack_require__(578); -var pathDirname = __webpack_require__(579); +var isglob = __webpack_require__(579); +var pathDirname = __webpack_require__(580); var isWin32 = __webpack_require__(122).platform() === 'win32'; module.exports = function globParent(str) { @@ -63182,7 +63289,7 @@ module.exports = function globParent(str) { /***/ }), -/* 578 */ +/* 579 */ /***/ (function(module, exports, __webpack_require__) { /*! @@ -63213,7 +63320,7 @@ module.exports = function isGlob(str) { /***/ }), -/* 579 */ +/* 580 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63363,7 +63470,7 @@ module.exports.win32 = win32; /***/ }), -/* 580 */ +/* 581 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63374,18 +63481,18 @@ module.exports.win32 = win32; */ var util = __webpack_require__(113); -var braces = __webpack_require__(581); -var toRegex = __webpack_require__(582); -var extend = __webpack_require__(694); +var braces = __webpack_require__(582); +var toRegex = __webpack_require__(583); +var extend = __webpack_require__(695); /** * Local dependencies */ -var compilers = __webpack_require__(696); -var parsers = __webpack_require__(722); -var cache = __webpack_require__(723); -var utils = __webpack_require__(724); +var compilers = __webpack_require__(697); +var parsers = __webpack_require__(723); +var cache = __webpack_require__(724); +var utils = __webpack_require__(725); var MAX_LENGTH = 1024 * 64; /** @@ -64247,7 +64354,7 @@ module.exports = micromatch; /***/ }), -/* 581 */ +/* 582 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64257,18 +64364,18 @@ module.exports = micromatch; * Module dependencies */ -var toRegex = __webpack_require__(582); -var unique = __webpack_require__(602); -var extend = __webpack_require__(603); +var toRegex = __webpack_require__(583); +var unique = __webpack_require__(603); +var extend = __webpack_require__(604); /** * Local dependencies */ -var compilers = __webpack_require__(605); -var parsers = __webpack_require__(620); -var Braces = __webpack_require__(625); -var utils = __webpack_require__(606); +var compilers = __webpack_require__(606); +var parsers = __webpack_require__(621); +var Braces = __webpack_require__(626); +var utils = __webpack_require__(607); var MAX_LENGTH = 1024 * 64; var cache = {}; @@ -64572,16 +64679,16 @@ module.exports = braces; /***/ }), -/* 582 */ +/* 583 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var safe = __webpack_require__(583); -var define = __webpack_require__(589); -var extend = __webpack_require__(595); -var not = __webpack_require__(599); +var safe = __webpack_require__(584); +var define = __webpack_require__(590); +var extend = __webpack_require__(596); +var not = __webpack_require__(600); var MAX_LENGTH = 1024 * 64; /** @@ -64734,10 +64841,10 @@ module.exports.makeRe = makeRe; /***/ }), -/* 583 */ +/* 584 */ /***/ (function(module, exports, __webpack_require__) { -var parse = __webpack_require__(584); +var parse = __webpack_require__(585); var types = parse.types; module.exports = function (re, opts) { @@ -64783,13 +64890,13 @@ function isRegExp (x) { /***/ }), -/* 584 */ +/* 585 */ /***/ (function(module, exports, __webpack_require__) { -var util = __webpack_require__(585); -var types = __webpack_require__(586); -var sets = __webpack_require__(587); -var positions = __webpack_require__(588); +var util = __webpack_require__(586); +var types = __webpack_require__(587); +var sets = __webpack_require__(588); +var positions = __webpack_require__(589); module.exports = function(regexpStr) { @@ -65071,11 +65178,11 @@ module.exports.types = types; /***/ }), -/* 585 */ +/* 586 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(586); -var sets = __webpack_require__(587); +var types = __webpack_require__(587); +var sets = __webpack_require__(588); // All of these are private and only used by randexp. @@ -65188,7 +65295,7 @@ exports.error = function(regexp, msg) { /***/ }), -/* 586 */ +/* 587 */ /***/ (function(module, exports) { module.exports = { @@ -65204,10 +65311,10 @@ module.exports = { /***/ }), -/* 587 */ +/* 588 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(586); +var types = __webpack_require__(587); var INTS = function() { return [{ type: types.RANGE , from: 48, to: 57 }]; @@ -65292,10 +65399,10 @@ exports.anyChar = function() { /***/ }), -/* 588 */ +/* 589 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(586); +var types = __webpack_require__(587); exports.wordBoundary = function() { return { type: types.POSITION, value: 'b' }; @@ -65315,7 +65422,7 @@ exports.end = function() { /***/ }), -/* 589 */ +/* 590 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65328,8 +65435,8 @@ exports.end = function() { -var isobject = __webpack_require__(590); -var isDescriptor = __webpack_require__(591); +var isobject = __webpack_require__(591); +var isDescriptor = __webpack_require__(592); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -65360,7 +65467,7 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 590 */ +/* 591 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65379,7 +65486,7 @@ module.exports = function isObject(val) { /***/ }), -/* 591 */ +/* 592 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65392,9 +65499,9 @@ module.exports = function isObject(val) { -var typeOf = __webpack_require__(592); -var isAccessor = __webpack_require__(593); -var isData = __webpack_require__(594); +var typeOf = __webpack_require__(593); +var isAccessor = __webpack_require__(594); +var isData = __webpack_require__(595); module.exports = function isDescriptor(obj, key) { if (typeOf(obj) !== 'object') { @@ -65408,7 +65515,7 @@ module.exports = function isDescriptor(obj, key) { /***/ }), -/* 592 */ +/* 593 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -65543,7 +65650,7 @@ function isBuffer(val) { /***/ }), -/* 593 */ +/* 594 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65556,7 +65663,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(592); +var typeOf = __webpack_require__(593); // accessor descriptor properties var accessor = { @@ -65619,7 +65726,7 @@ module.exports = isAccessorDescriptor; /***/ }), -/* 594 */ +/* 595 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65632,7 +65739,7 @@ module.exports = isAccessorDescriptor; -var typeOf = __webpack_require__(592); +var typeOf = __webpack_require__(593); module.exports = function isDataDescriptor(obj, prop) { // data descriptor properties @@ -65675,14 +65782,14 @@ module.exports = function isDataDescriptor(obj, prop) { /***/ }), -/* 595 */ +/* 596 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(596); -var assignSymbols = __webpack_require__(598); +var isExtendable = __webpack_require__(597); +var assignSymbols = __webpack_require__(599); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -65742,7 +65849,7 @@ function isEnum(obj, key) { /***/ }), -/* 596 */ +/* 597 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65755,7 +65862,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(597); +var isPlainObject = __webpack_require__(598); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -65763,7 +65870,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 597 */ +/* 598 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65776,7 +65883,7 @@ module.exports = function isExtendable(val) { -var isObject = __webpack_require__(590); +var isObject = __webpack_require__(591); function isObjectObject(o) { return isObject(o) === true @@ -65807,7 +65914,7 @@ module.exports = function isPlainObject(o) { /***/ }), -/* 598 */ +/* 599 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65854,14 +65961,14 @@ module.exports = function(receiver, objects) { /***/ }), -/* 599 */ +/* 600 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extend = __webpack_require__(600); -var safe = __webpack_require__(583); +var extend = __webpack_require__(601); +var safe = __webpack_require__(584); /** * The main export is a function that takes a `pattern` string and an `options` object. @@ -65933,14 +66040,14 @@ module.exports = toRegex; /***/ }), -/* 600 */ +/* 601 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(601); -var assignSymbols = __webpack_require__(598); +var isExtendable = __webpack_require__(602); +var assignSymbols = __webpack_require__(599); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -66000,7 +66107,7 @@ function isEnum(obj, key) { /***/ }), -/* 601 */ +/* 602 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -66013,7 +66120,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(597); +var isPlainObject = __webpack_require__(598); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -66021,7 +66128,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 602 */ +/* 603 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -66071,13 +66178,13 @@ module.exports.immutable = function uniqueImmutable(arr) { /***/ }), -/* 603 */ +/* 604 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(604); +var isObject = __webpack_require__(605); module.exports = function extend(o/*, objects*/) { if (!isObject(o)) { o = {}; } @@ -66111,7 +66218,7 @@ function hasOwn(obj, key) { /***/ }), -/* 604 */ +/* 605 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -66131,13 +66238,13 @@ module.exports = function isExtendable(val) { /***/ }), -/* 605 */ +/* 606 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var utils = __webpack_require__(606); +var utils = __webpack_require__(607); module.exports = function(braces, options) { braces.compiler @@ -66420,25 +66527,25 @@ function hasQueue(node) { /***/ }), -/* 606 */ +/* 607 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var splitString = __webpack_require__(607); +var splitString = __webpack_require__(608); var utils = module.exports; /** * Module dependencies */ -utils.extend = __webpack_require__(603); -utils.flatten = __webpack_require__(610); -utils.isObject = __webpack_require__(590); -utils.fillRange = __webpack_require__(611); -utils.repeat = __webpack_require__(619); -utils.unique = __webpack_require__(602); +utils.extend = __webpack_require__(604); +utils.flatten = __webpack_require__(611); +utils.isObject = __webpack_require__(591); +utils.fillRange = __webpack_require__(612); +utils.repeat = __webpack_require__(620); +utils.unique = __webpack_require__(603); utils.define = function(obj, key, val) { Object.defineProperty(obj, key, { @@ -66770,7 +66877,7 @@ utils.escapeRegex = function(str) { /***/ }), -/* 607 */ +/* 608 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -66783,7 +66890,7 @@ utils.escapeRegex = function(str) { -var extend = __webpack_require__(608); +var extend = __webpack_require__(609); module.exports = function(str, options, fn) { if (typeof str !== 'string') { @@ -66948,14 +67055,14 @@ function keepEscaping(opts, str, idx) { /***/ }), -/* 608 */ +/* 609 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(609); -var assignSymbols = __webpack_require__(598); +var isExtendable = __webpack_require__(610); +var assignSymbols = __webpack_require__(599); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -67015,7 +67122,7 @@ function isEnum(obj, key) { /***/ }), -/* 609 */ +/* 610 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67028,7 +67135,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(597); +var isPlainObject = __webpack_require__(598); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -67036,7 +67143,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 610 */ +/* 611 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67065,7 +67172,7 @@ function flat(arr, res) { /***/ }), -/* 611 */ +/* 612 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67079,10 +67186,10 @@ function flat(arr, res) { var util = __webpack_require__(113); -var isNumber = __webpack_require__(612); -var extend = __webpack_require__(615); -var repeat = __webpack_require__(617); -var toRegex = __webpack_require__(618); +var isNumber = __webpack_require__(613); +var extend = __webpack_require__(616); +var repeat = __webpack_require__(618); +var toRegex = __webpack_require__(619); /** * Return a range of numbers or letters. @@ -67280,7 +67387,7 @@ module.exports = fillRange; /***/ }), -/* 612 */ +/* 613 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67293,7 +67400,7 @@ module.exports = fillRange; -var typeOf = __webpack_require__(613); +var typeOf = __webpack_require__(614); module.exports = function isNumber(num) { var type = typeOf(num); @@ -67309,10 +67416,10 @@ module.exports = function isNumber(num) { /***/ }), -/* 613 */ +/* 614 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(614); +var isBuffer = __webpack_require__(615); var toString = Object.prototype.toString; /** @@ -67431,7 +67538,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 614 */ +/* 615 */ /***/ (function(module, exports) { /*! @@ -67458,13 +67565,13 @@ function isSlowBuffer (obj) { /***/ }), -/* 615 */ +/* 616 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(616); +var isObject = __webpack_require__(617); module.exports = function extend(o/*, objects*/) { if (!isObject(o)) { o = {}; } @@ -67498,7 +67605,7 @@ function hasOwn(obj, key) { /***/ }), -/* 616 */ +/* 617 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67518,7 +67625,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 617 */ +/* 618 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67595,7 +67702,7 @@ function repeat(str, num) { /***/ }), -/* 618 */ +/* 619 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67608,8 +67715,8 @@ function repeat(str, num) { -var repeat = __webpack_require__(617); -var isNumber = __webpack_require__(612); +var repeat = __webpack_require__(618); +var isNumber = __webpack_require__(613); var cache = {}; function toRegexRange(min, max, options) { @@ -67896,7 +68003,7 @@ module.exports = toRegexRange; /***/ }), -/* 619 */ +/* 620 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67921,14 +68028,14 @@ module.exports = function repeat(ele, num) { /***/ }), -/* 620 */ +/* 621 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var Node = __webpack_require__(621); -var utils = __webpack_require__(606); +var Node = __webpack_require__(622); +var utils = __webpack_require__(607); /** * Braces parsers @@ -68288,15 +68395,15 @@ function concatNodes(pos, node, parent, options) { /***/ }), -/* 621 */ +/* 622 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(590); -var define = __webpack_require__(622); -var utils = __webpack_require__(623); +var isObject = __webpack_require__(591); +var define = __webpack_require__(623); +var utils = __webpack_require__(624); var ownNames; /** @@ -68787,7 +68894,7 @@ exports = module.exports = Node; /***/ }), -/* 622 */ +/* 623 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68800,7 +68907,7 @@ exports = module.exports = Node; -var isDescriptor = __webpack_require__(591); +var isDescriptor = __webpack_require__(592); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -68825,13 +68932,13 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 623 */ +/* 624 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var typeOf = __webpack_require__(624); +var typeOf = __webpack_require__(625); var utils = module.exports; /** @@ -69851,10 +69958,10 @@ function assert(val, message) { /***/ }), -/* 624 */ +/* 625 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(614); +var isBuffer = __webpack_require__(615); var toString = Object.prototype.toString; /** @@ -69973,17 +70080,17 @@ module.exports = function kindOf(val) { /***/ }), -/* 625 */ +/* 626 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extend = __webpack_require__(603); -var Snapdragon = __webpack_require__(626); -var compilers = __webpack_require__(605); -var parsers = __webpack_require__(620); -var utils = __webpack_require__(606); +var extend = __webpack_require__(604); +var Snapdragon = __webpack_require__(627); +var compilers = __webpack_require__(606); +var parsers = __webpack_require__(621); +var utils = __webpack_require__(607); /** * Customize Snapdragon parser and renderer @@ -70084,17 +70191,17 @@ module.exports = Braces; /***/ }), -/* 626 */ +/* 627 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var Base = __webpack_require__(627); -var define = __webpack_require__(657); -var Compiler = __webpack_require__(668); -var Parser = __webpack_require__(691); -var utils = __webpack_require__(671); +var Base = __webpack_require__(628); +var define = __webpack_require__(658); +var Compiler = __webpack_require__(669); +var Parser = __webpack_require__(692); +var utils = __webpack_require__(672); var regexCache = {}; var cache = {}; @@ -70265,20 +70372,20 @@ module.exports.Parser = Parser; /***/ }), -/* 627 */ +/* 628 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var util = __webpack_require__(113); -var define = __webpack_require__(628); -var CacheBase = __webpack_require__(629); -var Emitter = __webpack_require__(630); -var isObject = __webpack_require__(590); -var merge = __webpack_require__(651); -var pascal = __webpack_require__(654); -var cu = __webpack_require__(655); +var define = __webpack_require__(629); +var CacheBase = __webpack_require__(630); +var Emitter = __webpack_require__(631); +var isObject = __webpack_require__(591); +var merge = __webpack_require__(652); +var pascal = __webpack_require__(655); +var cu = __webpack_require__(656); /** * Optionally define a custom `cache` namespace to use. @@ -70707,7 +70814,7 @@ module.exports.namespace = namespace; /***/ }), -/* 628 */ +/* 629 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70720,7 +70827,7 @@ module.exports.namespace = namespace; -var isDescriptor = __webpack_require__(591); +var isDescriptor = __webpack_require__(592); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -70745,21 +70852,21 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 629 */ +/* 630 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(590); -var Emitter = __webpack_require__(630); -var visit = __webpack_require__(631); -var toPath = __webpack_require__(634); -var union = __webpack_require__(636); -var del = __webpack_require__(642); -var get = __webpack_require__(639); -var has = __webpack_require__(647); -var set = __webpack_require__(650); +var isObject = __webpack_require__(591); +var Emitter = __webpack_require__(631); +var visit = __webpack_require__(632); +var toPath = __webpack_require__(635); +var union = __webpack_require__(637); +var del = __webpack_require__(643); +var get = __webpack_require__(640); +var has = __webpack_require__(648); +var set = __webpack_require__(651); /** * Create a `Cache` constructor that when instantiated will @@ -71013,7 +71120,7 @@ module.exports.namespace = namespace; /***/ }), -/* 630 */ +/* 631 */ /***/ (function(module, exports, __webpack_require__) { @@ -71182,7 +71289,7 @@ Emitter.prototype.hasListeners = function(event){ /***/ }), -/* 631 */ +/* 632 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71195,8 +71302,8 @@ Emitter.prototype.hasListeners = function(event){ -var visit = __webpack_require__(632); -var mapVisit = __webpack_require__(633); +var visit = __webpack_require__(633); +var mapVisit = __webpack_require__(634); module.exports = function(collection, method, val) { var result; @@ -71219,7 +71326,7 @@ module.exports = function(collection, method, val) { /***/ }), -/* 632 */ +/* 633 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71232,7 +71339,7 @@ module.exports = function(collection, method, val) { -var isObject = __webpack_require__(590); +var isObject = __webpack_require__(591); module.exports = function visit(thisArg, method, target, val) { if (!isObject(thisArg) && typeof thisArg !== 'function') { @@ -71259,14 +71366,14 @@ module.exports = function visit(thisArg, method, target, val) { /***/ }), -/* 633 */ +/* 634 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var util = __webpack_require__(113); -var visit = __webpack_require__(632); +var visit = __webpack_require__(633); /** * Map `visit` over an array of objects. @@ -71303,7 +71410,7 @@ function isObject(val) { /***/ }), -/* 634 */ +/* 635 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71316,7 +71423,7 @@ function isObject(val) { -var typeOf = __webpack_require__(635); +var typeOf = __webpack_require__(636); module.exports = function toPath(args) { if (typeOf(args) !== 'arguments') { @@ -71343,10 +71450,10 @@ function filter(arr) { /***/ }), -/* 635 */ +/* 636 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(614); +var isBuffer = __webpack_require__(615); var toString = Object.prototype.toString; /** @@ -71465,16 +71572,16 @@ module.exports = function kindOf(val) { /***/ }), -/* 636 */ +/* 637 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(637); -var union = __webpack_require__(638); -var get = __webpack_require__(639); -var set = __webpack_require__(640); +var isObject = __webpack_require__(638); +var union = __webpack_require__(639); +var get = __webpack_require__(640); +var set = __webpack_require__(641); module.exports = function unionValue(obj, prop, value) { if (!isObject(obj)) { @@ -71502,7 +71609,7 @@ function arrayify(val) { /***/ }), -/* 637 */ +/* 638 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71522,7 +71629,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 638 */ +/* 639 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71558,7 +71665,7 @@ module.exports = function union(init) { /***/ }), -/* 639 */ +/* 640 */ /***/ (function(module, exports) { /*! @@ -71614,7 +71721,7 @@ function toString(val) { /***/ }), -/* 640 */ +/* 641 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71627,10 +71734,10 @@ function toString(val) { -var split = __webpack_require__(607); -var extend = __webpack_require__(641); -var isPlainObject = __webpack_require__(597); -var isObject = __webpack_require__(637); +var split = __webpack_require__(608); +var extend = __webpack_require__(642); +var isPlainObject = __webpack_require__(598); +var isObject = __webpack_require__(638); module.exports = function(obj, prop, val) { if (!isObject(obj)) { @@ -71676,13 +71783,13 @@ function isValidKey(key) { /***/ }), -/* 641 */ +/* 642 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(637); +var isObject = __webpack_require__(638); module.exports = function extend(o/*, objects*/) { if (!isObject(o)) { o = {}; } @@ -71716,7 +71823,7 @@ function hasOwn(obj, key) { /***/ }), -/* 642 */ +/* 643 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71729,8 +71836,8 @@ function hasOwn(obj, key) { -var isObject = __webpack_require__(590); -var has = __webpack_require__(643); +var isObject = __webpack_require__(591); +var has = __webpack_require__(644); module.exports = function unset(obj, prop) { if (!isObject(obj)) { @@ -71755,7 +71862,7 @@ module.exports = function unset(obj, prop) { /***/ }), -/* 643 */ +/* 644 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71768,9 +71875,9 @@ module.exports = function unset(obj, prop) { -var isObject = __webpack_require__(644); -var hasValues = __webpack_require__(646); -var get = __webpack_require__(639); +var isObject = __webpack_require__(645); +var hasValues = __webpack_require__(647); +var get = __webpack_require__(640); module.exports = function(obj, prop, noZero) { if (isObject(obj)) { @@ -71781,7 +71888,7 @@ module.exports = function(obj, prop, noZero) { /***/ }), -/* 644 */ +/* 645 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71794,7 +71901,7 @@ module.exports = function(obj, prop, noZero) { -var isArray = __webpack_require__(645); +var isArray = __webpack_require__(646); module.exports = function isObject(val) { return val != null && typeof val === 'object' && isArray(val) === false; @@ -71802,7 +71909,7 @@ module.exports = function isObject(val) { /***/ }), -/* 645 */ +/* 646 */ /***/ (function(module, exports) { var toString = {}.toString; @@ -71813,7 +71920,7 @@ module.exports = Array.isArray || function (arr) { /***/ }), -/* 646 */ +/* 647 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71856,7 +71963,7 @@ module.exports = function hasValue(o, noZero) { /***/ }), -/* 647 */ +/* 648 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71869,9 +71976,9 @@ module.exports = function hasValue(o, noZero) { -var isObject = __webpack_require__(590); -var hasValues = __webpack_require__(648); -var get = __webpack_require__(639); +var isObject = __webpack_require__(591); +var hasValues = __webpack_require__(649); +var get = __webpack_require__(640); module.exports = function(val, prop) { return hasValues(isObject(val) && prop ? get(val, prop) : val); @@ -71879,7 +71986,7 @@ module.exports = function(val, prop) { /***/ }), -/* 648 */ +/* 649 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71892,8 +71999,8 @@ module.exports = function(val, prop) { -var typeOf = __webpack_require__(649); -var isNumber = __webpack_require__(612); +var typeOf = __webpack_require__(650); +var isNumber = __webpack_require__(613); module.exports = function hasValue(val) { // is-number checks for NaN and other edge cases @@ -71946,10 +72053,10 @@ module.exports = function hasValue(val) { /***/ }), -/* 649 */ +/* 650 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(614); +var isBuffer = __webpack_require__(615); var toString = Object.prototype.toString; /** @@ -72071,7 +72178,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 650 */ +/* 651 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72084,10 +72191,10 @@ module.exports = function kindOf(val) { -var split = __webpack_require__(607); -var extend = __webpack_require__(641); -var isPlainObject = __webpack_require__(597); -var isObject = __webpack_require__(637); +var split = __webpack_require__(608); +var extend = __webpack_require__(642); +var isPlainObject = __webpack_require__(598); +var isObject = __webpack_require__(638); module.exports = function(obj, prop, val) { if (!isObject(obj)) { @@ -72133,14 +72240,14 @@ function isValidKey(key) { /***/ }), -/* 651 */ +/* 652 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(652); -var forIn = __webpack_require__(653); +var isExtendable = __webpack_require__(653); +var forIn = __webpack_require__(654); function mixinDeep(target, objects) { var len = arguments.length, i = 0; @@ -72204,7 +72311,7 @@ module.exports = mixinDeep; /***/ }), -/* 652 */ +/* 653 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72217,7 +72324,7 @@ module.exports = mixinDeep; -var isPlainObject = __webpack_require__(597); +var isPlainObject = __webpack_require__(598); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -72225,7 +72332,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 653 */ +/* 654 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72248,7 +72355,7 @@ module.exports = function forIn(obj, fn, thisArg) { /***/ }), -/* 654 */ +/* 655 */ /***/ (function(module, exports) { /*! @@ -72275,14 +72382,14 @@ module.exports = pascalcase; /***/ }), -/* 655 */ +/* 656 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var util = __webpack_require__(113); -var utils = __webpack_require__(656); +var utils = __webpack_require__(657); /** * Expose class utils @@ -72647,7 +72754,7 @@ cu.bubble = function(Parent, events) { /***/ }), -/* 656 */ +/* 657 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72661,10 +72768,10 @@ var utils = {}; * Lazily required module dependencies */ -utils.union = __webpack_require__(638); -utils.define = __webpack_require__(657); -utils.isObj = __webpack_require__(590); -utils.staticExtend = __webpack_require__(664); +utils.union = __webpack_require__(639); +utils.define = __webpack_require__(658); +utils.isObj = __webpack_require__(591); +utils.staticExtend = __webpack_require__(665); /** @@ -72675,7 +72782,7 @@ module.exports = utils; /***/ }), -/* 657 */ +/* 658 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72688,7 +72795,7 @@ module.exports = utils; -var isDescriptor = __webpack_require__(658); +var isDescriptor = __webpack_require__(659); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -72713,7 +72820,7 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 658 */ +/* 659 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72726,9 +72833,9 @@ module.exports = function defineProperty(obj, prop, val) { -var typeOf = __webpack_require__(659); -var isAccessor = __webpack_require__(660); -var isData = __webpack_require__(662); +var typeOf = __webpack_require__(660); +var isAccessor = __webpack_require__(661); +var isData = __webpack_require__(663); module.exports = function isDescriptor(obj, key) { if (typeOf(obj) !== 'object') { @@ -72742,7 +72849,7 @@ module.exports = function isDescriptor(obj, key) { /***/ }), -/* 659 */ +/* 660 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -72895,7 +73002,7 @@ function isBuffer(val) { /***/ }), -/* 660 */ +/* 661 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72908,7 +73015,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(661); +var typeOf = __webpack_require__(662); // accessor descriptor properties var accessor = { @@ -72971,10 +73078,10 @@ module.exports = isAccessorDescriptor; /***/ }), -/* 661 */ +/* 662 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(614); +var isBuffer = __webpack_require__(615); var toString = Object.prototype.toString; /** @@ -73093,7 +73200,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 662 */ +/* 663 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73106,7 +73213,7 @@ module.exports = function kindOf(val) { -var typeOf = __webpack_require__(663); +var typeOf = __webpack_require__(664); // data descriptor properties var data = { @@ -73155,10 +73262,10 @@ module.exports = isDataDescriptor; /***/ }), -/* 663 */ +/* 664 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(614); +var isBuffer = __webpack_require__(615); var toString = Object.prototype.toString; /** @@ -73277,7 +73384,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 664 */ +/* 665 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73290,8 +73397,8 @@ module.exports = function kindOf(val) { -var copy = __webpack_require__(665); -var define = __webpack_require__(657); +var copy = __webpack_require__(666); +var define = __webpack_require__(658); var util = __webpack_require__(113); /** @@ -73374,15 +73481,15 @@ module.exports = extend; /***/ }), -/* 665 */ +/* 666 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var typeOf = __webpack_require__(666); -var copyDescriptor = __webpack_require__(667); -var define = __webpack_require__(657); +var typeOf = __webpack_require__(667); +var copyDescriptor = __webpack_require__(668); +var define = __webpack_require__(658); /** * Copy static properties, prototype properties, and descriptors from one object to another. @@ -73555,10 +73662,10 @@ module.exports.has = has; /***/ }), -/* 666 */ +/* 667 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(614); +var isBuffer = __webpack_require__(615); var toString = Object.prototype.toString; /** @@ -73677,7 +73784,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 667 */ +/* 668 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73765,16 +73872,16 @@ function isObject(val) { /***/ }), -/* 668 */ +/* 669 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var use = __webpack_require__(669); -var define = __webpack_require__(657); +var use = __webpack_require__(670); +var define = __webpack_require__(658); var debug = __webpack_require__(205)('snapdragon:compiler'); -var utils = __webpack_require__(671); +var utils = __webpack_require__(672); /** * Create a new `Compiler` with the given `options`. @@ -73928,7 +74035,7 @@ Compiler.prototype = { // source map support if (opts.sourcemap) { - var sourcemaps = __webpack_require__(690); + var sourcemaps = __webpack_require__(691); sourcemaps(this); this.mapVisit(this.ast.nodes); this.applySourceMaps(); @@ -73949,7 +74056,7 @@ module.exports = Compiler; /***/ }), -/* 669 */ +/* 670 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73962,7 +74069,7 @@ module.exports = Compiler; -var utils = __webpack_require__(670); +var utils = __webpack_require__(671); module.exports = function base(app, opts) { if (!utils.isObject(app) && typeof app !== 'function') { @@ -74077,7 +74184,7 @@ module.exports = function base(app, opts) { /***/ }), -/* 670 */ +/* 671 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -74091,8 +74198,8 @@ var utils = {}; * Lazily required module dependencies */ -utils.define = __webpack_require__(657); -utils.isObject = __webpack_require__(590); +utils.define = __webpack_require__(658); +utils.isObject = __webpack_require__(591); utils.isString = function(val) { @@ -74107,7 +74214,7 @@ module.exports = utils; /***/ }), -/* 671 */ +/* 672 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -74117,9 +74224,9 @@ module.exports = utils; * Module dependencies */ -exports.extend = __webpack_require__(641); -exports.SourceMap = __webpack_require__(672); -exports.sourceMapResolve = __webpack_require__(683); +exports.extend = __webpack_require__(642); +exports.SourceMap = __webpack_require__(673); +exports.sourceMapResolve = __webpack_require__(684); /** * Convert backslash in the given string to forward slashes @@ -74162,7 +74269,7 @@ exports.last = function(arr, n) { /***/ }), -/* 672 */ +/* 673 */ /***/ (function(module, exports, __webpack_require__) { /* @@ -74170,13 +74277,13 @@ exports.last = function(arr, n) { * Licensed under the New BSD license. See LICENSE.txt or: * http://opensource.org/licenses/BSD-3-Clause */ -exports.SourceMapGenerator = __webpack_require__(673).SourceMapGenerator; -exports.SourceMapConsumer = __webpack_require__(679).SourceMapConsumer; -exports.SourceNode = __webpack_require__(682).SourceNode; +exports.SourceMapGenerator = __webpack_require__(674).SourceMapGenerator; +exports.SourceMapConsumer = __webpack_require__(680).SourceMapConsumer; +exports.SourceNode = __webpack_require__(683).SourceNode; /***/ }), -/* 673 */ +/* 674 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -74186,10 +74293,10 @@ exports.SourceNode = __webpack_require__(682).SourceNode; * http://opensource.org/licenses/BSD-3-Clause */ -var base64VLQ = __webpack_require__(674); -var util = __webpack_require__(676); -var ArraySet = __webpack_require__(677).ArraySet; -var MappingList = __webpack_require__(678).MappingList; +var base64VLQ = __webpack_require__(675); +var util = __webpack_require__(677); +var ArraySet = __webpack_require__(678).ArraySet; +var MappingList = __webpack_require__(679).MappingList; /** * An instance of the SourceMapGenerator represents a source map which is @@ -74598,7 +74705,7 @@ exports.SourceMapGenerator = SourceMapGenerator; /***/ }), -/* 674 */ +/* 675 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -74638,7 +74745,7 @@ exports.SourceMapGenerator = SourceMapGenerator; * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -var base64 = __webpack_require__(675); +var base64 = __webpack_require__(676); // A single base 64 digit can contain 6 bits of data. For the base 64 variable // length quantities we use in the source map spec, the first bit is the sign, @@ -74744,7 +74851,7 @@ exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { /***/ }), -/* 675 */ +/* 676 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -74817,7 +74924,7 @@ exports.decode = function (charCode) { /***/ }), -/* 676 */ +/* 677 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -75240,7 +75347,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate /***/ }), -/* 677 */ +/* 678 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -75250,7 +75357,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(676); +var util = __webpack_require__(677); var has = Object.prototype.hasOwnProperty; var hasNativeMap = typeof Map !== "undefined"; @@ -75367,7 +75474,7 @@ exports.ArraySet = ArraySet; /***/ }), -/* 678 */ +/* 679 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -75377,7 +75484,7 @@ exports.ArraySet = ArraySet; * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(676); +var util = __webpack_require__(677); /** * Determine whether mappingB is after mappingA with respect to generated @@ -75452,7 +75559,7 @@ exports.MappingList = MappingList; /***/ }), -/* 679 */ +/* 680 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -75462,11 +75569,11 @@ exports.MappingList = MappingList; * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(676); -var binarySearch = __webpack_require__(680); -var ArraySet = __webpack_require__(677).ArraySet; -var base64VLQ = __webpack_require__(674); -var quickSort = __webpack_require__(681).quickSort; +var util = __webpack_require__(677); +var binarySearch = __webpack_require__(681); +var ArraySet = __webpack_require__(678).ArraySet; +var base64VLQ = __webpack_require__(675); +var quickSort = __webpack_require__(682).quickSort; function SourceMapConsumer(aSourceMap) { var sourceMap = aSourceMap; @@ -76540,7 +76647,7 @@ exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; /***/ }), -/* 680 */ +/* 681 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -76657,7 +76764,7 @@ exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { /***/ }), -/* 681 */ +/* 682 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -76777,7 +76884,7 @@ exports.quickSort = function (ary, comparator) { /***/ }), -/* 682 */ +/* 683 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -76787,8 +76894,8 @@ exports.quickSort = function (ary, comparator) { * http://opensource.org/licenses/BSD-3-Clause */ -var SourceMapGenerator = __webpack_require__(673).SourceMapGenerator; -var util = __webpack_require__(676); +var SourceMapGenerator = __webpack_require__(674).SourceMapGenerator; +var util = __webpack_require__(677); // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other // operating systems these days (capturing the result). @@ -77196,17 +77303,17 @@ exports.SourceNode = SourceNode; /***/ }), -/* 683 */ +/* 684 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014, 2015, 2016, 2017 Simon Lydell // X11 (“MIT”) Licensed. (See LICENSE.) -var sourceMappingURL = __webpack_require__(684) -var resolveUrl = __webpack_require__(685) -var decodeUriComponent = __webpack_require__(686) -var urix = __webpack_require__(688) -var atob = __webpack_require__(689) +var sourceMappingURL = __webpack_require__(685) +var resolveUrl = __webpack_require__(686) +var decodeUriComponent = __webpack_require__(687) +var urix = __webpack_require__(689) +var atob = __webpack_require__(690) @@ -77504,7 +77611,7 @@ module.exports = { /***/ }), -/* 684 */ +/* 685 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright 2014 Simon Lydell @@ -77567,7 +77674,7 @@ void (function(root, factory) { /***/ }), -/* 685 */ +/* 686 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014 Simon Lydell @@ -77585,13 +77692,13 @@ module.exports = resolveUrl /***/ }), -/* 686 */ +/* 687 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2017 Simon Lydell // X11 (“MIT”) Licensed. (See LICENSE.) -var decodeUriComponent = __webpack_require__(687) +var decodeUriComponent = __webpack_require__(688) function customDecodeUriComponent(string) { // `decodeUriComponent` turns `+` into ` `, but that's not wanted. @@ -77602,7 +77709,7 @@ module.exports = customDecodeUriComponent /***/ }), -/* 687 */ +/* 688 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77703,7 +77810,7 @@ module.exports = function (encodedURI) { /***/ }), -/* 688 */ +/* 689 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014 Simon Lydell @@ -77726,7 +77833,7 @@ module.exports = urix /***/ }), -/* 689 */ +/* 690 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77740,7 +77847,7 @@ module.exports = atob.atob = atob; /***/ }), -/* 690 */ +/* 691 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77748,8 +77855,8 @@ module.exports = atob.atob = atob; var fs = __webpack_require__(132); var path = __webpack_require__(4); -var define = __webpack_require__(657); -var utils = __webpack_require__(671); +var define = __webpack_require__(658); +var utils = __webpack_require__(672); /** * Expose `mixin()`. @@ -77892,19 +77999,19 @@ exports.comment = function(node) { /***/ }), -/* 691 */ +/* 692 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var use = __webpack_require__(669); +var use = __webpack_require__(670); var util = __webpack_require__(113); -var Cache = __webpack_require__(692); -var define = __webpack_require__(657); +var Cache = __webpack_require__(693); +var define = __webpack_require__(658); var debug = __webpack_require__(205)('snapdragon:parser'); -var Position = __webpack_require__(693); -var utils = __webpack_require__(671); +var Position = __webpack_require__(694); +var utils = __webpack_require__(672); /** * Create a new `Parser` with the given `input` and `options`. @@ -78432,7 +78539,7 @@ module.exports = Parser; /***/ }), -/* 692 */ +/* 693 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78539,13 +78646,13 @@ MapCache.prototype.del = function mapDelete(key) { /***/ }), -/* 693 */ +/* 694 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var define = __webpack_require__(657); +var define = __webpack_require__(658); /** * Store position for a node @@ -78560,14 +78667,14 @@ module.exports = function Position(start, parser) { /***/ }), -/* 694 */ +/* 695 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(695); -var assignSymbols = __webpack_require__(598); +var isExtendable = __webpack_require__(696); +var assignSymbols = __webpack_require__(599); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -78627,7 +78734,7 @@ function isEnum(obj, key) { /***/ }), -/* 695 */ +/* 696 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78640,7 +78747,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(597); +var isPlainObject = __webpack_require__(598); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -78648,14 +78755,14 @@ module.exports = function isExtendable(val) { /***/ }), -/* 696 */ +/* 697 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var nanomatch = __webpack_require__(697); -var extglob = __webpack_require__(711); +var nanomatch = __webpack_require__(698); +var extglob = __webpack_require__(712); module.exports = function(snapdragon) { var compilers = snapdragon.compiler.compilers; @@ -78732,7 +78839,7 @@ function escapeExtglobs(compiler) { /***/ }), -/* 697 */ +/* 698 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78743,17 +78850,17 @@ function escapeExtglobs(compiler) { */ var util = __webpack_require__(113); -var toRegex = __webpack_require__(582); -var extend = __webpack_require__(698); +var toRegex = __webpack_require__(583); +var extend = __webpack_require__(699); /** * Local dependencies */ -var compilers = __webpack_require__(700); -var parsers = __webpack_require__(701); -var cache = __webpack_require__(704); -var utils = __webpack_require__(706); +var compilers = __webpack_require__(701); +var parsers = __webpack_require__(702); +var cache = __webpack_require__(705); +var utils = __webpack_require__(707); var MAX_LENGTH = 1024 * 64; /** @@ -79577,14 +79684,14 @@ module.exports = nanomatch; /***/ }), -/* 698 */ +/* 699 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(699); -var assignSymbols = __webpack_require__(598); +var isExtendable = __webpack_require__(700); +var assignSymbols = __webpack_require__(599); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -79644,7 +79751,7 @@ function isEnum(obj, key) { /***/ }), -/* 699 */ +/* 700 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79657,7 +79764,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(597); +var isPlainObject = __webpack_require__(598); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -79665,7 +79772,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 700 */ +/* 701 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80011,15 +80118,15 @@ module.exports = function(nanomatch, options) { /***/ }), -/* 701 */ +/* 702 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var regexNot = __webpack_require__(599); -var toRegex = __webpack_require__(582); -var isOdd = __webpack_require__(702); +var regexNot = __webpack_require__(600); +var toRegex = __webpack_require__(583); +var isOdd = __webpack_require__(703); /** * Characters to use in negation regex (we want to "not" match @@ -80405,7 +80512,7 @@ module.exports.not = NOT_REGEX; /***/ }), -/* 702 */ +/* 703 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80418,7 +80525,7 @@ module.exports.not = NOT_REGEX; -var isNumber = __webpack_require__(703); +var isNumber = __webpack_require__(704); module.exports = function isOdd(i) { if (!isNumber(i)) { @@ -80432,7 +80539,7 @@ module.exports = function isOdd(i) { /***/ }), -/* 703 */ +/* 704 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80460,14 +80567,14 @@ module.exports = function isNumber(num) { /***/ }), -/* 704 */ +/* 705 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = new (__webpack_require__(705))(); +module.exports = new (__webpack_require__(706))(); /***/ }), -/* 705 */ +/* 706 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80480,7 +80587,7 @@ module.exports = new (__webpack_require__(705))(); -var MapCache = __webpack_require__(692); +var MapCache = __webpack_require__(693); /** * Create a new `FragmentCache` with an optional object to use for `caches`. @@ -80602,7 +80709,7 @@ exports = module.exports = FragmentCache; /***/ }), -/* 706 */ +/* 707 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80615,14 +80722,14 @@ var path = __webpack_require__(4); * Module dependencies */ -var isWindows = __webpack_require__(707)(); -var Snapdragon = __webpack_require__(626); -utils.define = __webpack_require__(708); -utils.diff = __webpack_require__(709); -utils.extend = __webpack_require__(698); -utils.pick = __webpack_require__(710); -utils.typeOf = __webpack_require__(592); -utils.unique = __webpack_require__(602); +var isWindows = __webpack_require__(708)(); +var Snapdragon = __webpack_require__(627); +utils.define = __webpack_require__(709); +utils.diff = __webpack_require__(710); +utils.extend = __webpack_require__(699); +utils.pick = __webpack_require__(711); +utils.typeOf = __webpack_require__(593); +utils.unique = __webpack_require__(603); /** * Returns true if the given value is effectively an empty string @@ -80988,7 +81095,7 @@ utils.unixify = function(options) { /***/ }), -/* 707 */ +/* 708 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! @@ -81016,7 +81123,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ /***/ }), -/* 708 */ +/* 709 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81029,8 +81136,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ -var isobject = __webpack_require__(590); -var isDescriptor = __webpack_require__(591); +var isobject = __webpack_require__(591); +var isDescriptor = __webpack_require__(592); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -81061,7 +81168,7 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 709 */ +/* 710 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81115,7 +81222,7 @@ function diffArray(one, two) { /***/ }), -/* 710 */ +/* 711 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81128,7 +81235,7 @@ function diffArray(one, two) { -var isObject = __webpack_require__(590); +var isObject = __webpack_require__(591); module.exports = function pick(obj, keys) { if (!isObject(obj) && typeof obj !== 'function') { @@ -81157,7 +81264,7 @@ module.exports = function pick(obj, keys) { /***/ }), -/* 711 */ +/* 712 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81167,18 +81274,18 @@ module.exports = function pick(obj, keys) { * Module dependencies */ -var extend = __webpack_require__(641); -var unique = __webpack_require__(602); -var toRegex = __webpack_require__(582); +var extend = __webpack_require__(642); +var unique = __webpack_require__(603); +var toRegex = __webpack_require__(583); /** * Local dependencies */ -var compilers = __webpack_require__(712); -var parsers = __webpack_require__(718); -var Extglob = __webpack_require__(721); -var utils = __webpack_require__(720); +var compilers = __webpack_require__(713); +var parsers = __webpack_require__(719); +var Extglob = __webpack_require__(722); +var utils = __webpack_require__(721); var MAX_LENGTH = 1024 * 64; /** @@ -81495,13 +81602,13 @@ module.exports = extglob; /***/ }), -/* 712 */ +/* 713 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var brackets = __webpack_require__(713); +var brackets = __webpack_require__(714); /** * Extglob compilers @@ -81671,7 +81778,7 @@ module.exports = function(extglob) { /***/ }), -/* 713 */ +/* 714 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81681,17 +81788,17 @@ module.exports = function(extglob) { * Local dependencies */ -var compilers = __webpack_require__(714); -var parsers = __webpack_require__(716); +var compilers = __webpack_require__(715); +var parsers = __webpack_require__(717); /** * Module dependencies */ var debug = __webpack_require__(205)('expand-brackets'); -var extend = __webpack_require__(641); -var Snapdragon = __webpack_require__(626); -var toRegex = __webpack_require__(582); +var extend = __webpack_require__(642); +var Snapdragon = __webpack_require__(627); +var toRegex = __webpack_require__(583); /** * Parses the given POSIX character class `pattern` and returns a @@ -81889,13 +81996,13 @@ module.exports = brackets; /***/ }), -/* 714 */ +/* 715 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var posix = __webpack_require__(715); +var posix = __webpack_require__(716); module.exports = function(brackets) { brackets.compiler @@ -81983,7 +82090,7 @@ module.exports = function(brackets) { /***/ }), -/* 715 */ +/* 716 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82012,14 +82119,14 @@ module.exports = { /***/ }), -/* 716 */ +/* 717 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var utils = __webpack_require__(717); -var define = __webpack_require__(657); +var utils = __webpack_require__(718); +var define = __webpack_require__(658); /** * Text regex @@ -82238,14 +82345,14 @@ module.exports.TEXT_REGEX = TEXT_REGEX; /***/ }), -/* 717 */ +/* 718 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var toRegex = __webpack_require__(582); -var regexNot = __webpack_require__(599); +var toRegex = __webpack_require__(583); +var regexNot = __webpack_require__(600); var cached; /** @@ -82279,15 +82386,15 @@ exports.createRegex = function(pattern, include) { /***/ }), -/* 718 */ +/* 719 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var brackets = __webpack_require__(713); -var define = __webpack_require__(719); -var utils = __webpack_require__(720); +var brackets = __webpack_require__(714); +var define = __webpack_require__(720); +var utils = __webpack_require__(721); /** * Characters to use in text regex (we want to "not" match @@ -82442,7 +82549,7 @@ module.exports = parsers; /***/ }), -/* 719 */ +/* 720 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82455,7 +82562,7 @@ module.exports = parsers; -var isDescriptor = __webpack_require__(591); +var isDescriptor = __webpack_require__(592); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -82480,14 +82587,14 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 720 */ +/* 721 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var regex = __webpack_require__(599); -var Cache = __webpack_require__(705); +var regex = __webpack_require__(600); +var Cache = __webpack_require__(706); /** * Utils @@ -82556,7 +82663,7 @@ utils.createRegex = function(str) { /***/ }), -/* 721 */ +/* 722 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82566,16 +82673,16 @@ utils.createRegex = function(str) { * Module dependencies */ -var Snapdragon = __webpack_require__(626); -var define = __webpack_require__(719); -var extend = __webpack_require__(641); +var Snapdragon = __webpack_require__(627); +var define = __webpack_require__(720); +var extend = __webpack_require__(642); /** * Local dependencies */ -var compilers = __webpack_require__(712); -var parsers = __webpack_require__(718); +var compilers = __webpack_require__(713); +var parsers = __webpack_require__(719); /** * Customize Snapdragon parser and renderer @@ -82641,16 +82748,16 @@ module.exports = Extglob; /***/ }), -/* 722 */ +/* 723 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extglob = __webpack_require__(711); -var nanomatch = __webpack_require__(697); -var regexNot = __webpack_require__(599); -var toRegex = __webpack_require__(582); +var extglob = __webpack_require__(712); +var nanomatch = __webpack_require__(698); +var regexNot = __webpack_require__(600); +var toRegex = __webpack_require__(583); var not; /** @@ -82731,14 +82838,14 @@ function textRegex(pattern) { /***/ }), -/* 723 */ +/* 724 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = new (__webpack_require__(705))(); +module.exports = new (__webpack_require__(706))(); /***/ }), -/* 724 */ +/* 725 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82751,13 +82858,13 @@ var path = __webpack_require__(4); * Module dependencies */ -var Snapdragon = __webpack_require__(626); -utils.define = __webpack_require__(725); -utils.diff = __webpack_require__(709); -utils.extend = __webpack_require__(694); -utils.pick = __webpack_require__(710); -utils.typeOf = __webpack_require__(592); -utils.unique = __webpack_require__(602); +var Snapdragon = __webpack_require__(627); +utils.define = __webpack_require__(726); +utils.diff = __webpack_require__(710); +utils.extend = __webpack_require__(695); +utils.pick = __webpack_require__(711); +utils.typeOf = __webpack_require__(593); +utils.unique = __webpack_require__(603); /** * Returns true if the platform is windows, or `path.sep` is `\\`. @@ -83054,7 +83161,7 @@ utils.unixify = function(options) { /***/ }), -/* 725 */ +/* 726 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83067,8 +83174,8 @@ utils.unixify = function(options) { -var isobject = __webpack_require__(590); -var isDescriptor = __webpack_require__(591); +var isobject = __webpack_require__(591); +var isDescriptor = __webpack_require__(592); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -83099,7 +83206,7 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 726 */ +/* 727 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83118,9 +83225,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(727); -var reader_1 = __webpack_require__(740); -var fs_stream_1 = __webpack_require__(744); +var readdir = __webpack_require__(728); +var reader_1 = __webpack_require__(741); +var fs_stream_1 = __webpack_require__(745); var ReaderAsync = /** @class */ (function (_super) { __extends(ReaderAsync, _super); function ReaderAsync() { @@ -83181,15 +83288,15 @@ exports.default = ReaderAsync; /***/ }), -/* 727 */ +/* 728 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const readdirSync = __webpack_require__(728); -const readdirAsync = __webpack_require__(736); -const readdirStream = __webpack_require__(739); +const readdirSync = __webpack_require__(729); +const readdirAsync = __webpack_require__(737); +const readdirStream = __webpack_require__(740); module.exports = exports = readdirAsyncPath; exports.readdir = exports.readdirAsync = exports.async = readdirAsyncPath; @@ -83273,7 +83380,7 @@ function readdirStreamStat (dir, options) { /***/ }), -/* 728 */ +/* 729 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83281,11 +83388,11 @@ function readdirStreamStat (dir, options) { module.exports = readdirSync; -const DirectoryReader = __webpack_require__(729); +const DirectoryReader = __webpack_require__(730); let syncFacade = { - fs: __webpack_require__(734), - forEach: __webpack_require__(735), + fs: __webpack_require__(735), + forEach: __webpack_require__(736), sync: true }; @@ -83314,7 +83421,7 @@ function readdirSync (dir, options, internalOptions) { /***/ }), -/* 729 */ +/* 730 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83323,9 +83430,9 @@ function readdirSync (dir, options, internalOptions) { const Readable = __webpack_require__(173).Readable; const EventEmitter = __webpack_require__(164).EventEmitter; const path = __webpack_require__(4); -const normalizeOptions = __webpack_require__(730); -const stat = __webpack_require__(732); -const call = __webpack_require__(733); +const normalizeOptions = __webpack_require__(731); +const stat = __webpack_require__(733); +const call = __webpack_require__(734); /** * Asynchronously reads the contents of a directory and streams the results @@ -83701,14 +83808,14 @@ module.exports = DirectoryReader; /***/ }), -/* 730 */ +/* 731 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const globToRegExp = __webpack_require__(731); +const globToRegExp = __webpack_require__(732); module.exports = normalizeOptions; @@ -83885,7 +83992,7 @@ function normalizeOptions (options, internalOptions) { /***/ }), -/* 731 */ +/* 732 */ /***/ (function(module, exports) { module.exports = function (glob, opts) { @@ -84022,13 +84129,13 @@ module.exports = function (glob, opts) { /***/ }), -/* 732 */ +/* 733 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const call = __webpack_require__(733); +const call = __webpack_require__(734); module.exports = stat; @@ -84103,7 +84210,7 @@ function symlinkStat (fs, path, lstats, callback) { /***/ }), -/* 733 */ +/* 734 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84164,14 +84271,14 @@ function callOnce (fn) { /***/ }), -/* 734 */ +/* 735 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(132); -const call = __webpack_require__(733); +const call = __webpack_require__(734); /** * A facade around {@link fs.readdirSync} that allows it to be called @@ -84235,7 +84342,7 @@ exports.lstat = function (path, callback) { /***/ }), -/* 735 */ +/* 736 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84264,7 +84371,7 @@ function syncForEach (array, iterator, done) { /***/ }), -/* 736 */ +/* 737 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84272,12 +84379,12 @@ function syncForEach (array, iterator, done) { module.exports = readdirAsync; -const maybe = __webpack_require__(737); -const DirectoryReader = __webpack_require__(729); +const maybe = __webpack_require__(738); +const DirectoryReader = __webpack_require__(730); let asyncFacade = { fs: __webpack_require__(132), - forEach: __webpack_require__(738), + forEach: __webpack_require__(739), async: true }; @@ -84319,7 +84426,7 @@ function readdirAsync (dir, options, callback, internalOptions) { /***/ }), -/* 737 */ +/* 738 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84346,7 +84453,7 @@ module.exports = function maybe (cb, promise) { /***/ }), -/* 738 */ +/* 739 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84382,7 +84489,7 @@ function asyncForEach (array, iterator, done) { /***/ }), -/* 739 */ +/* 740 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84390,11 +84497,11 @@ function asyncForEach (array, iterator, done) { module.exports = readdirStream; -const DirectoryReader = __webpack_require__(729); +const DirectoryReader = __webpack_require__(730); let streamFacade = { fs: __webpack_require__(132), - forEach: __webpack_require__(738), + forEach: __webpack_require__(739), async: true }; @@ -84414,16 +84521,16 @@ function readdirStream (dir, options, internalOptions) { /***/ }), -/* 740 */ +/* 741 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = __webpack_require__(4); -var deep_1 = __webpack_require__(741); -var entry_1 = __webpack_require__(743); -var pathUtil = __webpack_require__(742); +var deep_1 = __webpack_require__(742); +var entry_1 = __webpack_require__(744); +var pathUtil = __webpack_require__(743); var Reader = /** @class */ (function () { function Reader(options) { this.options = options; @@ -84489,14 +84596,14 @@ exports.default = Reader; /***/ }), -/* 741 */ +/* 742 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(742); -var patternUtils = __webpack_require__(576); +var pathUtils = __webpack_require__(743); +var patternUtils = __webpack_require__(577); var DeepFilter = /** @class */ (function () { function DeepFilter(options, micromatchOptions) { this.options = options; @@ -84579,7 +84686,7 @@ exports.default = DeepFilter; /***/ }), -/* 742 */ +/* 743 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84610,14 +84717,14 @@ exports.makeAbsolute = makeAbsolute; /***/ }), -/* 743 */ +/* 744 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(742); -var patternUtils = __webpack_require__(576); +var pathUtils = __webpack_require__(743); +var patternUtils = __webpack_require__(577); var EntryFilter = /** @class */ (function () { function EntryFilter(options, micromatchOptions) { this.options = options; @@ -84702,7 +84809,7 @@ exports.default = EntryFilter; /***/ }), -/* 744 */ +/* 745 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84722,8 +84829,8 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(173); -var fsStat = __webpack_require__(745); -var fs_1 = __webpack_require__(749); +var fsStat = __webpack_require__(746); +var fs_1 = __webpack_require__(750); var FileSystemStream = /** @class */ (function (_super) { __extends(FileSystemStream, _super); function FileSystemStream() { @@ -84773,14 +84880,14 @@ exports.default = FileSystemStream; /***/ }), -/* 745 */ +/* 746 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const optionsManager = __webpack_require__(746); -const statProvider = __webpack_require__(748); +const optionsManager = __webpack_require__(747); +const statProvider = __webpack_require__(749); /** * Asynchronous API. */ @@ -84811,13 +84918,13 @@ exports.statSync = statSync; /***/ }), -/* 746 */ +/* 747 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fsAdapter = __webpack_require__(747); +const fsAdapter = __webpack_require__(748); function prepare(opts) { const options = Object.assign({ fs: fsAdapter.getFileSystemAdapter(opts ? opts.fs : undefined), @@ -84830,7 +84937,7 @@ exports.prepare = prepare; /***/ }), -/* 747 */ +/* 748 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84853,7 +84960,7 @@ exports.getFileSystemAdapter = getFileSystemAdapter; /***/ }), -/* 748 */ +/* 749 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84905,7 +85012,7 @@ exports.isFollowedSymlink = isFollowedSymlink; /***/ }), -/* 749 */ +/* 750 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84936,7 +85043,7 @@ exports.default = FileSystem; /***/ }), -/* 750 */ +/* 751 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84956,9 +85063,9 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(173); -var readdir = __webpack_require__(727); -var reader_1 = __webpack_require__(740); -var fs_stream_1 = __webpack_require__(744); +var readdir = __webpack_require__(728); +var reader_1 = __webpack_require__(741); +var fs_stream_1 = __webpack_require__(745); var TransformStream = /** @class */ (function (_super) { __extends(TransformStream, _super); function TransformStream(reader) { @@ -85026,7 +85133,7 @@ exports.default = ReaderStream; /***/ }), -/* 751 */ +/* 752 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -85045,9 +85152,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(727); -var reader_1 = __webpack_require__(740); -var fs_sync_1 = __webpack_require__(752); +var readdir = __webpack_require__(728); +var reader_1 = __webpack_require__(741); +var fs_sync_1 = __webpack_require__(753); var ReaderSync = /** @class */ (function (_super) { __extends(ReaderSync, _super); function ReaderSync() { @@ -85107,7 +85214,7 @@ exports.default = ReaderSync; /***/ }), -/* 752 */ +/* 753 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -85126,8 +85233,8 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var fsStat = __webpack_require__(745); -var fs_1 = __webpack_require__(749); +var fsStat = __webpack_require__(746); +var fs_1 = __webpack_require__(750); var FileSystemSync = /** @class */ (function (_super) { __extends(FileSystemSync, _super); function FileSystemSync() { @@ -85173,7 +85280,7 @@ exports.default = FileSystemSync; /***/ }), -/* 753 */ +/* 754 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -85189,7 +85296,7 @@ exports.flatten = flatten; /***/ }), -/* 754 */ +/* 755 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -85210,13 +85317,13 @@ exports.merge = merge; /***/ }), -/* 755 */ +/* 756 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const pathType = __webpack_require__(756); +const pathType = __webpack_require__(757); const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]; @@ -85282,13 +85389,13 @@ module.exports.sync = (input, opts) => { /***/ }), -/* 756 */ +/* 757 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(132); -const pify = __webpack_require__(757); +const pify = __webpack_require__(758); function type(fn, fn2, fp) { if (typeof fp !== 'string') { @@ -85331,7 +85438,7 @@ exports.symlinkSync = typeSync.bind(null, 'lstatSync', 'isSymbolicLink'); /***/ }), -/* 757 */ +/* 758 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -85422,17 +85529,17 @@ module.exports = (obj, opts) => { /***/ }), -/* 758 */ +/* 759 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(132); const path = __webpack_require__(4); -const fastGlob = __webpack_require__(572); -const gitIgnore = __webpack_require__(759); +const fastGlob = __webpack_require__(573); +const gitIgnore = __webpack_require__(760); const pify = __webpack_require__(404); -const slash = __webpack_require__(760); +const slash = __webpack_require__(761); const DEFAULT_IGNORE = [ '**/node_modules/**', @@ -85530,7 +85637,7 @@ module.exports.sync = options => { /***/ }), -/* 759 */ +/* 760 */ /***/ (function(module, exports) { // A simple implementation of make-array @@ -85999,7 +86106,7 @@ module.exports = options => new IgnoreBase(options) /***/ }), -/* 760 */ +/* 761 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -86017,7 +86124,7 @@ module.exports = input => { /***/ }), -/* 761 */ +/* 762 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -86030,7 +86137,7 @@ module.exports = input => { -var isGlob = __webpack_require__(762); +var isGlob = __webpack_require__(763); module.exports = function hasGlob(val) { if (val == null) return false; @@ -86050,7 +86157,7 @@ module.exports = function hasGlob(val) { /***/ }), -/* 762 */ +/* 763 */ /***/ (function(module, exports, __webpack_require__) { /*! @@ -86081,17 +86188,17 @@ module.exports = function isGlob(str) { /***/ }), -/* 763 */ +/* 764 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); const {constants: fsConstants} = __webpack_require__(132); -const pEvent = __webpack_require__(764); -const CpFileError = __webpack_require__(767); -const fs = __webpack_require__(769); -const ProgressEmitter = __webpack_require__(772); +const pEvent = __webpack_require__(765); +const CpFileError = __webpack_require__(768); +const fs = __webpack_require__(770); +const ProgressEmitter = __webpack_require__(773); const cpFileAsync = async (source, destination, options, progressEmitter) => { let readError; @@ -86205,12 +86312,12 @@ module.exports.sync = (source, destination, options) => { /***/ }), -/* 764 */ +/* 765 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pTimeout = __webpack_require__(765); +const pTimeout = __webpack_require__(766); const symbolAsyncIterator = Symbol.asyncIterator || '@@asyncIterator'; @@ -86501,12 +86608,12 @@ module.exports.iterator = (emitter, event, options) => { /***/ }), -/* 765 */ +/* 766 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pFinally = __webpack_require__(766); +const pFinally = __webpack_require__(767); class TimeoutError extends Error { constructor(message) { @@ -86552,7 +86659,7 @@ module.exports.TimeoutError = TimeoutError; /***/ }), -/* 766 */ +/* 767 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -86574,12 +86681,12 @@ module.exports = (promise, onFinally) => { /***/ }), -/* 767 */ +/* 768 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(768); +const NestedError = __webpack_require__(769); class CpFileError extends NestedError { constructor(message, nested) { @@ -86593,7 +86700,7 @@ module.exports = CpFileError; /***/ }), -/* 768 */ +/* 769 */ /***/ (function(module, exports, __webpack_require__) { var inherits = __webpack_require__(113).inherits; @@ -86649,16 +86756,16 @@ module.exports = NestedError; /***/ }), -/* 769 */ +/* 770 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const {promisify} = __webpack_require__(113); const fs = __webpack_require__(233); -const makeDir = __webpack_require__(770); -const pEvent = __webpack_require__(764); -const CpFileError = __webpack_require__(767); +const makeDir = __webpack_require__(771); +const pEvent = __webpack_require__(765); +const CpFileError = __webpack_require__(768); const stat = promisify(fs.stat); const lstat = promisify(fs.lstat); @@ -86755,7 +86862,7 @@ exports.copyFileSync = (source, destination, flags) => { /***/ }), -/* 770 */ +/* 771 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -86763,7 +86870,7 @@ exports.copyFileSync = (source, destination, flags) => { const fs = __webpack_require__(132); const path = __webpack_require__(4); const {promisify} = __webpack_require__(113); -const semver = __webpack_require__(771); +const semver = __webpack_require__(772); const useNativeRecursiveOption = semver.satisfies(process.version, '>=10.12.0'); @@ -86918,7 +87025,7 @@ module.exports.sync = (input, options) => { /***/ }), -/* 771 */ +/* 772 */ /***/ (function(module, exports) { exports = module.exports = SemVer @@ -88520,7 +88627,7 @@ function coerce (version, options) { /***/ }), -/* 772 */ +/* 773 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -88561,7 +88668,7 @@ module.exports = ProgressEmitter; /***/ }), -/* 773 */ +/* 774 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -88607,12 +88714,12 @@ exports.default = module.exports; /***/ }), -/* 774 */ +/* 775 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pMap = __webpack_require__(775); +const pMap = __webpack_require__(776); const pFilter = async (iterable, filterer, options) => { const values = await pMap( @@ -88629,7 +88736,7 @@ module.exports.default = pFilter; /***/ }), -/* 775 */ +/* 776 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -88708,12 +88815,12 @@ module.exports.default = pMap; /***/ }), -/* 776 */ +/* 777 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(768); +const NestedError = __webpack_require__(769); class CpyError extends NestedError { constructor(message, nested) { @@ -88727,7 +88834,7 @@ module.exports = CpyError; /***/ }), -/* 777 */ +/* 778 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -88735,10 +88842,10 @@ module.exports = CpyError; const fs = __webpack_require__(132); const arrayUnion = __webpack_require__(242); const merge2 = __webpack_require__(243); -const fastGlob = __webpack_require__(778); +const fastGlob = __webpack_require__(779); const dirGlob = __webpack_require__(326); -const gitignore = __webpack_require__(809); -const {FilterStream, UniqueStream} = __webpack_require__(810); +const gitignore = __webpack_require__(810); +const {FilterStream, UniqueStream} = __webpack_require__(811); const DEFAULT_FILTER = () => false; @@ -88915,17 +89022,17 @@ module.exports.gitignore = gitignore; /***/ }), -/* 778 */ +/* 779 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const taskManager = __webpack_require__(779); -const async_1 = __webpack_require__(795); -const stream_1 = __webpack_require__(805); -const sync_1 = __webpack_require__(806); -const settings_1 = __webpack_require__(808); -const utils = __webpack_require__(780); +const taskManager = __webpack_require__(780); +const async_1 = __webpack_require__(796); +const stream_1 = __webpack_require__(806); +const sync_1 = __webpack_require__(807); +const settings_1 = __webpack_require__(809); +const utils = __webpack_require__(781); async function FastGlob(source, options) { assertPatternsInput(source); const works = getWorks(source, async_1.default, options); @@ -88989,14 +89096,14 @@ module.exports = FastGlob; /***/ }), -/* 779 */ +/* 780 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0; -const utils = __webpack_require__(780); +const utils = __webpack_require__(781); function generate(patterns, settings) { const positivePatterns = getPositivePatterns(patterns); const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore); @@ -89076,31 +89183,31 @@ exports.convertPatternGroupToTask = convertPatternGroupToTask; /***/ }), -/* 780 */ +/* 781 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0; -const array = __webpack_require__(781); +const array = __webpack_require__(782); exports.array = array; -const errno = __webpack_require__(782); +const errno = __webpack_require__(783); exports.errno = errno; -const fs = __webpack_require__(783); +const fs = __webpack_require__(784); exports.fs = fs; -const path = __webpack_require__(784); +const path = __webpack_require__(785); exports.path = path; -const pattern = __webpack_require__(785); +const pattern = __webpack_require__(786); exports.pattern = pattern; -const stream = __webpack_require__(793); +const stream = __webpack_require__(794); exports.stream = stream; -const string = __webpack_require__(794); +const string = __webpack_require__(795); exports.string = string; /***/ }), -/* 781 */ +/* 782 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -89129,7 +89236,7 @@ exports.splitWhen = splitWhen; /***/ }), -/* 782 */ +/* 783 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -89143,7 +89250,7 @@ exports.isEnoentCodeError = isEnoentCodeError; /***/ }), -/* 783 */ +/* 784 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -89169,7 +89276,7 @@ exports.createDirentFromStats = createDirentFromStats; /***/ }), -/* 784 */ +/* 785 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -89209,7 +89316,7 @@ exports.removeLeadingDotSegment = removeLeadingDotSegment; /***/ }), -/* 785 */ +/* 786 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -89218,7 +89325,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0; const path = __webpack_require__(4); const globParent = __webpack_require__(265); -const micromatch = __webpack_require__(786); +const micromatch = __webpack_require__(787); const GLOBSTAR = '**'; const ESCAPE_SYMBOL = '\\'; const COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/; @@ -89373,7 +89480,7 @@ exports.matchAny = matchAny; /***/ }), -/* 786 */ +/* 787 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -89381,8 +89488,8 @@ exports.matchAny = matchAny; const util = __webpack_require__(113); const braces = __webpack_require__(269); -const picomatch = __webpack_require__(787); -const utils = __webpack_require__(790); +const picomatch = __webpack_require__(788); +const utils = __webpack_require__(791); const isEmptyString = val => val === '' || val === './'; /** @@ -89847,27 +89954,27 @@ module.exports = micromatch; /***/ }), -/* 787 */ +/* 788 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -module.exports = __webpack_require__(788); +module.exports = __webpack_require__(789); /***/ }), -/* 788 */ +/* 789 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const scan = __webpack_require__(789); -const parse = __webpack_require__(792); -const utils = __webpack_require__(790); -const constants = __webpack_require__(791); +const scan = __webpack_require__(790); +const parse = __webpack_require__(793); +const utils = __webpack_require__(791); +const constants = __webpack_require__(792); const isObject = val => val && typeof val === 'object' && !Array.isArray(val); /** @@ -90206,13 +90313,13 @@ module.exports = picomatch; /***/ }), -/* 789 */ +/* 790 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const utils = __webpack_require__(790); +const utils = __webpack_require__(791); const { CHAR_ASTERISK, /* * */ CHAR_AT, /* @ */ @@ -90229,7 +90336,7 @@ const { CHAR_RIGHT_CURLY_BRACE, /* } */ CHAR_RIGHT_PARENTHESES, /* ) */ CHAR_RIGHT_SQUARE_BRACKET /* ] */ -} = __webpack_require__(791); +} = __webpack_require__(792); const isPathSeparator = code => { return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; @@ -90604,7 +90711,7 @@ module.exports = scan; /***/ }), -/* 790 */ +/* 791 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -90617,7 +90724,7 @@ const { REGEX_REMOVE_BACKSLASH, REGEX_SPECIAL_CHARS, REGEX_SPECIAL_CHARS_GLOBAL -} = __webpack_require__(791); +} = __webpack_require__(792); exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); @@ -90675,7 +90782,7 @@ exports.wrapOutput = (input, state = {}, options = {}) => { /***/ }), -/* 791 */ +/* 792 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -90861,14 +90968,14 @@ module.exports = { /***/ }), -/* 792 */ +/* 793 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const constants = __webpack_require__(791); -const utils = __webpack_require__(790); +const constants = __webpack_require__(792); +const utils = __webpack_require__(791); /** * Constants @@ -91952,7 +92059,7 @@ module.exports = parse; /***/ }), -/* 793 */ +/* 794 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -91976,7 +92083,7 @@ function propagateCloseEventToSources(streams) { /***/ }), -/* 794 */ +/* 795 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -91994,14 +92101,14 @@ exports.isEmpty = isEmpty; /***/ }), -/* 795 */ +/* 796 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const stream_1 = __webpack_require__(796); -const provider_1 = __webpack_require__(798); +const stream_1 = __webpack_require__(797); +const provider_1 = __webpack_require__(799); class ProviderAsync extends provider_1.default { constructor() { super(...arguments); @@ -92029,7 +92136,7 @@ exports.default = ProviderAsync; /***/ }), -/* 796 */ +/* 797 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -92038,7 +92145,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); const stream_1 = __webpack_require__(173); const fsStat = __webpack_require__(289); const fsWalk = __webpack_require__(294); -const reader_1 = __webpack_require__(797); +const reader_1 = __webpack_require__(798); class ReaderStream extends reader_1.default { constructor() { super(...arguments); @@ -92091,7 +92198,7 @@ exports.default = ReaderStream; /***/ }), -/* 797 */ +/* 798 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -92099,7 +92206,7 @@ exports.default = ReaderStream; Object.defineProperty(exports, "__esModule", { value: true }); const path = __webpack_require__(4); const fsStat = __webpack_require__(289); -const utils = __webpack_require__(780); +const utils = __webpack_require__(781); class Reader { constructor(_settings) { this._settings = _settings; @@ -92131,17 +92238,17 @@ exports.default = Reader; /***/ }), -/* 798 */ +/* 799 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = __webpack_require__(4); -const deep_1 = __webpack_require__(799); -const entry_1 = __webpack_require__(802); -const error_1 = __webpack_require__(803); -const entry_2 = __webpack_require__(804); +const deep_1 = __webpack_require__(800); +const entry_1 = __webpack_require__(803); +const error_1 = __webpack_require__(804); +const entry_2 = __webpack_require__(805); class Provider { constructor(_settings) { this._settings = _settings; @@ -92186,14 +92293,14 @@ exports.default = Provider; /***/ }), -/* 799 */ +/* 800 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(780); -const partial_1 = __webpack_require__(800); +const utils = __webpack_require__(781); +const partial_1 = __webpack_require__(801); class DeepFilter { constructor(_settings, _micromatchOptions) { this._settings = _settings; @@ -92255,13 +92362,13 @@ exports.default = DeepFilter; /***/ }), -/* 800 */ +/* 801 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const matcher_1 = __webpack_require__(801); +const matcher_1 = __webpack_require__(802); class PartialMatcher extends matcher_1.default { match(filepath) { const parts = filepath.split('/'); @@ -92300,13 +92407,13 @@ exports.default = PartialMatcher; /***/ }), -/* 801 */ +/* 802 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(780); +const utils = __webpack_require__(781); class Matcher { constructor(_patterns, _settings, _micromatchOptions) { this._patterns = _patterns; @@ -92357,13 +92464,13 @@ exports.default = Matcher; /***/ }), -/* 802 */ +/* 803 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(780); +const utils = __webpack_require__(781); class EntryFilter { constructor(_settings, _micromatchOptions) { this._settings = _settings; @@ -92420,13 +92527,13 @@ exports.default = EntryFilter; /***/ }), -/* 803 */ +/* 804 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(780); +const utils = __webpack_require__(781); class ErrorFilter { constructor(_settings) { this._settings = _settings; @@ -92442,13 +92549,13 @@ exports.default = ErrorFilter; /***/ }), -/* 804 */ +/* 805 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(780); +const utils = __webpack_require__(781); class EntryTransformer { constructor(_settings) { this._settings = _settings; @@ -92475,15 +92582,15 @@ exports.default = EntryTransformer; /***/ }), -/* 805 */ +/* 806 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const stream_1 = __webpack_require__(173); -const stream_2 = __webpack_require__(796); -const provider_1 = __webpack_require__(798); +const stream_2 = __webpack_require__(797); +const provider_1 = __webpack_require__(799); class ProviderStream extends provider_1.default { constructor() { super(...arguments); @@ -92513,14 +92620,14 @@ exports.default = ProviderStream; /***/ }), -/* 806 */ +/* 807 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const sync_1 = __webpack_require__(807); -const provider_1 = __webpack_require__(798); +const sync_1 = __webpack_require__(808); +const provider_1 = __webpack_require__(799); class ProviderSync extends provider_1.default { constructor() { super(...arguments); @@ -92543,7 +92650,7 @@ exports.default = ProviderSync; /***/ }), -/* 807 */ +/* 808 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -92551,7 +92658,7 @@ exports.default = ProviderSync; Object.defineProperty(exports, "__esModule", { value: true }); const fsStat = __webpack_require__(289); const fsWalk = __webpack_require__(294); -const reader_1 = __webpack_require__(797); +const reader_1 = __webpack_require__(798); class ReaderSync extends reader_1.default { constructor() { super(...arguments); @@ -92593,7 +92700,7 @@ exports.default = ReaderSync; /***/ }), -/* 808 */ +/* 809 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -92657,7 +92764,7 @@ exports.default = Settings; /***/ }), -/* 809 */ +/* 810 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -92665,7 +92772,7 @@ exports.default = Settings; const {promisify} = __webpack_require__(113); const fs = __webpack_require__(132); const path = __webpack_require__(4); -const fastGlob = __webpack_require__(778); +const fastGlob = __webpack_require__(779); const gitIgnore = __webpack_require__(329); const slash = __webpack_require__(330); @@ -92784,7 +92891,7 @@ module.exports.sync = options => { /***/ }), -/* 810 */ +/* 811 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -92837,7 +92944,7 @@ module.exports = { /***/ }), -/* 811 */ +/* 812 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -92845,13 +92952,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildNonBazelProductionProjects", function() { return buildNonBazelProductionProjects; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getProductionProjects", function() { return getProductionProjects; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildProject", function() { return buildProject; }); -/* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(565); +/* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(566); /* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cpy__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(240); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(del__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(562); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(563); /* harmony import */ var _utils_fs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(231); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(220); /* harmony import */ var _utils_package_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(343); diff --git a/packages/kbn-pm/src/commands/bootstrap.ts b/packages/kbn-pm/src/commands/bootstrap.ts index 12034a9f4a0949..e7b8cad7ebc161 100644 --- a/packages/kbn-pm/src/commands/bootstrap.ts +++ b/packages/kbn-pm/src/commands/bootstrap.ts @@ -23,6 +23,7 @@ import { runBazel, yarnIntegrityFileExists, } from '../utils/bazel'; +import { setupRemoteCache } from '../utils/bazel/setup_remote_cache'; export const BootstrapCommand: ICommand = { description: 'Install dependencies and crosslink projects', @@ -55,6 +56,9 @@ export const BootstrapCommand: ICommand = { // Install bazel machinery tools if needed await installBazelTools(rootPath); + // Setup remote cache settings in .bazelrc.cache if needed + await setupRemoteCache(rootPath); + // Bootstrap process for Bazel packages // Bazel is now managing dependencies so yarn install // will happen as part of this diff --git a/packages/kbn-pm/src/utils/bazel/setup_remote_cache.ts b/packages/kbn-pm/src/utils/bazel/setup_remote_cache.ts new file mode 100644 index 00000000000000..0e740e674b7d81 --- /dev/null +++ b/packages/kbn-pm/src/utils/bazel/setup_remote_cache.ts @@ -0,0 +1,92 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import dedent from 'dedent'; +import { existsSync, writeFileSync } from 'fs'; +import { resolve } from 'path'; +import { spawn } from '../child_process'; +import { log } from '../log'; + +async function isVaultAvailable() { + try { + await spawn('vault', ['--version'], { stdio: 'pipe' }); + + return true; + } catch { + return false; + } +} + +async function isElasticCommitter() { + try { + const { stdout: email } = await spawn('git', ['config', 'user.email'], { + stdio: 'pipe', + }); + + return email.trim().endsWith('@elastic.co'); + } catch { + return false; + } +} + +export async function setupRemoteCache(repoRootPath: string) { + // The remote cache is only for Elastic employees working locally (CI cache settings are handled elsewhere) + if (process.env.CI || !(await isElasticCommitter())) { + return; + } + + log.debug(`[bazel_tools] setting up remote cache settings if necessary`); + + const settingsPath = resolve(repoRootPath, '.bazelrc.cache'); + + if (existsSync(settingsPath)) { + log.debug(`[bazel_tools] remote cache settings already exist, skipping`); + return; + } + + if (!(await isVaultAvailable())) { + log.info('[bazel_tools] vault is not available, unable to setup remote cache settings.'); + log.info('[bazel_tools] building packages will work, but will be slower in many cases.'); + log.info('[bazel_tools] reach out to Operations if you need assistance with this.'); + return; + } + + let apiKey = ''; + + try { + const { stdout } = await spawn( + 'vault', + ['read', '-field=readonly-key', 'secret/ui-team/kibana-bazel-remote-cache'], + { + stdio: 'pipe', + } + ); + apiKey = stdout.trim(); + } catch (ex: unknown) { + log.info( + '[bazel_tools] unable to read bazel remote cache key from vault, are you authenticated?' + ); + log.info('[bazel_tools] building packages will work, but will be slower in many cases.'); + log.info('[bazel_tools] reach out to Operations if you need assistance with this.'); + log.info(`[bazel_tools] ${ex}`); + + return; + } + + const contents = dedent` + # V1 - This file is automatically generated by 'yarn kbn bootstrap' + # To regenerate this file, delete it and run 'yarn kbn bootstrap' again. + build --bes_results_url=https://app.buildbuddy.io/invocation/ + build --bes_backend=grpcs://cloud.buildbuddy.io + build --remote_cache=grpcs://cloud.buildbuddy.io + build --remote_timeout=3600 + build --remote_header=${apiKey} + `; + + writeFileSync(settingsPath, contents); + log.info(`[bazel_tools] remote cache settings written to ${settingsPath}`); +} diff --git a/packages/kbn-storybook/BUILD.bazel b/packages/kbn-storybook/BUILD.bazel index 729a60f8f7dc8b..873167674dd78e 100644 --- a/packages/kbn-storybook/BUILD.bazel +++ b/packages/kbn-storybook/BUILD.bazel @@ -33,6 +33,8 @@ RUNTIME_DEPS = [ "//packages/kbn-ui-shared-deps-npm", "//packages/kbn-ui-shared-deps-src", "//packages/kbn-utils", + "@npm//@elastic/eui", + "@npm//@emotion/cache", "@npm//@storybook/addons", "@npm//@storybook/api", "@npm//@storybook/components", @@ -52,6 +54,8 @@ TYPES_DEPS = [ "//packages/kbn-ui-shared-deps-npm:npm_module_types", "//packages/kbn-ui-shared-deps-src", "//packages/kbn-utils:npm_module_types", + "@npm//@elastic/eui", + "@npm//@emotion/cache", "@npm//@storybook/addons", "@npm//@storybook/api", "@npm//@storybook/components", diff --git a/packages/kbn-test/BUILD.bazel b/packages/kbn-test/BUILD.bazel index 1ff9677615f5ab..69addd9e3c4c7c 100644 --- a/packages/kbn-test/BUILD.bazel +++ b/packages/kbn-test/BUILD.bazel @@ -69,6 +69,7 @@ RUNTIME_DEPS = [ "@npm//react-router-dom", "@npm//redux", "@npm//rxjs", + "@npm//semver", "@npm//strip-ansi", "@npm//xmlbuilder", "@npm//xml2js", @@ -108,6 +109,7 @@ TYPES_DEPS = [ "@npm//@types/react-dom", "@npm//@types/react-redux", "@npm//@types/react-router-dom", + "@npm//@types/semver", "@npm//@types/xml2js", ] diff --git a/packages/kbn-test/src/functional_test_runner/cli.ts b/packages/kbn-test/src/functional_test_runner/cli.ts index d9938bebea5bb0..e013085e1b39a3 100644 --- a/packages/kbn-test/src/functional_test_runner/cli.ts +++ b/packages/kbn-test/src/functional_test_runner/cli.ts @@ -35,6 +35,11 @@ export function runFtrCli() { const reportTime = getTimeReporter(toolingLog, 'scripts/functional_test_runner'); run( async ({ flags, log }) => { + const esVersion = flags['es-version'] || undefined; // convert "" to undefined + if (esVersion !== undefined && typeof esVersion !== 'string') { + throw createFlagError('expected --es-version to be a string'); + } + const functionalTestRunner = new FunctionalTestRunner( log, makeAbsolutePath(flags.config as string), @@ -57,7 +62,8 @@ export function runFtrCli() { }, updateBaselines: flags.updateBaselines || flags.u, updateSnapshots: flags.updateSnapshots || flags.u, - } + }, + esVersion ); if (flags.throttle) { @@ -131,6 +137,7 @@ export function runFtrCli() { 'include-tag', 'exclude-tag', 'kibana-install-dir', + 'es-version', ], boolean: [ 'bail', @@ -150,6 +157,7 @@ export function runFtrCli() { --bail stop tests after the first failure --grep pattern used to select which tests to run --invert invert grep to exclude tests + --es-version the elasticsearch version, formatted as "x.y.z" --include=file a test file to be included, pass multiple times for multiple files --exclude=file a test file to be excluded, pass multiple times for multiple files --include-tag=tag a tag to be included, pass multiple times for multiple tags. Only diff --git a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts index 4130cd8d138b87..ea55a2672d670f 100644 --- a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts +++ b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import type { Client as EsClient } from '@elastic/elasticsearch'; import { ToolingLog } from '@kbn/dev-utils'; import { Suite, Test } from './fake_mocha_types'; @@ -21,6 +22,7 @@ import { DockerServersService, Config, SuiteTracker, + EsVersion, } from './lib'; export class FunctionalTestRunner { @@ -28,10 +30,12 @@ export class FunctionalTestRunner { public readonly failureMetadata = new FailureMetadata(this.lifecycle); private closed = false; + private readonly esVersion: EsVersion; constructor( private readonly log: ToolingLog, private readonly configFile: string, - private readonly configOverrides: any + private readonly configOverrides: any, + esVersion?: string | EsVersion ) { for (const [key, value] of Object.entries(this.lifecycle)) { if (value instanceof LifecyclePhase) { @@ -39,6 +43,12 @@ export class FunctionalTestRunner { value.after$.subscribe(() => log.verbose('starting %j lifecycle phase', key)); } } + this.esVersion = + esVersion === undefined + ? EsVersion.getDefault() + : esVersion instanceof EsVersion + ? esVersion + : new EsVersion(esVersion); } async run() { @@ -51,6 +61,27 @@ export class FunctionalTestRunner { ...readProviderSpec('PageObject', config.get('pageObjects')), ]); + // validate es version + if (providers.hasService('es')) { + const es = (await providers.getService('es')) as unknown as EsClient; + let esInfo; + try { + esInfo = await es.info(); + } catch (error) { + throw new Error( + `attempted to use the "es" service to fetch Elasticsearch version info but the request failed: ${error.stack}` + ); + } + + if (!this.esVersion.eql(esInfo.version.number)) { + throw new Error( + `ES reports a version number "${ + esInfo.version.number + }" which doesn't match supplied es version "${this.esVersion.toString()}"` + ); + } + } + await providers.loadAll(); const customTestRunner = config.get('testRunner'); @@ -61,7 +92,7 @@ export class FunctionalTestRunner { return (await providers.invokeProviderFn(customTestRunner)) || 0; } - const mocha = await setupMocha(this.lifecycle, this.log, config, providers); + const mocha = await setupMocha(this.lifecycle, this.log, config, providers, this.esVersion); await this.lifecycle.beforeTests.trigger(mocha.suite); this.log.info('Starting tests'); @@ -107,14 +138,14 @@ export class FunctionalTestRunner { ...readStubbedProviderSpec('PageObject', config.get('pageObjects'), []), ]); - const mocha = await setupMocha(this.lifecycle, this.log, config, providers); + const mocha = await setupMocha(this.lifecycle, this.log, config, providers, this.esVersion); const countTests = (suite: Suite): number => suite.suites.reduce((sum, s) => sum + countTests(s), suite.tests.length); return { testCount: countTests(mocha.suite), - excludedTests: mocha.excludedTests.map((t: Test) => t.fullTitle()), + testsExcludedByTag: mocha.testsExcludedByTag.map((t: Test) => t.fullTitle()), }; }); } @@ -125,7 +156,12 @@ export class FunctionalTestRunner { let runErrorOccurred = false; try { - const config = await readConfigFile(this.log, this.configFile, this.configOverrides); + const config = await readConfigFile( + this.log, + this.esVersion, + this.configFile, + this.configOverrides + ); this.log.info('Config loaded'); if ( @@ -148,6 +184,7 @@ export class FunctionalTestRunner { failureMetadata: () => this.failureMetadata, config: () => config, dockerServers: () => dockerServers, + esVersion: () => this.esVersion, }); return await handler(config, coreProviders); diff --git a/packages/kbn-test/src/functional_test_runner/index.ts b/packages/kbn-test/src/functional_test_runner/index.ts index 268c6b2bd9a670..1718b5f7a4bc57 100644 --- a/packages/kbn-test/src/functional_test_runner/index.ts +++ b/packages/kbn-test/src/functional_test_runner/index.ts @@ -7,7 +7,7 @@ */ export { FunctionalTestRunner } from './functional_test_runner'; -export { readConfigFile, Config } from './lib'; +export { readConfigFile, Config, EsVersion } from './lib'; export { runFtrCli } from './cli'; export * from './lib/docker_servers'; export * from './public_types'; diff --git a/packages/kbn-test/src/functional_test_runner/lib/config/read_config_file.test.js b/packages/kbn-test/src/functional_test_runner/lib/config/read_config_file.test.js index 60c307b58aee69..27434ce5a09ca0 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/config/read_config_file.test.js +++ b/packages/kbn-test/src/functional_test_runner/lib/config/read_config_file.test.js @@ -9,34 +9,41 @@ import { ToolingLog } from '@kbn/dev-utils'; import { readConfigFile } from './read_config_file'; import { Config } from './config'; +import { EsVersion } from '../es_version'; const log = new ToolingLog(); +const esVersion = new EsVersion('8.0.0'); describe('readConfigFile()', () => { it('reads config from a file, returns an instance of Config class', async () => { - const config = await readConfigFile(log, require.resolve('./__fixtures__/config.1')); + const config = await readConfigFile(log, esVersion, require.resolve('./__fixtures__/config.1')); expect(config instanceof Config).toBeTruthy(); expect(config.get('testFiles')).toEqual(['config.1']); }); it('merges setting overrides into log', async () => { - const config = await readConfigFile(log, require.resolve('./__fixtures__/config.1'), { - screenshots: { - directory: 'foo.bar', - }, - }); + const config = await readConfigFile( + log, + esVersion, + require.resolve('./__fixtures__/config.1'), + { + screenshots: { + directory: 'foo.bar', + }, + } + ); expect(config.get('screenshots.directory')).toBe('foo.bar'); }); it('supports loading config files from within config files', async () => { - const config = await readConfigFile(log, require.resolve('./__fixtures__/config.2')); + const config = await readConfigFile(log, esVersion, require.resolve('./__fixtures__/config.2')); expect(config.get('testFiles')).toEqual(['config.1', 'config.2']); }); it('throws if settings are invalid', async () => { try { - await readConfigFile(log, require.resolve('./__fixtures__/config.invalid')); + await readConfigFile(log, esVersion, require.resolve('./__fixtures__/config.invalid')); throw new Error('expected readConfigFile() to fail'); } catch (err) { expect(err.message).toMatch(/"foo"/); diff --git a/packages/kbn-test/src/functional_test_runner/lib/config/read_config_file.ts b/packages/kbn-test/src/functional_test_runner/lib/config/read_config_file.ts index 374edea7a8db77..fd836f338edf02 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/config/read_config_file.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/config/read_config_file.ts @@ -10,10 +10,16 @@ import { ToolingLog } from '@kbn/dev-utils'; import { defaultsDeep } from 'lodash'; import { Config } from './config'; +import { EsVersion } from '../es_version'; const cache = new WeakMap(); -async function getSettingsFromFile(log: ToolingLog, path: string, settingOverrides: any) { +async function getSettingsFromFile( + log: ToolingLog, + esVersion: EsVersion, + path: string, + settingOverrides: any +) { const configModule = require(path); // eslint-disable-line @typescript-eslint/no-var-requires const configProvider = configModule.__esModule ? configModule.default : configModule; @@ -23,9 +29,10 @@ async function getSettingsFromFile(log: ToolingLog, path: string, settingOverrid configProvider, configProvider({ log, + esVersion, async readConfigFile(p: string, o: any) { return new Config({ - settings: await getSettingsFromFile(log, p, o), + settings: await getSettingsFromFile(log, esVersion, p, o), primary: false, path: p, }); @@ -43,9 +50,14 @@ async function getSettingsFromFile(log: ToolingLog, path: string, settingOverrid return settingsWithDefaults; } -export async function readConfigFile(log: ToolingLog, path: string, settingOverrides: any = {}) { +export async function readConfigFile( + log: ToolingLog, + esVersion: EsVersion, + path: string, + settingOverrides: any = {} +) { return new Config({ - settings: await getSettingsFromFile(log, path, settingOverrides), + settings: await getSettingsFromFile(log, esVersion, path, settingOverrides), primary: true, path, }); diff --git a/packages/kbn-test/src/functional_test_runner/lib/es_version.ts b/packages/kbn-test/src/functional_test_runner/lib/es_version.ts new file mode 100644 index 00000000000000..8b3acde47a4dc8 --- /dev/null +++ b/packages/kbn-test/src/functional_test_runner/lib/es_version.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import semver from 'semver'; +import { kibanaPackageJson } from '@kbn/utils'; + +export class EsVersion { + static getDefault() { + // example: https://storage.googleapis.com/kibana-ci-es-snapshots-daily/8.0.0/manifest-latest-verified.json + const manifestUrl = process.env.ES_SNAPSHOT_MANIFEST; + if (manifestUrl) { + const match = manifestUrl.match(/\d+\.\d+\.\d+/); + if (!match) { + throw new Error('unable to extract es version from ES_SNAPSHOT_MANIFEST_URL'); + } + return new EsVersion(match[0]); + } + + return new EsVersion(process.env.TEST_ES_BRANCH || kibanaPackageJson.version); + } + + public readonly parsed: semver.SemVer; + + constructor(version: string) { + const parsed = semver.coerce(version); + if (!parsed) { + throw new Error(`unable to parse es version [${version}]`); + } + this.parsed = parsed; + } + + toString() { + return this.parsed.version; + } + + /** + * Determine if the ES version matches a semver range, like >=7 or ^8.1.0 + */ + matchRange(range: string) { + return semver.satisfies(this.parsed, range); + } + + /** + * Determine if the ES version matches a specific version, ignores things like -SNAPSHOT + */ + eql(version: string) { + const other = semver.coerce(version); + return other && semver.compareLoose(this.parsed, other) === 0; + } +} diff --git a/packages/kbn-test/src/functional_test_runner/lib/index.ts b/packages/kbn-test/src/functional_test_runner/lib/index.ts index 1cb1e58a265d57..98b5fec0597e4e 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/index.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/index.ts @@ -17,3 +17,4 @@ export * from './docker_servers'; export { SuiteTracker } from './suite_tracker'; export type { Provider } from './providers'; +export * from './es_version'; diff --git a/packages/kbn-test/src/functional_test_runner/lib/mocha/decorate_mocha_ui.js b/packages/kbn-test/src/functional_test_runner/lib/mocha/decorate_mocha_ui.js index 7610ca91286949..e12ffdc8cd616a 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/mocha/decorate_mocha_ui.js +++ b/packages/kbn-test/src/functional_test_runner/lib/mocha/decorate_mocha_ui.js @@ -84,6 +84,9 @@ export function decorateMochaUi(log, lifecycle, context, { isDockerGroup, rootTa this._tags = [...this._tags, ...tagsToAdd]; }; + this.onlyEsVersion = (semver) => { + this._esVersionRequirement = semver; + }; provider.call(this); diff --git a/packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites_by_tags.test.js b/packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites.test.js similarity index 86% rename from packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites_by_tags.test.js rename to packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites.test.js index 10030a1c05632b..191503af123d01 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites_by_tags.test.js +++ b/packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites.test.js @@ -12,9 +12,10 @@ import Mocha from 'mocha'; import { create as createSuite } from 'mocha/lib/suite'; import Test from 'mocha/lib/test'; -import { filterSuitesByTags } from './filter_suites_by_tags'; +import { filterSuites } from './filter_suites'; +import { EsVersion } from '../es_version'; -function setup({ include, exclude }) { +function setup({ include, exclude, esVersion }) { return new Promise((resolve) => { const history = []; @@ -55,6 +56,7 @@ function setup({ include, exclude }) { const level1b = createSuite(level1, 'level 1b'); level1b._tags = ['level1b']; + level1b._esVersionRequirement = '<=8'; level1b.addTest(new Test('test 1b', () => {})); const level2 = createSuite(mocha.suite, 'level 2'); @@ -62,7 +64,7 @@ function setup({ include, exclude }) { level2a._tags = ['level2a']; level2a.addTest(new Test('test 2a', () => {})); - filterSuitesByTags({ + filterSuites({ log: { info(...args) { history.push(`info: ${format(...args)}`); @@ -71,6 +73,7 @@ function setup({ include, exclude }) { mocha, include, exclude, + esVersion, }); mocha.run(); @@ -208,3 +211,27 @@ it('does nothing if everything excluded', async () => { ] `); }); + +it(`excludes tests which don't meet the esVersionRequirement`, async () => { + const { history } = await setup({ + include: [], + exclude: [], + esVersion: new EsVersion('9.0.0'), + }); + + expect(history).toMatchInlineSnapshot(` + Array [ + "info: Only running suites which are compatible with ES version 9.0.0", + "suite: ", + "suite: level 1", + "suite: level 1 level 1a", + "hook: \\"before each\\" hook: rootBeforeEach for \\"test 1a\\"", + "hook: level 1 \\"before each\\" hook: level1BeforeEach for \\"test 1a\\"", + "test: level 1 level 1a test 1a", + "suite: level 2", + "suite: level 2 level 2a", + "hook: \\"before each\\" hook: rootBeforeEach for \\"test 2a\\"", + "test: level 2 level 2a test 2a", + ] + `); +}); diff --git a/packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites_by_tags.js b/packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites.ts similarity index 55% rename from packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites_by_tags.js rename to packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites.ts index 9724956e121f34..90bb3a894bc6c3 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites_by_tags.js +++ b/packages/kbn-test/src/functional_test_runner/lib/mocha/filter_suites.ts @@ -6,6 +6,24 @@ * Side Public License, v 1. */ +import { ToolingLog } from '@kbn/dev-utils'; +import { Suite, Test } from '../../fake_mocha_types'; +import { EsVersion } from '../es_version'; + +interface SuiteInternal extends Suite { + _tags?: string[]; + _esVersionRequirement?: string; + suites: SuiteInternal[]; +} + +interface Options { + log: ToolingLog; + mocha: any; + include: string[]; + exclude: string[]; + esVersion?: EsVersion; +} + /** * Given a mocha instance that has already loaded all of its suites, filter out * the suites based on the include/exclude tags. If there are include tags then @@ -16,23 +34,50 @@ * @param options.include an array of tags that suites must be tagged with to be run * @param options.exclude an array of tags that will be used to exclude suites from the run */ -export function filterSuitesByTags({ log, mocha, include, exclude }) { - mocha.excludedTests = []; +export function filterSuites({ log, mocha, include, exclude, esVersion }: Options) { + mocha.testsExcludedByTag = []; + mocha.testsExcludedByEsVersion = []; + // collect all the tests from some suite, including it's children - const collectTests = (suite) => + const collectTests = (suite: SuiteInternal): Test[] => suite.suites.reduce((acc, s) => acc.concat(collectTests(s)), suite.tests); + if (esVersion) { + // traverse the test graph and exclude any tests which don't meet their esVersionRequirement + log.info('Only running suites which are compatible with ES version', esVersion.toString()); + (function recurse(parentSuite: SuiteInternal) { + const children = parentSuite.suites; + parentSuite.suites = []; + + const meetsEsVersionRequirement = (suite: SuiteInternal) => + !suite._esVersionRequirement || esVersion.matchRange(suite._esVersionRequirement); + + for (const child of children) { + if (meetsEsVersionRequirement(child)) { + parentSuite.suites.push(child); + recurse(child); + } else { + mocha.testsExcludedByEsVersion = mocha.testsExcludedByEsVersion.concat( + collectTests(child) + ); + } + } + })(mocha.suite); + } + // if include tags were provided, filter the tree once to // only include branches that are included at some point if (include.length) { log.info('Only running suites (and their sub-suites) if they include the tag(s):', include); - const isIncluded = (suite) => + const isIncludedByTags = (suite: SuiteInternal) => !suite._tags ? false : suite._tags.some((t) => include.includes(t)); - const isChildIncluded = (suite) => + + const isIncluded = (suite: SuiteInternal) => isIncludedByTags(suite); + const isChildIncluded = (suite: SuiteInternal): boolean => suite.suites.some((s) => isIncluded(s) || isChildIncluded(s)); - (function recurse(parentSuite) { + (function recurse(parentSuite: SuiteInternal) { const children = parentSuite.suites; parentSuite.suites = []; @@ -47,13 +92,13 @@ export function filterSuitesByTags({ log, mocha, include, exclude }) { // itself, so strip out its tests and recurse to filter // out child suites which are not included if (isChildIncluded(child)) { - mocha.excludedTests = mocha.excludedTests.concat(child.tests); + mocha.testsExcludedByTag = mocha.testsExcludedByTag.concat(child.tests); child.tests = []; parentSuite.suites.push(child); recurse(child); continue; } else { - mocha.excludedTests = mocha.excludedTests.concat(collectTests(child)); + mocha.testsExcludedByTag = mocha.testsExcludedByTag.concat(collectTests(child)); } } })(mocha.suite); @@ -64,9 +109,10 @@ export function filterSuitesByTags({ log, mocha, include, exclude }) { if (exclude.length) { log.info('Filtering out any suites that include the tag(s):', exclude); - const isNotExcluded = (suite) => !suite._tags || !suite._tags.some((t) => exclude.includes(t)); + const isNotExcluded = (suite: SuiteInternal) => + !suite._tags || !suite._tags.some((t) => exclude.includes(t)); - (function recurse(parentSuite) { + (function recurse(parentSuite: SuiteInternal) { const children = parentSuite.suites; parentSuite.suites = []; @@ -77,7 +123,7 @@ export function filterSuitesByTags({ log, mocha, include, exclude }) { parentSuite.suites.push(child); recurse(child); } else { - mocha.excludedTests = mocha.excludedTests.concat(collectTests(child)); + mocha.testsExcludedByTag = mocha.testsExcludedByTag.concat(collectTests(child)); } } })(mocha.suite); diff --git a/packages/kbn-test/src/functional_test_runner/lib/mocha/setup_mocha.js b/packages/kbn-test/src/functional_test_runner/lib/mocha/setup_mocha.js index 65b7c09242fdd4..8d88410cb2c1da 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/mocha/setup_mocha.js +++ b/packages/kbn-test/src/functional_test_runner/lib/mocha/setup_mocha.js @@ -11,7 +11,7 @@ import { relative } from 'path'; import { REPO_ROOT } from '@kbn/utils'; import { loadTestFiles } from './load_test_files'; -import { filterSuitesByTags } from './filter_suites_by_tags'; +import { filterSuites } from './filter_suites'; import { MochaReporterProvider } from './reporter'; import { validateCiGroupTags } from './validate_ci_group_tags'; @@ -22,9 +22,10 @@ import { validateCiGroupTags } from './validate_ci_group_tags'; * @param {ToolingLog} log * @param {Config} config * @param {ProviderCollection} providers + * @param {EsVersion} esVersion * @return {Promise} */ -export async function setupMocha(lifecycle, log, config, providers) { +export async function setupMocha(lifecycle, log, config, providers, esVersion) { // configure mocha const mocha = new Mocha({ ...config.get('mochaOpts'), @@ -50,18 +51,26 @@ export async function setupMocha(lifecycle, log, config, providers) { // valiate that there aren't any tests in multiple ciGroups validateCiGroupTags(log, mocha); + filterSuites({ + log, + mocha, + include: [], + exclude: [], + esVersion, + }); + // Each suite has a tag that is the path relative to the root of the repo // So we just need to take input paths, make them relative to the root, and use them as tags // Also, this is a separate filterSuitesByTags() call so that the test suites will be filtered first by // files, then by tags. This way, you can target tags (like smoke) in a specific file. - filterSuitesByTags({ + filterSuites({ log, mocha, include: config.get('suiteFiles.include').map((file) => relative(REPO_ROOT, file)), exclude: config.get('suiteFiles.exclude').map((file) => relative(REPO_ROOT, file)), }); - filterSuitesByTags({ + filterSuites({ log, mocha, include: config.get('suiteTags.include').map((tag) => tag.replace(/-\d+$/, '')), diff --git a/packages/kbn-test/src/functional_test_runner/public_types.ts b/packages/kbn-test/src/functional_test_runner/public_types.ts index d1a0f7998b0a98..6cb6d5adf4b191 100644 --- a/packages/kbn-test/src/functional_test_runner/public_types.ts +++ b/packages/kbn-test/src/functional_test_runner/public_types.ts @@ -6,10 +6,10 @@ * Side Public License, v 1. */ -import { ToolingLog } from '@kbn/dev-utils'; +import type { ToolingLog } from '@kbn/dev-utils'; -import { Config, Lifecycle, FailureMetadata, DockerServersService } from './lib'; -import { Test, Suite } from './fake_mocha_types'; +import type { Config, Lifecycle, FailureMetadata, DockerServersService, EsVersion } from './lib'; +import type { Test, Suite } from './fake_mocha_types'; export { Lifecycle, Config, FailureMetadata }; @@ -57,7 +57,7 @@ export interface GenericFtrProviderContext< * @param serviceName */ hasService( - serviceName: 'config' | 'log' | 'lifecycle' | 'failureMetadata' | 'dockerServers' + serviceName: 'config' | 'log' | 'lifecycle' | 'failureMetadata' | 'dockerServers' | 'esVersion' ): true; hasService(serviceName: K): serviceName is K; hasService(serviceName: string): serviceName is Extract; @@ -72,6 +72,7 @@ export interface GenericFtrProviderContext< getService(serviceName: 'lifecycle'): Lifecycle; getService(serviceName: 'dockerServers'): DockerServersService; getService(serviceName: 'failureMetadata'): FailureMetadata; + getService(serviceName: 'esVersion'): EsVersion; getService(serviceName: T): ServiceMap[T]; /** @@ -100,6 +101,7 @@ export class GenericFtrService; } diff --git a/packages/kbn-test/src/functional_tests/cli/run_tests/__snapshots__/args.test.js.snap b/packages/kbn-test/src/functional_tests/cli/run_tests/__snapshots__/args.test.js.snap index ad2f82de87b82d..fb00908e0c7548 100644 --- a/packages/kbn-test/src/functional_tests/cli/run_tests/__snapshots__/args.test.js.snap +++ b/packages/kbn-test/src/functional_tests/cli/run_tests/__snapshots__/args.test.js.snap @@ -37,6 +37,7 @@ Object { ], "createLogger": [Function], "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "suiteFiles": Object { "exclude": Array [], @@ -58,6 +59,7 @@ Object { ], "createLogger": [Function], "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "suiteFiles": Object { "exclude": Array [], @@ -80,6 +82,7 @@ Object { "createLogger": [Function], "debug": true, "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "suiteFiles": Object { "exclude": Array [], @@ -101,6 +104,7 @@ Object { ], "createLogger": [Function], "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "suiteFiles": Object { "exclude": Array [], @@ -124,6 +128,7 @@ Object { ], "createLogger": [Function], "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": Object { "server.foo": "bar", }, @@ -146,6 +151,7 @@ Object { ], "createLogger": [Function], "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "quiet": true, "suiteFiles": Object { @@ -167,6 +173,7 @@ Object { ], "createLogger": [Function], "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "silent": true, "suiteFiles": Object { @@ -188,6 +195,7 @@ Object { ], "createLogger": [Function], "esFrom": "source", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "suiteFiles": Object { "exclude": Array [], @@ -208,6 +216,7 @@ Object { ], "createLogger": [Function], "esFrom": "source", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "suiteFiles": Object { "exclude": Array [], @@ -228,6 +237,7 @@ Object { ], "createLogger": [Function], "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "installDir": "foo", "suiteFiles": Object { @@ -249,6 +259,7 @@ Object { ], "createLogger": [Function], "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "grep": "management", "suiteFiles": Object { @@ -270,6 +281,7 @@ Object { ], "createLogger": [Function], "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "suiteFiles": Object { "exclude": Array [], @@ -291,6 +303,7 @@ Object { ], "createLogger": [Function], "esFrom": "snapshot", + "esVersion": "999.999.999", "extraKbnOpts": undefined, "suiteFiles": Object { "exclude": Array [], diff --git a/packages/kbn-test/src/functional_tests/cli/run_tests/args.js b/packages/kbn-test/src/functional_tests/cli/run_tests/args.js index 901ff6394649de..497a9b9c6c5339 100644 --- a/packages/kbn-test/src/functional_tests/cli/run_tests/args.js +++ b/packages/kbn-test/src/functional_tests/cli/run_tests/args.js @@ -10,6 +10,7 @@ import { resolve } from 'path'; import dedent from 'dedent'; import { ToolingLog, pickLevelFromFlags } from '@kbn/dev-utils'; +import { EsVersion } from '../../../functional_test_runner'; const options = { help: { desc: 'Display this menu and exit.' }, @@ -147,6 +148,7 @@ export function processOptions(userOptions, defaultConfigPaths) { configs: configs.map((c) => resolve(c)), createLogger, extraKbnOpts: userOptions._, + esVersion: EsVersion.getDefault(), }; } diff --git a/packages/kbn-test/src/functional_tests/cli/run_tests/args.test.js b/packages/kbn-test/src/functional_tests/cli/run_tests/args.test.js index 7786aee5af5526..72ba541466960d 100644 --- a/packages/kbn-test/src/functional_tests/cli/run_tests/args.test.js +++ b/packages/kbn-test/src/functional_tests/cli/run_tests/args.test.js @@ -6,9 +6,20 @@ * Side Public License, v 1. */ -import { displayHelp, processOptions } from './args'; import { createAbsolutePathSerializer } from '@kbn/dev-utils'; +import { displayHelp, processOptions } from './args'; + +jest.mock('../../../functional_test_runner/lib/es_version', () => { + return { + EsVersion: class { + static getDefault() { + return '999.999.999'; + } + }, + }; +}); + expect.addSnapshotSerializer(createAbsolutePathSerializer(process.cwd())); const INITIAL_TEST_ES_FROM = process.env.TEST_ES_FROM; diff --git a/packages/kbn-test/src/functional_tests/lib/run_ftr.ts b/packages/kbn-test/src/functional_tests/lib/run_ftr.ts index f9e109928ddc0b..77d6cd8e357a5a 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_ftr.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_ftr.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ import type { ToolingLog } from '@kbn/dev-utils'; -import { FunctionalTestRunner, readConfigFile } from '../../functional_test_runner'; +import { FunctionalTestRunner, readConfigFile, EsVersion } from '../../functional_test_runner'; import { CliError } from './run_cli'; export interface CreateFtrOptions { @@ -26,6 +26,7 @@ export interface CreateFtrOptions { exclude?: string[]; }; updateSnapshots?: boolean; + esVersion: EsVersion; } export interface CreateFtrParams { @@ -34,31 +35,46 @@ export interface CreateFtrParams { } async function createFtr({ configPath, - options: { installDir, log, bail, grep, updateBaselines, suiteFiles, suiteTags, updateSnapshots }, + options: { + installDir, + log, + bail, + grep, + updateBaselines, + suiteFiles, + suiteTags, + updateSnapshots, + esVersion, + }, }: CreateFtrParams) { - const config = await readConfigFile(log, configPath); + const config = await readConfigFile(log, esVersion, configPath); return { config, - ftr: new FunctionalTestRunner(log, configPath, { - mochaOpts: { - bail: !!bail, - grep, + ftr: new FunctionalTestRunner( + log, + configPath, + { + mochaOpts: { + bail: !!bail, + grep, + }, + kbnTestServer: { + installDir, + }, + updateBaselines, + updateSnapshots, + suiteFiles: { + include: [...(suiteFiles?.include || []), ...config.get('suiteFiles.include')], + exclude: [...(suiteFiles?.exclude || []), ...config.get('suiteFiles.exclude')], + }, + suiteTags: { + include: [...(suiteTags?.include || []), ...config.get('suiteTags.include')], + exclude: [...(suiteTags?.exclude || []), ...config.get('suiteTags.exclude')], + }, }, - kbnTestServer: { - installDir, - }, - updateBaselines, - updateSnapshots, - suiteFiles: { - include: [...(suiteFiles?.include || []), ...config.get('suiteFiles.include')], - exclude: [...(suiteFiles?.exclude || []), ...config.get('suiteFiles.exclude')], - }, - suiteTags: { - include: [...(suiteTags?.include || []), ...config.get('suiteTags.include')], - exclude: [...(suiteTags?.exclude || []), ...config.get('suiteTags.exclude')], - }, - }), + esVersion + ), }; } @@ -71,15 +87,15 @@ export async function assertNoneExcluded({ configPath, options }: CreateFtrParam } const stats = await ftr.getTestStats(); - if (stats.excludedTests.length > 0) { + if (stats.testsExcludedByTag.length > 0) { throw new CliError(` - ${stats.excludedTests.length} tests in the ${configPath} config + ${stats.testsExcludedByTag.length} tests in the ${configPath} config are excluded when filtering by the tags run on CI. Make sure that all suites are tagged with one of the following tags: ${JSON.stringify(options.suiteTags)} - - ${stats.excludedTests.join('\n - ')} + - ${stats.testsExcludedByTag.join('\n - ')} `); } } diff --git a/packages/kbn-test/src/functional_tests/tasks.ts b/packages/kbn-test/src/functional_tests/tasks.ts index cace061be64a9c..5906193ca145c7 100644 --- a/packages/kbn-test/src/functional_tests/tasks.ts +++ b/packages/kbn-test/src/functional_tests/tasks.ts @@ -23,7 +23,7 @@ import { CreateFtrOptions, } from './lib'; -import { readConfigFile } from '../functional_test_runner/lib'; +import { readConfigFile, EsVersion } from '../functional_test_runner/lib'; const makeSuccessMessage = (options: StartServerOptions) => { const installDirFlag = options.installDir ? ` --kibana-install-dir=${options.installDir}` : ''; @@ -55,6 +55,7 @@ interface RunTestsParams extends CreateFtrOptions { configs: string[]; /** run from source instead of snapshot */ esFrom?: string; + esVersion: EsVersion; createLogger: () => ToolingLog; extraKbnOpts: string[]; assertNoneExcluded: boolean; @@ -105,7 +106,7 @@ export async function runTests(options: RunTestsParams) { log.write(`--- [${progress}] Running ${relative(REPO_ROOT, configPath)}`); await withProcRunner(log, async (procs) => { - const config = await readConfigFile(log, configPath); + const config = await readConfigFile(log, options.esVersion, configPath); let es; try { @@ -145,6 +146,7 @@ interface StartServerOptions { createLogger: () => ToolingLog; extraKbnOpts: string[]; useDefaultConfig?: boolean; + esVersion: EsVersion; } export async function startServers({ ...options }: StartServerOptions) { @@ -162,7 +164,7 @@ export async function startServers({ ...options }: StartServerOptions) { }; await withProcRunner(log, async (procs) => { - const config = await readConfigFile(log, options.config); + const config = await readConfigFile(log, options.esVersion, options.config); const es = await runElasticsearch({ config, options: opts }); await runKibanaServer({ diff --git a/packages/kbn-test/src/kbn_archiver_cli.ts b/packages/kbn-test/src/kbn_archiver_cli.ts index 80e35efaec976f..f7f17900efcfff 100644 --- a/packages/kbn-test/src/kbn_archiver_cli.ts +++ b/packages/kbn-test/src/kbn_archiver_cli.ts @@ -12,7 +12,7 @@ import Url from 'url'; import { RunWithCommands, createFlagError, Flags } from '@kbn/dev-utils'; import { KbnClient } from './kbn_client'; -import { readConfigFile } from './functional_test_runner'; +import { readConfigFile, EsVersion } from './functional_test_runner'; function getSinglePositionalArg(flags: Flags) { const positional = flags._; @@ -57,7 +57,7 @@ export function runKbnArchiverCli() { throw createFlagError('expected --config to be a string'); } - config = await readConfigFile(log, Path.resolve(flags.config)); + config = await readConfigFile(log, EsVersion.getDefault(), Path.resolve(flags.config)); statsMeta.set('ftrConfigPath', flags.config); } diff --git a/packages/kbn-test/types/ftr_globals/mocha.d.ts b/packages/kbn-test/types/ftr_globals/mocha.d.ts index ac9e33d4b9dcc7..d5895b40f12453 100644 --- a/packages/kbn-test/types/ftr_globals/mocha.d.ts +++ b/packages/kbn-test/types/ftr_globals/mocha.d.ts @@ -14,5 +14,11 @@ declare module 'mocha' { * Assign tags to the test suite to determine in which CI job it should be run. */ tags(tags: string[] | string): void; + /** + * Define the ES versions for which this test requires, any version which doesn't meet this range will + * cause these tests to be skipped + * @param semver any valid semver range, like ">=8" + */ + onlyEsVersion(semver: string): void; } } diff --git a/src/core/public/doc_links/doc_links_service.ts b/src/core/public/doc_links/doc_links_service.ts index 0c4bebc0bfbe82..4db97c1b9e256b 100644 --- a/src/core/public/doc_links/doc_links_service.ts +++ b/src/core/public/doc_links/doc_links_service.ts @@ -179,6 +179,7 @@ export class DocLinksService { significant_terms: `${ELASTICSEARCH_DOCS}search-aggregations-bucket-significantterms-aggregation.html`, terms: `${ELASTICSEARCH_DOCS}search-aggregations-bucket-terms-aggregation.html`, terms_doc_count_error: `${ELASTICSEARCH_DOCS}search-aggregations-bucket-terms-aggregation.html#_per_bucket_document_count_error`, + rare_terms: `${ELASTICSEARCH_DOCS}search-aggregations-bucket-rare-terms-aggregation.html`, avg: `${ELASTICSEARCH_DOCS}search-aggregations-metrics-avg-aggregation.html`, avg_bucket: `${ELASTICSEARCH_DOCS}search-aggregations-pipeline-avg-bucket-aggregation.html`, max_bucket: `${ELASTICSEARCH_DOCS}search-aggregations-pipeline-max-bucket-aggregation.html`, @@ -349,19 +350,19 @@ export class DocLinksService { anomalyDetection: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-overview.html`, anomalyDetectionJobs: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html`, anomalyDetectionConfiguringCategories: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-configuring-categories.html`, - anomalyDetectionBucketSpan: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html#ml-ad-bucket-span`, - anomalyDetectionCardinality: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html#ml-ad-cardinality`, - anomalyDetectionCreateJobs: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html#ml-ad-create-job`, - anomalyDetectionDetectors: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html#ml-ad-detectors`, - anomalyDetectionInfluencers: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html#ml-ad-influencers`, + anomalyDetectionBucketSpan: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html`, + anomalyDetectionCardinality: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html`, + anomalyDetectionCreateJobs: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html`, + anomalyDetectionDetectors: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html`, + anomalyDetectionInfluencers: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html`, anomalyDetectionJobResource: `${ELASTICSEARCH_DOCS}ml-put-job.html#ml-put-job-path-parms`, anomalyDetectionJobResourceAnalysisConfig: `${ELASTICSEARCH_DOCS}ml-put-job.html#put-analysisconfig`, - anomalyDetectionJobTips: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html#ml-ad-job-tips`, + anomalyDetectionJobTips: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html`, alertingRules: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-configuring-alerts.html`, - anomalyDetectionModelMemoryLimits: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html#ml-ad-model-memory-limits`, - calendars: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html#ml-ad-calendars`, + anomalyDetectionModelMemoryLimits: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html`, + calendars: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html`, classificationEvaluation: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-dfa-classification.html#ml-dfanalytics-classification-evaluation`, - customRules: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html#ml-ad-rules`, + customRules: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-ad-finding-anomalies.html`, customUrls: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-configuring-url.html`, dataFrameAnalytics: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-dfanalytics.html`, featureImportance: `${ELASTIC_WEBSITE_URL}guide/en/machine-learning/${DOC_LINK_VERSION}/ml-feature-importance.html`, @@ -746,6 +747,7 @@ export interface DocLinksStart { readonly significant_terms: string; readonly terms: string; readonly terms_doc_count_error: string; + readonly rare_terms: string; readonly avg: string; readonly avg_bucket: string; readonly max_bucket: string; diff --git a/src/core/public/public.api.md b/src/core/public/public.api.md index e4280f7cf90463..603d6f184dd6fe 100644 --- a/src/core/public/public.api.md +++ b/src/core/public/public.api.md @@ -630,6 +630,7 @@ export interface DocLinksStart { readonly significant_terms: string; readonly terms: string; readonly terms_doc_count_error: string; + readonly rare_terms: string; readonly avg: string; readonly avg_bucket: string; readonly max_bucket: string; diff --git a/src/dev/storybook/aliases.ts b/src/dev/storybook/aliases.ts index 54a48685275e6a..896ed6b0bb5367 100644 --- a/src/dev/storybook/aliases.ts +++ b/src/dev/storybook/aliases.ts @@ -17,6 +17,7 @@ export const storybookAliases = { dashboard_enhanced: 'x-pack/plugins/dashboard_enhanced/.storybook', dashboard: 'src/plugins/dashboard/.storybook', data_enhanced: 'x-pack/plugins/data_enhanced/.storybook', + discover: 'src/plugins/discover/.storybook', embeddable: 'src/plugins/embeddable/.storybook', expression_error: 'src/plugins/expression_error/.storybook', expression_image: 'src/plugins/expression_image/.storybook', diff --git a/src/plugins/console/public/application/models/sense_editor/integration.test.js b/src/plugins/console/public/application/models/sense_editor/integration.test.js index f7e8bd1314ab58..a342c3429d03db 100644 --- a/src/plugins/console/public/application/models/sense_editor/integration.test.js +++ b/src/plugins/console/public/application/models/sense_editor/integration.test.js @@ -361,7 +361,7 @@ describe('Integration', () => { cursor: { lineNumber: 7, column: 1 }, initialValue: '', addTemplate: true, - prefixToAdd: ', ', + prefixToAdd: '', suffixToAdd: '', rangeToReplace: { start: { lineNumber: 7, column: 1 }, @@ -374,7 +374,7 @@ describe('Integration', () => { cursor: { lineNumber: 6, column: 15 }, initialValue: '', addTemplate: true, - prefixToAdd: ', ', + prefixToAdd: '', suffixToAdd: '', rangeToReplace: { start: { lineNumber: 6, column: 15 }, diff --git a/src/plugins/console/public/lib/autocomplete/autocomplete.ts b/src/plugins/console/public/lib/autocomplete/autocomplete.ts index a85e53d44d1a32..43fdde3f023490 100644 --- a/src/plugins/console/public/lib/autocomplete/autocomplete.ts +++ b/src/plugins/console/public/lib/autocomplete/autocomplete.ts @@ -762,7 +762,18 @@ export default function ({ break; default: if (nonEmptyToken && nonEmptyToken.type.indexOf('url') < 0) { - context.prefixToAdd = ', '; + const { position, value } = nonEmptyToken; + + // We can not rely on prefixToAdd here, because it adds a comma at the beginning of the new token + // Since we have access to the position of the previous token here, this could be a good place to insert a comma manually + context.prefixToAdd = ''; + editor.insert( + { + column: position.column + value.length, + lineNumber: position.lineNumber, + }, + ', ' + ); } } diff --git a/src/plugins/data/common/search/aggs/agg_types.ts b/src/plugins/data/common/search/aggs/agg_types.ts index a7cdacf2e102d1..01ccd401c07acc 100644 --- a/src/plugins/data/common/search/aggs/agg_types.ts +++ b/src/plugins/data/common/search/aggs/agg_types.ts @@ -56,6 +56,7 @@ export const getAggTypes = () => ({ { name: BUCKET_TYPES.IP_RANGE, fn: buckets.getIpRangeBucketAgg }, { name: BUCKET_TYPES.TERMS, fn: buckets.getTermsBucketAgg }, { name: BUCKET_TYPES.MULTI_TERMS, fn: buckets.getMultiTermsBucketAgg }, + { name: BUCKET_TYPES.RARE_TERMS, fn: buckets.getRareTermsBucketAgg }, { name: BUCKET_TYPES.FILTER, fn: buckets.getFilterBucketAgg }, { name: BUCKET_TYPES.FILTERS, fn: buckets.getFiltersBucketAgg }, { name: BUCKET_TYPES.SIGNIFICANT_TERMS, fn: buckets.getSignificantTermsBucketAgg }, @@ -82,6 +83,7 @@ export const getAggTypesFunctions = () => [ buckets.aggDateHistogram, buckets.aggTerms, buckets.aggMultiTerms, + buckets.aggRareTerms, buckets.aggSampler, buckets.aggDiversifiedSampler, metrics.aggAvg, diff --git a/src/plugins/data/common/search/aggs/aggs_service.test.ts b/src/plugins/data/common/search/aggs/aggs_service.test.ts index f5a35338e0246c..998b8bf286b52b 100644 --- a/src/plugins/data/common/search/aggs/aggs_service.test.ts +++ b/src/plugins/data/common/search/aggs/aggs_service.test.ts @@ -68,6 +68,7 @@ describe('Aggs service', () => { "ip_range", "terms", "multi_terms", + "rare_terms", "filter", "filters", "significant_terms", @@ -120,6 +121,7 @@ describe('Aggs service', () => { "ip_range", "terms", "multi_terms", + "rare_terms", "filter", "filters", "significant_terms", diff --git a/src/plugins/data/common/search/aggs/buckets/bucket_agg_types.ts b/src/plugins/data/common/search/aggs/buckets/bucket_agg_types.ts index 08a773700e42fe..fcfbb432e30559 100644 --- a/src/plugins/data/common/search/aggs/buckets/bucket_agg_types.ts +++ b/src/plugins/data/common/search/aggs/buckets/bucket_agg_types.ts @@ -15,6 +15,7 @@ export enum BUCKET_TYPES { RANGE = 'range', TERMS = 'terms', MULTI_TERMS = 'multi_terms', + RARE_TERMS = 'rare_terms', SIGNIFICANT_TERMS = 'significant_terms', SIGNIFICANT_TEXT = 'significant_text', GEOHASH_GRID = 'geohash_grid', diff --git a/src/plugins/data/common/search/aggs/buckets/index.ts b/src/plugins/data/common/search/aggs/buckets/index.ts index 9ff7bccd16bd33..d9a5da5c827ac0 100644 --- a/src/plugins/data/common/search/aggs/buckets/index.ts +++ b/src/plugins/data/common/search/aggs/buckets/index.ts @@ -40,6 +40,8 @@ export * from './terms_fn'; export * from './terms'; export * from './multi_terms_fn'; export * from './multi_terms'; +export * from './rare_terms_fn'; +export * from './rare_terms'; export * from './sampler_fn'; export * from './sampler'; export * from './diversified_sampler_fn'; diff --git a/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts b/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts index 8788f554407726..7751c47575f429 100644 --- a/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts +++ b/src/plugins/data/common/search/aggs/buckets/multi_terms.test.ts @@ -127,7 +127,7 @@ describe('Multi Terms Agg', () => { 5, ], }, - "function": "aggTerms", + "function": "aggMultiTerms", "type": "function", }, ], diff --git a/src/plugins/data/common/search/aggs/buckets/multi_terms.ts b/src/plugins/data/common/search/aggs/buckets/multi_terms.ts index 02bf6bd12d3192..e98580fb99e1f6 100644 --- a/src/plugins/data/common/search/aggs/buckets/multi_terms.ts +++ b/src/plugins/data/common/search/aggs/buckets/multi_terms.ts @@ -12,7 +12,7 @@ import { i18n } from '@kbn/i18n'; import { BucketAggType } from './bucket_agg_type'; import { BUCKET_TYPES } from './bucket_agg_types'; import { createFilterMultiTerms } from './create_filter/multi_terms'; -import { aggTermsFnName } from './terms_fn'; +import { aggMultiTermsFnName } from './multi_terms_fn'; import { AggConfigSerialized, BaseAggParams } from '../types'; import { MultiFieldKey } from './multi_field_key'; @@ -41,7 +41,7 @@ export const getMultiTermsBucketAgg = () => { const keyCaches = new WeakMap(); return new BucketAggType({ name: BUCKET_TYPES.MULTI_TERMS, - expressionName: aggTermsFnName, + expressionName: aggMultiTermsFnName, title: termsTitle, makeLabel(agg) { const params = agg.params; diff --git a/src/plugins/data/common/search/aggs/buckets/rare_terms.test.ts b/src/plugins/data/common/search/aggs/buckets/rare_terms.test.ts new file mode 100644 index 00000000000000..8acbd95082a082 --- /dev/null +++ b/src/plugins/data/common/search/aggs/buckets/rare_terms.test.ts @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { AggConfigs } from '../agg_configs'; +import { mockAggTypesRegistry } from '../test_helpers'; +import { BUCKET_TYPES } from './bucket_agg_types'; +import type { IndexPatternField } from '../../..'; +import { IndexPattern } from '../../..'; + +describe('rare terms Agg', () => { + const getAggConfigs = (params: Record = {}) => { + const indexPattern = { + id: '1234', + title: 'logstash-*', + fields: [ + { + name: 'field', + type: 'string', + esTypes: ['string'], + aggregatable: true, + filterable: true, + searchable: true, + }, + { + name: 'string_field', + type: 'string', + esTypes: ['string'], + aggregatable: true, + filterable: true, + searchable: true, + }, + { + name: 'empty_number_field', + type: 'number', + esTypes: ['number'], + aggregatable: true, + filterable: true, + searchable: true, + }, + { + name: 'number_field', + type: 'number', + esTypes: ['number'], + aggregatable: true, + filterable: true, + searchable: true, + }, + ], + } as IndexPattern; + + indexPattern.fields.getByName = (name) => ({ name } as unknown as IndexPatternField); + indexPattern.fields.filter = () => indexPattern.fields; + + return new AggConfigs( + indexPattern, + [ + { + id: 'test', + params, + type: BUCKET_TYPES.RARE_TERMS, + }, + ], + { typesRegistry: mockAggTypesRegistry() } + ); + }; + + test('produces the expected expression ast', () => { + const aggConfigs = getAggConfigs({ + field: 'field', + max_doc_count: 5, + }); + expect(aggConfigs.aggs[0].toExpressionAst()).toMatchInlineSnapshot(` + Object { + "chain": Array [ + Object { + "arguments": Object { + "enabled": Array [ + true, + ], + "field": Array [ + "field", + ], + "id": Array [ + "test", + ], + "max_doc_count": Array [ + 5, + ], + }, + "function": "aggRareTerms", + "type": "function", + }, + ], + "type": "expression", + } + `); + }); +}); diff --git a/src/plugins/data/common/search/aggs/buckets/rare_terms.ts b/src/plugins/data/common/search/aggs/buckets/rare_terms.ts new file mode 100644 index 00000000000000..bc3c23b0262382 --- /dev/null +++ b/src/plugins/data/common/search/aggs/buckets/rare_terms.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +import { BucketAggType } from './bucket_agg_type'; +import { BUCKET_TYPES } from './bucket_agg_types'; +import { createFilterTerms } from './create_filter/terms'; +import { aggRareTermsFnName } from './rare_terms_fn'; +import { BaseAggParams } from '../types'; + +import { KBN_FIELD_TYPES } from '../../../../common'; + +const termsTitle = i18n.translate('data.search.aggs.buckets.rareTermsTitle', { + defaultMessage: 'Rare terms', +}); + +export interface AggParamsRareTerms extends BaseAggParams { + field: string; + max_doc_count?: number; +} + +export const getRareTermsBucketAgg = () => { + return new BucketAggType({ + name: BUCKET_TYPES.RARE_TERMS, + expressionName: aggRareTermsFnName, + title: termsTitle, + makeLabel(agg) { + return i18n.translate('data.search.aggs.rareTerms.aggTypesLabel', { + defaultMessage: 'Rare terms of {fieldName}', + values: { + fieldName: agg.getFieldDisplayName(), + }, + }); + }, + createFilter: createFilterTerms, + params: [ + { + name: 'field', + type: 'field', + filterFieldTypes: [ + KBN_FIELD_TYPES.NUMBER, + KBN_FIELD_TYPES.BOOLEAN, + KBN_FIELD_TYPES.DATE, + KBN_FIELD_TYPES.IP, + KBN_FIELD_TYPES.STRING, + ], + }, + { + name: 'max_doc_count', + default: 1, + }, + ], + }); +}; diff --git a/src/plugins/data/common/search/aggs/buckets/rare_terms_fn.ts b/src/plugins/data/common/search/aggs/buckets/rare_terms_fn.ts new file mode 100644 index 00000000000000..bdb4556d186ad6 --- /dev/null +++ b/src/plugins/data/common/search/aggs/buckets/rare_terms_fn.ts @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { ExpressionFunctionDefinition } from 'src/plugins/expressions/common'; +import { AggExpressionType, AggExpressionFunctionArgs, BUCKET_TYPES } from '../'; + +export const aggRareTermsFnName = 'aggRareTerms'; + +type Input = any; +type AggArgs = AggExpressionFunctionArgs; + +type Output = AggExpressionType; +type FunctionDefinition = ExpressionFunctionDefinition< + typeof aggRareTermsFnName, + Input, + AggArgs, + Output +>; + +export const aggRareTerms = (): FunctionDefinition => ({ + name: aggRareTermsFnName, + help: i18n.translate('data.search.aggs.function.buckets.rareTerms.help', { + defaultMessage: 'Generates a serialized agg config for a Rare-Terms agg', + }), + type: 'agg_type', + args: { + id: { + types: ['string'], + help: i18n.translate('data.search.aggs.buckets.rareTerms.id.help', { + defaultMessage: 'ID for this aggregation', + }), + }, + enabled: { + types: ['boolean'], + default: true, + help: i18n.translate('data.search.aggs.buckets.rareTerms.enabled.help', { + defaultMessage: 'Specifies whether this aggregation should be enabled', + }), + }, + schema: { + types: ['string'], + help: i18n.translate('data.search.aggs.buckets.rareTerms.schema.help', { + defaultMessage: 'Schema to use for this aggregation', + }), + }, + field: { + types: ['string'], + required: true, + help: i18n.translate('data.search.aggs.buckets.rareTerms.fields.help', { + defaultMessage: 'Field to use for this aggregation', + }), + }, + max_doc_count: { + types: ['number'], + help: i18n.translate('data.search.aggs.buckets.rareTerms.maxDocCount.help', { + defaultMessage: 'Maximum number of times a term is allowed to occur to qualify as rare', + }), + }, + json: { + types: ['string'], + help: i18n.translate('data.search.aggs.buckets.multiTerms.json.help', { + defaultMessage: 'Advanced json to include when the agg is sent to Elasticsearch', + }), + }, + }, + fn: (input, args) => { + const { id, enabled, schema, ...rest } = args; + + return { + type: 'agg_type', + value: { + id, + enabled, + schema, + type: BUCKET_TYPES.RARE_TERMS, + params: { + ...rest, + }, + }, + }; + }, +}); diff --git a/src/plugins/data/common/search/aggs/types.ts b/src/plugins/data/common/search/aggs/types.ts index 8f87c5aff56a38..34d773b0ba518e 100644 --- a/src/plugins/data/common/search/aggs/types.ts +++ b/src/plugins/data/common/search/aggs/types.ts @@ -68,6 +68,7 @@ import { AggParamsSum, AggParamsTerms, AggParamsMultiTerms, + AggParamsRareTerms, AggParamsTopHit, aggPercentileRanks, aggPercentiles, @@ -78,6 +79,7 @@ import { aggSum, aggTerms, aggMultiTerms, + aggRareTerms, aggTopHit, AggTypesRegistry, AggTypesRegistrySetup, @@ -166,6 +168,7 @@ export interface AggParamsMapping { [BUCKET_TYPES.DATE_HISTOGRAM]: AggParamsDateHistogram; [BUCKET_TYPES.TERMS]: AggParamsTerms; [BUCKET_TYPES.MULTI_TERMS]: AggParamsMultiTerms; + [BUCKET_TYPES.RARE_TERMS]: AggParamsRareTerms; [BUCKET_TYPES.SAMPLER]: AggParamsSampler; [BUCKET_TYPES.DIVERSIFIED_SAMPLER]: AggParamsDiversifiedSampler; [METRIC_TYPES.AVG]: AggParamsAvg; @@ -209,6 +212,7 @@ export interface AggFunctionsMapping { aggDateHistogram: ReturnType; aggTerms: ReturnType; aggMultiTerms: ReturnType; + aggRareTerms: ReturnType; aggAvg: ReturnType; aggBucketAvg: ReturnType; aggBucketMax: ReturnType; diff --git a/src/plugins/data/public/search/aggs/aggs_service.test.ts b/src/plugins/data/public/search/aggs/aggs_service.test.ts index 4a98a0e7e0ab63..b0e6e0327e6544 100644 --- a/src/plugins/data/public/search/aggs/aggs_service.test.ts +++ b/src/plugins/data/public/search/aggs/aggs_service.test.ts @@ -53,7 +53,7 @@ describe('AggsService - public', () => { test('registers default agg types', () => { service.setup(setupDeps); const start = service.start(startDeps); - expect(start.types.getAll().buckets.length).toBe(15); + expect(start.types.getAll().buckets.length).toBe(16); expect(start.types.getAll().metrics.length).toBe(23); }); @@ -69,7 +69,7 @@ describe('AggsService - public', () => { ); const start = service.start(startDeps); - expect(start.types.getAll().buckets.length).toBe(16); + expect(start.types.getAll().buckets.length).toBe(17); expect(start.types.getAll().buckets.some(({ name }) => name === 'foo')).toBe(true); expect(start.types.getAll().metrics.length).toBe(24); expect(start.types.getAll().metrics.some(({ name }) => name === 'bar')).toBe(true); diff --git a/src/plugins/data_view_editor/public/components/empty_prompts/empty_prompts.tsx b/src/plugins/data_view_editor/public/components/empty_prompts/empty_prompts.tsx index d44e793d4ef491..e5f4e6cec057e6 100644 --- a/src/plugins/data_view_editor/public/components/empty_prompts/empty_prompts.tsx +++ b/src/plugins/data_view_editor/public/components/empty_prompts/empty_prompts.tsx @@ -98,7 +98,7 @@ export const EmptyPrompts: FC = ({ allSources, onCancel, children, loadSo setGoToForm(true)} indexPatternsIntroUrl={docLinks.links.indexPatterns.introduction} - canSaveIndexPattern={application.capabilities.indexPatterns.save as boolean} + canSaveIndexPattern={dataViews.getCanSaveSync()} /> diff --git a/src/plugins/data_view_editor/public/plugin.tsx b/src/plugins/data_view_editor/public/plugin.tsx index 68a0191836291a..a8aa33620c456b 100644 --- a/src/plugins/data_view_editor/public/plugin.tsx +++ b/src/plugins/data_view_editor/public/plugin.tsx @@ -60,9 +60,7 @@ export class DataViewEditorPlugin * @returns boolean */ userPermissions: { - editDataView: () => { - return application.capabilities.management.kibana.indexPatterns; - }, + editDataView: () => dataViews.getCanSaveSync(), }, }; } diff --git a/src/plugins/data_view_field_editor/public/plugin.ts b/src/plugins/data_view_field_editor/public/plugin.ts index c0f09cdace9ba9..3b13bcd82c1109 100644 --- a/src/plugins/data_view_field_editor/public/plugin.ts +++ b/src/plugins/data_view_field_editor/public/plugin.ts @@ -30,10 +30,7 @@ export class IndexPatternFieldEditorPlugin public start(core: CoreStart, plugins: StartPlugins) { const { fieldFormatEditors } = this.formatEditorService.start(); - const { - application: { capabilities }, - http, - } = core; + const { http } = core; const { data, usageCollection, dataViews, fieldFormats } = plugins; const openDeleteModal = getFieldDeleteModalOpener({ core, @@ -53,9 +50,7 @@ export class IndexPatternFieldEditorPlugin }), openDeleteModal, userPermissions: { - editIndexPattern: () => { - return capabilities.management.kibana.indexPatterns; - }, + editIndexPattern: () => dataViews.getCanSaveSync(), }, DeleteRuntimeFieldProvider: getDeleteFieldProvider(openDeleteModal), }; diff --git a/src/plugins/data_view_management/public/components/field_editor/field_editor.test.tsx b/src/plugins/data_view_management/public/components/field_editor/field_editor.test.tsx index 39f8469dc09892..875b21ac52444d 100644 --- a/src/plugins/data_view_management/public/components/field_editor/field_editor.test.tsx +++ b/src/plugins/data_view_management/public/components/field_editor/field_editor.test.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { DataView, DataViewField, DataViewsService } from 'src/plugins/data_views/public'; +import { DataView, DataViewField, DataViewsContract } from 'src/plugins/data_views/public'; import { FieldFormatInstanceType } from 'src/plugins/field_formats/common'; import { findTestSubject } from '@elastic/eui/lib/test'; @@ -95,7 +95,7 @@ const field = { const services = { redirectAway: () => {}, saveIndexPattern: async () => {}, - indexPatternService: {} as DataViewsService, + indexPatternService: {} as DataViewsContract, }; describe('FieldEditor', () => { @@ -202,7 +202,7 @@ describe('FieldEditor', () => { redirectAway: () => {}, indexPatternService: { updateSavedObject: jest.fn(() => Promise.resolve()), - } as unknown as DataViewsService, + } as unknown as DataViewsContract, }, }, mockContext diff --git a/src/plugins/data_view_management/public/management_app/mount_management_section.tsx b/src/plugins/data_view_management/public/management_app/mount_management_section.tsx index 4f8e98d382d37c..1b876e34a42fb6 100644 --- a/src/plugins/data_view_management/public/management_app/mount_management_section.tsx +++ b/src/plugins/data_view_management/public/management_app/mount_management_section.tsx @@ -43,7 +43,7 @@ export async function mountManagementSection( { data, dataViewFieldEditor, dataViewEditor, dataViews, fieldFormats }, indexPatternManagementStart, ] = await getStartServices(); - const canSave = Boolean(application.capabilities.indexPatterns.save); + const canSave = dataViews.getCanSaveSync(); if (!canSave) { chrome.setBadge(readOnlyBadge); diff --git a/src/plugins/data_views/common/data_views/data_views.test.ts b/src/plugins/data_views/common/data_views/data_views.test.ts index 7ed3e1f2c5434a..7f566464add2ff 100644 --- a/src/plugins/data_views/common/data_views/data_views.test.ts +++ b/src/plugins/data_views/common/data_views/data_views.test.ts @@ -12,6 +12,7 @@ import { fieldFormatsMock } from '../../../field_formats/common/mocks'; import { UiSettingsCommon, SavedObjectsClientCommon, SavedObject } from '../types'; import { stubbedSavedObjectIndexPattern } from '../data_view.stub'; +import { FLEET_ASSETS_TO_IGNORE } from '../constants'; const createFieldsFetcher = jest.fn().mockImplementation(() => ({ getFieldsForWildcard: jest.fn().mockImplementation(() => { @@ -54,7 +55,7 @@ describe('IndexPatterns', () => { const uiSettings = { get: () => Promise.resolve(false), getAll: () => {}, - set: () => () => {}, + set: jest.fn(), remove: jest.fn(), } as any as UiSettingsCommon; const indexPatternObj = { id: 'id', version: 'a', attributes: { title: 'title' } }; @@ -308,9 +309,15 @@ describe('IndexPatterns', () => { }); describe('getDefaultDataView', () => { - test('gets default data view', async () => { + beforeEach(() => { indexPatterns.clearCache(); - jest.clearAllMocks(); + jest.resetAllMocks(); + }); + + test('gets default data view', async () => { + uiSettings.get = jest.fn().mockResolvedValue(indexPatternObj.id); + savedObjectsClient.find = jest.fn().mockResolvedValue([indexPatternObj]); + savedObjectsClient.get = jest.fn().mockResolvedValue(indexPatternObj); expect(await indexPatterns.getDefaultDataView()).toBeInstanceOf(DataView); // make sure we're not pulling from cache @@ -319,22 +326,15 @@ describe('IndexPatterns', () => { }); test('returns undefined if no data views exist', async () => { - savedObjectsClient.find = jest.fn( - () => Promise.resolve([]) as Promise>> - ); - savedObjectsClient.get = jest.fn(() => Promise.resolve(undefined) as Promise); - indexPatterns.clearCache(); - expect(await indexPatterns.getDefaultDataView()).toBeUndefined(); + uiSettings.get = jest.fn().mockResolvedValue('foo'); + savedObjectsClient.find = jest.fn().mockResolvedValue([]); + + expect(await indexPatterns.getDefaultDataView()).toBeNull(); }); test("default doesn't exist, grabs another data view", async () => { - indexPatterns.clearCache(); - jest.clearAllMocks(); - uiSettings.get = jest.fn().mockResolvedValue(['bar']); - - savedObjectsClient.find = jest.fn( - () => Promise.resolve([indexPatternObj]) as Promise>> - ); + uiSettings.get = jest.fn().mockResolvedValue('foo'); + savedObjectsClient.find = jest.fn().mockResolvedValue([indexPatternObj]); savedObjectsClient.get = jest.fn().mockResolvedValue({ id: 'bar', @@ -349,6 +349,68 @@ describe('IndexPatterns', () => { expect(savedObjectsClient.get).toBeCalledTimes(1); expect(savedObjectsClient.find).toBeCalledTimes(1); expect(uiSettings.remove).toBeCalledTimes(1); + expect(uiSettings.set).toBeCalledTimes(1); + }); + + test("when default exists, it isn't overridden with first data view", async () => { + uiSettings.get = jest.fn().mockResolvedValue('id2'); + + savedObjectsClient.find = jest.fn().mockResolvedValue([ + { id: 'id1', version: 'a', attributes: { title: 'title' } }, + { id: 'id2', version: 'a', attributes: { title: 'title' } }, + ]); + + savedObjectsClient.get = jest + .fn() + .mockImplementation((type: string, id: string) => + Promise.resolve({ id, version: 'a', attributes: { title: 'title' } }) + ); + + const defaultDataViewResult = await indexPatterns.getDefaultDataView(); + expect(defaultDataViewResult).toBeInstanceOf(DataView); + expect(defaultDataViewResult?.id).toBe('id2'); + + // make sure we're not pulling from cache + expect(savedObjectsClient.get).toBeCalledTimes(1); + expect(savedObjectsClient.find).toBeCalledTimes(1); + expect(uiSettings.remove).toBeCalledTimes(0); + expect(uiSettings.set).toBeCalledTimes(0); + }); + + test('when setting default it prefers user created data views', async () => { + savedObjectsClient.find = jest.fn().mockResolvedValue([ + { + id: 'id1', + version: 'a', + attributes: { title: FLEET_ASSETS_TO_IGNORE.LOGS_INDEX_PATTERN }, + }, + { + id: 'id2', + version: 'a', + attributes: { title: FLEET_ASSETS_TO_IGNORE.METRICS_INDEX_PATTERN }, + }, + { + id: 'id3', + version: 'a', + attributes: { title: 'user-data-view' }, + }, + ]); + + savedObjectsClient.get = jest + .fn() + .mockImplementation((type: string, id: string) => + Promise.resolve({ id, version: 'a', attributes: { title: 'title' } }) + ); + + const defaultDataViewResult = await indexPatterns.getDefaultDataView(); + expect(defaultDataViewResult).toBeInstanceOf(DataView); + expect(defaultDataViewResult?.id).toBe('id3'); + + // make sure we're not pulling from cache + expect(savedObjectsClient.get).toBeCalledTimes(1); + expect(savedObjectsClient.find).toBeCalledTimes(1); + expect(uiSettings.remove).toBeCalledTimes(0); + expect(uiSettings.set).toBeCalledTimes(1); }); }); }); diff --git a/src/plugins/data_views/common/data_views/data_views.ts b/src/plugins/data_views/common/data_views/data_views.ts index 1024dc29267862..26e1683b600067 100644 --- a/src/plugins/data_views/common/data_views/data_views.ts +++ b/src/plugins/data_views/common/data_views/data_views.ts @@ -11,7 +11,7 @@ import { i18n } from '@kbn/i18n'; import { PublicMethodsOf } from '@kbn/utility-types'; import { castEsToKbnFieldTypeName } from '@kbn/field-types'; -import { DATA_VIEW_SAVED_OBJECT_TYPE, SavedObjectsClientCommon } from '..'; +import { DATA_VIEW_SAVED_OBJECT_TYPE, FLEET_ASSETS_TO_IGNORE, SavedObjectsClientCommon } from '..'; import { createDataViewCache } from '.'; import type { RuntimeField } from '../types'; @@ -59,7 +59,7 @@ export interface DataViewListItem { export type IndexPatternListItem = DataViewListItem; -interface IndexPatternsServiceDeps { +export interface DataViewsServiceDeps { uiSettings: UiSettingsCommon; savedObjectsClient: SavedObjectsClientCommon; apiClient: IDataViewsApiClient; @@ -79,7 +79,7 @@ export class DataViewsService { private onNotification: OnNotification; private onError: OnError; private dataViewCache: ReturnType; - private getCanSave: () => Promise; + public getCanSave: () => Promise; /** * @deprecated Use `getDefaultDataView` instead (when loading data view) and handle @@ -96,7 +96,7 @@ export class DataViewsService { onError, onRedirectNoIndexPattern = () => {}, getCanSave = () => Promise.resolve(false), - }: IndexPatternsServiceDeps) { + }: DataViewsServiceDeps) { this.apiClient = apiClient; this.config = uiSettings; this.savedObjectsClient = savedObjectsClient; @@ -695,29 +695,40 @@ export class DataViewsService { } /** - * Returns the default data view as an object. If no default is found, or it is missing + * Returns the default data view as an object. + * If no default is found, or it is missing * another data view is selected as default and returned. + * If no possible data view found to become a default returns null + * * @returns default data view */ + async getDefaultDataView(): Promise { + const patterns = await this.getIdsWithTitle(); + let defaultId: string | undefined = await this.config.get('defaultIndex'); + const exists = defaultId ? patterns.some((pattern) => pattern.id === defaultId) : false; - async getDefaultDataView() { - const patterns = await this.getIds(); - let defaultId = await this.config.get('defaultIndex'); - let defined = !!defaultId; - const exists = patterns.includes(defaultId); - - if (defined && !exists) { + if (defaultId && !exists) { await this.config.remove('defaultIndex'); - defaultId = defined = false; + defaultId = undefined; } - if (patterns.length >= 1 && (await this.hasUserDataView().catch(() => true))) { - defaultId = patterns[0]; + if (!defaultId && patterns.length >= 1 && (await this.hasUserDataView().catch(() => true))) { + // try to set first user created data view as default, + // otherwise fallback to any data view + const userDataViews = patterns.filter( + (pattern) => + pattern.title !== FLEET_ASSETS_TO_IGNORE.LOGS_INDEX_PATTERN && + pattern.title !== FLEET_ASSETS_TO_IGNORE.METRICS_INDEX_PATTERN + ); + + defaultId = userDataViews[0]?.id ?? patterns[0].id; await this.config.set('defaultIndex', defaultId); } if (defaultId) { return this.get(defaultId); + } else { + return null; } } } diff --git a/src/plugins/data_views/common/data_views/ensure_default_data_view.ts b/src/plugins/data_views/common/data_views/ensure_default_data_view.ts index 2975ddbd107c44..42e984a3fa88a9 100644 --- a/src/plugins/data_views/common/data_views/ensure_default_data_view.ts +++ b/src/plugins/data_views/common/data_views/ensure_default_data_view.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -import { includes } from 'lodash'; import { DataViewsContract } from './data_views'; import { UiSettingsCommon } from '../types'; @@ -21,26 +20,7 @@ export const createEnsureDefaultDataView = ( * one otherwise. */ return async function ensureDefaultDataView(this: DataViewsContract) { - const patterns = await this.getIds(); - let defaultId = await uiSettings.get('defaultIndex'); - let defined = !!defaultId; - const exists = includes(patterns, defaultId); - - if (defined && !exists) { - await uiSettings.remove('defaultIndex'); - defaultId = defined = false; - } - - if (defined) { - return; - } - - // If there is any user index pattern created, set the first as default - // if there is 0 patterns, then don't even call `hasUserDataView()` - if (patterns.length >= 1 && (await this.hasUserDataView().catch(() => true))) { - defaultId = patterns[0]; - await uiSettings.set('defaultIndex', defaultId); - } else { + if (!(await this.getDefaultDataView())) { return onRedirectNoDefaultView(); } }; diff --git a/src/plugins/data_views/common/index.ts b/src/plugins/data_views/common/index.ts index 25d2ddd874256c..7253091e8115b6 100644 --- a/src/plugins/data_views/common/index.ts +++ b/src/plugins/data_views/common/index.ts @@ -59,7 +59,11 @@ export type { IndexPatternsContract, DataViewsContract } from './data_views'; export { IndexPatternsService, DataViewsService } from './data_views'; export type { IndexPatternListItem, DataViewListItem, TimeBasedDataView } from './data_views'; export { IndexPattern, DataView } from './data_views'; -export { DuplicateDataViewError, DataViewSavedObjectConflictError } from './errors'; +export { + DuplicateDataViewError, + DataViewSavedObjectConflictError, + DataViewInsufficientAccessError, +} from './errors'; export type { IndexPatternExpressionType, IndexPatternLoadStartDependencies, diff --git a/src/plugins/data_views/public/data_views_service_public.ts b/src/plugins/data_views/public/data_views_service_public.ts new file mode 100644 index 00000000000000..d89c4e37e872d4 --- /dev/null +++ b/src/plugins/data_views/public/data_views_service_public.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { DataViewsService } from '.'; + +import { DataViewsServiceDeps } from '../common/data_views/data_views'; + +interface DataViewsServicePublicDeps extends DataViewsServiceDeps { + getCanSaveSync: () => boolean; +} + +export class DataViewsServicePublic extends DataViewsService { + public getCanSaveSync: () => boolean; + + constructor(deps: DataViewsServicePublicDeps) { + super(deps); + this.getCanSaveSync = deps.getCanSaveSync; + } +} diff --git a/src/plugins/data_views/public/index.ts b/src/plugins/data_views/public/index.ts index b15e6da7d940b3..9cb07d4f3c54f5 100644 --- a/src/plugins/data_views/public/index.ts +++ b/src/plugins/data_views/public/index.ts @@ -18,7 +18,7 @@ export { onRedirectNoIndexPattern } from './data_views'; export type { IIndexPatternFieldList, TypeMeta } from '../common'; export { IndexPatternField, DataViewField, DataViewType, META_FIELDS } from '../common'; -export type { IndexPatternsContract, DataViewsContract } from './data_views'; +export type { IndexPatternsContract } from './data_views'; export type { DataViewListItem } from './data_views'; export { IndexPatternsService, @@ -40,7 +40,11 @@ export function plugin() { return new DataViewsPublicPlugin(); } -export type { DataViewsPublicPluginSetup, DataViewsPublicPluginStart } from './types'; +export type { + DataViewsPublicPluginSetup, + DataViewsPublicPluginStart, + DataViewsContract, +} from './types'; // Export plugin after all other imports export type { DataViewsPublicPlugin as DataViewsPlugin }; diff --git a/src/plugins/data_views/public/plugin.ts b/src/plugins/data_views/public/plugin.ts index bf092d3fae1771..c2d0a70502b22b 100644 --- a/src/plugins/data_views/public/plugin.ts +++ b/src/plugins/data_views/public/plugin.ts @@ -16,13 +16,14 @@ import { } from './types'; import { - DataViewsService, onRedirectNoIndexPattern, DataViewsApiClient, UiSettingsPublicToCommon, SavedObjectsClientPublicToCommon, } from '.'; +import { DataViewsServicePublic } from './data_views_service_public'; + export class DataViewsPublicPlugin implements Plugin< @@ -47,7 +48,7 @@ export class DataViewsPublicPlugin ): DataViewsPublicPluginStart { const { uiSettings, http, notifications, savedObjects, theme, overlays, application } = core; - return new DataViewsService({ + return new DataViewsServicePublic({ uiSettings: new UiSettingsPublicToCommon(uiSettings), savedObjectsClient: new SavedObjectsClientPublicToCommon(savedObjects.client), apiClient: new DataViewsApiClient(http), @@ -63,6 +64,7 @@ export class DataViewsPublicPlugin theme ), getCanSave: () => Promise.resolve(application.capabilities.indexPatterns.save === true), + getCanSaveSync: () => application.capabilities.indexPatterns.save === true, }); } diff --git a/src/plugins/data_views/public/types.ts b/src/plugins/data_views/public/types.ts index 20b1cbaf090fa5..e012695dfc6b59 100644 --- a/src/plugins/data_views/public/types.ts +++ b/src/plugins/data_views/public/types.ts @@ -26,7 +26,13 @@ export interface DataViewsPublicStartDependencies { // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface DataViewsPublicPluginSetup {} +export interface DataViewsServicePublic extends DataViewsService { + getCanSaveSync: () => boolean; +} + +export type DataViewsContract = PublicMethodsOf; + /** - * Data plugin public Start contract + * Data views plugin public Start contract */ -export type DataViewsPublicPluginStart = PublicMethodsOf; +export type DataViewsPublicPluginStart = PublicMethodsOf; diff --git a/src/plugins/data_views/server/register_index_pattern_usage_collection.ts b/src/plugins/data_views/server/register_index_pattern_usage_collection.ts index 6af2f6df6725e9..5b42db0f75a4d3 100644 --- a/src/plugins/data_views/server/register_index_pattern_usage_collection.ts +++ b/src/plugins/data_views/server/register_index_pattern_usage_collection.ts @@ -8,7 +8,7 @@ import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; import { StartServicesAccessor } from 'src/core/server'; -import { DataViewsService } from '../common'; +import { DataViewsContract } from '../common'; import { SavedObjectsClient } from '../../../core/server'; import { DataViewsServerPluginStartDependencies, DataViewsServerPluginStart } from './types'; @@ -57,7 +57,7 @@ export const updateMax = (currentMax: number | undefined, newVal: number): numbe } }; -export async function getIndexPatternTelemetry(indexPatterns: DataViewsService) { +export async function getIndexPatternTelemetry(indexPatterns: DataViewsContract) { const ids = await indexPatterns.getIds(); const countSummaryDefaults: CountSummary = { diff --git a/src/plugins/discover/.storybook/discover.webpack.ts b/src/plugins/discover/.storybook/discover.webpack.ts new file mode 100644 index 00000000000000..7b978a4e7110ef --- /dev/null +++ b/src/plugins/discover/.storybook/discover.webpack.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import { defaultConfig } from '@kbn/storybook'; + +export const discoverStorybookConfig = { + ...defaultConfig, + stories: ['../**/*.stories.tsx'], + addons: [...(defaultConfig.addons || []), './addon/target/register'], +}; diff --git a/src/plugins/discover/.storybook/main.js b/src/plugins/discover/.storybook/main.js new file mode 100644 index 00000000000000..85ea71a7f08f76 --- /dev/null +++ b/src/plugins/discover/.storybook/main.js @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import { discoverStorybookConfig } from './discover.webpack'; + +module.exports = discoverStorybookConfig; diff --git a/src/plugins/discover/public/__mocks__/index_patterns.ts b/src/plugins/discover/public/__mocks__/index_patterns.ts index 0e665890fedbad..0d6f3fa7236820 100644 --- a/src/plugins/discover/public/__mocks__/index_patterns.ts +++ b/src/plugins/discover/public/__mocks__/index_patterns.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { DataViewsService } from '../../../data/common'; +import { DataViewsContract } from '../../../data_views/public'; import { indexPatternMock } from './index_pattern'; export const indexPatternsMock = { @@ -21,4 +21,4 @@ export const indexPatternsMock = { } }, updateSavedObject: jest.fn(), -} as unknown as jest.Mocked; +} as unknown as jest.Mocked; diff --git a/src/plugins/discover/public/application/main/components/chart/discover_chart.tsx b/src/plugins/discover/public/application/main/components/chart/discover_chart.tsx index abda176ab7b760..0c3d83e256525d 100644 --- a/src/plugins/discover/public/application/main/components/chart/discover_chart.tsx +++ b/src/plugins/discover/public/application/main/components/chart/discover_chart.tsx @@ -18,7 +18,7 @@ import { import { i18n } from '@kbn/i18n'; import { HitsCounter } from '../hits_counter'; import { SavedSearch } from '../../../../services/saved_searches'; -import { AppState, GetStateReturn } from '../../services/discover_state'; +import { GetStateReturn } from '../../services/discover_state'; import { DiscoverHistogram } from './histogram'; import { DataCharts$, DataTotalHits$ } from '../../utils/use_saved_search'; import { DiscoverServices } from '../../../../build_services'; @@ -35,22 +35,24 @@ export function DiscoverChart({ savedSearchDataChart$, savedSearchDataTotalHits$, services, - state, stateContainer, isTimeBased, viewMode, setDiscoverViewMode, + hideChart, + interval, }: { resetSavedSearch: () => void; savedSearch: SavedSearch; savedSearchDataChart$: DataCharts$; savedSearchDataTotalHits$: DataTotalHits$; services: DiscoverServices; - state: AppState; stateContainer: GetStateReturn; isTimeBased: boolean; viewMode: VIEW_MODE; setDiscoverViewMode: (viewMode: VIEW_MODE) => void; + hideChart?: boolean; + interval?: string; }) { const [showChartOptionsPopover, setShowChartOptionsPopover] = useState(false); const showViewModeToggle = services.uiSettings.get(SHOW_FIELD_STATISTICS) ?? false; @@ -74,14 +76,14 @@ export function DiscoverChart({ if (chartRef.current.moveFocus && chartRef.current.element) { chartRef.current.element.focus(); } - }, [state.hideChart]); + }, [hideChart]); const toggleHideChart = useCallback(() => { - const newHideChart = !state.hideChart; - stateContainer.setAppState({ hideChart: newHideChart }); + const newHideChart = !hideChart; chartRef.current.moveFocus = !newHideChart; storage.set(CHART_HIDDEN_KEY, newHideChart); - }, [state.hideChart, stateContainer, storage]); + stateContainer.setAppState({ hideChart: newHideChart }); + }, [hideChart, stateContainer, storage]); const timefilterUpdateHandler = useCallback( (ranges: { from: number; to: number }) => { @@ -94,11 +96,11 @@ export function DiscoverChart({ [data] ); const panels = useChartPanels( - state, - savedSearchDataChart$, toggleHideChart, - (interval) => stateContainer.setAppState({ interval }), - () => setShowChartOptionsPopover(false) + (newInterval) => stateContainer.setAppState({ interval: newInterval }), + () => setShowChartOptionsPopover(false), + hideChart, + interval ); return ( @@ -150,7 +152,7 @@ export function DiscoverChart({ )} - {isTimeBased && !state.hideChart && ( + {isTimeBased && !hideChart && (
(chartRef.current.element = element)} diff --git a/src/plugins/discover/public/application/main/components/chart/use_chart_panels.test.ts b/src/plugins/discover/public/application/main/components/chart/use_chart_panels.test.ts index 20f19ec4719e98..fc6adcd3dd598c 100644 --- a/src/plugins/discover/public/application/main/components/chart/use_chart_panels.test.ts +++ b/src/plugins/discover/public/application/main/components/chart/use_chart_panels.test.ts @@ -9,25 +9,12 @@ import { renderHook } from '@testing-library/react-hooks'; import { useChartPanels } from './use_chart_panels'; -import { AppState } from '../../services/discover_state'; -import { BehaviorSubject } from 'rxjs'; -import { DataCharts$ } from '../../utils/use_saved_search'; -import { FetchStatus } from '../../../types'; import { EuiContextMenuPanelDescriptor } from '@elastic/eui'; describe('test useChartPanels', () => { test('useChartsPanel when hideChart is true', async () => { - const charts$ = new BehaviorSubject({ - fetchStatus: FetchStatus.COMPLETE, - }) as DataCharts$; const { result } = renderHook(() => { - return useChartPanels( - { hideChart: true, interval: 'auto' } as AppState, - charts$, - jest.fn(), - jest.fn(), - jest.fn() - ); + return useChartPanels(jest.fn(), jest.fn(), jest.fn(), true, 'auto'); }); const panels: EuiContextMenuPanelDescriptor[] = result.current; const panel0: EuiContextMenuPanelDescriptor = result.current[0]; @@ -35,17 +22,8 @@ describe('test useChartPanels', () => { expect(panel0!.items![0].icon).toBe('eye'); }); test('useChartsPanel when hideChart is false', async () => { - const charts$ = new BehaviorSubject({ - fetchStatus: FetchStatus.COMPLETE, - }) as DataCharts$; const { result } = renderHook(() => { - return useChartPanels( - { hideChart: false, interval: 'auto' } as AppState, - charts$, - jest.fn(), - jest.fn(), - jest.fn() - ); + return useChartPanels(jest.fn(), jest.fn(), jest.fn(), false, 'auto'); }); const panels: EuiContextMenuPanelDescriptor[] = result.current; const panel0: EuiContextMenuPanelDescriptor = result.current[0]; diff --git a/src/plugins/discover/public/application/main/components/chart/use_chart_panels.ts b/src/plugins/discover/public/application/main/components/chart/use_chart_panels.ts index cf09506c4f552f..30b3089ad2f2cd 100644 --- a/src/plugins/discover/public/application/main/components/chart/use_chart_panels.ts +++ b/src/plugins/discover/public/application/main/components/chart/use_chart_panels.ts @@ -11,17 +11,14 @@ import type { EuiContextMenuPanelDescriptor, } from '@elastic/eui'; import { search } from '../../../../../../data/public'; -import { AppState } from '../../services/discover_state'; -import { DataCharts$ } from '../../utils/use_saved_search'; export function useChartPanels( - state: AppState, - savedSearchDataChart$: DataCharts$, toggleHideChart: () => void, onChangeInterval: (value: string) => void, - closePopover: () => void + closePopover: () => void, + hideChart?: boolean, + interval?: string ) { - const { interval, hideChart } = state; const selectedOptionIdx = search.aggs.intervalOptions.findIndex((opt) => opt.val === interval); const intervalDisplay = selectedOptionIdx > -1 diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index 881d097f314a8b..e98605326cc32c 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -304,7 +304,6 @@ export function DiscoverLayout({ > diff --git a/src/plugins/discover/public/application/main/components/sidebar/__stories__/discover_field_details.stories.tsx b/src/plugins/discover/public/application/main/components/sidebar/__stories__/discover_field_details.stories.tsx new file mode 100644 index 00000000000000..cecf02c0166762 --- /dev/null +++ b/src/plugins/discover/public/application/main/components/sidebar/__stories__/discover_field_details.stories.tsx @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { storiesOf } from '@storybook/react'; +import React from 'react'; +import { KBN_FIELD_TYPES } from '@kbn/field-types'; +import { DiscoverFieldDetails } from '../discover_field_details'; +import { DataView, IndexPatternField } from '../../../../../../../data_views/common'; +import { fieldSpecMap } from './fields'; +import { numericField as field } from './fields'; +import { Bucket } from '../types'; + +const buckets = [ + { count: 1, display: 'Stewart', percent: 50.0, value: 'Stewart' }, + { count: 1, display: 'Perry', percent: 50.0, value: 'Perry' }, +] as Bucket[]; +const details = { buckets, error: '', exists: 1, total: 2, columns: [] }; + +const fieldFormatInstanceType = {}; +const defaultMap = { + [KBN_FIELD_TYPES.NUMBER]: { id: KBN_FIELD_TYPES.NUMBER, params: {} }, +}; + +const fieldFormat = { + getByFieldType: (fieldType: KBN_FIELD_TYPES) => { + return [fieldFormatInstanceType]; + }, + getDefaultConfig: () => { + return defaultMap.number; + }, + defaultMap, +}; + +const scriptedField = new IndexPatternField({ + name: 'machine.os', + type: 'string', + esTypes: ['long'], + count: 10, + scripted: true, + searchable: true, + aggregatable: true, + readFromDocValues: true, +}); + +const dataView = new DataView({ + spec: { + id: 'logstash-*', + fields: fieldSpecMap, + title: 'logstash-*', + timeFieldName: '@timestamp', + }, + metaFields: ['_id', '_type', '_source'], + shortDotsEnable: false, + // @ts-expect-error + fieldFormats: fieldFormat, +}); + +storiesOf('components/sidebar/DiscoverFieldDetails', module) + .add('default', () => ( +
+ { + alert('On add filter clicked'); + }} + /> +
+ )) + .add('scripted', () => ( +
+ {}} + /> +
+ )) + .add('error', () => ( + {}} + /> + )); diff --git a/src/plugins/discover/public/application/main/components/sidebar/__stories__/discover_field_visualize.stories.tsx b/src/plugins/discover/public/application/main/components/sidebar/__stories__/discover_field_visualize.stories.tsx new file mode 100644 index 00000000000000..397ada8da109de --- /dev/null +++ b/src/plugins/discover/public/application/main/components/sidebar/__stories__/discover_field_visualize.stories.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { storiesOf } from '@storybook/react'; +import React from 'react'; +import { DiscoverFieldVisualizeInner } from '../discover_field_visualize_inner'; +import { numericField as field } from './fields'; + +const visualizeInfo = { + href: 'http://localhost:9001/', + field, +}; + +const handleVisualizeLinkClick = () => { + alert('Clicked'); +}; + +storiesOf('components/sidebar/DiscoverFieldVisualizeInner', module).add('default', () => ( + +)); diff --git a/src/plugins/discover/public/application/main/components/sidebar/__stories__/fields.ts b/src/plugins/discover/public/application/main/components/sidebar/__stories__/fields.ts new file mode 100644 index 00000000000000..950ea5b328e6f8 --- /dev/null +++ b/src/plugins/discover/public/application/main/components/sidebar/__stories__/fields.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { FieldSpec, IndexPatternField } from '../../../../../../../data_views/common'; + +export const fieldSpecMap: Record = { + 'machine.os': { + name: 'machine.os', + esTypes: ['text'], + type: 'string', + aggregatable: false, + searchable: false, + }, + 'machine.os.raw': { + name: 'machine.os.raw', + type: 'string', + esTypes: ['keyword'], + aggregatable: true, + searchable: true, + }, + 'not.filterable': { + name: 'not.filterable', + type: 'string', + esTypes: ['text'], + aggregatable: true, + searchable: false, + }, + bytes: { + name: 'bytes', + type: 'number', + esTypes: ['long'], + aggregatable: true, + searchable: true, + }, +}; + +export const numericField = new IndexPatternField({ + name: 'bytes', + type: 'number', + esTypes: ['long'], + count: 10, + scripted: false, + searchable: true, + aggregatable: true, + readFromDocValues: true, +}); diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_field_visualize.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_field_visualize.tsx index b0e10afde9c561..fb845828d62abb 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_field_visualize.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_field_visualize.tsx @@ -7,14 +7,13 @@ */ import React, { useEffect, useState } from 'react'; -import { EuiButton } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; import { METRIC_TYPE, UiCounterMetricType } from '@kbn/analytics'; import type { DataView, DataViewField } from 'src/plugins/data/common'; import { triggerVisualizeActions, VisualizeInformation } from './lib/visualize_trigger_utils'; import type { FieldDetails } from './types'; import { getVisualizeInformation } from './lib/visualize_trigger_utils'; +import { DiscoverFieldVisualizeInner } from './discover_field_visualize_inner'; interface Props { field: DataViewField; @@ -46,19 +45,11 @@ export const DiscoverFieldVisualize: React.FC = React.memo( }; return ( - // eslint-disable-next-line @elastic/eui/href-or-on-click - - - + ); } ); diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_field_visualize_inner.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_field_visualize_inner.tsx new file mode 100644 index 00000000000000..f4c7205f25026f --- /dev/null +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_field_visualize_inner.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { EuiButton } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { IndexPatternField } from '../../../../../../data_views/common'; +import { VisualizeInformation } from './lib/visualize_trigger_utils'; + +interface DiscoverFieldVisualizeInnerProps { + field: IndexPatternField; + visualizeInfo: VisualizeInformation; + handleVisualizeLinkClick: (event: React.MouseEvent) => void; +} + +export const DiscoverFieldVisualizeInner = (props: DiscoverFieldVisualizeInnerProps) => { + const { field, visualizeInfo, handleVisualizeLinkClick } = props; + return ( + // eslint-disable-next-line @elastic/eui/href-or-on-click + + + + ); +}; diff --git a/src/plugins/discover/public/application/main/utils/get_state_defaults.ts b/src/plugins/discover/public/application/main/utils/get_state_defaults.ts index 4694bec4057b07..10ef04ca8643ef 100644 --- a/src/plugins/discover/public/application/main/utils/get_state_defaults.ts +++ b/src/plugins/discover/public/application/main/utils/get_state_defaults.ts @@ -48,7 +48,7 @@ export function getStateDefaults({ const query = searchSource.getField('query') || data.query.queryString.getDefaultQuery(); const sort = getSortArray(savedSearch.sort ?? [], indexPattern!); const columns = getDefaultColumns(savedSearch, config); - const chartHidden = Boolean(storage.get(CHART_HIDDEN_KEY)); + const chartHidden = storage.get(CHART_HIDDEN_KEY); const defaultState = { query, @@ -59,7 +59,7 @@ export function getStateDefaults({ index: indexPattern?.id, interval: 'auto', filters: cloneDeep(searchSource.getOwnField('filter')), - hideChart: chartHidden ? chartHidden : undefined, + hideChart: typeof chartHidden === 'boolean' ? chartHidden : undefined, viewMode: undefined, hideAggregatedPreview: undefined, savedQuery: undefined, diff --git a/src/plugins/discover/public/application/main/utils/use_discover_state.test.ts b/src/plugins/discover/public/application/main/utils/use_discover_state.test.ts index bac6d085acf05b..e77ea5787705ff 100644 --- a/src/plugins/discover/public/application/main/utils/use_discover_state.test.ts +++ b/src/plugins/discover/public/application/main/utils/use_discover_state.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { renderHook, act } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react-hooks'; import { createSearchSessionMock } from '../../../__mocks__/search_session'; import { discoverServiceMock } from '../../../__mocks__/services'; import { savedSearchMock } from '../../../__mocks__/saved_search'; @@ -42,50 +42,6 @@ describe('test useDiscoverState', () => { }); expect(result.current.state.index).toBe(indexPatternMock.id); expect(result.current.stateContainer).toBeInstanceOf(Object); - expect(result.current.setState).toBeInstanceOf(Function); expect(result.current.searchSource).toBeInstanceOf(SearchSource); }); - - test('setState', async () => { - const { history } = createSearchSessionMock(); - - const { result } = renderHook(() => { - return useDiscoverState({ - services: discoverServiceMock, - history, - savedSearch: savedSearchMock, - setExpandedDoc: jest.fn(), - }); - }); - await act(async () => { - result.current.setState({ columns: ['123'] }); - }); - expect(result.current.state.columns).toEqual(['123']); - }); - - test('resetSavedSearch', async () => { - const { history } = createSearchSessionMock(); - - const { result, waitForValueToChange } = renderHook(() => { - return useDiscoverState({ - services: discoverServiceMock, - history, - savedSearch: savedSearchMock, - setExpandedDoc: jest.fn(), - }); - }); - - const initialColumns = result.current.state.columns; - await act(async () => { - result.current.setState({ columns: ['123'] }); - }); - expect(result.current.state.columns).toEqual(['123']); - - result.current.resetSavedSearch('the-saved-search-id'); - await waitForValueToChange(() => { - return result.current.state; - }); - - expect(result.current.state.columns).toEqual(initialColumns); - }); }); diff --git a/src/plugins/discover/public/application/main/utils/use_discover_state.ts b/src/plugins/discover/public/application/main/utils/use_discover_state.ts index f5270e9f306df3..baf0195c4539c0 100644 --- a/src/plugins/discover/public/application/main/utils/use_discover_state.ts +++ b/src/plugins/discover/public/application/main/utils/use_discover_state.ts @@ -99,8 +99,13 @@ export function useDiscoverState({ useNewFieldsApi, }); + /** + * Sync URL state with local app state on saved search load + * or dataView / savedSearch switch + */ useEffect(() => { const stopSync = stateContainer.initializeAndSync(indexPattern, filterManager, data); + setState(stateContainer.appStateContainer.getState()); return () => stopSync(); }, [stateContainer, filterManager, data, indexPattern]); @@ -207,21 +212,6 @@ export function useDiscoverState({ [refetch$, searchSessionManager] ); - useEffect(() => { - if (!savedSearch || !savedSearch.id) { - return; - } - // handling pushing to state of a persisted saved object - const newAppState = getStateDefaults({ - config, - data, - savedSearch, - storage, - }); - stateContainer.replaceUrlAppState(newAppState); - setState(newAppState); - }, [config, data, savedSearch, reset, stateContainer, storage]); - /** * Trigger data fetching on indexPattern or savedSearch changes */ diff --git a/src/plugins/discover/public/components/discover_grid/get_render_cell_value.test.tsx b/src/plugins/discover/public/components/discover_grid/get_render_cell_value.test.tsx index a102622402d026..4479e051b1f264 100644 --- a/src/plugins/discover/public/components/discover_grid/get_render_cell_value.test.tsx +++ b/src/plugins/discover/public/components/discover_grid/get_render_cell_value.test.tsx @@ -600,4 +600,64 @@ describe('Discover grid cell rendering', function () { ); expect(component.html()).toMatchInlineSnapshot(`"-"`); }); + + it('renders unmapped fields correctly', () => { + (indexPatternMock.getFieldByName as jest.Mock).mockReturnValueOnce(undefined); + const rowsFieldsUnmapped: ElasticSearchHit[] = [ + { + _id: '1', + _index: 'test', + _score: 1, + _source: undefined, + fields: { unmapped: ['.gz'] }, + highlight: { + extension: ['@kibana-highlighted-field.gz@/kibana-highlighted-field'], + }, + }, + ]; + const DiscoverGridCellValue = getRenderCellValueFn( + indexPatternMock, + rowsFieldsUnmapped, + rowsFieldsUnmapped.map(flatten), + true, + ['unmapped'], + 100 + ); + const component = shallow( + + ); + expect(component).toMatchInlineSnapshot(` + + .gz + + `); + + const componentWithDetails = shallow( + + ); + expect(componentWithDetails).toMatchInlineSnapshot(` + + `); + }); }); diff --git a/src/plugins/discover/public/components/discover_grid/get_render_cell_value.tsx b/src/plugins/discover/public/components/discover_grid/get_render_cell_value.tsx index 2a573bdb2415ef..e56c3ef2b699b1 100644 --- a/src/plugins/discover/public/components/discover_grid/get_render_cell_value.tsx +++ b/src/plugins/discover/public/components/discover_grid/get_render_cell_value.tsx @@ -169,10 +169,15 @@ export const getRenderCellValueFn = if (!field?.type && rowFlattened && typeof rowFlattened[columnId] === 'object') { if (isDetails) { // nicely formatted JSON for the expanded view - return {JSON.stringify(rowFlattened[columnId], null, 2)}; + return ( + } + width={defaultMonacoEditorWidth} + /> + ); } - return {JSON.stringify(rowFlattened[columnId])}; + return <>{formatFieldValue(rowFlattened[columnId], row, indexPattern, field)}; } return ( diff --git a/src/plugins/discover/public/components/field_name/__stories__/field_name.stories.tsx b/src/plugins/discover/public/components/field_name/__stories__/field_name.stories.tsx new file mode 100644 index 00000000000000..91ef279405b619 --- /dev/null +++ b/src/plugins/discover/public/components/field_name/__stories__/field_name.stories.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { storiesOf } from '@storybook/react'; +import React from 'react'; +import { EuiFlexGroup } from '@elastic/eui'; +import { FieldName } from '../field_name'; +import { IndexPatternField } from '../../../../../data_views/common'; + +const field = new IndexPatternField({ + name: 'bytes', + type: 'number', + esTypes: ['long'], + count: 10, + scripted: false, + searchable: true, + aggregatable: true, + readFromDocValues: true, +}); + +const renderFieldName = (fldName: {} | null | undefined) => { + return ( + + {fldName} + + ); +}; + +storiesOf('components/FieldName/FieldNameStories', module) + .add('default', () => renderFieldName()) + .add('with field type', () => + renderFieldName() + ) + .add('with field mapping', () => + renderFieldName( + + ) + ); diff --git a/src/plugins/discover/public/utils/popularize_field.test.ts b/src/plugins/discover/public/utils/popularize_field.test.ts index 084a147b5c9b68..bf81163463b873 100644 --- a/src/plugins/discover/public/utils/popularize_field.test.ts +++ b/src/plugins/discover/public/utils/popularize_field.test.ts @@ -7,7 +7,7 @@ */ import { Capabilities } from 'kibana/public'; -import { DataView, DataViewsService } from '../../../data/common'; +import { DataView, DataViewsContract } from '../../../data_views/public'; import { popularizeField } from './popularize_field'; const capabilities = { @@ -20,7 +20,7 @@ describe('Popularize field', () => { test('returns undefined if index pattern lacks id', async () => { const indexPattern = {} as unknown as DataView; const fieldName = '@timestamp'; - const dataViewsService = {} as unknown as DataViewsService; + const dataViewsService = {} as unknown as DataViewsContract; const result = await popularizeField(indexPattern, fieldName, dataViewsService, capabilities); expect(result).toBeUndefined(); }); @@ -32,7 +32,7 @@ describe('Popularize field', () => { }, } as unknown as DataView; const fieldName = '@timestamp'; - const dataViewsService = {} as unknown as DataViewsService; + const dataViewsService = {} as unknown as DataViewsContract; const result = await popularizeField(indexPattern, fieldName, dataViewsService, capabilities); expect(result).toBeUndefined(); }); @@ -50,7 +50,7 @@ describe('Popularize field', () => { const fieldName = '@timestamp'; const dataViewsService = { updateSavedObject: async () => {}, - } as unknown as DataViewsService; + } as unknown as DataViewsContract; const result = await popularizeField(indexPattern, fieldName, dataViewsService, capabilities); expect(result).toBeUndefined(); expect(field.count).toEqual(1); @@ -71,7 +71,7 @@ describe('Popularize field', () => { updateSavedObject: async () => { throw new Error('unknown error'); }, - } as unknown as DataViewsService; + } as unknown as DataViewsContract; const result = await popularizeField(indexPattern, fieldName, dataViewsService, capabilities); expect(result).toBeUndefined(); }); @@ -89,7 +89,7 @@ describe('Popularize field', () => { const fieldName = '@timestamp'; const dataViewsService = { updateSavedObject: jest.fn(), - } as unknown as DataViewsService; + } as unknown as DataViewsContract; const result = await popularizeField(indexPattern, fieldName, dataViewsService, { indexPatterns: { save: false }, } as unknown as Capabilities); diff --git a/src/plugins/discover/public/utils/use_data_grid_columns.ts b/src/plugins/discover/public/utils/use_data_grid_columns.ts index 8df97e84dcf2bd..ab492dc10f617d 100644 --- a/src/plugins/discover/public/utils/use_data_grid_columns.ts +++ b/src/plugins/discover/public/utils/use_data_grid_columns.ts @@ -7,7 +7,7 @@ */ import { useMemo } from 'react'; -import type { DataView, DataViewsContract } from 'src/plugins/data/common'; +import type { DataView, DataViewsContract } from 'src/plugins/data_views/public'; import { Capabilities, IUiSettingsClient } from 'kibana/public'; import { diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json index 961d265ab7ff90..4ff6f0598d7d8b 100644 --- a/src/plugins/discover/tsconfig.json +++ b/src/plugins/discover/tsconfig.json @@ -6,7 +6,7 @@ "declaration": true, "declarationMap": true }, - "include": ["common/**/*", "public/**/*", "server/**/*", "../../../typings/**/*"], + "include": ["common/**/*", "public/**/*", "server/**/*", "../../../typings/**/*", ".storybook/**/*"], "references": [ { "path": "../../core/tsconfig.json" }, { "path": "../charts/tsconfig.json" }, diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts index c2a4f18218dd47..27e44cba1094f0 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts @@ -428,6 +428,10 @@ export const stackManagementSchema: MakeSchemaFrom = { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, }, + 'observability:enableInfrastructureView': { + type: 'boolean', + _meta: { description: 'Non-default value of setting.' }, + }, 'banners:placement': { type: 'keyword', _meta: { description: 'Non-default value of setting.' }, diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts index 69ed647f0845a0..8776bad89f8a60 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts @@ -39,6 +39,7 @@ export interface UsageStats { 'observability:enableInspectEsQueries': boolean; 'observability:maxSuggestions': number; 'observability:enableComparisonByDefault': boolean; + 'observability:enableInfrastructureView': boolean; 'visualize:enableLabs': boolean; 'visualization:heatmap:maxBuckets': number; 'visualization:colorMapping': string; diff --git a/src/plugins/share/public/components/__snapshots__/url_panel_content.test.tsx.snap b/src/plugins/share/public/components/__snapshots__/url_panel_content.test.tsx.snap index e883b550fde04f..0c80b72dc06b64 100644 --- a/src/plugins/share/public/components/__snapshots__/url_panel_content.test.tsx.snap +++ b/src/plugins/share/public/components/__snapshots__/url_panel_content.test.tsx.snap @@ -23,17 +23,19 @@ exports[`share url panel content render 1`] = ` } /> } - label={ - - } labelType="label" > , + } + } onChange={[Function]} options={ Array [ @@ -204,17 +206,19 @@ exports[`share url panel content should enable saved object export option when o fullWidth={false} hasChildLabel={true} hasEmptyLabelSpace={false} - label={ - - } labelType="label" > , + } + } onChange={[Function]} options={ Array [ @@ -385,17 +389,19 @@ exports[`share url panel content should hide short url section when allowShortUr fullWidth={false} hasChildLabel={true} hasEmptyLabelSpace={false} - label={ - - } labelType="label" > , + } + } onChange={[Function]} options={ Array [ @@ -521,17 +527,19 @@ exports[`should show url param extensions 1`] = ` fullWidth={false} hasChildLabel={true} hasEmptyLabelSpace={false} - label={ - - } labelType="label" > , + } + } onChange={[Function]} options={ Array [ diff --git a/src/plugins/share/public/components/url_panel_content.tsx b/src/plugins/share/public/components/url_panel_content.tsx index 899036fc7107fc..8670b84d5c48eb 100644 --- a/src/plugins/share/public/components/url_panel_content.tsx +++ b/src/plugins/share/public/components/url_panel_content.tsx @@ -451,19 +451,19 @@ export class UrlPanelContent extends Component { /> ) : undefined; return ( - - } - helpText={generateLinkAsHelp} - > + + ), + }} /> ); diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index 4641d271b3e4f6..9c2c71898dee72 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -7790,6 +7790,12 @@ "description": "Non-default value of setting." } }, + "observability:enableInfrastructureView": { + "type": "boolean", + "_meta": { + "description": "Non-default value of setting." + } + }, "banners:placement": { "type": "keyword", "_meta": { diff --git a/src/plugins/vis_types/heatmap/public/vis_type/heatmap.tsx b/src/plugins/vis_types/heatmap/public/vis_type/heatmap.tsx index 4ce9afdf90aa54..f69a47beae280a 100644 --- a/src/plugins/vis_types/heatmap/public/vis_type/heatmap.tsx +++ b/src/plugins/vis_types/heatmap/public/vis_type/heatmap.tsx @@ -104,6 +104,7 @@ export const getHeatmapVisTypeDefinition = ({ '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -120,6 +121,7 @@ export const getHeatmapVisTypeDefinition = ({ '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -143,6 +145,7 @@ export const getHeatmapVisTypeDefinition = ({ '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/src/plugins/vis_types/metric/public/metric_vis_type.ts b/src/plugins/vis_types/metric/public/metric_vis_type.ts index f65ea79eee1e7f..12f68f3b0e17e8 100644 --- a/src/plugins/vis_types/metric/public/metric_vis_type.ts +++ b/src/plugins/vis_types/metric/public/metric_vis_type.ts @@ -92,6 +92,7 @@ export const createMetricVisTypeDefinition = (): VisTypeDefinition => '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/src/plugins/vis_types/pie/public/sample_vis.test.mocks.ts b/src/plugins/vis_types/pie/public/sample_vis.test.mocks.ts index ba2289203cc1a5..56f06207878860 100644 --- a/src/plugins/vis_types/pie/public/sample_vis.test.mocks.ts +++ b/src/plugins/vis_types/pie/public/sample_vis.test.mocks.ts @@ -93,6 +93,7 @@ export const samplePieVis = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -112,6 +113,7 @@ export const samplePieVis = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/src/plugins/vis_types/pie/public/vis_type/pie.ts b/src/plugins/vis_types/pie/public/vis_type/pie.ts index 55dd1de88842eb..827b25d541c9e8 100644 --- a/src/plugins/vis_types/pie/public/vis_type/pie.ts +++ b/src/plugins/vis_types/pie/public/vis_type/pie.ts @@ -93,6 +93,7 @@ export const getPieVisTypeDefinition = ({ '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -112,6 +113,7 @@ export const getPieVisTypeDefinition = ({ '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/src/plugins/vis_types/table/public/table_vis_type.ts b/src/plugins/vis_types/table/public/table_vis_type.ts index ba42d680d65db0..a432bd94dacb62 100644 --- a/src/plugins/vis_types/table/public/table_vis_type.ts +++ b/src/plugins/vis_types/table/public/table_vis_type.ts @@ -68,6 +68,7 @@ export const tableVisTypeDefinition: VisTypeDefinition = { '!diversified_sampler', '!multi_terms', '!significant_text', + '!rare_terms', ], }, { @@ -84,6 +85,7 @@ export const tableVisTypeDefinition: VisTypeDefinition = { '!diversified_sampler', '!multi_terms', '!significant_text', + '!rare_terms', ], }, ], diff --git a/src/plugins/vis_types/vislib/public/gauge.ts b/src/plugins/vis_types/vislib/public/gauge.ts index a29f152f836c45..128c0758bfd034 100644 --- a/src/plugins/vis_types/vislib/public/gauge.ts +++ b/src/plugins/vis_types/vislib/public/gauge.ts @@ -138,6 +138,7 @@ export const gaugeVisTypeDefinition: VisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/src/plugins/vis_types/vislib/public/goal.ts b/src/plugins/vis_types/vislib/public/goal.ts index 887979136792c8..9dd5fdbc92b5f0 100644 --- a/src/plugins/vis_types/vislib/public/goal.ts +++ b/src/plugins/vis_types/vislib/public/goal.ts @@ -102,6 +102,7 @@ export const goalVisTypeDefinition: VisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/src/plugins/vis_types/xy/public/sample_vis.test.mocks.ts b/src/plugins/vis_types/xy/public/sample_vis.test.mocks.ts index 6f33d1efca0f45..436a284b1657ae 100644 --- a/src/plugins/vis_types/xy/public/sample_vis.test.mocks.ts +++ b/src/plugins/vis_types/xy/public/sample_vis.test.mocks.ts @@ -155,6 +155,7 @@ export const sampleAreaVis = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -173,6 +174,7 @@ export const sampleAreaVis = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -191,6 +193,7 @@ export const sampleAreaVis = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/src/plugins/vis_types/xy/public/vis_types/area.ts b/src/plugins/vis_types/xy/public/vis_types/area.ts index 31da4082ca2b9f..d5e35dbc9f3de8 100644 --- a/src/plugins/vis_types/xy/public/vis_types/area.ts +++ b/src/plugins/vis_types/xy/public/vis_types/area.ts @@ -163,6 +163,7 @@ export const areaVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -181,6 +182,7 @@ export const areaVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -199,6 +201,7 @@ export const areaVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/src/plugins/vis_types/xy/public/vis_types/histogram.ts b/src/plugins/vis_types/xy/public/vis_types/histogram.ts index 94a77b0483d4ca..c0b3e5f4e5073c 100644 --- a/src/plugins/vis_types/xy/public/vis_types/histogram.ts +++ b/src/plugins/vis_types/xy/public/vis_types/histogram.ts @@ -166,6 +166,7 @@ export const histogramVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -184,6 +185,7 @@ export const histogramVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -202,6 +204,7 @@ export const histogramVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/src/plugins/vis_types/xy/public/vis_types/horizontal_bar.ts b/src/plugins/vis_types/xy/public/vis_types/horizontal_bar.ts index 351a71fc9169f5..f62e4e22871154 100644 --- a/src/plugins/vis_types/xy/public/vis_types/horizontal_bar.ts +++ b/src/plugins/vis_types/xy/public/vis_types/horizontal_bar.ts @@ -165,6 +165,7 @@ export const horizontalBarVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -183,6 +184,7 @@ export const horizontalBarVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -201,6 +203,7 @@ export const horizontalBarVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/src/plugins/vis_types/xy/public/vis_types/line.ts b/src/plugins/vis_types/xy/public/vis_types/line.ts index 3ee9a1b28b0bd0..c14339bd1d6528 100644 --- a/src/plugins/vis_types/xy/public/vis_types/line.ts +++ b/src/plugins/vis_types/xy/public/vis_types/line.ts @@ -157,6 +157,7 @@ export const lineVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -175,6 +176,7 @@ export const lineVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], @@ -193,6 +195,7 @@ export const lineVisTypeDefinition = { '!filter', '!sampler', '!diversified_sampler', + '!rare_terms', '!multi_terms', '!significant_text', ], diff --git a/test/functional/apps/console/_console.ts b/test/functional/apps/console/_console.ts index 72e0b0a0123c6d..3f873850ff1931 100644 --- a/test/functional/apps/console/_console.ts +++ b/test/functional/apps/console/_console.ts @@ -85,12 +85,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Ensure that the text area can be interacted with await PageObjects.console.dismissTutorial(); expect(await PageObjects.console.hasAutocompleter()).to.be(false); + await PageObjects.console.enterRequest(); await PageObjects.console.promptAutocomplete(); await retry.waitFor('autocomplete to be visible', () => PageObjects.console.hasAutocompleter() ); }); + it('should add comma after previous non empty line on autocomplete', async () => { + const LINE_NUMBER = 2; + + await PageObjects.console.dismissTutorial(); + await PageObjects.console.clearTextArea(); + await PageObjects.console.enterText(`{\n\t"query": {\n\t\t"match": {}`); + await PageObjects.console.pressEnter(); + await PageObjects.console.pressEnter(); + await PageObjects.console.pressEnter(); + await PageObjects.console.promptAutocomplete(); + + await retry.try(async () => { + const textOfPreviousNonEmptyLine = await PageObjects.console.getVisibleTextAt(LINE_NUMBER); + log.debug(textOfPreviousNonEmptyLine); + const lastChar = textOfPreviousNonEmptyLine.charAt(textOfPreviousNonEmptyLine.length - 1); + expect(lastChar).to.be.equal(','); + }); + }); + describe('with a data URI in the load_from query', () => { it('loads the data from the URI', async () => { await PageObjects.common.navigateToApp('console', { diff --git a/test/functional/apps/discover/_discover_histogram.ts b/test/functional/apps/discover/_discover_histogram.ts index 62d6ede323054e..5932e995421afa 100644 --- a/test/functional/apps/discover/_discover_histogram.ts +++ b/test/functional/apps/discover/_discover_histogram.ts @@ -102,20 +102,28 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const to = 'Mar 21, 2019 @ 00:00:00.000'; const savedSearch = 'persisted hidden histogram'; await prepareTest({ from, to }); + + // close chart for saved search await testSubjects.click('discoverChartOptionsToggle'); await testSubjects.click('discoverChartToggle'); let canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(false); + + // save search await PageObjects.discover.saveSearch(savedSearch); await PageObjects.header.waitUntilLoadingHasFinished(); + // open new search await PageObjects.discover.clickNewSearchButton(); await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.discover.loadSavedSearch('persisted hidden histogram'); + // load saved search + await PageObjects.discover.loadSavedSearch(savedSearch); await PageObjects.header.waitUntilLoadingHasFinished(); canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(false); + + // open chart for saved search await testSubjects.click('discoverChartOptionsToggle'); await testSubjects.click('discoverChartToggle'); await retry.waitFor(`Discover histogram to be displayed`, async () => { @@ -123,14 +131,52 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return canvasExists; }); - await PageObjects.discover.saveSearch('persisted hidden histogram'); + // save search + await PageObjects.discover.saveSearch(savedSearch); await PageObjects.header.waitUntilLoadingHasFinished(); + // open new search await PageObjects.discover.clickNewSearchButton(); - await PageObjects.discover.loadSavedSearch('persisted hidden histogram'); + await PageObjects.header.waitUntilLoadingHasFinished(); + + // load saved search + await PageObjects.discover.loadSavedSearch(savedSearch); + await PageObjects.header.waitUntilLoadingHasFinished(); + canvasExists = await elasticChart.canvasExists(); + expect(canvasExists).to.be(true); + }); + it('should show permitted hidden histogram state when returning back to discover', async () => { + // close chart + await testSubjects.click('discoverChartOptionsToggle'); + await testSubjects.click('discoverChartToggle'); + let canvasExists = await elasticChart.canvasExists(); + expect(canvasExists).to.be(false); + + // save search + await PageObjects.discover.saveSearch('persisted hidden histogram'); + await PageObjects.header.waitUntilLoadingHasFinished(); + + // open chart + await testSubjects.click('discoverChartOptionsToggle'); + await testSubjects.click('discoverChartToggle'); + canvasExists = await elasticChart.canvasExists(); + expect(canvasExists).to.be(true); + + // go to dashboard + await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.header.waitUntilLoadingHasFinished(); + + // go to discover + await PageObjects.common.navigateToApp('discover'); await PageObjects.header.waitUntilLoadingHasFinished(); canvasExists = await elasticChart.canvasExists(); expect(canvasExists).to.be(true); + + // close chart + await testSubjects.click('discoverChartOptionsToggle'); + await testSubjects.click('discoverChartToggle'); + canvasExists = await elasticChart.canvasExists(); + expect(canvasExists).to.be(false); }); }); } diff --git a/test/functional/page_objects/console_page.ts b/test/functional/page_objects/console_page.ts index 77c87f6066e854..f8a64c0032bb23 100644 --- a/test/functional/page_objects/console_page.ts +++ b/test/functional/page_objects/console_page.ts @@ -84,13 +84,8 @@ export class ConsolePageObject extends FtrService { } public async promptAutocomplete() { - // This focusses the cursor on the bottom of the text area - const editor = await this.getEditor(); - const content = await editor.findByCssSelector('.ace_content'); - await content.click(); const textArea = await this.testSubjects.find('console-textarea'); // There should be autocomplete for this on all license levels - await textArea.pressKeys('\nGET s'); await textArea.pressKeys([Key.CONTROL, Key.SPACE]); } @@ -101,4 +96,47 @@ export class ConsolePageObject extends FtrService { return false; } } + + public async enterRequest(request: string = '\nGET _search') { + const textArea = await this.getEditorTextArea(); + await textArea.pressKeys(request); + await textArea.pressKeys(Key.ENTER); + } + + public async enterText(text: string) { + const textArea = await this.getEditorTextArea(); + await textArea.pressKeys(text); + } + + private async getEditorTextArea() { + // This focusses the cursor on the bottom of the text area + const editor = await this.getEditor(); + const content = await editor.findByCssSelector('.ace_content'); + await content.click(); + return await this.testSubjects.find('console-textarea'); + } + + public async getVisibleTextAt(lineIndex: number) { + const editor = await this.getEditor(); + const lines = await editor.findAllByClassName('ace_line_group'); + + if (lines.length < lineIndex) { + throw new Error(`No line with index: ${lineIndex}`); + } + + const line = lines[lineIndex]; + const text = await line.getVisibleText(); + + return text.trim(); + } + + public async pressEnter() { + const textArea = await this.testSubjects.find('console-textarea'); + await textArea.pressKeys(Key.ENTER); + } + + public async clearTextArea() { + const textArea = await this.getEditorTextArea(); + await textArea.clearValueWithKeyboard(); + } } diff --git a/test/interpreter_functional/test_suites/run_pipeline/esaggs_rareterms.ts b/test/interpreter_functional/test_suites/run_pipeline/esaggs_rareterms.ts new file mode 100644 index 00000000000000..b52bd7904a256e --- /dev/null +++ b/test/interpreter_functional/test_suites/run_pipeline/esaggs_rareterms.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import expect from '@kbn/expect'; +import { DatatableRow } from 'src/plugins/expressions'; +import { ExpectExpression, expectExpressionProvider } from './helpers'; +import { FtrProviderContext } from '../../../functional/ftr_provider_context'; + +export default function ({ + getService, + updateBaselines, +}: FtrProviderContext & { updateBaselines: boolean }) { + let expectExpression: ExpectExpression; + + describe('esaggs_rareterms', () => { + before(() => { + expectExpression = expectExpressionProvider({ getService, updateBaselines }); + }); + + const timeRange = { + from: '2015-09-21T00:00:00Z', + to: '2015-09-22T00:00:00Z', + }; + + describe('aggRareTerms', () => { + it('can execute aggRareTerms', async () => { + const expression = ` + kibana_context timeRange={timerange from='${timeRange.from}' to='${timeRange.to}'} + | esaggs index={indexPatternLoad id='logstash-*'} + aggs={aggRareTerms id="1" enabled=true schema="bucket" field="geo.srcdest" max_doc_count=1} + aggs={aggCount id="2" enabled=true schema="metric"} + `; + const result = await expectExpression('rareterms', expression).getResponse(); + + expect(result.rows.length).to.be(1149); + result.rows.forEach((row: DatatableRow) => { + expect(row['col-1-2']).to.be(1); + }); + }); + }); + }); +} diff --git a/test/interpreter_functional/test_suites/run_pipeline/index.ts b/test/interpreter_functional/test_suites/run_pipeline/index.ts index 184a91a91f0952..97387fc0a965fc 100644 --- a/test/interpreter_functional/test_suites/run_pipeline/index.ts +++ b/test/interpreter_functional/test_suites/run_pipeline/index.ts @@ -46,5 +46,6 @@ export default function ({ getService, getPageObjects, loadTestFile }: FtrProvid loadTestFile(require.resolve('./esaggs_multiterms')); loadTestFile(require.resolve('./esaggs_sampler')); loadTestFile(require.resolve('./esaggs_significanttext')); + loadTestFile(require.resolve('./esaggs_rareterms')); }); } diff --git a/test/package/roles/install_kibana_docker/tasks/main.yml b/test/package/roles/install_kibana_docker/tasks/main.yml index 6d2f0a2caed1c1..c883a3ece2a149 100644 --- a/test/package/roles/install_kibana_docker/tasks/main.yml +++ b/test/package/roles/install_kibana_docker/tasks/main.yml @@ -7,8 +7,8 @@ - name: load image become: yes docker_image: - name: kibana - load_path: "{{ kibana_docker.files[0].path }}" + name: "{{ kibana_docker.files[0].path | basename| regex_replace('kibana-(.*)-docker-image.tar.gz', 'docker.elastic.co/kibana/kibana:\\1') }}" + load_path: '{{ kibana_docker.files[0].path }}' timeout: 300 source: load state: present @@ -22,5 +22,5 @@ env: SERVER_HOST: 0.0.0.0 ELASTICSEARCH_HOSTS: http://192.168.50.1:9200 - ELASTICSEARCH_USERNAME: "{{ elasticsearch_username }}" - ELASTICSEARCH_PASSWORD: "{{ elasticsearch_password }}" + ELASTICSEARCH_USERNAME: '{{ elasticsearch_username }}' + ELASTICSEARCH_PASSWORD: '{{ elasticsearch_password }}' diff --git a/x-pack/plugins/actions/server/constants/event_log.ts b/x-pack/plugins/actions/server/constants/event_log.ts index 9163a0d105ce8a..9dba72462f317f 100644 --- a/x-pack/plugins/actions/server/constants/event_log.ts +++ b/x-pack/plugins/actions/server/constants/event_log.ts @@ -10,4 +10,5 @@ export const EVENT_LOG_ACTIONS = { execute: 'execute', executeStart: 'execute-start', executeViaHttp: 'execute-via-http', + executeTimeout: 'execute-timeout', }; diff --git a/x-pack/plugins/actions/server/lib/action_executor.mock.ts b/x-pack/plugins/actions/server/lib/action_executor.mock.ts index 6abfec1116c3ad..54df74b2fbd3d0 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.mock.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.mock.ts @@ -11,6 +11,7 @@ const createActionExecutorMock = () => { const mocked: jest.Mocked = { initialize: jest.fn(), execute: jest.fn().mockResolvedValue({ status: 'ok', actionId: '' }), + logCancellation: jest.fn(), }; return mocked; }; diff --git a/x-pack/plugins/actions/server/lib/action_executor.test.ts b/x-pack/plugins/actions/server/lib/action_executor.test.ts index 4175649454f71e..1d678c244c1b09 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.test.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.test.ts @@ -115,6 +115,7 @@ test('successfully executes', async () => { Object { "event": Object { "action": "execute-start", + "kind": "action", }, "kibana": Object { "saved_objects": Array [ @@ -134,6 +135,7 @@ test('successfully executes', async () => { Object { "event": Object { "action": "execute", + "kind": "action", "outcome": "success", }, "kibana": Object { @@ -308,7 +310,7 @@ test('throws an error when connector is invalid', async () => { actionId: '1', status: 'error', retry: false, - message: `error validating action type connector: error`, + message: `error validating action type connector: config must be defined`, }); }); @@ -511,6 +513,34 @@ test('logs a warning when alert executor returns invalid status', async () => { ); }); +test('writes to event log for execute timeout', async () => { + setupActionExecutorMock(); + + await actionExecutor.logCancellation({ + actionId: 'action1', + relatedSavedObjects: [], + request: {} as KibanaRequest, + }); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(1); + expect(eventLogger.logEvent.mock.calls[0][0]).toMatchObject({ + event: { + action: 'execute-timeout', + }, + kibana: { + saved_objects: [ + { + rel: 'primary', + type: 'action', + id: 'action1', + type_id: 'test', + namespace: 'some-namespace', + }, + ], + }, + message: `action: test:action1: 'action-1' execution cancelled due to timeout - exceeded default timeout of "5m"`, + }); +}); + test('writes to event log for execute and execute start', async () => { const executorMock = setupActionExecutorMock(); executorMock.mockResolvedValue({ diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index 9458180fdd2200..9737630628823f 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -19,16 +19,17 @@ import { ActionTypeExecutorResult, ActionTypeRegistryContract, GetServicesFunction, - RawAction, PreConfiguredAction, + RawAction, } from '../types'; import { EncryptedSavedObjectsClient } from '../../../encrypted_saved_objects/server'; import { SpacesServiceStart } from '../../../spaces/server'; import { EVENT_LOG_ACTIONS } from '../constants/event_log'; -import { IEvent, IEventLogger, SAVED_OBJECT_REL_PRIMARY } from '../../../event_log/server'; +import { IEventLogger, SAVED_OBJECT_REL_PRIMARY } from '../../../event_log/server'; import { ActionsClient } from '../actions_client'; import { ActionExecutionSource } from './action_execution_source'; import { RelatedSavedObjects } from './related_saved_objects'; +import { createActionEventLogRecordObject } from './create_action_event_log_record_object'; // 1,000,000 nanoseconds in 1 millisecond const Millis2Nanos = 1000 * 1000; @@ -68,6 +69,7 @@ export class ActionExecutor { private isInitialized = false; private actionExecutorContext?: ActionExecutorContext; private readonly isESOCanEncrypt: boolean; + private actionInfo: ActionInfo | undefined; constructor({ isESOCanEncrypt }: { isESOCanEncrypt: boolean }) { this.isESOCanEncrypt = isESOCanEncrypt; @@ -124,7 +126,7 @@ export class ActionExecutor { const spaceId = spaces && spaces.getSpaceId(request); const namespace = spaceId && spaceId !== 'default' ? { namespace: spaceId } : {}; - const { actionTypeId, name, config, secrets } = await getActionInfo( + const actionInfo = await getActionInfoInternal( await getActionsClientWithRequest(request, source), encryptedSavedObjectsClient, preconfiguredActions, @@ -132,6 +134,12 @@ export class ActionExecutor { namespace.namespace ); + const { actionTypeId, name, config, secrets } = actionInfo; + + if (!this.actionInfo || this.actionInfo.actionId !== actionId) { + this.actionInfo = actionInfo; + } + if (span) { span.name = `execute_action ${actionTypeId}`; span.addLabels({ @@ -169,26 +177,25 @@ export class ActionExecutor { ? { task: { scheduled: taskInfo.scheduled.toISOString(), - schedule_delay: Millis2Nanos * (Date.now() - taskInfo.scheduled.getTime()), + scheduleDelay: Millis2Nanos * (Date.now() - taskInfo.scheduled.getTime()), }, } : {}; - const event: IEvent = { - event: { action: EVENT_LOG_ACTIONS.execute }, - kibana: { - ...task, - saved_objects: [ - { - rel: SAVED_OBJECT_REL_PRIMARY, - type: 'action', - id: actionId, - type_id: actionTypeId, - ...namespace, - }, - ], - }, - }; + const event = createActionEventLogRecordObject({ + actionId, + action: EVENT_LOG_ACTIONS.execute, + ...namespace, + ...task, + savedObjects: [ + { + type: 'action', + id: actionId, + typeId: actionTypeId, + relation: SAVED_OBJECT_REL_PRIMARY, + }, + ], + }); for (const relatedSavedObject of relatedSavedObjects || []) { event.kibana?.saved_objects?.push({ @@ -210,6 +217,7 @@ export class ActionExecutor { }, message: `action started: ${actionLabel}`, }); + eventLogger.logEvent(startEvent); let rawResult: ActionTypeExecutorResult; @@ -269,22 +277,77 @@ export class ActionExecutor { } ); } -} -function actionErrorToMessage(result: ActionTypeExecutorResult): string { - let message = result.message || 'unknown error running action'; - - if (result.serviceMessage) { - message = `${message}: ${result.serviceMessage}`; - } - - if (result.retry instanceof Date) { - message = `${message}; retry at ${result.retry.toISOString()}`; - } else if (result.retry) { - message = `${message}; retry: ${JSON.stringify(result.retry)}`; + public async logCancellation({ + actionId, + request, + relatedSavedObjects, + source, + taskInfo, + }: { + actionId: string; + request: KibanaRequest; + taskInfo?: TaskInfo; + relatedSavedObjects: RelatedSavedObjects; + source?: ActionExecutionSource; + }) { + const { + spaces, + encryptedSavedObjectsClient, + preconfiguredActions, + eventLogger, + getActionsClientWithRequest, + } = this.actionExecutorContext!; + + const spaceId = spaces && spaces.getSpaceId(request); + const namespace = spaceId && spaceId !== 'default' ? { namespace: spaceId } : {}; + if (!this.actionInfo || this.actionInfo.actionId !== actionId) { + this.actionInfo = await getActionInfoInternal( + await getActionsClientWithRequest(request, source), + encryptedSavedObjectsClient, + preconfiguredActions, + actionId, + namespace.namespace + ); + } + const task = taskInfo + ? { + task: { + scheduled: taskInfo.scheduled.toISOString(), + scheduleDelay: Millis2Nanos * (Date.now() - taskInfo.scheduled.getTime()), + }, + } + : {}; + // Write event log entry + const event = createActionEventLogRecordObject({ + actionId, + action: EVENT_LOG_ACTIONS.executeTimeout, + message: `action: ${this.actionInfo.actionTypeId}:${actionId}: '${ + this.actionInfo.name ?? '' + }' execution cancelled due to timeout - exceeded default timeout of "5m"`, + ...namespace, + ...task, + savedObjects: [ + { + type: 'action', + id: actionId, + typeId: this.actionInfo.actionTypeId, + relation: SAVED_OBJECT_REL_PRIMARY, + }, + ], + }); + + for (const relatedSavedObject of (relatedSavedObjects || []) as RelatedSavedObjects) { + event.kibana?.saved_objects?.push({ + rel: SAVED_OBJECT_REL_PRIMARY, + type: relatedSavedObject.type, + id: relatedSavedObject.id, + type_id: relatedSavedObject.typeId, + namespace: relatedSavedObject.namespace, + }); + } + eventLogger.logEvent(event); } - - return message; } interface ActionInfo { @@ -292,9 +355,10 @@ interface ActionInfo { name: string; config: unknown; secrets: unknown; + actionId: string; } -async function getActionInfo( +async function getActionInfoInternal( actionsClient: PublicMethodsOf, encryptedSavedObjectsClient: EncryptedSavedObjectsClient, preconfiguredActions: PreConfiguredAction[], @@ -311,6 +375,7 @@ async function getActionInfo( name: pcAction.name, config: pcAction.config, secrets: pcAction.secrets, + actionId, }; } @@ -329,5 +394,22 @@ async function getActionInfo( name, config, secrets, + actionId, }; } + +function actionErrorToMessage(result: ActionTypeExecutorResult): string { + let message = result.message || 'unknown error running action'; + + if (result.serviceMessage) { + message = `${message}: ${result.serviceMessage}`; + } + + if (result.retry instanceof Date) { + message = `${message}; retry at ${result.retry.toISOString()}`; + } else if (result.retry) { + message = `${message}; retry: ${JSON.stringify(result.retry)}`; + } + + return message; +} diff --git a/x-pack/plugins/actions/server/lib/create_action_event_log_record_object.test.ts b/x-pack/plugins/actions/server/lib/create_action_event_log_record_object.test.ts new file mode 100644 index 00000000000000..ee58f8a01488ce --- /dev/null +++ b/x-pack/plugins/actions/server/lib/create_action_event_log_record_object.test.ts @@ -0,0 +1,128 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createActionEventLogRecordObject } from './create_action_event_log_record_object'; + +describe('createActionEventLogRecordObject', () => { + test('created action event "execute-start"', async () => { + expect( + createActionEventLogRecordObject({ + actionId: '1', + action: 'execute-start', + timestamp: '1970-01-01T00:00:00.000Z', + task: { + scheduled: '1970-01-01T00:00:00.000Z', + scheduleDelay: 0, + }, + savedObjects: [ + { + id: '1', + type: 'action', + typeId: 'test', + relation: 'primary', + }, + ], + }) + ).toStrictEqual({ + '@timestamp': '1970-01-01T00:00:00.000Z', + event: { + action: 'execute-start', + kind: 'action', + }, + kibana: { + saved_objects: [ + { + id: '1', + rel: 'primary', + type: 'action', + type_id: 'test', + }, + ], + task: { + schedule_delay: 0, + scheduled: '1970-01-01T00:00:00.000Z', + }, + }, + }); + }); + + test('created action event "execute"', async () => { + expect( + createActionEventLogRecordObject({ + actionId: '1', + name: 'test name', + action: 'execute', + message: 'action execution start', + namespace: 'default', + savedObjects: [ + { + id: '2', + type: 'action', + typeId: '.email', + relation: 'primary', + }, + ], + }) + ).toStrictEqual({ + event: { + action: 'execute', + kind: 'action', + }, + kibana: { + saved_objects: [ + { + id: '2', + namespace: 'default', + rel: 'primary', + type: 'action', + type_id: '.email', + }, + ], + }, + message: 'action execution start', + }); + }); + + test('created action event "execute-timeout"', async () => { + expect( + createActionEventLogRecordObject({ + actionId: '1', + action: 'execute-timeout', + task: { + scheduled: '1970-01-01T00:00:00.000Z', + }, + savedObjects: [ + { + id: '1', + type: 'action', + typeId: 'test', + relation: 'primary', + }, + ], + }) + ).toStrictEqual({ + event: { + action: 'execute-timeout', + kind: 'action', + }, + kibana: { + saved_objects: [ + { + id: '1', + rel: 'primary', + type: 'action', + type_id: 'test', + }, + ], + task: { + schedule_delay: undefined, + scheduled: '1970-01-01T00:00:00.000Z', + }, + }, + }); + }); +}); diff --git a/x-pack/plugins/actions/server/lib/create_action_event_log_record_object.ts b/x-pack/plugins/actions/server/lib/create_action_event_log_record_object.ts new file mode 100644 index 00000000000000..1a1c5e9e6b3aaa --- /dev/null +++ b/x-pack/plugins/actions/server/lib/create_action_event_log_record_object.ts @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IEvent } from '../../../event_log/server'; + +export type Event = Exclude; + +interface CreateActionEventLogRecordParams { + actionId: string; + action: string; + name?: string; + message?: string; + namespace?: string; + timestamp?: string; + task?: { + scheduled?: string; + scheduleDelay?: number; + }; + savedObjects: Array<{ + type: string; + id: string; + typeId: string; + relation?: string; + }>; +} + +export function createActionEventLogRecordObject(params: CreateActionEventLogRecordParams): Event { + const { action, message, task, namespace } = params; + + const event: Event = { + ...(params.timestamp ? { '@timestamp': params.timestamp } : {}), + event: { + action, + kind: 'action', + }, + kibana: { + saved_objects: params.savedObjects.map((so) => ({ + ...(so.relation ? { rel: so.relation } : {}), + type: so.type, + id: so.id, + type_id: so.typeId, + ...(namespace ? { namespace } : {}), + })), + ...(task ? { task: { scheduled: task.scheduled, schedule_delay: task.scheduleDelay } } : {}), + }, + ...(message ? { message } : {}), + }; + return event; +} diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts index ec0aa48ef291e4..0ea6b5316fb82a 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts @@ -22,6 +22,7 @@ const spaceIdToNamespace = jest.fn(); const actionTypeRegistry = actionTypeRegistryMock.create(); const mockedEncryptedSavedObjectsClient = encryptedSavedObjectsMock.createClient(); const mockedActionExecutor = actionExecutorMock.create(); +const eventLogger = eventLoggerMock.create(); let fakeTimer: sinon.SinonFakeTimers; let taskRunnerFactory: TaskRunnerFactory; @@ -62,7 +63,7 @@ const actionExecutorInitializerParams = { actionTypeRegistry, getActionsClientWithRequest: jest.fn(async () => actionsClientMock.create()), encryptedSavedObjectsClient: mockedEncryptedSavedObjectsClient, - eventLogger: eventLoggerMock.create(), + eventLogger, preconfiguredActions: [], }; const taskRunnerFactoryInitializerParams = { @@ -236,6 +237,37 @@ test('cleans up action_task_params object', async () => { expect(services.savedObjectsClient.delete).toHaveBeenCalledWith('action_task_params', '3'); }); +test('task runner should implement CancellableTask cancel method with logging warning message', async () => { + mockedEncryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + id: '3', + type: 'action_task_params', + attributes: { + actionId: '2', + params: { baz: true }, + apiKey: Buffer.from('123:abc').toString('base64'), + }, + references: [ + { + id: '2', + name: 'actionRef', + type: 'action', + }, + ], + }); + const taskRunner = taskRunnerFactory.create({ + taskInstance: mockedTaskInstance, + }); + + await taskRunner.cancel(); + expect(mockedActionExecutor.logCancellation.mock.calls[0][0].actionId).toBe('2'); + + expect(mockedActionExecutor.logCancellation.mock.calls.length).toBe(1); + + expect(taskRunnerFactoryInitializerParams.logger.debug).toHaveBeenCalledWith( + `Cancelling action task for action with id 2 - execution error due to timeout.` + ); +}); + test('runs successfully when cleanup fails and logs the error', async () => { const taskRunner = taskRunnerFactory.create({ taskInstance: mockedTaskInstance, diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.ts index 4f6b9ac2e8b7d7..f3fdf627e08fff 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.ts @@ -93,31 +93,10 @@ export class TaskRunnerFactory { encryptedSavedObjectsClient, spaceIdToNamespace ); - - const requestHeaders: Record = {}; - if (apiKey) { - requestHeaders.authorization = `ApiKey ${apiKey}`; - } - const path = addSpaceIdToPath('/', spaceId); - // Since we're using API keys and accessing elasticsearch can only be done - // via a request, we're faking one with the proper authorization headers. - const fakeRequest = KibanaRequest.from({ - headers: requestHeaders, - path: '/', - route: { settings: {} }, - url: { - href: '/', - }, - raw: { - req: { - url: '/', - }, - }, - } as unknown as Request); - - basePathService.set(fakeRequest, path); + const request = getFakeRequest(apiKey); + basePathService.set(request, path); // Throwing an executor error means we will attempt to retry the task // TM will treat a task as a failure if `attempts >= maxAttempts` @@ -132,7 +111,7 @@ export class TaskRunnerFactory { params, actionId: actionId as string, isEphemeral: !isPersistedActionTask(actionTaskExecutorParams), - request: fakeRequest, + request, ...getSourceFromReferences(references), taskInfo, relatedSavedObjects: validatedRelatedSavedObjects(logger, relatedSavedObjects), @@ -181,7 +160,7 @@ export class TaskRunnerFactory { // We would idealy secure every operation but in order to support clean up of legacy alerts // we allow this operation in an unsecured manner // Once support for legacy alert RBAC is dropped, this can be secured - await getUnsecuredSavedObjectsClient(fakeRequest).delete( + await getUnsecuredSavedObjectsClient(request).delete( ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, actionTaskExecutorParams.actionTaskParamsId ); @@ -193,10 +172,65 @@ export class TaskRunnerFactory { } } }, + cancel: async () => { + // Write event log entry + const actionTaskExecutorParams = taskInstance.params as ActionTaskExecutorParams; + const { spaceId } = actionTaskExecutorParams; + + const { + attributes: { actionId, apiKey, relatedSavedObjects }, + references, + } = await getActionTaskParams( + actionTaskExecutorParams, + encryptedSavedObjectsClient, + spaceIdToNamespace + ); + + const request = getFakeRequest(apiKey); + const path = addSpaceIdToPath('/', spaceId); + basePathService.set(request, path); + + await actionExecutor.logCancellation({ + actionId, + request, + relatedSavedObjects: (relatedSavedObjects || []) as RelatedSavedObjects, + ...getSourceFromReferences(references), + }); + + logger.debug( + `Cancelling action task for action with id ${actionId} - execution error due to timeout.` + ); + return { state: {} }; + }, }; } } +function getFakeRequest(apiKey?: string) { + const requestHeaders: Record = {}; + if (apiKey) { + requestHeaders.authorization = `ApiKey ${apiKey}`; + } + + // Since we're using API keys and accessing elasticsearch can only be done + // via a request, we're faking one with the proper authorization headers. + const fakeRequest = KibanaRequest.from({ + headers: requestHeaders, + path: '/', + route: { settings: {} }, + url: { + href: '/', + }, + raw: { + req: { + url: '/', + }, + }, + } as unknown as Request); + + return fakeRequest; +} + async function getActionTaskParams( executorParams: ActionTaskExecutorParams, encryptedSavedObjectsClient: EncryptedSavedObjectsClient, diff --git a/x-pack/plugins/actions/server/lib/validate_with_schema.test.ts b/x-pack/plugins/actions/server/lib/validate_with_schema.test.ts index 4f0a11252eb48f..49db953506d224 100644 --- a/x-pack/plugins/actions/server/lib/validate_with_schema.test.ts +++ b/x-pack/plugins/actions/server/lib/validate_with_schema.test.ts @@ -68,6 +68,7 @@ test('should validate when validators return incoming value', () => { params: selfValidator, config: selfValidator, secrets: selfValidator, + connector: () => null, }, }; @@ -83,7 +84,7 @@ test('should validate when validators return incoming value', () => { result = validateSecrets(actionType, testValue); expect(result).toEqual(testValue); - result = validateConnector(actionType, { config: testValue }); + result = validateConnector(actionType, { config: testValue, secrets: { user: 'test' } }); expect(result).toBeNull(); }); @@ -99,6 +100,7 @@ test('should validate when validators return different values', () => { params: selfValidator, config: selfValidator, secrets: selfValidator, + connector: () => null, }, }; @@ -133,9 +135,7 @@ test('should throw with expected error when validators fail', () => { params: erroringValidator, config: erroringValidator, secrets: erroringValidator, - connector: () => { - return 'test error'; - }, + connector: () => 'test error', }, }; @@ -180,3 +180,52 @@ test('should work with @kbn/config-schema', () => { `"error validating action params: [foo]: expected value of type [string] but got [undefined]"` ); }); + +describe('validateConnectors', () => { + const testValue = { any: ['old', 'thing'] }; + const selfValidator = { validate: (value: Record) => value }; + const actionType: ActionType = { + id: 'foo', + name: 'bar', + minimumLicenseRequired: 'basic', + executor, + validate: { + params: selfValidator, + config: selfValidator, + secrets: selfValidator, + connector: () => null, + }, + }; + + test('should throw error when connector config is null', () => { + expect(() => + validateConnector(actionType, { config: null, secrets: { user: 'test' } }) + ).toThrowErrorMatchingInlineSnapshot( + `"error validating action type connector: config must be defined"` + ); + }); + + test('should throw error when connector config is undefined', () => { + expect(() => + validateConnector(actionType, { config: undefined, secrets: { user: 'test' } }) + ).toThrowErrorMatchingInlineSnapshot( + `"error validating action type connector: config must be defined"` + ); + }); + + test('should throw error when connector secrets is null', () => { + expect(() => + validateConnector(actionType, { config: testValue, secrets: null }) + ).toThrowErrorMatchingInlineSnapshot( + `"error validating action type connector: secrets must be defined"` + ); + }); + + test('should throw error when connector secrets is undefined', () => { + expect(() => + validateConnector(actionType, { config: testValue, secrets: undefined }) + ).toThrowErrorMatchingInlineSnapshot( + `"error validating action type connector: secrets must be defined"` + ); + }); +}); diff --git a/x-pack/plugins/actions/server/lib/validate_with_schema.ts b/x-pack/plugins/actions/server/lib/validate_with_schema.ts index 8ff0a3666c4b7a..b8a861566acd27 100644 --- a/x-pack/plugins/actions/server/lib/validate_with_schema.ts +++ b/x-pack/plugins/actions/server/lib/validate_with_schema.ts @@ -42,10 +42,22 @@ export function validateConnector< ExecutorResultData = void >(actionType: ActionType, value: unknown) { if (actionType.validate && actionType.validate.connector) { - const connectorValue = value as { config: Config; secrets: Secrets }; - const result = actionType.validate.connector(connectorValue.config, connectorValue.secrets); - if (result !== null) { - throw Boom.badRequest(`error validating action type connector: ${result}`); + try { + const connectorValue = value as { config: Config; secrets: Secrets }; + + // Connector config and secrets should be defined + if (connectorValue.config == null) { + throw new Error(`config must be defined`); + } + if (connectorValue.secrets == null) { + throw new Error(`secrets must be defined`); + } + const result = actionType.validate.connector(connectorValue.config, connectorValue.secrets); + if (result !== null) { + throw new Error(result); + } + } catch (err) { + throw Boom.badRequest(`error validating action type connector: ${err.message}`); } } return null; diff --git a/x-pack/plugins/alerting/common/alert.ts b/x-pack/plugins/alerting/common/alert.ts index 8064f6d920217e..6f07d4b7950639 100644 --- a/x-pack/plugins/alerting/common/alert.ts +++ b/x-pack/plugins/alerting/common/alert.ts @@ -82,6 +82,7 @@ export interface Alert { muteAll: boolean; mutedInstanceIds: string[]; executionStatus: AlertExecutionStatus; + monitoring?: RuleMonitoring; } export type SanitizedAlert = Omit, 'apiKey'>; @@ -135,3 +136,15 @@ export interface ActionVariable { deprecated?: boolean; useWithTripleBracesInTemplates?: boolean; } + +export interface RuleMonitoring extends SavedObjectAttributes { + execution: { + history: Array<{ + success: boolean; + timestamp: number; + }>; + calculated_metrics: { + success_ratio: number; + }; + }; +} diff --git a/x-pack/plugins/alerting/server/rules_client/rules_client.ts b/x-pack/plugins/alerting/server/rules_client/rules_client.ts index 50a93a5630d42b..3603a60baadb1e 100644 --- a/x-pack/plugins/alerting/server/rules_client/rules_client.ts +++ b/x-pack/plugins/alerting/server/rules_client/rules_client.ts @@ -77,6 +77,7 @@ import { getRuleExecutionStatusPending } from '../lib/rule_execution_status'; import { AlertInstance } from '../alert_instance'; import { EVENT_LOG_ACTIONS } from '../plugin'; import { createAlertEventLogRecordObject } from '../lib/create_alert_event_log_record_object'; +import { getDefaultRuleMonitoring } from '../task_runner/task_runner'; export interface RegistryAlertTypeWithAuth extends RegistryRuleType { authorizedConsumers: string[]; @@ -362,6 +363,7 @@ export class RulesClient { mutedInstanceIds: [], notifyWhen, executionStatus: getRuleExecutionStatusPending(new Date().toISOString()), + monitoring: getDefaultRuleMonitoring(), }; this.auditLogger?.log( diff --git a/x-pack/plugins/alerting/server/rules_client/tests/create.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/create.test.ts index aa8ecfd73bb611..4061917b151977 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/create.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/create.test.ts @@ -20,6 +20,7 @@ import { auditServiceMock } from '../../../../security/server/audit/index.mock'; import { httpServerMock } from '../../../../../../src/core/server/mocks'; import { getBeforeSetup, setGlobalDate } from './lib'; import { RecoveredActionGroup } from '../../../common'; +import { getDefaultRuleMonitoring } from '../../task_runner/task_runner'; jest.mock('../../../../../../src/core/server/saved_objects/service/lib/utils', () => ({ SavedObjectsUtils: { @@ -407,6 +408,14 @@ describe('create()', () => { "meta": Object { "versionApiKeyLastmodified": "v8.0.0", }, + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0, + }, + "history": Array [], + }, + }, "muteAll": false, "mutedInstanceIds": Array [], "name": "abc", @@ -600,6 +609,14 @@ describe('create()', () => { "meta": Object { "versionApiKeyLastmodified": "v7.10.0", }, + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0, + }, + "history": Array [], + }, + }, "muteAll": false, "mutedInstanceIds": Array [], "name": "abc", @@ -1014,6 +1031,7 @@ describe('create()', () => { lastExecutionDate: '2019-02-12T21:01:22.479Z', status: 'pending', }, + monitoring: getDefaultRuleMonitoring(), meta: { versionApiKeyLastmodified: kibanaVersion }, muteAll: false, mutedInstanceIds: [], @@ -1210,6 +1228,7 @@ describe('create()', () => { lastExecutionDate: '2019-02-12T21:01:22.479Z', status: 'pending', }, + monitoring: getDefaultRuleMonitoring(), meta: { versionApiKeyLastmodified: kibanaVersion }, muteAll: false, mutedInstanceIds: [], @@ -1375,6 +1394,7 @@ describe('create()', () => { lastExecutionDate: '2019-02-12T21:01:22.479Z', status: 'pending', }, + monitoring: getDefaultRuleMonitoring(), meta: { versionApiKeyLastmodified: kibanaVersion }, muteAll: false, mutedInstanceIds: [], @@ -1548,6 +1568,7 @@ describe('create()', () => { status: 'pending', error: null, }, + monitoring: getDefaultRuleMonitoring(), }, { id: 'mock-saved-object-id', @@ -1676,6 +1697,7 @@ describe('create()', () => { status: 'pending', error: null, }, + monitoring: getDefaultRuleMonitoring(), }, { id: 'mock-saved-object-id', @@ -1804,6 +1826,7 @@ describe('create()', () => { status: 'pending', error: null, }, + monitoring: getDefaultRuleMonitoring(), }, { id: 'mock-saved-object-id', @@ -2155,6 +2178,7 @@ describe('create()', () => { status: 'pending', error: null, }, + monitoring: getDefaultRuleMonitoring(), }, { id: 'mock-saved-object-id', @@ -2254,6 +2278,7 @@ describe('create()', () => { status: 'pending', error: null, }, + monitoring: getDefaultRuleMonitoring(), }, { id: 'mock-saved-object-id', diff --git a/x-pack/plugins/alerting/server/saved_objects/index.ts b/x-pack/plugins/alerting/server/saved_objects/index.ts index d53635ec4f05d2..4768a1f7795429 100644 --- a/x-pack/plugins/alerting/server/saved_objects/index.ts +++ b/x-pack/plugins/alerting/server/saved_objects/index.ts @@ -29,6 +29,7 @@ export const AlertAttributesExcludedFromAAD = [ 'updatedBy', 'updatedAt', 'executionStatus', + 'monitoring', ]; // useful for Pick which is a @@ -41,7 +42,8 @@ export type AlertAttributesExcludedFromAADType = | 'mutedInstanceIds' | 'updatedBy' | 'updatedAt' - | 'executionStatus'; + | 'executionStatus' + | 'monitoring'; export function setupSavedObjects( savedObjects: SavedObjectsServiceSetup, diff --git a/x-pack/plugins/alerting/server/saved_objects/mappings.json b/x-pack/plugins/alerting/server/saved_objects/mappings.json index 05e221a47499c9..6923c94ec60a0a 100644 --- a/x-pack/plugins/alerting/server/saved_objects/mappings.json +++ b/x-pack/plugins/alerting/server/saved_objects/mappings.json @@ -93,6 +93,31 @@ } } }, + "monitoring": { + "properties": { + "execution": { + "properties": { + "history": { + "properties": { + "success": { + "type": "boolean" + }, + "timestamp": { + "type": "date" + } + } + }, + "calculated_metrics": { + "properties": { + "success_ratio": { + "type": "float" + } + } + } + } + } + } + }, "executionStatus": { "properties": { "status": { diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts index eb5529a9db8538..61d41e674c209f 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts @@ -21,7 +21,7 @@ import { TaskStatus, } from '../../../task_manager/server'; import { TaskRunnerContext } from './task_runner_factory'; -import { TaskRunner } from './task_runner'; +import { TaskRunner, getDefaultRuleMonitoring } from './task_runner'; import { encryptedSavedObjectsMock } from '../../../encrypted_saved_objects/server/mocks'; import { loggingSystemMock, @@ -176,6 +176,7 @@ describe('Task Runner', () => { status: 'unknown', lastExecutionDate: new Date('2020-08-20T19:23:38Z'), }, + monitoring: getDefaultRuleMonitoring(), }; beforeEach(() => { @@ -192,6 +193,8 @@ describe('Task Runner', () => { taskRunnerFactoryInitializerParams.executionContext.withContext.mockImplementation((ctx, fn) => fn() ); + mockedRuleTypeSavedObject.monitoring!.execution.history = []; + mockedRuleTypeSavedObject.monitoring!.execution.calculated_metrics.success_ratio = 0; }); test('successfully executes the task', async () => { @@ -219,6 +222,19 @@ describe('Task Runner', () => { const runnerResult = await taskRunner.run(); expect(runnerResult).toMatchInlineSnapshot(` Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 1, + }, + "history": Array [ + Object { + "success": true, + "timestamp": 0, + }, + ], + }, + }, "schedule": Object { "interval": "10s", }, @@ -337,6 +353,19 @@ describe('Task Runner', () => { 'alert', '1', { + monitoring: { + execution: { + calculated_metrics: { + success_ratio: 1, + }, + history: [ + { + success: true, + timestamp: 0, + }, + ], + }, + }, executionStatus: { error: null, lastDuration: 0, @@ -2303,8 +2332,22 @@ describe('Task Runner', () => { }, references: [], }); - expect(await taskRunner.run()).toMatchInlineSnapshot(` + const runnerResult = await taskRunner.run(); + expect(runnerResult).toMatchInlineSnapshot(` Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0, + }, + "history": Array [ + Object { + "success": false, + "timestamp": 0, + }, + ], + }, + }, "schedule": Object { "interval": "10s", }, @@ -2404,8 +2447,22 @@ describe('Task Runner', () => { references: [], }); - expect(await taskRunner.run()).toMatchInlineSnapshot(` + const runnerResult = await taskRunner.run(); + expect(runnerResult).toMatchInlineSnapshot(` Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 1, + }, + "history": Array [ + Object { + "success": true, + "timestamp": 0, + }, + ], + }, + }, "schedule": Object { "interval": "30s", }, @@ -2454,6 +2511,19 @@ describe('Task Runner', () => { expect(runnerResult).toMatchInlineSnapshot(` Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0, + }, + "history": Array [ + Object { + "success": false, + "timestamp": 0, + }, + ], + }, + }, "schedule": Object { "interval": "10s", }, @@ -2561,6 +2631,19 @@ describe('Task Runner', () => { expect(runnerResult).toMatchInlineSnapshot(` Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0, + }, + "history": Array [ + Object { + "success": false, + "timestamp": 0, + }, + ], + }, + }, "schedule": Object { "interval": "10s", }, @@ -2677,6 +2760,19 @@ describe('Task Runner', () => { expect(runnerResult).toMatchInlineSnapshot(` Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0, + }, + "history": Array [ + Object { + "success": false, + "timestamp": 0, + }, + ], + }, + }, "schedule": Object { "interval": "10s", }, @@ -2793,6 +2889,19 @@ describe('Task Runner', () => { expect(runnerResult).toMatchInlineSnapshot(` Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0, + }, + "history": Array [ + Object { + "success": false, + "timestamp": 0, + }, + ], + }, + }, "schedule": Object { "interval": "10s", }, @@ -2908,6 +3017,19 @@ describe('Task Runner', () => { expect(runnerResult).toMatchInlineSnapshot(` Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0, + }, + "history": Array [ + Object { + "success": false, + "timestamp": 0, + }, + ], + }, + }, "schedule": Object { "interval": "10s", }, @@ -3027,6 +3149,19 @@ describe('Task Runner', () => { expect(runnerResult).toMatchInlineSnapshot(` Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0, + }, + "history": Array [ + Object { + "success": false, + "timestamp": 0, + }, + ], + }, + }, "schedule": Object { "interval": "5m", }, @@ -4270,6 +4405,19 @@ describe('Task Runner', () => { const runnerResult = await taskRunner.run(); expect(runnerResult).toMatchInlineSnapshot(` Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 1, + }, + "history": Array [ + Object { + "success": true, + "timestamp": 0, + }, + ], + }, + }, "schedule": Object { "interval": "10s", }, @@ -4388,6 +4536,19 @@ describe('Task Runner', () => { 'alert', '1', { + monitoring: { + execution: { + calculated_metrics: { + success_ratio: 1, + }, + history: [ + { + success: true, + timestamp: 0, + }, + ], + }, + }, executionStatus: { error: null, lastDuration: 0, @@ -4478,4 +4639,196 @@ describe('Task Runner', () => { message: 'test:1: execution failed', }); }); + + test('successfully stores successful runs', async () => { + const taskRunner = new TaskRunner( + ruleType, + mockedTaskInstance, + taskRunnerFactoryInitializerParams + ); + + rulesClient.get.mockResolvedValue(mockedRuleTypeSavedObject); + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + id: '1', + type: 'alert', + attributes: { + apiKey: Buffer.from('123:abc').toString('base64'), + enabled: true, + }, + references: [], + }); + const runnerResult = await taskRunner.run(); + expect(runnerResult).toMatchInlineSnapshot(` + Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 1, + }, + "history": Array [ + Object { + "success": true, + "timestamp": 0, + }, + ], + }, + }, + "schedule": Object { + "interval": "10s", + }, + "state": Object { + "alertInstances": Object {}, + "alertTypeState": undefined, + "previousStartedAt": 1970-01-01T00:00:00.000Z, + }, + } + `); + }); + + test('successfully stores failure runs', async () => { + const taskRunner = new TaskRunner( + ruleType, + mockedTaskInstance, + taskRunnerFactoryInitializerParams + ); + rulesClient.get.mockResolvedValue(mockedRuleTypeSavedObject); + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce({ + id: '1', + type: 'alert', + attributes: { + apiKey: Buffer.from('123:abc').toString('base64'), + enabled: true, + }, + references: [], + }); + ruleType.executor.mockImplementation( + async ({ + services: executorServices, + }: AlertExecutorOptions< + AlertTypeParams, + AlertTypeState, + AlertInstanceState, + AlertInstanceContext, + string + >) => { + throw new Error('OMG'); + } + ); + const runnerResult = await taskRunner.run(); + expect(runnerResult).toMatchInlineSnapshot(` + Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0, + }, + "history": Array [ + Object { + "success": false, + "timestamp": 0, + }, + ], + }, + }, + "schedule": Object { + "interval": "10s", + }, + "state": Object {}, + } + `); + }); + + test('successfully stores the success ratio', async () => { + const taskRunner = new TaskRunner( + ruleType, + mockedTaskInstance, + taskRunnerFactoryInitializerParams + ); + rulesClient.get.mockResolvedValue(mockedRuleTypeSavedObject); + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValue({ + id: '1', + type: 'alert', + attributes: { + apiKey: Buffer.from('123:abc').toString('base64'), + enabled: true, + }, + references: [], + }); + await taskRunner.run(); + await taskRunner.run(); + await taskRunner.run(); + + ruleType.executor.mockImplementation( + async ({ + services: executorServices, + }: AlertExecutorOptions< + AlertTypeParams, + AlertTypeState, + AlertInstanceState, + AlertInstanceContext, + string + >) => { + throw new Error('OMG'); + } + ); + const runnerResult = await taskRunner.run(); + ruleType.executor.mockClear(); + expect(runnerResult).toMatchInlineSnapshot(` + Object { + "monitoring": Object { + "execution": Object { + "calculated_metrics": Object { + "success_ratio": 0.75, + }, + "history": Array [ + Object { + "success": true, + "timestamp": 0, + }, + Object { + "success": true, + "timestamp": 0, + }, + Object { + "success": true, + "timestamp": 0, + }, + Object { + "success": false, + "timestamp": 0, + }, + ], + }, + }, + "schedule": Object { + "interval": "10s", + }, + "state": Object {}, + } + `); + }); + + test('caps monitoring history at 200', async () => { + const taskRunner = new TaskRunner( + ruleType, + mockedTaskInstance, + taskRunnerFactoryInitializerParams + ); + rulesClient.get.mockResolvedValue(mockedRuleTypeSavedObject); + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValue({ + id: '1', + type: 'alert', + attributes: { + apiKey: Buffer.from('123:abc').toString('base64'), + enabled: true, + }, + references: [], + }); + + for (let i = 0; i < 300; i++) { + await taskRunner.run(); + } + const runnerResult = await taskRunner.run(); + expect(runnerResult.monitoring?.execution.history.length).toBe(200); + }); }); diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.ts index 9f7d71143152a4..b4fa5a1927fee5 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.ts @@ -33,6 +33,8 @@ import { AlertExecutionStatus, AlertExecutionStatusErrorReasons, RuleTypeRegistry, + RuleMonitoring, + RawRuleExecutionStatus, } from '../types'; import { promiseResult, map, Resultable, asOk, asErr, resolveErr } from '../lib/result_type'; import { taskInstanceToAlertTaskInstance } from './alert_task_instance'; @@ -58,12 +60,23 @@ import { import { createAbortableEsClientFactory } from '../lib/create_abortable_es_client_factory'; const FALLBACK_RETRY_INTERVAL = '5m'; +const MONITORING_HISTORY_LIMIT = 200; // 1,000,000 nanoseconds in 1 millisecond const Millis2Nanos = 1000 * 1000; +export const getDefaultRuleMonitoring = (): RuleMonitoring => ({ + execution: { + history: [], + calculated_metrics: { + success_ratio: 0, + }, + }, +}); + interface RuleTaskRunResult { state: RuleTaskState; + monitoring: RuleMonitoring | undefined; schedule: IntervalSchedule | undefined; } @@ -211,15 +224,12 @@ export class TaskRunner< }); } - private async updateRuleExecutionStatus( + private async updateRuleSavedObject( ruleId: string, namespace: string | undefined, - executionStatus: AlertExecutionStatus + attributes: { executionStatus?: RawRuleExecutionStatus; monitoring?: RuleMonitoring } ) { const client = this.context.internalSavedObjectsRepository; - const attributes = { - executionStatus: ruleExecutionStatusToRaw(executionStatus), - }; try { await partiallyUpdateAlert(client, ruleId, attributes, { @@ -228,9 +238,7 @@ export class TaskRunner< refresh: false, }); } catch (err) { - this.logger.error( - `error updating rule execution status for ${this.ruleType.id}:${ruleId} ${err.message}` - ); + this.logger.error(`error updating rule for ${this.ruleType.id}:${ruleId} ${err.message}`); } } @@ -556,7 +564,15 @@ export class TaskRunner< } catch (err) { throw new ErrorWithReason(AlertExecutionStatusErrorReasons.License, err); } + + if (rule.monitoring) { + if (rule.monitoring.execution.history.length >= MONITORING_HISTORY_LIMIT) { + // Remove the first (oldest) record + rule.monitoring.execution.history.shift(); + } + } return { + monitoring: asOk(rule.monitoring), state: await promiseResult( this.validateAndExecuteRule(services, apiKey, rule, event) ), @@ -622,10 +638,14 @@ export class TaskRunner< }); eventLogger.logEvent(startEvent); - const { state, schedule } = await errorAsRuleTaskRunResult( + const { state, schedule, monitoring } = await errorAsRuleTaskRunResult( this.loadRuleAttributesAndRun(event) ); + const ruleMonitoring = + resolveErr(monitoring, () => { + return getDefaultRuleMonitoring(); + }) ?? getDefaultRuleMonitoring(); const executionStatus: AlertExecutionStatus = map( state, (ruleTaskState: RuleTaskState) => executionStatusFromState(ruleTaskState), @@ -659,6 +679,10 @@ export class TaskRunner< executionStatus.lastDuration = Math.round(event.event?.duration / Millis2Nanos); } + const monitoringHistory = { + success: true, + timestamp: +new Date(), + }; // if executionStatus indicates an error, fill in fields in // event from it if (executionStatus.error) { @@ -670,8 +694,13 @@ export class TaskRunner< if (!event.message) { event.message = `${this.ruleType.id}:${ruleId}: execution failed`; } + monitoringHistory.success = false; } + ruleMonitoring.execution.history.push(monitoringHistory); + ruleMonitoring.execution.calculated_metrics.success_ratio = + ruleMonitoring.execution.history.filter(({ success }) => success).length / + ruleMonitoring.execution.history.length; eventLogger.logEvent(event); if (!this.cancelled) { @@ -680,7 +709,10 @@ export class TaskRunner< executionStatus )}` ); - await this.updateRuleExecutionStatus(ruleId, namespace, executionStatus); + await this.updateRuleSavedObject(ruleId, namespace, { + executionStatus: ruleExecutionStatusToRaw(executionStatus), + monitoring: ruleMonitoring, + }); } return { @@ -714,6 +746,7 @@ export class TaskRunner< } return { interval: taskSchedule?.interval ?? FALLBACK_RETRY_INTERVAL }; }), + monitoring: ruleMonitoring, }; } @@ -784,7 +817,9 @@ export class TaskRunner< this.logger.debug( `Updating rule task for ${this.ruleType.id} rule with id ${ruleId} - execution error due to timeout` ); - await this.updateRuleExecutionStatus(ruleId, namespace, executionStatus); + await this.updateRuleSavedObject(ruleId, namespace, { + executionStatus: ruleExecutionStatusToRaw(executionStatus), + }); } } @@ -1104,6 +1139,7 @@ async function errorAsRuleTaskRunResult( return { state: asErr(e), schedule: asErr(e), + monitoring: asErr(e), }; } } diff --git a/x-pack/plugins/alerting/server/types.ts b/x-pack/plugins/alerting/server/types.ts index f87a2889fe6fe4..866c8665ddb658 100644 --- a/x-pack/plugins/alerting/server/types.ts +++ b/x-pack/plugins/alerting/server/types.ts @@ -33,6 +33,7 @@ import { WithoutReservedActionGroups, ActionVariable, SanitizedRuleConfig, + RuleMonitoring, } from '../common'; import { LicenseType } from '../../licensing/server'; import { IAbortableClusterClient } from './lib/create_abortable_es_client_factory'; @@ -238,6 +239,7 @@ export interface RawRule extends SavedObjectAttributes { mutedInstanceIds: string[]; meta?: AlertMeta; executionStatus: RawRuleExecutionStatus; + monitoring?: RuleMonitoring; } export type AlertInfoParams = Pick< diff --git a/x-pack/plugins/apm/ftr_e2e/cypress_start.ts b/x-pack/plugins/apm/ftr_e2e/cypress_start.ts index 3abc627f9e2f0f..d65e428456b9d2 100644 --- a/x-pack/plugins/apm/ftr_e2e/cypress_start.ts +++ b/x-pack/plugins/apm/ftr_e2e/cypress_start.ts @@ -11,7 +11,7 @@ import { argv } from 'yargs'; import Url from 'url'; import cypress from 'cypress'; import { FtrProviderContext } from './ftr_provider_context'; -import { createApmUsersAndRoles } from '../scripts/create_apm_users_and_roles/create_apm_users_and_roles'; +import { createApmAndObsUsersAndRoles } from '../scripts/create_apm_users_and_roles/create_apm_users_and_roles'; import { esArchiverLoad, esArchiverUnload } from './cypress/tasks/es_archiver'; export async function cypressStart( @@ -27,7 +27,7 @@ export async function cypressStart( }); // Creates APM users - await createApmUsersAndRoles({ + await createApmAndObsUsersAndRoles({ elasticsearch: { username: config.get('servers.elasticsearch.username'), password: config.get('servers.elasticsearch.password'), diff --git a/x-pack/plugins/apm/public/components/app/Settings/agent_configurations/List/index.tsx b/x-pack/plugins/apm/public/components/app/Settings/agent_configurations/List/index.tsx index 15efd28756b0b6..fc9250973fc307 100644 --- a/x-pack/plugins/apm/public/components/app/Settings/agent_configurations/List/index.tsx +++ b/x-pack/plugins/apm/public/components/app/Settings/agent_configurations/List/index.tsx @@ -245,7 +245,6 @@ export function AgentConfigurationList({ items={configurations} initialSortField="service.name" initialSortDirection="asc" - initialPageSize={20} /> ); diff --git a/x-pack/plugins/apm/public/components/app/Settings/custom_link/custom_link_table.tsx b/x-pack/plugins/apm/public/components/app/Settings/custom_link/custom_link_table.tsx index 5ce98f8b10884c..d2603538d84bfa 100644 --- a/x-pack/plugins/apm/public/components/app/Settings/custom_link/custom_link_table.tsx +++ b/x-pack/plugins/apm/public/components/app/Settings/custom_link/custom_link_table.tsx @@ -119,7 +119,6 @@ export function CustomLinkTable({ items = [], onCustomLinkSelected }: Props) { } items={filteredItems} columns={columns} - initialPageSize={10} initialSortField="@timestamp" initialSortDirection="desc" /> diff --git a/x-pack/plugins/apm/public/components/app/error_group_overview/error_group_list/index.tsx b/x-pack/plugins/apm/public/components/app/error_group_overview/error_group_list/index.tsx index 65681a398d8e65..adeb3b17504447 100644 --- a/x-pack/plugins/apm/public/components/app/error_group_overview/error_group_list/index.tsx +++ b/x-pack/plugins/apm/public/components/app/error_group_overview/error_group_list/index.tsx @@ -233,7 +233,6 @@ function ErrorGroupList({ })} items={mainStatistics} columns={columns} - initialPageSize={25} initialSortField="occurrences" initialSortDirection="desc" sortItems={false} diff --git a/x-pack/plugins/apm/public/components/app/service_inventory/service_list/index.tsx b/x-pack/plugins/apm/public/components/app/service_inventory/service_list/index.tsx index 2d83f1f46bd388..4617daac2ddcf9 100644 --- a/x-pack/plugins/apm/public/components/app/service_inventory/service_list/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_inventory/service_list/index.tsx @@ -315,7 +315,6 @@ export function ServiceList({ noItemsMessage={noItemsMessage} initialSortField={initialSortField} initialSortDirection="desc" - initialPageSize={50} sortFn={(itemsToSort, sortField, sortDirection) => { // For healthStatus, sort items by healthStatus first, then by TPM return sortField === 'healthStatus' diff --git a/x-pack/plugins/apm/public/components/app/service_node_overview/index.tsx b/x-pack/plugins/apm/public/components/app/service_node_overview/index.tsx index 0436c27cdd6b7b..379632d33a8083 100644 --- a/x-pack/plugins/apm/public/components/app/service_node_overview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_node_overview/index.tsx @@ -25,7 +25,6 @@ import { truncate, unit } from '../../../utils/style'; import { ServiceNodeMetricOverviewLink } from '../../shared/links/apm/service_node_metric_overview_link'; import { ITableColumn, ManagedTable } from '../../shared/managed_table'; -const INITIAL_PAGE_SIZE = 25; const INITIAL_SORT_FIELD = 'cpu'; const INITIAL_SORT_DIRECTION = 'desc'; @@ -170,7 +169,6 @@ function ServiceNodeOverview() { })} items={items} columns={columns} - initialPageSize={INITIAL_PAGE_SIZE} initialSortField={INITIAL_SORT_FIELD} initialSortDirection={INITIAL_SORT_DIRECTION} /> diff --git a/x-pack/plugins/apm/public/components/app/service_overview/index.tsx b/x-pack/plugins/apm/public/components/app/service_overview/index.tsx index 9e5508a5810df7..2c30027770f435 100644 --- a/x-pack/plugins/apm/public/components/app/service_overview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_overview/index.tsx @@ -118,6 +118,7 @@ export function ServiceOverview() { isSingleColumn={isSingleColumn} start={start} end={end} + hidePerPageOptions={true} /> @@ -164,6 +165,7 @@ export function ServiceOverview() { {i18n.translate( diff --git a/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx b/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx index cbf60b7b59e4d8..255dfbdeb427a9 100644 --- a/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx @@ -24,12 +24,14 @@ interface ServiceOverviewDependenciesTableProps { fixedHeight?: boolean; isSingleColumn?: boolean; link?: ReactNode; + hidePerPageOptions?: boolean; } export function ServiceOverviewDependenciesTable({ fixedHeight, isSingleColumn = true, link, + hidePerPageOptions = false, }: ServiceOverviewDependenciesTableProps) { const { urlParams: { comparisonEnabled, comparisonType, latencyAggregationType }, @@ -139,6 +141,7 @@ export function ServiceOverviewDependenciesTable({ )} status={status} link={link} + hidePerPageOptions={hidePerPageOptions} /> ); } diff --git a/x-pack/plugins/apm/public/components/app/trace_overview/trace_list.tsx b/x-pack/plugins/apm/public/components/app/trace_overview/trace_list.tsx index e5f3c7bcbee4e7..fe09a4784239e2 100644 --- a/x-pack/plugins/apm/public/components/app/trace_overview/trace_list.tsx +++ b/x-pack/plugins/apm/public/components/app/trace_overview/trace_list.tsx @@ -169,7 +169,6 @@ export function TraceList({ items = [], isLoading, isFailure }: Props) { initialSortField="impact" initialSortDirection="desc" noItemsMessage={noItemsMessage} - initialPageSize={25} /> ); } diff --git a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/index.tsx b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/index.tsx index 57bfc2b61fc536..0087b0f9d1facb 100644 --- a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/index.tsx +++ b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/index.tsx @@ -211,7 +211,7 @@ export function SpanFlyout({ - + , ]} /> diff --git a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.stories.tsx b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.stories.tsx index 6b52fbe2d784aa..dea05961c4cef5 100644 --- a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.stories.tsx +++ b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.stories.tsx @@ -15,10 +15,27 @@ export default { sync: { control: { type: 'inline-radio', options: [true, false, undefined] }, }, + agentName: { + control: { + type: 'select', + options: [ + 'nodejs', + 'js-base', + 'rum-js', + 'php', + 'python', + 'dotnet', + 'iOS/swift', + 'ruby', + 'java', + 'go', + ], + }, + }, }, }; -export function Example({ sync }: SyncBadgeProps) { - return ; +export function Example({ sync, agentName }: SyncBadgeProps) { + return ; } -Example.args = { sync: true } as SyncBadgeProps; +Example.args = { sync: true, agentName: 'nodejs' } as SyncBadgeProps; diff --git a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.test.tsx b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.test.tsx new file mode 100644 index 00000000000000..b73532cfab8125 --- /dev/null +++ b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.test.tsx @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { getSyncLabel } from './sync_badge'; + +describe('Sync badge', () => { + describe('Nodejs', () => { + it('shows blocking badge', () => { + expect(getSyncLabel('nodejs', true)).toBe('blocking'); + }); + it('does not show async badge', () => { + expect(getSyncLabel('nodejs', false)).toBeUndefined(); + }); + }); + describe('PHP', () => { + it('does not show blocking badge', () => { + expect(getSyncLabel('php', true)).toBeUndefined(); + }); + it('shows async badge', () => { + expect(getSyncLabel('php', false)).toBe('async'); + }); + }); + describe('Python', () => { + it('does not show blocking badge', () => { + expect(getSyncLabel('python', true)).toBeUndefined(); + }); + it('shows async badge', () => { + expect(getSyncLabel('python', false)).toBe('async'); + }); + }); + describe('.NET', () => { + it('does not show blocking badge', () => { + expect(getSyncLabel('dotnet', true)).toBeUndefined(); + }); + it('shows async badge', () => { + expect(getSyncLabel('dotnet', false)).toBe('async'); + }); + }); + describe('iOS', () => { + it('does not show blocking badge', () => { + expect(getSyncLabel('iOS/swift', true)).toBeUndefined(); + }); + it('shows async badge', () => { + expect(getSyncLabel('iOS/swift', false)).toBe('async'); + }); + }); + describe('Ruby', () => { + it('does not show blocking badge', () => { + expect(getSyncLabel('ruby', true)).toBeUndefined(); + }); + it('shows async badge', () => { + expect(getSyncLabel('ruby', false)).toBe('async'); + }); + }); + describe('Java', () => { + it('does not show blocking badge', () => { + expect(getSyncLabel('java', true)).toBeUndefined(); + }); + it('shows async badge', () => { + expect(getSyncLabel('java', false)).toBe('async'); + }); + }); + describe('JS', () => { + it('shows blocking badge', () => { + expect(getSyncLabel('js-base', true)).toBe('blocking'); + }); + it('does not show async badge', () => { + expect(getSyncLabel('js-base', false)).toBeUndefined(); + }); + }); + describe('RUM', () => { + it('shows blocking badge', () => { + expect(getSyncLabel('rum-js', true)).toBe('blocking'); + }); + it('does not show async badge', () => { + expect(getSyncLabel('rum-js', false)).toBeUndefined(); + }); + }); +}); diff --git a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.tsx b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.tsx index fe74f3d51c8bc3..a51d710bf39616 100644 --- a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.tsx +++ b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/sync_badge.tsx @@ -8,33 +8,65 @@ import { EuiBadge } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; +import { AgentName } from '../../../../../../../typings/es_schemas/ui/fields/agent'; export interface SyncBadgeProps { /** * Is the request synchronous? True will show blocking, false will show async. */ sync?: boolean; + agentName: AgentName; } -export function SyncBadge({ sync }: SyncBadgeProps) { - switch (sync) { - case true: - return ( - - {i18n.translate('xpack.apm.transactionDetails.syncBadgeBlocking', { - defaultMessage: 'blocking', - })} - - ); - case false: - return ( - - {i18n.translate('xpack.apm.transactionDetails.syncBadgeAsync', { - defaultMessage: 'async', - })} - - ); - default: - return null; +const BLOCKING_LABEL = i18n.translate( + 'xpack.apm.transactionDetails.syncBadgeBlocking', + { + defaultMessage: 'blocking', } +); + +const ASYNC_LABEL = i18n.translate( + 'xpack.apm.transactionDetails.syncBadgeAsync', + { + defaultMessage: 'async', + } +); + +// true will show blocking, false will show async. +// otel doesn't set sync field +const agentsSyncMap: Record = { + nodejs: true, + 'js-base': true, + 'rum-js': true, + php: false, + python: false, + dotnet: false, + 'iOS/swift': false, + ruby: false, + java: false, + go: false, +}; + +export function getSyncLabel(agentName: AgentName, sync?: boolean) { + if (sync === undefined) { + return; + } + + const agentSyncValue = agentsSyncMap[agentName]; + if (sync && agentSyncValue) { + return BLOCKING_LABEL; + } + + if (!sync && !agentSyncValue) { + return ASYNC_LABEL; + } +} + +export function SyncBadge({ sync, agentName }: SyncBadgeProps) { + const syncLabel = getSyncLabel(agentName, sync); + if (!syncLabel) { + return null; + } + + return {syncLabel}; } diff --git a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/waterfall_item.tsx b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/waterfall_item.tsx index 056a2847c68bf8..d8942cab36f77c 100644 --- a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/waterfall_item.tsx +++ b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/waterfall_item.tsx @@ -228,7 +228,12 @@ export function WaterfallItem({ - {item.docType === 'span' && } + {item.docType === 'span' && ( + + )} ); diff --git a/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx b/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx index 962fbb4eb6be6d..93c222164f0260 100644 --- a/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx +++ b/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx @@ -15,6 +15,7 @@ import { import { i18n } from '@kbn/i18n'; import { omit } from 'lodash'; import React from 'react'; +import { enableInfrastructureView } from '../../../../../../observability/public'; import { isIosAgentName, isJavaAgentName, @@ -159,7 +160,8 @@ export function isJVMsTabHidden({ function useTabs({ selectedTab }: { selectedTab: Tab['key'] }) { const { agentName, runtimeName } = useApmServiceContext(); - const { config } = useApmPluginContext(); + const { config, core } = useApmPluginContext(); + const showInfraTab = core.uiSettings.get(enableInfrastructureView); const router = useApmRouter(); @@ -250,6 +252,7 @@ function useTabs({ selectedTab }: { selectedTab: Tab['key'] }) { label: i18n.translate('xpack.apm.home.infraTabLabel', { defaultMessage: 'Infrastructure', }), + hidden: !showInfraTab, }, { key: 'service-map', diff --git a/x-pack/plugins/apm/public/components/shared/dependencies_table/index.tsx b/x-pack/plugins/apm/public/components/shared/dependencies_table/index.tsx index 7c2bc722ac1e6b..844957defe67db 100644 --- a/x-pack/plugins/apm/public/components/shared/dependencies_table/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/dependencies_table/index.tsx @@ -45,6 +45,7 @@ interface Props { nameColumnTitle: React.ReactNode; status: FETCH_STATUS; compact?: boolean; + hidePerPageOptions?: boolean; } export function DependenciesTable(props: Props) { @@ -57,6 +58,7 @@ export function DependenciesTable(props: Props) { nameColumnTitle, status, compact = true, + hidePerPageOptions = false, } = props; // SparkPlots should be hidden if we're in two-column view and size XL (1200px) @@ -210,8 +212,8 @@ export function DependenciesTable(props: Props) { noItemsMessage={noItemsMessage} initialSortField="impactValue" initialSortDirection="desc" - initialPageSize={5} pagination={true} + hidePerPageOptions={hidePerPageOptions} /> diff --git a/x-pack/plugins/apm/public/components/shared/managed_table/__snapshots__/managed_table.test.tsx.snap b/x-pack/plugins/apm/public/components/shared/managed_table/__snapshots__/managed_table.test.tsx.snap index 15613af4daf98a..3559ee4afbb82c 100644 --- a/x-pack/plugins/apm/public/components/shared/managed_table/__snapshots__/managed_table.test.tsx.snap +++ b/x-pack/plugins/apm/public/components/shared/managed_table/__snapshots__/managed_table.test.tsx.snap @@ -44,9 +44,14 @@ exports[`ManagedTable should render a page-full of items, with defaults 1`] = ` onChange={[Function]} pagination={ Object { - "hidePerPageOptions": true, + "hidePerPageOptions": false, "pageIndex": 0, - "pageSize": 10, + "pageSize": 25, + "pageSizeOptions": Array [ + 10, + 25, + 50, + ], "totalItemCount": 3, } } @@ -102,6 +107,11 @@ exports[`ManagedTable should render when specifying initial values 1`] = ` "hidePerPageOptions": false, "pageIndex": 1, "pageSize": 2, + "pageSizeOptions": Array [ + 10, + 25, + 50, + ], "totalItemCount": 3, } } diff --git a/x-pack/plugins/apm/public/components/shared/managed_table/index.tsx b/x-pack/plugins/apm/public/components/shared/managed_table/index.tsx index 16ab8cb1d92021..37d55887cd182b 100644 --- a/x-pack/plugins/apm/public/components/shared/managed_table/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/managed_table/index.tsx @@ -47,6 +47,9 @@ interface Props { tableLayout?: 'auto' | 'fixed'; } +const PAGE_SIZE_OPTIONS = [10, 25, 50]; +const INITIAL_PAGE_SIZE = 25; + function defaultSortFn( items: T[], sortField: string, @@ -61,10 +64,10 @@ function UnoptimizedManagedTable(props: Props) { items, columns, initialPageIndex = 0, - initialPageSize = 10, + initialPageSize = INITIAL_PAGE_SIZE, initialSortField = props.columns[0]?.field || '', initialSortDirection = 'asc', - hidePerPageOptions = true, + hidePerPageOptions = false, noItemsMessage, sortItems = true, sortFn = defaultSortFn, @@ -128,6 +131,7 @@ function UnoptimizedManagedTable(props: Props) { totalItemCount: items.length, pageIndex: page, pageSize, + pageSizeOptions: PAGE_SIZE_OPTIONS, }; }, [hidePerPageOptions, items, page, pageSize, pagination]); diff --git a/x-pack/plugins/apm/public/components/shared/ml_callout/index.tsx b/x-pack/plugins/apm/public/components/shared/ml_callout/index.tsx index 9fa8bb5f04960e..e169b653cffb02 100644 --- a/x-pack/plugins/apm/public/components/shared/ml_callout/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/ml_callout/index.tsx @@ -107,7 +107,7 @@ export function MLCallout({ ), text: i18n.translate('xpack.apm.mlCallout.updateAvailableCalloutText', { defaultMessage: - 'We have updated the anomaly detection jobs that provide insights into degraded performance and added detectors for throughput and failed transaction rate. If you choose to upgrade, we will create the new jobs and close the existing legacy jobs. The data shown in the APM app will automatically switch to the new.', + 'We have updated the anomaly detection jobs that provide insights into degraded performance and added detectors for throughput and failed transaction rate. If you choose to upgrade, we will create the new jobs and close the existing legacy jobs. The data shown in the APM app will automatically switch to the new. Please note that the option to migrate all existing jobs will not be available if you choose to create a new job.', }), color: 'success', icon: 'wrench', diff --git a/x-pack/plugins/apm/public/components/shared/transactions_table/get_columns.tsx b/x-pack/plugins/apm/public/components/shared/transactions_table/get_columns.tsx index b6e02b1b08c3cb..49d5e95344ea43 100644 --- a/x-pack/plugins/apm/public/components/shared/transactions_table/get_columns.tsx +++ b/x-pack/plugins/apm/public/components/shared/transactions_table/get_columns.tsx @@ -5,12 +5,7 @@ * 2.0. */ -import { - EuiBasicTableColumn, - EuiFlexGroup, - EuiFlexItem, - RIGHT_ALIGNMENT, -} from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, RIGHT_ALIGNMENT } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; import { ValuesType } from 'utility-types'; @@ -25,6 +20,7 @@ import { APIReturnType } from '../../../services/rest/createCallApmApi'; import { ImpactBar } from '../impact_bar'; import { TransactionDetailLink } from '../links/apm/transaction_detail_link'; import { ListMetric } from '../list_metric'; +import { ITableColumn } from '../managed_table'; import { TruncateWithTooltip } from '../truncate_with_tooltip'; import { getLatencyColumnLabel } from './get_latency_column_label'; @@ -51,7 +47,7 @@ export function getColumns({ comparisonEnabled?: boolean; shouldShowSparkPlots?: boolean; comparisonType?: TimeRangeComparisonType; -}): Array> { +}): Array> { return [ { field: 'name', diff --git a/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx b/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx index f943cf4da4b059..a98eda2d3b9616 100644 --- a/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx @@ -5,12 +5,7 @@ * 2.0. */ -import { - EuiBasicTable, - EuiFlexGroup, - EuiFlexItem, - EuiTitle, -} from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { orderBy } from 'lodash'; import React, { useState } from 'react'; @@ -28,6 +23,7 @@ import { OverviewTableContainer } from '../overview_table_container'; import { getColumns } from './get_columns'; import { ElasticDocsLink } from '../links/elastic_docs_link'; import { useBreakpoints } from '../../../hooks/use_breakpoints'; +import { ManagedTable } from '../managed_table'; type ApiResponse = APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics'>; @@ -60,6 +56,7 @@ interface Props { hideViewTransactionsLink?: boolean; isSingleColumn?: boolean; numberOfTransactionsPerPage?: number; + hidePerPageOptions?: boolean; showAggregationAccurateCallout?: boolean; environment: string; fixedHeight?: boolean; @@ -73,13 +70,14 @@ export function TransactionsTable({ hideViewTransactionsLink = false, isSingleColumn = true, numberOfTransactionsPerPage = 5, + hidePerPageOptions = false, showAggregationAccurateCallout = false, environment, kuery, start, end, }: Props) { - const [tableOptions, setTableOptions] = useState<{ + const [tableOptions] = useState<{ pageIndex: number; sort: { direction: SortDirection; @@ -228,13 +226,6 @@ export function TransactionsTable({ const isLoading = status === FETCH_STATUS.LOADING; const isNotInitiated = status === FETCH_STATUS.NOT_INITIATED; - const pagination = { - pageIndex, - pageSize: numberOfTransactionsPerPage, - totalItemCount: transactionGroupsTotalItems, - hidePerPageOptions: true, - }; - return ( @@ -309,7 +300,14 @@ export function TransactionsTable({ transactionGroupsTotalItems === 0 && isNotInitiated } > - { - setTableOptions({ - pageIndex: newTableOptions.page?.index ?? 0, - sort: newTableOptions.sort - ? { - field: newTableOptions.sort.field as SortField, - direction: newTableOptions.sort.direction, - } - : DEFAULT_SORT, - }); - }} + hidePerPageOptions={hidePerPageOptions} /> diff --git a/x-pack/plugins/apm/scripts/create_apm_users_and_roles/create_apm_users_and_roles.ts b/x-pack/plugins/apm/scripts/create_apm_users_and_roles/create_apm_users_and_roles.ts index 708a8b62287be8..95d67301db2cea 100644 --- a/x-pack/plugins/apm/scripts/create_apm_users_and_roles/create_apm_users_and_roles.ts +++ b/x-pack/plugins/apm/scripts/create_apm_users_and_roles/create_apm_users_and_roles.ts @@ -21,7 +21,7 @@ export interface Kibana { hostname: string; } -export async function createApmUsersAndRoles({ +export async function createApmAndObsUsersAndRoles({ kibana, elasticsearch, }: { @@ -62,6 +62,8 @@ export async function createApmUsersAndRoles({ const users = [ { username: 'apm_read_user', roles: [KIBANA_READ_ROLE] }, { username: 'apm_power_user', roles: [KIBANA_POWER_ROLE] }, + { username: 'obs_read_user', roles: [KIBANA_READ_ROLE] }, + { username: 'obs_admin_user', roles: [KIBANA_POWER_ROLE] }, ]; // create users diff --git a/x-pack/plugins/apm/scripts/create_apm_users_and_roles/create_apm_users_and_roles_cli.ts b/x-pack/plugins/apm/scripts/create_apm_users_and_roles/create_apm_users_and_roles_cli.ts index 2b42fb3aeb6251..e8884cca3d7b04 100644 --- a/x-pack/plugins/apm/scripts/create_apm_users_and_roles/create_apm_users_and_roles_cli.ts +++ b/x-pack/plugins/apm/scripts/create_apm_users_and_roles/create_apm_users_and_roles_cli.ts @@ -9,7 +9,7 @@ import { argv } from 'yargs'; import { AbortError, isAxiosError } from './helpers/call_kibana'; -import { createApmUsersAndRoles } from './create_apm_users_and_roles'; +import { createApmAndObsUsersAndRoles } from './create_apm_users_and_roles'; import { getKibanaVersion } from './helpers/get_version'; async function init() { @@ -57,7 +57,7 @@ async function init() { const version = await getKibanaVersion({ elasticsearch, kibana }); console.log(`Connected to Kibana ${version}`); - const users = await createApmUsersAndRoles({ elasticsearch, kibana }); + const users = await createApmAndObsUsersAndRoles({ elasticsearch, kibana }); const credentials = users .map((u) => ` - ${u.username} / ${esPassword}`) .join('\n'); diff --git a/x-pack/plugins/apm/server/routes/services/route.ts b/x-pack/plugins/apm/server/routes/services/route.ts index 0f4034a2187486..2b7a71ba13acf8 100644 --- a/x-pack/plugins/apm/server/routes/services/route.ts +++ b/x-pack/plugins/apm/server/routes/services/route.ts @@ -66,6 +66,8 @@ const servicesRoute = createApmServerRoute({ const searchAggregatedTransactions = await getSearchAggregatedTransactions({ ...setup, kuery, + start, + end, }); return getServices({ diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/alert.test.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/alert.test.tsx new file mode 100644 index 00000000000000..bdffe3c50c4a44 --- /dev/null +++ b/x-pack/plugins/cases/public/components/user_actions/comment/alert.test.tsx @@ -0,0 +1,138 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CommentResponseAlertsType } from '../../../../common/api'; +import { SnakeToCamelCase } from '../../../../common/types'; +import { getRuleId, getRuleName } from './alert'; +import { Ecs } from '../../../containers/types'; + +describe('rule getters', () => { + describe.each([ + ['getRuleId', getRuleId], + ['getRuleName', getRuleName], + ])('%s null checks', (name, funcToExec) => { + it('returns null if the comment field is an empty string', () => { + const comment = { + rule: { + id: '', + name: '', + }, + } as unknown as SnakeToCamelCase; + + expect(funcToExec(comment)).toBeNull(); + }); + + it('returns null if the comment field is an empty string in an array', () => { + const comment = { + rule: { + id: [''], + name: [''], + }, + } as unknown as SnakeToCamelCase; + + expect(funcToExec(comment)).toBeNull(); + }); + + it('returns null if the comment does not have a rule field', () => { + const comment = {} as unknown as SnakeToCamelCase; + + expect(funcToExec(comment)).toBeNull(); + }); + + it('returns null if the signals and alert field is an empty string', () => { + const comment = {} as unknown as SnakeToCamelCase; + const alert = { + signal: { rule: { id: '', name: '' } }, + kibana: { alert: { rule: { uuid: '', name: '' } } }, + } as unknown as Ecs; + + expect(funcToExec(comment, alert)).toBeNull(); + }); + }); + + describe.each([ + ['getRuleId', getRuleId, '1'], + ['getRuleName', getRuleName, 'Rule name1'], + ])('%s', (name, funcToExec, expectedResult) => { + it('returns the first entry in the comment field', () => { + const comment = { + rule: { + id: ['1', '2'], + name: ['Rule name1', 'Rule name2'], + }, + } as unknown as SnakeToCamelCase; + + expect(funcToExec(comment)).toEqual(expectedResult); + }); + + it('returns signal field', () => { + const comment = {} as unknown as SnakeToCamelCase; + const alert = { signal: { rule: { id: '1', name: 'Rule name1' } } } as unknown as Ecs; + + expect(funcToExec(comment, alert)).toEqual(expectedResult); + }); + + it('returns kibana alert field', () => { + const comment = {} as unknown as SnakeToCamelCase; + const alert = { + kibana: { alert: { rule: { uuid: '1', name: 'Rule name1' } } }, + } as unknown as Ecs; + + expect(funcToExec(comment, alert)).toEqual(expectedResult); + }); + + it('returns signal field even when kibana alert field is defined', () => { + const comment = {} as unknown as SnakeToCamelCase; + const alert = { + signal: { rule: { id: '1', name: 'Rule name1' } }, + kibana: { alert: { rule: { uuid: 'rule id1', name: 'other rule name1' } } }, + } as unknown as Ecs; + + expect(funcToExec(comment, alert)).toEqual(expectedResult); + }); + + it('returns the first entry in the signals field', () => { + const comment = {} as unknown as SnakeToCamelCase; + const alert = { + signal: { rule: { id: '1', name: 'Rule name1' } }, + kibana: { alert: { rule: { uuid: 'rule id1', name: 'other rule name1' } } }, + } as unknown as Ecs; + + expect(funcToExec(comment, alert)).toEqual(expectedResult); + }); + + it('returns the alert field if the signals field is an empty string', () => { + const comment = {} as unknown as SnakeToCamelCase; + const alert = { + signal: { rule: { id: '', name: '' } }, + kibana: { alert: { rule: { uuid: '1', name: 'Rule name1' } } }, + } as unknown as Ecs; + + expect(funcToExec(comment, alert)).toEqual(expectedResult); + }); + + it('returns the alert field if the signals field is an empty string in an array', () => { + const comment = {} as unknown as SnakeToCamelCase; + const alert = { + signal: { rule: { id: [''], name: [''] } }, + kibana: { alert: { rule: { uuid: '1', name: 'Rule name1' } } }, + } as unknown as Ecs; + + expect(funcToExec(comment, alert)).toEqual(expectedResult); + }); + + it('returns the alert field first item if the signals field is an empty string in an array', () => { + const comment = {} as unknown as SnakeToCamelCase; + const alert = { + signal: { rule: { id: [''], name: [''] } }, + kibana: { alert: { rule: { uuid: ['1', '2'], name: ['Rule name1', 'Rule name2'] } } }, + } as unknown as Ecs; + + expect(funcToExec(comment, alert)).toEqual(expectedResult); + }); + }); +}); diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/alert.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/alert.tsx index 0341af259e4022..91752261d1471d 100644 --- a/x-pack/plugins/cases/public/components/user_actions/comment/alert.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/comment/alert.tsx @@ -18,6 +18,7 @@ import { UserActionUsernameWithAvatar } from '../avatar_username'; import { AlertCommentEvent } from './alert_event'; import { UserActionCopyLink } from '../copy_link'; import { UserActionShowAlert } from './show_alert'; +import { Ecs } from '../../../containers/types'; type BuilderArgs = Pick< UserActionBuilderArgs, @@ -29,9 +30,6 @@ type BuilderArgs = Pick< | 'onShowAlertDetails' > & { comment: SnakeToCamelCase }; -const getFirstItem = (items: string | string[]) => - Array.isArray(items) ? (items.length > 0 ? items[0] : '') : items; - export const createAlertAttachmentUserActionBuilder = ({ userAction, comment, @@ -42,24 +40,16 @@ export const createAlertAttachmentUserActionBuilder = ({ onShowAlertDetails, }: BuilderArgs): ReturnType => ({ build: () => { - const alertId = getFirstItem(comment.alertId); - const alertIndex = getFirstItem(comment.index); + const alertId = getNonEmptyField(comment.alertId); + const alertIndex = getNonEmptyField(comment.index); - if (isEmpty(alertId)) { + if (!alertId || !alertIndex) { return []; } - const ruleId = - comment?.rule?.id ?? - alertData[alertId]?.signal?.rule?.id?.[0] ?? - get(alertData[alertId], ALERT_RULE_UUID)[0] ?? - null; - - const ruleName = - comment?.rule?.name ?? - alertData[alertId]?.signal?.rule?.name?.[0] ?? - get(alertData[alertId], ALERT_RULE_NAME)[0] ?? - null; + const alertField: Ecs | undefined = alertData[alertId]; + const ruleId = getRuleId(comment, alertField); + const ruleName = getRuleName(comment, alertField); return [ { @@ -104,3 +94,51 @@ export const createAlertAttachmentUserActionBuilder = ({ ]; }, }); + +const getFirstItem = (items?: string | string[] | null): string | null => { + return Array.isArray(items) ? items[0] : items ?? null; +}; + +export const getRuleId = (comment: BuilderArgs['comment'], alertData?: Ecs): string | null => + getRuleField({ + commentRuleField: comment?.rule?.id, + alertData, + signalRuleFieldPath: 'signal.rule.id', + kibanaAlertFieldPath: ALERT_RULE_UUID, + }); + +export const getRuleName = (comment: BuilderArgs['comment'], alertData?: Ecs): string | null => + getRuleField({ + commentRuleField: comment?.rule?.name, + alertData, + signalRuleFieldPath: 'signal.rule.name', + kibanaAlertFieldPath: ALERT_RULE_NAME, + }); + +const getRuleField = ({ + commentRuleField, + alertData, + signalRuleFieldPath, + kibanaAlertFieldPath, +}: { + commentRuleField: string | string[] | null | undefined; + alertData: Ecs | undefined; + signalRuleFieldPath: string; + kibanaAlertFieldPath: string; +}): string | null => { + const field = + getNonEmptyField(commentRuleField) ?? + getNonEmptyField(get(alertData, signalRuleFieldPath)) ?? + getNonEmptyField(get(alertData, kibanaAlertFieldPath)); + + return field; +}; + +function getNonEmptyField(field: string | string[] | undefined | null): string | null { + const firstItem = getFirstItem(field); + if (firstItem == null || isEmpty(firstItem)) { + return null; + } + + return firstItem; +} diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx index ca45191dd4cb16..df3374c848e56c 100644 --- a/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/comment/comment.test.tsx @@ -49,6 +49,23 @@ describe('createCommentUserActionBuilder', () => { expect(screen.getByText('edited comment')).toBeInTheDocument(); }); + it('renders correctly when deleting a comment', async () => { + const userAction = getUserAction('comment', Actions.delete); + const builder = createCommentUserActionBuilder({ + ...builderArgs, + userAction, + }); + + const createdUserAction = builder.build(); + render( + + + + ); + + expect(screen.getByText('removed comment')).toBeInTheDocument(); + }); + it('renders correctly a user comment', async () => { const userAction = getUserAction('comment', Actions.create, { commentId: basicCase.comments[0].id, diff --git a/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx b/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx index 79df2aaca99785..9c0b5397207489 100644 --- a/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/comment/comment.tsx @@ -17,6 +17,24 @@ import { createAlertAttachmentUserActionBuilder } from './alert'; import { createActionAttachmentUserActionBuilder } from './actions'; const getUpdateLabelTitle = () => `${i18n.EDITED_FIELD} ${i18n.COMMENT.toLowerCase()}`; +const getDeleteLabelTitle = () => `${i18n.REMOVED_FIELD} ${i18n.COMMENT.toLowerCase()}`; + +const getDeleteCommentUserAction = ({ + userAction, + handleOutlineComment, +}: { + userAction: UserActionResponse; +} & Pick): EuiCommentProps[] => { + const label = getDeleteLabelTitle(); + const commonBuilder = createCommonUpdateUserActionBuilder({ + userAction, + handleOutlineComment, + label, + icon: 'cross', + }); + + return commonBuilder.build(); +}; const getCreateCommentUserAction = ({ userAction, @@ -101,8 +119,12 @@ export const createCommentUserActionBuilder: UserActionBuilder = ({ }) => ({ build: () => { const commentUserAction = userAction as UserActionResponse; - const comment = caseData.comments.find((c) => c.id === commentUserAction.commentId); + if (commentUserAction.action === Actions.delete) { + return getDeleteCommentUserAction({ userAction: commentUserAction, handleOutlineComment }); + } + + const comment = caseData.comments.find((c) => c.id === commentUserAction.commentId); if (comment == null) { return []; } diff --git a/x-pack/plugins/cases/public/containers/translations.ts b/x-pack/plugins/cases/public/containers/translations.ts index eb7e5ff99e518a..72aeb66772c523 100644 --- a/x-pack/plugins/cases/public/containers/translations.ts +++ b/x-pack/plugins/cases/public/containers/translations.ts @@ -81,6 +81,6 @@ export const SYNC_CASE = (caseTitle: string) => export const STATUS_CHANGED_TOASTER_TEXT = i18n.translate( 'xpack.cases.containers.statusChangeToasterText', { - defaultMessage: 'Alerts in this case have been also had their status updated', + defaultMessage: 'Updated the statuses of attached alerts.', } ); diff --git a/x-pack/plugins/cases/public/containers/use_get_cases.test.tsx b/x-pack/plugins/cases/public/containers/use_get_cases.test.tsx index fd7b2eddfe7c9a..23b57004ca4d78 100644 --- a/x-pack/plugins/cases/public/containers/use_get_cases.test.tsx +++ b/x-pack/plugins/cases/public/containers/use_get_cases.test.tsx @@ -20,12 +20,15 @@ import { UpdateKey } from './types'; import { allCases, basicCase } from './mock'; import * as api from './api'; import { TestProviders } from '../common/mock'; +import { useToasts } from '../common/lib/kibana'; jest.mock('./api'); jest.mock('../common/lib/kibana'); describe('useGetCases', () => { const abortCtrl = new AbortController(); + const addSuccess = jest.fn(); + (useToasts as jest.Mock).mockReturnValue({ addSuccess, addError: jest.fn() }); beforeEach(() => { jest.clearAllMocks(); @@ -113,6 +116,9 @@ describe('useGetCases', () => { abortCtrl.signal ); }); + expect(addSuccess).toHaveBeenCalledWith({ + title: `Updated "${basicCase.title}"`, + }); }); it('refetch cases', async () => { diff --git a/x-pack/plugins/cases/public/containers/use_get_cases.tsx b/x-pack/plugins/cases/public/containers/use_get_cases.tsx index eacad3c8ca0203..de0f0f514da1bb 100644 --- a/x-pack/plugins/cases/public/containers/use_get_cases.tsx +++ b/x-pack/plugins/cases/public/containers/use_get_cases.tsx @@ -212,6 +212,7 @@ export const useGetCases = ( const dispatchUpdateCaseProperty = useCallback( async ({ updateKey, updateValue, caseId, refetchCasesStatus, version }: UpdateCase) => { + const caseData = state.data.cases.find((caseInfo) => caseInfo.id === caseId); try { didCancelUpdateCases.current = false; abortCtrlUpdateCases.current.abort(); @@ -230,6 +231,15 @@ export const useGetCases = ( dispatch({ type: 'FETCH_UPDATE_CASE_SUCCESS' }); fetchCases(state.filterOptions, state.queryParams); refetchCasesStatus(); + if (caseData) { + toasts.addSuccess({ + title: i18n.UPDATED_CASE(caseData.title), + text: + updateKey === 'status' && caseData.totalAlerts > 0 + ? i18n.STATUS_CHANGED_TOASTER_TEXT + : undefined, + }); + } } } catch (error) { if (!didCancelUpdateCases.current) { @@ -240,8 +250,7 @@ export const useGetCases = ( } } }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [state.filterOptions, state.queryParams] + [fetchCases, state.data, state.filterOptions, state.queryParams, toasts] ); const refetchCases = useCallback(() => { diff --git a/x-pack/plugins/cases/public/containers/utils.test.ts b/x-pack/plugins/cases/public/containers/utils.test.ts index 3ee6182cb053dd..0dd55fbe8aacae 100644 --- a/x-pack/plugins/cases/public/containers/utils.test.ts +++ b/x-pack/plugins/cases/public/containers/utils.test.ts @@ -97,7 +97,7 @@ describe('utils', () => { expect(toast).toEqual({ title: 'Updated "My case"', - text: 'Alerts in this case have been also had their status updated', + text: 'Updated the statuses of attached alerts.', }); }); diff --git a/x-pack/plugins/cases/server/client/metrics/actions/actions.test.ts b/x-pack/plugins/cases/server/client/metrics/actions/actions.test.ts index f8336424be17d4..239277259539e4 100644 --- a/x-pack/plugins/cases/server/client/metrics/actions/actions.test.ts +++ b/x-pack/plugins/cases/server/client/metrics/actions/actions.test.ts @@ -5,13 +5,13 @@ * 2.0. */ +import { CaseResponse } from '../../../../common/api'; import { createCasesClientMock } from '../../mocks'; import { CasesClientArgs } from '../../types'; import { loggingSystemMock } from '../../../../../../../src/core/server/mocks'; import { createAttachmentServiceMock } from '../../../services/mocks'; import { Actions } from './actions'; -import { ICaseResponse } from '../../typedoc_interfaces'; const clientMock = createCasesClientMock(); const attachmentService = createAttachmentServiceMock(); @@ -30,7 +30,7 @@ const constructorOptions = { caseId: 'test-id', casesClient: clientMock, clientA describe('Actions', () => { beforeAll(() => { getAuthorizationFilter.mockResolvedValue({}); - clientMock.cases.get.mockResolvedValue({ id: '' } as unknown as ICaseResponse); + clientMock.cases.get.mockResolvedValue({ id: '' } as unknown as CaseResponse); }); beforeEach(() => { diff --git a/x-pack/plugins/cases/server/client/metrics/connectors.test.ts b/x-pack/plugins/cases/server/client/metrics/connectors.test.ts new file mode 100644 index 00000000000000..0b15b94525b029 --- /dev/null +++ b/x-pack/plugins/cases/server/client/metrics/connectors.test.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createCasesClientMock } from '../mocks'; +import { CasesClientArgs } from '../types'; +import { loggingSystemMock } from '../../../../../../src/core/server/mocks'; +import { createUserActionServiceMock } from '../../services/mocks'; +import { Connectors } from './connectors'; + +describe('Connectors', () => { + const clientMock = createCasesClientMock(); + const logger = loggingSystemMock.createLogger(); + const userActionService = createUserActionServiceMock(); + const getAuthorizationFilter = jest.fn().mockResolvedValue({}); + + const clientArgs = { + logger, + userActionService, + authorization: { getAuthorizationFilter }, + } as unknown as CasesClientArgs; + + const constructorOptions = { caseId: 'test-id', casesClient: clientMock, clientArgs }; + + beforeAll(() => {}); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('returns zero as total if the are no connectors', async () => { + userActionService.getUniqueConnectors.mockResolvedValue([]); + const handler = new Connectors(constructorOptions); + expect(await handler.compute()).toEqual({ connectors: { total: 0 } }); + }); + + it('returns the correct number of connectors', async () => { + userActionService.getUniqueConnectors.mockResolvedValue([ + { id: '865b6040-7533-11ec-8bcc-a9fc6f9d63b2' }, + { id: '915c2600-7533-11ec-8bcc-a9fc6f9d63b2' }, + { id: 'b2635b10-63e1-11ec-90af-6fe7d490ff66' }, + ]); + + const handler = new Connectors(constructorOptions); + expect(await handler.compute()).toEqual({ connectors: { total: 3 } }); + }); +}); diff --git a/x-pack/plugins/cases/server/client/metrics/connectors.ts b/x-pack/plugins/cases/server/client/metrics/connectors.ts index 137bcdd61cdec9..3dd29b8b6dda7a 100644 --- a/x-pack/plugins/cases/server/client/metrics/connectors.ts +++ b/x-pack/plugins/cases/server/client/metrics/connectors.ts @@ -6,6 +6,8 @@ */ import { CaseMetricsResponse } from '../../../common/api'; +import { Operations } from '../../authorization'; +import { createCaseError } from '../../common/error'; import { BaseHandler } from './base_handler'; import { BaseHandlerCommonOptions } from './types'; @@ -15,8 +17,31 @@ export class Connectors extends BaseHandler { } public async compute(): Promise { - return { - connectors: { total: 0 }, - }; + const { unsecuredSavedObjectsClient, authorization, userActionService, logger } = + this.options.clientArgs; + + const { caseId } = this.options; + + const { filter: authorizationFilter } = await authorization.getAuthorizationFilter( + Operations.getUserActionMetrics + ); + + const uniqueConnectors = await userActionService.getUniqueConnectors({ + unsecuredSavedObjectsClient, + caseId, + filter: authorizationFilter, + }); + + try { + return { + connectors: { total: uniqueConnectors.length }, + }; + } catch (error) { + throw createCaseError({ + message: `Failed to retrieve total connectors metrics for case id: ${caseId}: ${error}`, + error, + logger, + }); + } } } diff --git a/x-pack/plugins/cases/server/saved_object_types/migrations/comments.test.ts b/x-pack/plugins/cases/server/saved_object_types/migrations/comments.test.ts index 1983ae0db51d31..77a9382f123895 100644 --- a/x-pack/plugins/cases/server/saved_object_types/migrations/comments.test.ts +++ b/x-pack/plugins/cases/server/saved_object_types/migrations/comments.test.ts @@ -9,12 +9,14 @@ import { createCommentsMigrations, mergeMigrationFunctionMaps, migrateByValueLensVisualizations, + removeRuleInformation, stringifyCommentWithoutTrailingNewline, } from './comments'; import { getLensVisualizations, parseCommentString, } from '../../../common/utils/markdown_plugins/utils'; +import { CommentType } from '../../../common/api'; import { savedObjectsServiceMock } from '../../../../../../src/core/server/mocks'; import { makeLensEmbeddableFactory } from '../../../../lens/server/embeddable/make_lens_embeddable_factory'; @@ -396,4 +398,79 @@ describe('comments migrations', () => { ); }); }); + + describe('removeRuleInformation', () => { + it('does not modify non-alert comment', () => { + const doc = { + id: '123', + attributes: { + type: 'user', + }, + type: 'abc', + references: [], + }; + + expect(removeRuleInformation(doc)).toEqual(doc); + }); + + it('sets the rule fields to null', () => { + const doc = { + id: '123', + type: 'abc', + attributes: { + type: CommentType.alert, + rule: { + id: '123', + name: 'hello', + }, + }, + }; + + expect(removeRuleInformation(doc)).toEqual({ + ...doc, + attributes: { ...doc.attributes, rule: { id: null, name: null } }, + references: [], + }); + }); + + it('sets the rule fields to null for a generated alert', () => { + const doc = { + id: '123', + type: 'abc', + attributes: { + type: CommentType.generatedAlert, + rule: { + id: '123', + name: 'hello', + }, + }, + }; + + expect(removeRuleInformation(doc)).toEqual({ + ...doc, + attributes: { ...doc.attributes, rule: { id: null, name: null } }, + references: [], + }); + }); + + it('preserves the references field', () => { + const doc = { + id: '123', + type: 'abc', + attributes: { + type: CommentType.alert, + rule: { + id: '123', + name: 'hello', + }, + }, + references: [{ id: '123', name: 'hi', type: 'awesome' }], + }; + + expect(removeRuleInformation(doc)).toEqual({ + ...doc, + attributes: { ...doc.attributes, rule: { id: null, name: null } }, + }); + }); + }); }); diff --git a/x-pack/plugins/cases/server/saved_object_types/migrations/comments.ts b/x-pack/plugins/cases/server/saved_object_types/migrations/comments.ts index 0af9db13fce406..5ab1dab784f56f 100644 --- a/x-pack/plugins/cases/server/saved_object_types/migrations/comments.ts +++ b/x-pack/plugins/cases/server/saved_object_types/migrations/comments.ts @@ -98,6 +98,15 @@ export const createCommentsMigrations = ( ): SavedObjectSanitizedDoc => { return addOwnerToSO(doc); }, + /* + * This is to fix the issue here: https://github.com/elastic/kibana/issues/123089 + * Instead of migrating the rule information in the references array which was risky for 8.0 + * we decided to remove the information since the UI will do the look up for the rule information if + * the backend returns it as null. + * + * The downside is it incurs extra query overhead. + **/ + '8.0.0': removeRuleInformation, }; return mergeMigrationFunctionMaps(commentsMigrations, embeddableMigrations); @@ -175,3 +184,29 @@ export const mergeMigrationFunctionMaps = ( return mergeWith({ ...obj1 }, obj2, customizer); }; + +export const removeRuleInformation = ( + doc: SavedObjectUnsanitizedDoc> +): SavedObjectSanitizedDoc => { + if ( + doc.attributes.type === CommentType.alert || + doc.attributes.type === CommentType.generatedAlert + ) { + return { + ...doc, + attributes: { + ...doc.attributes, + rule: { + id: null, + name: null, + }, + }, + references: doc.references ?? [], + }; + } + + return { + ...doc, + references: doc.references ?? [], + }; +}; diff --git a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/alerts.test.ts b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/alerts.test.ts new file mode 100644 index 00000000000000..77059d5b3c3380 --- /dev/null +++ b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/alerts.test.ts @@ -0,0 +1,181 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + SavedObject, + SavedObjectMigrationContext, + SavedObjectsMigrationLogger, +} from 'kibana/server'; +import { cloneDeep, omit } from 'lodash'; +import { migrationMocks } from 'src/core/server/mocks'; +import { removeRuleInformation } from './alerts'; + +describe('alert user actions', () => { + describe('removeRuleInformation', () => { + let context: jest.Mocked; + + beforeEach(() => { + context = migrationMocks.createContext(); + }); + + it('does not modify non-alert user action', () => { + const doc = { + id: '123', + attributes: { + action: 'create', + action_field: ['description'], + }, + type: 'abc', + references: [], + }; + + expect(removeRuleInformation(doc, context)).toEqual(doc); + }); + + it('does not modify the document when it fails to decode the new_value field', () => { + const doc = { + id: '123', + attributes: { + action: 'create', + action_field: ['comment'], + new_value: '{"type":"alert",', + }, + type: 'abc', + references: [], + }; + + expect(removeRuleInformation(doc, context)).toEqual(doc); + + const log = context.log as jest.Mocked; + expect(log.error.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "Failed to migrate user action alerts with doc id: 123 version: 8.0.0 error: Unexpected end of JSON input", + Object { + "migrations": Object { + "userAction": Object { + "id": "123", + }, + }, + }, + ] + `); + }); + + it('does not modify the document when new_value is null', () => { + const doc = { + id: '123', + attributes: { + action: 'create', + action_field: ['comment'], + new_value: null, + }, + type: 'abc', + references: [], + }; + + expect(removeRuleInformation(doc, context)).toEqual(doc); + }); + + it('does not modify the document when new_value is undefined', () => { + const doc = { + id: '123', + attributes: { + action: 'create', + action_field: ['comment'], + }, + type: 'abc', + references: [], + }; + + expect(removeRuleInformation(doc, context)).toEqual(doc); + }); + + it('does not modify the document when the comment type is not an alert', () => { + const doc = { + id: '123', + attributes: { + action: 'create', + action_field: ['comment'], + new_value: + '{"type":"not_an_alert","alertId":"4eb4cd05b85bc65c7b9f22b776e0136f970f7538eb0d1b2e6e8c7d35b2e875cb","index":".internal.alerts-security.alerts-default-000001","rule":{"id":"43104810-7875-11ec-abc6-6f72e72f6004","name":"A rule"},"owner":"securitySolution"}', + }, + type: 'abc', + references: [], + }; + + expect(removeRuleInformation(doc, context)).toEqual(doc); + }); + + it('sets the rule fields to null', () => { + const doc = { + id: '123', + attributes: { + action: 'create', + action_field: ['comment'], + new_value: + '{"type":"alert","alertId":"4eb4cd05b85bc65c7b9f22b776e0136f970f7538eb0d1b2e6e8c7d35b2e875cb","index":".internal.alerts-security.alerts-default-000001","rule":{"id":"43104810-7875-11ec-abc6-6f72e72f6004","name":"A rule"},"owner":"securitySolution"}', + }, + type: 'abc', + references: [], + }; + + const newDoc = removeRuleInformation(doc, context) as SavedObject<{ new_value: string }>; + ensureRuleFieldsAreNull(newDoc); + + expect(docWithoutNewValue(newDoc)).toEqual(docWithoutNewValue(doc)); + }); + + it('sets the rule fields to null for a generated alert', () => { + const doc = { + id: '123', + attributes: { + action: 'create', + action_field: ['comment'], + new_value: + '{"type":"generated_alert","alertId":"4eb4cd05b85bc65c7b9f22b776e0136f970f7538eb0d1b2e6e8c7d35b2e875cb","index":".internal.alerts-security.alerts-default-000001","rule":{"id":"43104810-7875-11ec-abc6-6f72e72f6004","name":"A rule"},"owner":"securitySolution"}', + }, + type: 'abc', + references: [], + }; + + const newDoc = removeRuleInformation(doc, context) as SavedObject<{ new_value: string }>; + ensureRuleFieldsAreNull(newDoc); + + expect(docWithoutNewValue(newDoc)).toEqual(docWithoutNewValue(doc)); + }); + + it('preserves the references field', () => { + const doc = { + id: '123', + attributes: { + action: 'create', + action_field: ['comment'], + new_value: + '{"type":"generated_alert","alertId":"4eb4cd05b85bc65c7b9f22b776e0136f970f7538eb0d1b2e6e8c7d35b2e875cb","index":".internal.alerts-security.alerts-default-000001","rule":{"id":"43104810-7875-11ec-abc6-6f72e72f6004","name":"A rule"},"owner":"securitySolution"}', + }, + type: 'abc', + references: [{ id: '123', name: 'hi', type: 'awesome' }], + }; + + const newDoc = removeRuleInformation(doc, context) as SavedObject<{ new_value: string }>; + ensureRuleFieldsAreNull(newDoc); + + expect(docWithoutNewValue(newDoc)).toEqual(docWithoutNewValue(doc)); + }); + }); +}); + +const docWithoutNewValue = (doc: {}) => { + const copyOfDoc = cloneDeep(doc); + return omit(copyOfDoc, 'attributes.new_value'); +}; + +const ensureRuleFieldsAreNull = (doc: SavedObject<{ new_value: string }>) => { + const decodedNewValue = JSON.parse(doc.attributes.new_value); + + expect(decodedNewValue.rule).toEqual({ id: null, name: null }); +}; diff --git a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/alerts.ts b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/alerts.ts new file mode 100644 index 00000000000000..b2a825b80fd6e4 --- /dev/null +++ b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/alerts.ts @@ -0,0 +1,99 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + SavedObjectMigrationContext, + SavedObjectSanitizedDoc, + SavedObjectUnsanitizedDoc, +} from 'kibana/server'; +import { CommentRequestAlertType, CommentType } from '../../../../common/api'; +import { logError } from '../utils'; +import { UserActionVersion800 } from './types'; + +/* eslint-disable @typescript-eslint/naming-convention */ + +export function removeRuleInformation( + doc: SavedObjectUnsanitizedDoc, + context: SavedObjectMigrationContext +): SavedObjectSanitizedDoc { + const originalDocWithReferences = { ...doc, references: doc.references ?? [] }; + + try { + const { new_value, action, action_field } = doc.attributes; + + const decodedNewValueData = decodeNewValue(new_value); + + if (!isAlertUserAction(action, action_field, decodedNewValueData)) { + return originalDocWithReferences; + } + + const encodedValue = JSON.stringify({ + ...decodedNewValueData, + rule: { + id: null, + name: null, + }, + }); + + return { + ...doc, + attributes: { + ...doc.attributes, + new_value: encodedValue, + }, + references: doc.references ?? [], + }; + } catch (error) { + logError({ + id: doc.id, + context, + error, + docType: 'user action alerts', + docKey: 'userAction', + }); + + return originalDocWithReferences; + } +} + +function decodeNewValue(data?: string | null): unknown | null { + if (data === undefined || data === null) { + return null; + } + + return JSON.parse(data); +} + +function isAlertUserAction( + action?: string, + actionFields?: string[], + newValue?: unknown | null +): newValue is AlertCommentOptional { + return isCreateComment(action, actionFields) && isAlertObject(newValue); +} + +function isCreateComment(action?: string, actionFields?: string[]): boolean { + return ( + action === 'create' && + actionFields !== null && + actionFields !== undefined && + actionFields.includes('comment') + ); +} + +type AlertCommentOptional = Partial; + +function isAlertObject(data?: unknown | null): boolean { + const unsafeAlertData = data as AlertCommentOptional; + + return ( + unsafeAlertData !== undefined && + unsafeAlertData !== null && + (unsafeAlertData.type === CommentType.generatedAlert || + unsafeAlertData.type === CommentType.alert) + ); +} diff --git a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/connector_id.ts b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/connector_id.ts index 1c61b7162a0624..00261cd5782394 100644 --- a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/connector_id.ts +++ b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/connector_id.ts @@ -28,7 +28,7 @@ import { } from '../../../common/constants'; import { getNoneCaseConnector } from '../../../common/utils'; import { ACTION_SAVED_OBJECT_TYPE } from '../../../../../actions/server'; -import { UserActionUnmigratedConnectorDocument } from './types'; +import { UserActionVersion800 } from './types'; import { logError } from '../utils'; import { USER_ACTION_OLD_ID_REF_NAME, USER_ACTION_OLD_PUSH_ID_REF_NAME } from './constants'; @@ -306,7 +306,7 @@ export function isConnectorUserAction(action?: string, actionFields?: string[]): } export function formatDocumentWithConnectorReferences( - doc: SavedObjectUnsanitizedDoc + doc: SavedObjectUnsanitizedDoc ): SavedObjectSanitizedDoc { const { new_value, old_value, action, action_field, ...restAttributes } = doc.attributes; const { references = [] } = doc; @@ -342,7 +342,7 @@ export function formatDocumentWithConnectorReferences( // 8.1.0 migration util functions export function userActionsConnectorIdMigration( - doc: SavedObjectUnsanitizedDoc, + doc: SavedObjectUnsanitizedDoc, context: SavedObjectMigrationContext ): SavedObjectSanitizedDoc { const originalDocWithReferences = { ...doc, references: doc.references ?? [] }; diff --git a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/index.ts b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/index.ts index 7288b68483b87b..d977e470a7fe3d 100644 --- a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/index.ts +++ b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/index.ts @@ -14,6 +14,7 @@ import { } from '../../../../../../../src/core/server'; import { ConnectorTypes } from '../../../../common/api'; +import { removeRuleInformation } from './alerts'; import { userActionsConnectorIdMigration } from './connector_id'; import { payloadMigration } from './payload'; import { UserActions } from './types'; @@ -63,5 +64,6 @@ export const userActionsMigrations = { return addOwnerToSO(doc); }, '7.16.0': userActionsConnectorIdMigration, + '8.0.0': removeRuleInformation, '8.1.0': payloadMigration, }; diff --git a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/types.ts b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/types.ts index 65f566143b0eef..0c905dc784b11b 100644 --- a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/types.ts +++ b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/types.ts @@ -15,7 +15,7 @@ export interface UserActions { owner: string; } -export interface UserActionUnmigratedConnectorDocument { +export interface UserActionVersion800 { action?: string; action_field?: string[]; new_value?: string | null; diff --git a/x-pack/plugins/cases/server/services/mocks.ts b/x-pack/plugins/cases/server/services/mocks.ts index 751b7ef8882f19..169e3bd5dc8e08 100644 --- a/x-pack/plugins/cases/server/services/mocks.ts +++ b/x-pack/plugins/cases/server/services/mocks.ts @@ -93,6 +93,7 @@ export const createUserActionServiceMock = (): CaseUserActionServiceMock => { getAll: jest.fn(), bulkCreate: jest.fn(), findStatusChanges: jest.fn(), + getUniqueConnectors: jest.fn(), }; // the cast here is required because jest.Mocked tries to include private members and would throw an error diff --git a/x-pack/plugins/cases/server/services/user_actions/index.test.ts b/x-pack/plugins/cases/server/services/user_actions/index.test.ts index 8b42523f5ece2c..2ccfaf54dd9feb 100644 --- a/x-pack/plugins/cases/server/services/user_actions/index.test.ts +++ b/x-pack/plugins/cases/server/services/user_actions/index.test.ts @@ -924,5 +924,165 @@ describe('CaseUserActionService', () => { ); }); }); + + describe('getUniqueConnectors', () => { + const findResponse = createUserActionFindSO(createConnectorUserAction()); + const aggregationResponse = { + aggregations: { + references: { + doc_count: 8, + connectors: { + doc_count: 4, + ids: { + doc_count_error_upper_bound: 0, + sum_other_doc_count: 0, + buckets: [ + { + key: '865b6040-7533-11ec-8bcc-a9fc6f9d63b2', + doc_count: 2, + docs: {}, + }, + { + key: '915c2600-7533-11ec-8bcc-a9fc6f9d63b2', + doc_count: 1, + docs: {}, + }, + { + key: 'b2635b10-63e1-11ec-90af-6fe7d490ff66', + doc_count: 1, + docs: {}, + }, + ], + }, + }, + }, + }, + }; + + beforeAll(() => { + unsecuredSavedObjectsClient.find.mockResolvedValue( + findResponse as unknown as Promise + ); + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('it returns an empty array if the response is not valid', async () => { + const res = await service.getUniqueConnectors({ + unsecuredSavedObjectsClient, + caseId: '123', + }); + + expect(res).toEqual([]); + }); + + it('it returns the connectors', async () => { + unsecuredSavedObjectsClient.find.mockResolvedValue({ + ...findResponse, + ...aggregationResponse, + } as unknown as Promise); + + const res = await service.getUniqueConnectors({ + unsecuredSavedObjectsClient, + caseId: '123', + }); + + expect(res).toEqual([ + { id: '865b6040-7533-11ec-8bcc-a9fc6f9d63b2' }, + { id: '915c2600-7533-11ec-8bcc-a9fc6f9d63b2' }, + { id: 'b2635b10-63e1-11ec-90af-6fe7d490ff66' }, + ]); + }); + + it('it returns the unique connectors', async () => { + await service.getUniqueConnectors({ + unsecuredSavedObjectsClient, + caseId: '123', + }); + + expect(unsecuredSavedObjectsClient.find.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "aggs": Object { + "references": Object { + "aggregations": Object { + "connectors": Object { + "aggregations": Object { + "ids": Object { + "terms": Object { + "field": "cases-user-actions.references.id", + "size": 100, + }, + }, + }, + "filter": Object { + "term": Object { + "cases-user-actions.references.type": "action", + }, + }, + }, + }, + "nested": Object { + "path": "cases-user-actions.references", + }, + }, + }, + "filter": Object { + "arguments": Array [ + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "cases-user-actions.attributes.type", + }, + Object { + "type": "literal", + "value": "connector", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + Object { + "arguments": Array [ + Object { + "type": "literal", + "value": "cases-user-actions.attributes.type", + }, + Object { + "type": "literal", + "value": "create_case", + }, + Object { + "type": "literal", + "value": false, + }, + ], + "function": "is", + "type": "function", + }, + ], + "function": "or", + "type": "function", + }, + "hasReference": Object { + "id": "123", + "type": "cases", + }, + "page": 1, + "perPage": 1, + "sortField": "created_at", + "type": "cases-user-actions", + }, + ] + `); + }); + }); }); }); diff --git a/x-pack/plugins/cases/server/services/user_actions/index.ts b/x-pack/plugins/cases/server/services/user_actions/index.ts index 9ff3da2f230e35..130fe476452788 100644 --- a/x-pack/plugins/cases/server/services/user_actions/index.ts +++ b/x-pack/plugins/cases/server/services/user_actions/index.ts @@ -16,6 +16,7 @@ import { SavedObjectsUpdateResponse, } from 'kibana/server'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { KueryNode } from '@kbn/es-query'; import { isConnectorUserAction, @@ -434,6 +435,83 @@ export class CaseUserActionService { throw error; } } + + public async getUniqueConnectors({ + caseId, + filter, + unsecuredSavedObjectsClient, + }: { + caseId: string; + unsecuredSavedObjectsClient: SavedObjectsClientContract; + filter?: KueryNode; + }): Promise> { + try { + this.log.debug(`Attempting to count connectors for case id ${caseId}`); + const connectorsFilter = buildFilter({ + filters: [ActionTypes.connector, ActionTypes.create_case], + field: 'type', + operator: 'or', + type: CASE_USER_ACTION_SAVED_OBJECT, + }); + + const combinedFilter = combineFilters([connectorsFilter, filter]); + + const response = await unsecuredSavedObjectsClient.find< + CaseUserActionAttributesWithoutConnectorId, + { references: { connectors: { ids: { buckets: Array<{ key: string }> } } } } + >({ + type: CASE_USER_ACTION_SAVED_OBJECT, + hasReference: { type: CASE_SAVED_OBJECT, id: caseId }, + page: 1, + perPage: 1, + sortField: defaultSortField, + aggs: this.buildCountConnectorsAggs(), + filter: combinedFilter, + }); + + return ( + response.aggregations?.references?.connectors?.ids?.buckets?.map(({ key }) => ({ + id: key, + })) ?? [] + ); + } catch (error) { + this.log.error(`Error while counting connectors for case id ${caseId}: ${error}`); + throw error; + } + } + + private buildCountConnectorsAggs( + /** + * It is high unlikely for a user to have more than + * 100 connectors attached to a case + */ + size: number = 100 + ): Record { + return { + references: { + nested: { + path: `${CASE_USER_ACTION_SAVED_OBJECT}.references`, + }, + aggregations: { + connectors: { + filter: { + term: { + [`${CASE_USER_ACTION_SAVED_OBJECT}.references.type`]: 'action', + }, + }, + aggregations: { + ids: { + terms: { + field: `${CASE_USER_ACTION_SAVED_OBJECT}.references.id`, + size, + }, + }, + }, + }, + }, + }, + }; + } } export function transformFindResponseToExternalModel( diff --git a/x-pack/plugins/data_visualizer/common/utils/runtime_field_utils.ts b/x-pack/plugins/data_visualizer/common/utils/runtime_field_utils.ts index a088685f03f543..a9ec27c7b1577c 100644 --- a/x-pack/plugins/data_visualizer/common/utils/runtime_field_utils.ts +++ b/x-pack/plugins/data_visualizer/common/utils/runtime_field_utils.ts @@ -14,11 +14,12 @@ export function isRuntimeField(arg: unknown): arg is estypes.MappingRuntimeField return ( ((isPopulatedObject(arg, ['type']) && Object.keys(arg).length === 1) || (isPopulatedObject(arg, ['type', 'script']) && - Object.keys(arg).length === 2 && + // Can be a string (typeof arg.script === 'string' || - (isPopulatedObject(arg.script, ['source']) && - Object.keys(arg.script).length === 1 && - typeof arg.script.source === 'string')))) && + // Can be InlineScript + (isPopulatedObject(arg.script, ['source']) && typeof arg.script.source === 'string') || + // Can be StoredScriptId + (isPopulatedObject(arg.script, ['id']) && typeof arg.script.id === 'string')))) && RUNTIME_FIELD_TYPES.includes(arg.type as RuntimeType) ); } diff --git a/x-pack/plugins/event_log/server/es/cluster_client_adapter.test.ts b/x-pack/plugins/event_log/server/es/cluster_client_adapter.test.ts index 314a6b9a31ef89..0d4f4136b42edd 100644 --- a/x-pack/plugins/event_log/server/es/cluster_client_adapter.test.ts +++ b/x-pack/plugins/event_log/server/es/cluster_client_adapter.test.ts @@ -454,13 +454,9 @@ describe('getExistingIndexAliases', () => { describe('setIndexAliasToHidden', () => { test('should call cluster with given index name and aliases', async () => { - await clusterClientAdapter.setIndexAliasToHidden('foo-bar-000001', { - aliases: { - 'foo-bar': { - is_write_index: true, - }, - }, - }); + await clusterClientAdapter.setIndexAliasToHidden('foo-bar', [ + { alias: 'foo-bar', indexName: 'foo-bar-000001', is_write_index: true }, + ]); expect(clusterClient.indices.updateAliases).toHaveBeenCalledWith({ body: { actions: [ @@ -477,18 +473,11 @@ describe('setIndexAliasToHidden', () => { }); }); - test('should update multiple aliases at once and preserve existing alias settings', async () => { - await clusterClientAdapter.setIndexAliasToHidden('foo-bar-000001', { - aliases: { - 'foo-bar': { - is_write_index: true, - }, - 'foo-b': { - index_routing: 'index', - routing: 'route', - }, - }, - }); + test('should update multiple indices for an alias at once and preserve existing alias settings', async () => { + await clusterClientAdapter.setIndexAliasToHidden('foo-bar', [ + { alias: 'foo-bar', indexName: 'foo-bar-000001', is_write_index: true }, + { alias: 'foo-bar', indexName: 'foo-bar-000002', index_routing: 'index', routing: 'route' }, + ]); expect(clusterClient.indices.updateAliases).toHaveBeenCalledWith({ body: { actions: [ @@ -502,8 +491,8 @@ describe('setIndexAliasToHidden', () => { }, { add: { - index: 'foo-bar-000001', - alias: 'foo-b', + index: 'foo-bar-000002', + alias: 'foo-bar', is_hidden: true, index_routing: 'index', routing: 'route', @@ -517,15 +506,11 @@ describe('setIndexAliasToHidden', () => { test('should throw error when call cluster throws an error', async () => { clusterClient.indices.updateAliases.mockRejectedValue(new Error('Fail')); await expect( - clusterClientAdapter.setIndexAliasToHidden('foo-bar-000001', { - aliases: { - 'foo-bar': { - is_write_index: true, - }, - }, - }) + clusterClientAdapter.setIndexAliasToHidden('foo-bar', [ + { alias: 'foo-bar', indexName: 'foo-bar-000001', is_write_index: true }, + ]) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"error setting existing index aliases for index foo-bar-000001 to is_hidden: Fail"` + `"error setting existing index aliases for alias foo-bar to is_hidden: Fail"` ); }); }); diff --git a/x-pack/plugins/event_log/server/es/cluster_client_adapter.ts b/x-pack/plugins/event_log/server/es/cluster_client_adapter.ts index 205a8d10243fde..dd740aa5533b91 100644 --- a/x-pack/plugins/event_log/server/es/cluster_client_adapter.ts +++ b/x-pack/plugins/event_log/server/es/cluster_client_adapter.ts @@ -15,6 +15,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import { IEvent, IValidatedEvent, SAVED_OBJECT_REL_PRIMARY } from '../types'; import { FindOptionsType } from '../event_log_client'; +import { ParsedIndexAlias } from './init'; export const EVENT_BUFFER_TIME = 1000; // milliseconds export const EVENT_BUFFER_LENGTH = 100; @@ -281,15 +282,15 @@ export class ClusterClientAdapter { try { const esClient = await this.elasticsearchClientPromise; await esClient.indices.updateAliases({ body: { - actions: Object.keys(currentAliases.aliases).map((aliasName) => { - const existingAliasOptions = pick(currentAliases.aliases[aliasName], [ + actions: currentAliasData.map((aliasData) => { + const existingAliasOptions = pick(aliasData, [ 'is_write_index', 'filter', 'index_routing', @@ -299,7 +300,7 @@ export class ClusterClientAdapter { let esContext = contextMock.create(); @@ -267,11 +267,10 @@ describe('initializeEs', () => { }); await initializeEs(esContext); - expect(esContext.esAdapter.getExistingIndexAliases).toHaveBeenCalled(); - expect(esContext.esAdapter.setIndexAliasToHidden).toHaveBeenCalledWith( - 'foo-bar-000001', - testAliases - ); + expect(esContext.esAdapter.getExistingIndexAliases).toHaveBeenCalledTimes(1); + expect(esContext.esAdapter.setIndexAliasToHidden).toHaveBeenCalledWith('foo-bar', [ + { alias: 'foo-bar', indexName: 'foo-bar-000001', is_write_index: true }, + ]); }); test(`should not update existing index aliases if any exist and are already hidden`, async () => { @@ -310,6 +309,9 @@ describe('initializeEs', () => { 'foo-bar': { is_write_index: true, }, + 'bar-foo': { + is_write_index: true, + }, }, }; esContext.esAdapter.getExistingIndexAliases.mockResolvedValue({ @@ -321,17 +323,18 @@ describe('initializeEs', () => { await initializeEs(esContext); expect(esContext.esAdapter.getExistingIndexAliases).toHaveBeenCalled(); - expect(esContext.esAdapter.setIndexAliasToHidden).toHaveBeenCalledWith( - 'foo-bar-000001', - testAliases - ); - expect(esContext.esAdapter.setIndexAliasToHidden).toHaveBeenCalledWith( - 'foo-bar-000002', - testAliases - ); + expect(esContext.esAdapter.setIndexAliasToHidden).toHaveBeenCalledTimes(2); + expect(esContext.esAdapter.setIndexAliasToHidden).toHaveBeenCalledWith('foo-bar', [ + { alias: 'foo-bar', indexName: 'foo-bar-000001', is_write_index: true }, + { alias: 'foo-bar', indexName: 'foo-bar-000002', is_write_index: true }, + ]); + expect(esContext.esAdapter.setIndexAliasToHidden).toHaveBeenCalledWith('bar-foo', [ + { alias: 'bar-foo', indexName: 'foo-bar-000001', is_write_index: true }, + { alias: 'bar-foo', indexName: 'foo-bar-000002', is_write_index: true }, + ]); expect(esContext.logger.error).toHaveBeenCalledTimes(1); expect(esContext.logger.error).toHaveBeenCalledWith( - `error setting existing \"foo-bar-000001\" index aliases - Fail` + `error setting existing \"foo-bar\" index aliases - Fail` ); expect(esContext.esAdapter.doesIlmPolicyExist).toHaveBeenCalled(); }); @@ -384,3 +387,70 @@ describe('initializeEs', () => { expect(esContext.esAdapter.createIndex).not.toHaveBeenCalled(); }); }); + +describe('parseIndexAliases', () => { + test('should parse IndicesGetAliasResponse into desired format', () => { + const indexGetAliasResponse = { + '.kibana-event-log-7.15.2-000003': { + aliases: { + '.kibana-event-log-7.15.2': { + is_write_index: true, + }, + another_alias: { + is_write_index: true, + }, + }, + }, + '.kibana-event-log-7.15.2-000002': { + aliases: { + '.kibana-event-log-7.15.2': { + is_write_index: false, + }, + }, + }, + '.kibana-event-log-7.15.2-000001': { + aliases: { + '.kibana-event-log-7.15.2': { + is_write_index: false, + }, + }, + }, + '.kibana-event-log-8.0.0-000001': { + aliases: { + '.kibana-event-log-8.0.0': { + is_write_index: true, + is_hidden: true, + }, + }, + }, + }; + expect(parseIndexAliases(indexGetAliasResponse)).toEqual([ + { + alias: '.kibana-event-log-7.15.2', + indexName: '.kibana-event-log-7.15.2-000003', + is_write_index: true, + }, + { + alias: 'another_alias', + indexName: '.kibana-event-log-7.15.2-000003', + is_write_index: true, + }, + { + alias: '.kibana-event-log-7.15.2', + indexName: '.kibana-event-log-7.15.2-000002', + is_write_index: false, + }, + { + alias: '.kibana-event-log-7.15.2', + indexName: '.kibana-event-log-7.15.2-000001', + is_write_index: false, + }, + { + alias: '.kibana-event-log-8.0.0', + indexName: '.kibana-event-log-8.0.0-000001', + is_hidden: true, + is_write_index: true, + }, + ]); + }); +}); diff --git a/x-pack/plugins/event_log/server/es/init.ts b/x-pack/plugins/event_log/server/es/init.ts index f9aa148ff024d9..4440102fcd3813 100644 --- a/x-pack/plugins/event_log/server/es/init.ts +++ b/x-pack/plugins/event_log/server/es/init.ts @@ -7,6 +7,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { asyncForEach } from '@kbn/std'; +import { groupBy } from 'lodash'; import { getIlmPolicy, getIndexTemplate } from './documents'; import { EsContext } from './context'; @@ -33,6 +34,22 @@ async function initializeEsResources(esContext: EsContext) { await steps.createInitialIndexIfNotExists(); } +export interface ParsedIndexAlias extends estypes.IndicesAliasDefinition { + indexName: string; + alias: string; + is_hidden?: boolean; +} + +export function parseIndexAliases(aliasInfo: estypes.IndicesGetAliasResponse): ParsedIndexAlias[] { + return Object.keys(aliasInfo).flatMap((indexName: string) => + Object.keys(aliasInfo[indexName].aliases).map((alias: string) => ({ + ...aliasInfo[indexName].aliases[alias], + indexName, + alias, + })) + ); +} + class EsInitializationSteps { constructor(private readonly esContext: EsContext) { this.esContext = esContext; @@ -56,7 +73,7 @@ class EsInitializationSteps { this.esContext.logger.error(`error getting existing index templates - ${err.message}`); } - asyncForEach(Object.keys(indexTemplates), async (indexTemplateName: string) => { + await asyncForEach(Object.keys(indexTemplates), async (indexTemplateName: string) => { try { const hidden: string | boolean = indexTemplates[indexTemplateName]?.settings?.index?.hidden; // Check to see if this index template is hidden @@ -93,7 +110,7 @@ class EsInitializationSteps { // should not block the rest of initialization, log the error and move on this.esContext.logger.error(`error getting existing indices - ${err.message}`); } - asyncForEach(Object.keys(indices), async (indexName: string) => { + await asyncForEach(Object.keys(indices), async (indexName: string) => { try { const hidden: string | boolean | undefined = indices[indexName]?.settings?.index?.hidden; @@ -125,22 +142,29 @@ class EsInitializationSteps { // should not block the rest of initialization, log the error and move on this.esContext.logger.error(`error getting existing index aliases - ${err.message}`); } - asyncForEach(Object.keys(indexAliases), async (indexName: string) => { + + // Flatten the results so we can group by index alias + const parsedAliasData = parseIndexAliases(indexAliases); + + // Group by index alias name + const indexAliasData = groupBy(parsedAliasData, 'alias'); + + await asyncForEach(Object.keys(indexAliasData), async (aliasName: string) => { try { - const aliases = indexAliases[indexName]?.aliases; - const hasNotHiddenAliases: boolean = Object.keys(aliases).some((alias: string) => { - return (aliases[alias] as estypes.IndicesAlias)?.is_hidden !== true; - }); - - if (hasNotHiddenAliases) { - this.esContext.logger.debug(`setting existing "${indexName}" index aliases to hidden.`); - await this.esContext.esAdapter.setIndexAliasToHidden(indexName, indexAliases[indexName]); + const aliasData = indexAliasData[aliasName]; + const isNotHidden = aliasData.some((data) => data.is_hidden !== true); + if (isNotHidden) { + this.esContext.logger.debug(`setting existing "${aliasName}" index alias to hidden.`); + await this.esContext.esAdapter.setIndexAliasToHidden( + aliasName, + indexAliasData[aliasName] + ); } } catch (err) { // errors when trying to set existing index aliases to is_hidden // should not block the rest of initialization, log the error and move on this.esContext.logger.error( - `error setting existing "${indexName}" index aliases - ${err.message}` + `error setting existing "${aliasName}" index aliases - ${err.message}` ); } }); diff --git a/x-pack/plugins/file_upload/server/schemas.ts b/x-pack/plugins/file_upload/server/schemas.ts index baf7ed864f2e63..b7250b45a82f9d 100644 --- a/x-pack/plugins/file_upload/server/schemas.ts +++ b/x-pack/plugins/file_upload/server/schemas.ts @@ -6,6 +6,7 @@ */ import { schema } from '@kbn/config-schema'; +import { i18n } from '@kbn/i18n'; import { isRuntimeField } from './utils/runtime_field_utils'; export const analyzeFileQuerySchema = schema.object({ @@ -48,7 +49,9 @@ export const runtimeMappingsSchema = schema.object( unknowns: 'allow', validate: (v: object) => { if (Object.values(v).some((o) => !isRuntimeField(o))) { - return 'Invalid runtime field'; + return i18n.translate('xpack.fileUpload.invalidRuntimeFieldMessage', { + defaultMessage: 'Invalid runtime field', + }); } }, } diff --git a/x-pack/plugins/file_upload/server/utils/runtime_field_utils.ts b/x-pack/plugins/file_upload/server/utils/runtime_field_utils.ts index fa2c874613b3d8..7ae8242fc99659 100644 --- a/x-pack/plugins/file_upload/server/utils/runtime_field_utils.ts +++ b/x-pack/plugins/file_upload/server/utils/runtime_field_utils.ts @@ -15,11 +15,12 @@ export function isRuntimeField(arg: unknown): arg is estypes.MappingRuntimeField return ( ((isPopulatedObject(arg, ['type']) && Object.keys(arg).length === 1) || (isPopulatedObject(arg, ['type', 'script']) && - Object.keys(arg).length === 2 && + // Can be a string (typeof arg.script === 'string' || - (isPopulatedObject(arg.script, ['source']) && - Object.keys(arg.script).length === 1 && - typeof arg.script.source === 'string')))) && + // Can be InlineScript + (isPopulatedObject(arg.script, ['source']) && typeof arg.script.source === 'string') || + // Can be StoredScriptId + (isPopulatedObject(arg.script, ['id']) && typeof arg.script.id === 'string')))) && RUNTIME_FIELD_TYPES.includes(arg.type as RuntimeType) ); } diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/enrollment_token_list_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/enrollment_token_list_page/index.tsx index 72160fb4ae8973..2dd323b9b52c1e 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/enrollment_token_list_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/enrollment_token_list_page/index.tsx @@ -96,7 +96,6 @@ const ApiKeyField: React.FunctionComponent<{ apiKeyId: string }> = ({ apiKeyId } }) } color="text" - isDisabled={state === 'LOADING'} onClick={toggleKey} iconType={state === 'VISIBLE' ? 'eyeClosed' : 'eye'} /> @@ -269,6 +268,10 @@ export const EnrollmentTokenListPage: React.FunctionComponent<{}> = () => { }, ]; + const isLoading = + (enrollmentAPIKeysRequest.isLoading && enrollmentAPIKeysRequest.isInitialRequest) || + (agentPoliciesRequest.isLoading && agentPoliciesRequest.isInitialRequest); + return ( {isModalOpen && ( @@ -312,10 +315,10 @@ export const EnrollmentTokenListPage: React.FunctionComponent<{}> = () => { - loading={enrollmentAPIKeysRequest.isLoading && enrollmentAPIKeysRequest.isInitialRequest} + loading={isLoading} hasActions={true} noItemsMessage={ - enrollmentAPIKeysRequest.isLoading && enrollmentAPIKeysRequest.isInitialRequest ? ( + isLoading ? ( {}, hasHelpPopover = false, }) { @@ -24,7 +25,7 @@ function renderCell({ return renderer.render( @@ -39,6 +40,18 @@ describe('PackagePolicyAgentsCell', () => { }); }); + test('it should not display add agent if policy is managed', async () => { + const utils = renderCell({ + agentCount: 0, + agentPolicy: { + is_managed: true, + } as AgentPolicy, + }); + await act(async () => { + expect(utils.queryByText('Add agent')).not.toBeInTheDocument(); + }); + }); + test('it should display only count if count > 0', async () => { const utils = renderCell({ agentCount: 9999 }); await act(async () => { diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/components/package_policy_agents_cell.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/components/package_policy_agents_cell.tsx index 28490316f83eb5..9471079902a902 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/components/package_policy_agents_cell.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/components/package_policy_agents_cell.tsx @@ -11,6 +11,7 @@ import { EuiButton } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { LinkedAgentCount, AddAgentHelpPopover } from '../../../../../../components'; +import type { AgentPolicy } from '../../../../../../types'; const AddAgentButton = ({ onAddAgent }: { onAddAgent: () => void }) => ( @@ -38,21 +39,21 @@ const AddAgentButtonWithPopover = ({ onAddAgent }: { onAddAgent: () => void }) = }; export const PackagePolicyAgentsCell = ({ - agentPolicyId, + agentPolicy, agentCount = 0, onAddAgent, hasHelpPopover = false, }: { - agentPolicyId: string; + agentPolicy: AgentPolicy; agentCount?: number; hasHelpPopover?: boolean; onAddAgent: () => void; }) => { - if (agentCount > 0) { + if (agentCount > 0 || agentPolicy.is_managed) { return ( ); diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/package_policies.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/package_policies.tsx index c4f06d4d7d5aba..0007679398b86a 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/package_policies.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/policies/package_policies.tsx @@ -298,7 +298,7 @@ export const PackagePoliciesPage = ({ name, version }: PackagePoliciesPanelProps render({ agentPolicy, packagePolicy }: InMemoryPackagePolicyAndAgentPolicy) { return ( setFlyoutOpenForPolicyId(agentPolicy.id)} hasHelpPopover={showAddAgentHelpForPackagePolicyId === packagePolicy.id} diff --git a/x-pack/plugins/fleet/public/components/new_enrollment_key_modal.tsx b/x-pack/plugins/fleet/public/components/new_enrollment_key_modal.tsx index 362c6e6bdb0612..82332784839a9f 100644 --- a/x-pack/plugins/fleet/public/components/new_enrollment_key_modal.tsx +++ b/x-pack/plugins/fleet/public/components/new_enrollment_key_modal.tsx @@ -5,13 +5,23 @@ * 2.0. */ -import React, { useState } from 'react'; +import React, { useState, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiConfirmModal, EuiForm, EuiFormRow, EuiFieldText, EuiSelect } from '@elastic/eui'; import type { AgentPolicy, EnrollmentAPIKey } from '../types'; import { useInput, useStartServices, sendCreateEnrollmentAPIKey } from '../hooks'; +function validatePolicyId(value: string) { + if (value === '') { + return [ + i18n.translate('xpack.fleet.newEnrollmentKeyForm.policyIdRequireErrorMessage', { + defaultMessage: 'Policy is required', + }), + ]; + } +} + function useCreateApiKeyForm( policyIdDefaultValue: string | undefined, onSuccess: (key: EnrollmentAPIKey) => void, @@ -19,10 +29,13 @@ function useCreateApiKeyForm( ) { const [isLoading, setIsLoading] = useState(false); const apiKeyNameInput = useInput(''); - const policyIdInput = useInput(policyIdDefaultValue); + const policyIdInput = useInput(policyIdDefaultValue, validatePolicyId); const onSubmit = async (event: React.FormEvent) => { event.preventDefault(); + if (!policyIdInput.validate() || !apiKeyNameInput.validate()) { + return; + } setIsLoading(true); try { const res = await sendCreateEnrollmentAPIKey({ @@ -65,7 +78,11 @@ export const NewEnrollmentTokenModal: React.FunctionComponent = ({ const { notifications } = useStartServices(); const policyIdDefaultValue = agentPolicies.find((agentPolicy) => agentPolicy.is_default)?.id; const form = useCreateApiKeyForm( - policyIdDefaultValue, + policyIdDefaultValue + ? policyIdDefaultValue + : agentPolicies.length > 0 + ? agentPolicies[0].id + : undefined, (key: EnrollmentAPIKey) => { onClose(key); notifications.toasts.addSuccess( @@ -81,6 +98,15 @@ export const NewEnrollmentTokenModal: React.FunctionComponent = ({ } ); + const selectPolicyOptions = useMemo(() => { + return agentPolicies + .filter((agentPolicy) => !agentPolicy.is_managed) + .map((agentPolicy) => ({ + value: agentPolicy.id, + text: agentPolicy.name, + })); + }, [agentPolicies]); + const body = (
@@ -106,18 +132,9 @@ export const NewEnrollmentTokenModal: React.FunctionComponent = ({ label={i18n.translate('xpack.fleet.newEnrollmentKey.policyLabel', { defaultMessage: 'Policy', })} + {...form.policyIdInput.formRowProps} > - !agentPolicy.is_managed) - .map((agentPolicy) => ({ - value: agentPolicy.id, - text: agentPolicy.name, - }))} - /> +
diff --git a/x-pack/plugins/fleet/public/components/package_policy_actions_menu.test.tsx b/x-pack/plugins/fleet/public/components/package_policy_actions_menu.test.tsx index 63a3a93b7e8943..220e5ddb8f547b 100644 --- a/x-pack/plugins/fleet/public/components/package_policy_actions_menu.test.tsx +++ b/x-pack/plugins/fleet/public/components/package_policy_actions_menu.test.tsx @@ -119,3 +119,21 @@ test('Should be able to delete integration from a non-managed policy', async () expect(utils.queryByText('Delete integration')).not.toBeNull(); }); }); + +test('Should show add button if the policy is not managed and showAddAgent=true', async () => { + const agentPolicy = createMockAgentPolicy(); + const packagePolicy = createMockPackagePolicy({ hasUpgrade: true }); + const { utils } = renderMenu({ agentPolicy, packagePolicy, showAddAgent: true }); + await act(async () => { + expect(utils.queryByText('Add agent')).not.toBeNull(); + }); +}); + +test('Should not show add button if the policy is managed and showAddAgent=true', async () => { + const agentPolicy = createMockAgentPolicy({ is_managed: true }); + const packagePolicy = createMockPackagePolicy({ hasUpgrade: true }); + const { utils } = renderMenu({ agentPolicy, packagePolicy, showAddAgent: true }); + await act(async () => { + expect(utils.queryByText('Add agent')).toBeNull(); + }); +}); diff --git a/x-pack/plugins/fleet/public/components/package_policy_actions_menu.tsx b/x-pack/plugins/fleet/public/components/package_policy_actions_menu.tsx index 516f3d4dc55c18..6d090c886c467a 100644 --- a/x-pack/plugins/fleet/public/components/package_policy_actions_menu.tsx +++ b/x-pack/plugins/fleet/public/components/package_policy_actions_menu.tsx @@ -57,7 +57,7 @@ export const PackagePolicyActionsMenu: React.FunctionComponent<{ // defaultMessage="View integration" // /> // , - ...(showAddAgent + ...(showAddAgent && !agentPolicy.is_managed ? [ { + if (soClient.errors.isNotFoundError(err)) { + throw new AgentPolicyNotFoundError(`Agent policy "${request.body.policy_id}" not found`); + } + + throw err; + }); + const apiKey = await APIKeyService.generateEnrollmentAPIKey(soClient, esClient, { name: request.body.name, expiration: request.body.expiration, diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index 5591c165bd7063..1ad4ff1adbdd09 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -157,8 +157,10 @@ class PackagePolicyService { ); } } + validatePackagePolicyOrThrow(packagePolicy, pkgInfo); const registryPkgInfo = await Registry.fetchInfo(pkgInfo.name, pkgInfo.version); + inputs = await this._compilePackagePolicyInputs( registryPkgInfo, pkgInfo, @@ -392,6 +394,8 @@ class PackagePolicyService { pkgVersion: packagePolicy.package.version, }); + validatePackagePolicyOrThrow(packagePolicy, pkgInfo); + const registryPkgInfo = await Registry.fetchInfo(pkgInfo.name, pkgInfo.version); inputs = await this._compilePackagePolicyInputs( registryPkgInfo, @@ -865,6 +869,31 @@ class PackagePolicyService { } } +function validatePackagePolicyOrThrow(packagePolicy: NewPackagePolicy, pkgInfo: PackageInfo) { + const validationResults = validatePackagePolicy(packagePolicy, pkgInfo, safeLoad); + if (validationHasErrors(validationResults)) { + const responseFormattedValidationErrors = Object.entries(getFlattenedObject(validationResults)) + .map(([key, value]) => ({ + key, + message: value, + })) + .filter(({ message }) => !!message); + + if (responseFormattedValidationErrors.length) { + throw new PackagePolicyValidationError( + i18n.translate('xpack.fleet.packagePolicyInvalidError', { + defaultMessage: 'Package policy is invalid: {errors}', + values: { + errors: responseFormattedValidationErrors + .map(({ key, message }) => `${key}: ${message}`) + .join('\n'), + }, + }) + ); + } + } +} + function assignStreamIdToInput(packagePolicyId: string, input: NewPackagePolicyInput) { return { ...input, @@ -1314,29 +1343,7 @@ export function preconfigurePackageInputs( inputs, }; - const validationResults = validatePackagePolicy(resultingPackagePolicy, packageInfo, safeLoad); - - if (validationHasErrors(validationResults)) { - const responseFormattedValidationErrors = Object.entries(getFlattenedObject(validationResults)) - .map(([key, value]) => ({ - key, - message: value, - })) - .filter(({ message }) => !!message); - - if (responseFormattedValidationErrors.length) { - throw new PackagePolicyValidationError( - i18n.translate('xpack.fleet.packagePolicyInvalidError', { - defaultMessage: 'Package policy is invalid: {errors}', - values: { - errors: responseFormattedValidationErrors - .map(({ key, message }) => `${key}: ${message}`) - .join('\n'), - }, - }) - ); - } - } + validatePackagePolicyOrThrow(resultingPackagePolicy, packageInfo); return resultingPackagePolicy; } diff --git a/x-pack/plugins/fleet/server/types/models/agent_policy.ts b/x-pack/plugins/fleet/server/types/models/agent_policy.ts index 2e17c4ffe898ed..840dbd0ccb6074 100644 --- a/x-pack/plugins/fleet/server/types/models/agent_policy.ts +++ b/x-pack/plugins/fleet/server/types/models/agent_policy.ts @@ -22,8 +22,6 @@ export const AgentPolicyBaseSchema = { schema.oneOf([schema.literal(dataTypes.Logs), schema.literal(dataTypes.Metrics)]) ) ), - data_output_id: schema.maybe(schema.string()), - data_monitoring_output_id: schema.maybe(schema.string()), }; export const NewAgentPolicySchema = schema.object({ diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/evaluate_rule.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/evaluate_rule.ts index d1d4f4e9560b52..01c8f252fc71b2 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/evaluate_rule.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/evaluate_rule.ts @@ -7,7 +7,7 @@ import moment from 'moment'; import { ElasticsearchClient } from 'kibana/server'; -import { mapValues, first, last, isNaN, isNumber, isObject, has } from 'lodash'; +import { difference, mapValues, first, last, isNaN, isNumber, isObject, has } from 'lodash'; import { isTooManyBucketsPreviewException, TOO_MANY_BUCKETS_PREVIEW_EXCEPTION, @@ -66,6 +66,7 @@ export const evaluateRule = { const { criteria, groupBy, filterQuery, shouldDropPartialBuckets } = params; @@ -78,6 +79,7 @@ export const evaluateRule = !currentGroups.includes(g)); + const missingGroups = difference(prevGroups, currentGroups); + if (currentGroups.length === 0 && missingGroups.length === 0) { missingGroups.push(UNGROUPED_FACTORY_KEY); } const backfillTimestamp = last(last(Object.values(currentValues)))?.key ?? new Date().toISOString(); - const backfilledPrevGroups: Record< - string, - Array<{ key: string; value: number }> - > = missingGroups.reduce( - (result, group) => ({ - ...result, - [group]: [ - { - key: backfillTimestamp, - value: criterion.aggType === Aggregators.COUNT ? 0 : null, - }, - ], - }), - {} - ); + const backfilledPrevGroups: Record> = {}; + for (const group of missingGroups) { + backfilledPrevGroups[group] = [ + { + key: backfillTimestamp, + value: criterion.aggType === Aggregators.COUNT ? 0 : null, + }, + ]; + } const currentValuesWithBackfilledPrevGroups = { ...currentValues, ...backfilledPrevGroups, @@ -150,6 +147,7 @@ const getMetric: ( index: string, groupBy: string | undefined | string[], filterQuery: string | undefined, + compositeSize: number, timeframe?: { start?: number; end: number }, shouldDropPartialBuckets?: boolean ) => Promise>> = async function ( @@ -158,6 +156,7 @@ const getMetric: ( index, groupBy, filterQuery, + compositeSize, timeframe, shouldDropPartialBuckets ) { @@ -172,6 +171,7 @@ const getMetric: ( const searchBody = getElasticsearchMetricQuery( params, calculatedTimerange, + compositeSize, hasGroupBy ? groupBy : undefined, filterQuery ); @@ -202,21 +202,18 @@ const getMetric: ( bucketSelector, afterKeyHandler )) as Array; doc_count: number }>; - const groupedResults = compositeBuckets.reduce( - (result, bucket) => ({ - ...result, - [Object.values(bucket.key) - .map((value) => value) - .join(', ')]: getValuesFromAggregations( - bucket, - aggType, - dropPartialBucketsOptions, - calculatedTimerange, - bucket.doc_count - ), - }), - {} - ); + const groupedResults: Record = {}; + for (const bucket of compositeBuckets) { + const key = Object.values(bucket.key).join(', '); + const value = getValuesFromAggregations( + bucket, + aggType, + dropPartialBucketsOptions, + calculatedTimerange, + bucket.doc_count + ); + groupedResults[key] = value; + } return groupedResults; } const { body: result } = await esClient.search({ diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/metric_query.test.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/metric_query.test.ts index 463365b6449d0f..3c6bca67de413d 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/metric_query.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/metric_query.test.ts @@ -24,7 +24,7 @@ describe("The Metric Threshold Alert's getElasticsearchMetricQuery", () => { }; describe('when passed no filterQuery', () => { - const searchBody = getElasticsearchMetricQuery(expressionParams, timeframe, groupBy); + const searchBody = getElasticsearchMetricQuery(expressionParams, timeframe, 100, groupBy); test('includes a range filter', () => { expect( searchBody.query.bool.filter.find((filter) => filter.hasOwnProperty('range')) @@ -47,6 +47,7 @@ describe("The Metric Threshold Alert's getElasticsearchMetricQuery", () => { const searchBody = getElasticsearchMetricQuery( expressionParams, timeframe, + 100, groupBy, filterQuery ); diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/metric_query.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/metric_query.ts index 588b77250e6a64..e0abd8465e306e 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/metric_query.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/lib/metric_query.ts @@ -11,8 +11,6 @@ import { MetricExpressionParams, Aggregators } from '../types'; import { createPercentileAggregation } from './create_percentile_aggregation'; import { calculateDateHistogramOffset } from '../../../metrics/lib/calculate_date_histogram_offset'; -const COMPOSITE_RESULTS_PER_PAGE = 100; - const getParsedFilterQuery: (filterQuery: string | undefined) => Record | null = ( filterQuery ) => { @@ -23,6 +21,7 @@ const getParsedFilterQuery: (filterQuery: string | undefined) => Record { @@ -73,7 +72,7 @@ export const getElasticsearchMetricQuery = ( ? { groupings: { composite: { - size: COMPOSITE_RESULTS_PER_PAGE, + size: compositeSize, sources: Array.isArray(groupBy) ? groupBy.map((field, index) => ({ [`groupBy${index}`]: { diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts index 5a75b18e47590c..4bbbb355d573e1 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts @@ -747,6 +747,11 @@ describe('The metric threshold alert type', () => { }); const createMockStaticConfiguration = (sources: any) => ({ + alerting: { + metric_threshold: { + group_by_page_size: 100, + }, + }, inventory: { compositeSize: 2000, }, diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts index 810055fc1771a6..1b85df04c428bd 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts @@ -118,6 +118,7 @@ export const createMetricThresholdExecutor = (libs: InfraBackendLibs) => sourceId || 'default' ); const config = source.configuration; + const compositeSize = libs.configuration.alerting.metric_threshold.group_by_page_size; const previousGroupBy = state.groupBy; const previousFilterQuery = state.filterQuery; @@ -135,7 +136,8 @@ export const createMetricThresholdExecutor = (libs: InfraBackendLibs) => services.scopedClusterClient.asCurrentUser, params as EvaluatedRuleParams, config, - prevGroups + prevGroups, + compositeSize ); // Because each alert result has the same group definitions, just grab the groups from the first one. @@ -248,7 +250,6 @@ export const createMetricThresholdExecutor = (libs: InfraBackendLibs) => }); } } - return { groups, groupBy: params.groupBy, filterQuery: params.filterQuery }; }); diff --git a/x-pack/plugins/infra/server/lib/infra_types.ts b/x-pack/plugins/infra/server/lib/infra_types.ts index 332a2e499977bb..bfac01d3138f4a 100644 --- a/x-pack/plugins/infra/server/lib/infra_types.ts +++ b/x-pack/plugins/infra/server/lib/infra_types.ts @@ -6,7 +6,7 @@ */ import { handleEsError } from '../../../../../src/plugins/es_ui_shared/server'; -import { InfraConfig } from '../plugin'; +import { InfraConfig } from '../types'; import { GetLogQueryFields } from '../services/log_queries/get_log_query_fields'; import { RulesServiceSetup } from '../services/rules'; import { KibanaFramework } from './adapters/framework/kibana_framework_adapter'; diff --git a/x-pack/plugins/infra/server/lib/sources/sources.test.ts b/x-pack/plugins/infra/server/lib/sources/sources.test.ts index 396d2c22a100f0..adcec1bf055ea8 100644 --- a/x-pack/plugins/infra/server/lib/sources/sources.test.ts +++ b/x-pack/plugins/infra/server/lib/sources/sources.test.ts @@ -109,6 +109,11 @@ describe('the InfraSources lib', () => { }); const createMockStaticConfiguration = (sources: any) => ({ + alerting: { + metric_threshold: { + group_by_page_size: 10000, + }, + }, enabled: true, inventory: { compositeSize: 2000, diff --git a/x-pack/plugins/infra/server/plugin.ts b/x-pack/plugins/infra/server/plugin.ts index 79998ae6d56909..32562e319e1e59 100644 --- a/x-pack/plugins/infra/server/plugin.ts +++ b/x-pack/plugins/infra/server/plugin.ts @@ -6,7 +6,7 @@ */ import { Server } from '@hapi/hapi'; -import { schema, TypeOf } from '@kbn/config-schema'; +import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; import { Logger } from '@kbn/logging'; import { @@ -35,15 +35,20 @@ import { InfraBackendLibs, InfraDomainLibs } from './lib/infra_types'; import { infraSourceConfigurationSavedObjectType, InfraSources } from './lib/sources'; import { InfraSourceStatus } from './lib/source_status'; import { LogEntriesService } from './services/log_entries'; -import { InfraPluginRequestHandlerContext } from './types'; +import { InfraPluginRequestHandlerContext, InfraConfig } from './types'; import { UsageCollector } from './usage/usage_collector'; import { createGetLogQueryFields } from './services/log_queries/get_log_query_fields'; import { handleEsError } from '../../../../src/plugins/es_ui_shared/server'; import { RulesService } from './services/rules'; import { configDeprecations, getInfraDeprecationsFactory } from './deprecations'; -export const config: PluginConfigDescriptor = { +export const config: PluginConfigDescriptor = { schema: schema.object({ + alerting: schema.object({ + metric_threshold: schema.object({ + group_by_page_size: schema.number({ defaultValue: 10000 }), + }), + }), inventory: schema.object({ compositeSize: schema.number({ defaultValue: 2000 }), }), @@ -64,7 +69,7 @@ export const config: PluginConfigDescriptor = { deprecations: configDeprecations, }; -export type InfraConfig = TypeOf; +export type { InfraConfig }; export interface KbnServer extends Server { usage: any; diff --git a/x-pack/plugins/infra/server/types.ts b/x-pack/plugins/infra/server/types.ts index 5cae0158619460..9bfdc4784d26c2 100644 --- a/x-pack/plugins/infra/server/types.ts +++ b/x-pack/plugins/infra/server/types.ts @@ -31,3 +31,21 @@ export interface InfraPluginRequestHandlerContext extends RequestHandlerContext infra: InfraRequestHandlerContext; search: SearchRequestHandlerContext; } + +export interface InfraConfig { + alerting: { + metric_threshold: { + group_by_page_size: number; + }; + }; + inventory: { + compositeSize: number; + }; + sources?: { + default?: { + fields?: { + message?: string[]; + }; + }; + }; +} diff --git a/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx b/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx index 6896142aa7bf01..2543687a422089 100644 --- a/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx +++ b/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx @@ -274,11 +274,18 @@ const DragInner = memo(function DragInner({ ); const modifierHandlers = useMemo(() => { const onKeyUp = (e: KeyboardEvent) => { - if ((e.key === 'Shift' || e.key === 'Alt') && activeDropTarget?.id) { + if (activeDropTarget?.id && ['Shift', 'Alt', 'Control'].includes(e.key)) { if (e.altKey) { setTargetOfIndex(activeDropTarget.id, 1); } else if (e.shiftKey) { setTargetOfIndex(activeDropTarget.id, 2); + } else if (e.ctrlKey) { + // the control option is available either for new or existing cases, + // so need to offset based on some flags + const offsetIndex = + Number(activeDropTarget.humanData.canSwap) + + Number(activeDropTarget.humanData.canDuplicate); + setTargetOfIndex(activeDropTarget.id, offsetIndex + 1); } else { setTargetOfIndex(activeDropTarget.id, 0); } @@ -289,6 +296,13 @@ const DragInner = memo(function DragInner({ setTargetOfIndex(activeDropTarget.id, 1); } else if (e.key === 'Shift' && activeDropTarget?.id) { setTargetOfIndex(activeDropTarget.id, 2); + } else if (e.key === 'Control' && activeDropTarget?.id) { + // the control option is available either for new or existing cases, + // so need to offset based on some flags + const offsetIndex = + Number(activeDropTarget.humanData.canSwap) + + Number(activeDropTarget.humanData.canDuplicate); + setTargetOfIndex(activeDropTarget.id, offsetIndex + 1); } }; return { onKeyDown, onKeyUp }; @@ -360,6 +374,8 @@ const DragInner = memo(function DragInner({ setTargetOfIndex(nextTarget.id, 1); } else if (e.shiftKey && nextTarget?.id) { setTargetOfIndex(nextTarget.id, 2); + } else if (e.ctrlKey && nextTarget?.id) { + setTargetOfIndex(nextTarget.id, 3); } else { setTarget(nextTarget, true); } @@ -517,6 +533,8 @@ const DropsInner = memo(function DropsInner(props: DropsInnerProps) { return dropTypes[1]; } else if (e.shiftKey && dropTypes[2]) { return dropTypes[2]; + } else if (e.ctrlKey && (dropTypes.length > 3 ? dropTypes[3] : dropTypes[1])) { + return dropTypes.length > 3 ? dropTypes[3] : dropTypes[1]; } } return dropType; @@ -625,11 +643,10 @@ const DropsInner = memo(function DropsInner(props: DropsInnerProps) { return (
@@ -649,11 +666,10 @@ const DropsInner = memo(function DropsInner(props: DropsInnerProps) { gutterSize="none" direction="column" data-test-subj="lnsDragDropExtraDrops" - className={ - isInZone || activeDropTarget?.id === value.id - ? 'lnsDragDrop__extraDrops lnsDragDrop__extraDrops-visible' - : 'lnsDragDrop__extraDrops' - } + className={classNames('lnsDragDrop__extraDrops', { + // eslint-disable-next-line @typescript-eslint/naming-convention + 'lnsDragDrop__extraDrops-visible': isInZone || activeDropTarget?.id === value.id, + })} > {dropTypes.slice(1).map((dropType) => { const dropChildren = getCustomDropTarget?.(dropType); diff --git a/x-pack/plugins/lens/public/drag_drop/providers/announcements.tsx b/x-pack/plugins/lens/public/drag_drop/providers/announcements.tsx index 72771edbae9810..0d247825b6a170 100644 --- a/x-pack/plugins/lens/public/drag_drop/providers/announcements.tsx +++ b/x-pack/plugins/lens/public/drag_drop/providers/announcements.tsx @@ -140,6 +140,58 @@ const reorderAnnouncement = { }), }; +const combineAnnouncement = { + selectedTarget: ( + { label, groupLabel, position }: HumanData, + { + label: dropLabel, + groupLabel: dropGroupLabel, + position: dropPosition, + canSwap, + canDuplicate, + canCombine, + }: HumanData, + announceModifierKeys?: boolean + ) => { + if (announceModifierKeys && (canSwap || canDuplicate || canCombine)) { + return i18n.translate('xpack.lens.dragDrop.announce.selectedTarget.combineMain', { + defaultMessage: `You're dragging {label} from {groupLabel} at position {position} over {dropLabel} from {dropGroupLabel} group at position {dropPosition}. Press space or enter to combine {dropLabel} with {label}.{duplicateCopy}{swapCopy}{combineCopy}`, + values: { + label, + groupLabel, + position, + dropLabel, + dropGroupLabel, + dropPosition, + duplicateCopy: canDuplicate ? DUPLICATE_SHORT : '', + swapCopy: canSwap ? SWAP_SHORT : '', + combineCopy: canCombine ? COMBINE_SHORT : '', + }, + }); + } + + return i18n.translate('xpack.lens.dragDrop.announce.selectedTarget.combine', { + defaultMessage: `Combine {dropLabel} in {dropGroupLabel} group at position {dropPosition} with {label}. Press space or enter to combine.`, + values: { + label, + dropLabel, + dropGroupLabel, + dropPosition, + }, + }); + }, + dropped: ({ label }: HumanData, { label: dropLabel, groupLabel, position }: HumanData) => + i18n.translate('xpack.lens.dragDrop.announce.duplicated.combine', { + defaultMessage: 'Combine {dropLabel} with {label} in {groupLabel} at position {position}', + values: { + label, + dropLabel, + groupLabel, + position, + }, + }), +}; + const DUPLICATE_SHORT = i18n.translate('xpack.lens.dragDrop.announce.duplicate.short', { defaultMessage: ' Hold alt or option to duplicate.', }); @@ -148,11 +200,16 @@ const SWAP_SHORT = i18n.translate('xpack.lens.dragDrop.announce.swap.short', { defaultMessage: ' Hold shift to swap.', }); +const COMBINE_SHORT = i18n.translate('xpack.lens.dragDrop.announce.combine.short', { + defaultMessage: ' Hold control to combine', +}); + export const announcements: CustomAnnouncementsType = { selectedTarget: { reorder: reorderAnnouncement.selectedTarget, duplicate_compatible: duplicateAnnouncement.selectedTarget, field_replace: replaceAnnouncement.selectedTarget, + field_combine: combineAnnouncement.selectedTarget, replace_compatible: replaceAnnouncement.selectedTarget, replace_incompatible: ( { label, groupLabel, position }: HumanData, @@ -337,11 +394,45 @@ export const announcements: CustomAnnouncementsType = { nextLabel, }, }), + combine_compatible: ( + { label, groupLabel, position }: HumanData, + { label: dropLabel, groupLabel: dropGroupLabel, position: dropPosition, nextLabel }: HumanData + ) => + i18n.translate('xpack.lens.dragDrop.announce.selectedTarget.combineCompatible', { + defaultMessage: + 'Combine {label} in {groupLabel} group at position {position} with {dropLabel} in {dropGroupLabel} group at position {dropPosition}. Hold Control and press space or enter to combine', + values: { + label, + groupLabel, + position, + dropLabel, + dropGroupLabel, + dropPosition, + }, + }), + combine_incompatible: ( + { label, groupLabel, position }: HumanData, + { label: dropLabel, groupLabel: dropGroupLabel, position: dropPosition, nextLabel }: HumanData + ) => + i18n.translate('xpack.lens.dragDrop.announce.selectedTarget.combineIncompatible', { + defaultMessage: + 'Convert {label} to {nextLabel} in {groupLabel} group at position {position} and combine with {dropLabel} in {dropGroupLabel} group at position {dropPosition}. Hold Control and press space or enter to combine', + values: { + label, + groupLabel, + position, + dropLabel, + dropGroupLabel, + dropPosition, + nextLabel, + }, + }), }, dropped: { reorder: reorderAnnouncement.dropped, duplicate_compatible: duplicateAnnouncement.dropped, field_replace: replaceAnnouncement.dropped, + field_combine: combineAnnouncement.dropped, replace_compatible: replaceAnnouncement.dropped, replace_incompatible: ( { label }: HumanData, @@ -457,6 +548,39 @@ export const announcements: CustomAnnouncementsType = { nextLabel, }, }), + combine_compatible: ( + { label, groupLabel, position }: HumanData, + { label: dropLabel, groupLabel: dropGroupLabel, position: dropPosition }: HumanData + ) => + i18n.translate('xpack.lens.dragDrop.announce.dropped.combineCompatible', { + defaultMessage: + 'Combined {label} to {dropGroupLabel} at position {dropPosition} and {dropLabel} to {groupLabel} group at position {position}', + values: { + label, + groupLabel, + position, + dropLabel, + dropGroupLabel, + dropPosition, + }, + }), + combine_incompatible: ( + { label, groupLabel, position }: HumanData, + { label: dropLabel, groupLabel: dropGroupLabel, position: dropPosition, nextLabel }: HumanData + ) => + i18n.translate('xpack.lens.dragDrop.announce.dropped.combineIncompatible', { + defaultMessage: + 'Converted {label} to {nextLabel} in {groupLabel} group at position {position} and combined with {dropLabel} in {dropGroupLabel} group at position {dropPosition}', + values: { + label, + groupLabel, + position, + dropGroupLabel, + dropLabel, + dropPosition, + nextLabel, + }, + }), }, }; diff --git a/x-pack/plugins/lens/public/drag_drop/providers/types.tsx b/x-pack/plugins/lens/public/drag_drop/providers/types.tsx index 8b28affa455965..921ab897706c04 100644 --- a/x-pack/plugins/lens/public/drag_drop/providers/types.tsx +++ b/x-pack/plugins/lens/public/drag_drop/providers/types.tsx @@ -14,6 +14,7 @@ export interface HumanData { nextLabel?: string; canSwap?: boolean; canDuplicate?: boolean; + canCombine?: boolean; } export interface Ghost { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/draggable_dimension_button.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/draggable_dimension_button.tsx index 365c2c15c493b7..e88b04588d2e0d 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/draggable_dimension_button.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/buttons/draggable_dimension_button.tsx @@ -81,6 +81,13 @@ export function DraggableDimensionButton({ (dropTypes.includes('swap_incompatible') || dropTypes.includes('swap_compatible')) ); + const canCombine = Boolean( + dropTypes && + (dropTypes.includes('combine_compatible') || + dropTypes.includes('field_combine') || + dropTypes.includes('combine_incompatible')) + ); + const value = useMemo( () => ({ columnId, @@ -91,6 +98,7 @@ export function DraggableDimensionButton({ humanData: { canSwap, canDuplicate, + canCombine, label, groupLabel: group.groupLabel, position: accessorIndex + 1, @@ -108,6 +116,7 @@ export function DraggableDimensionButton({ group.filterOperations, canDuplicate, canSwap, + canCombine, ] ); @@ -129,7 +138,6 @@ export function DraggableDimensionButton({ (droppedItem, selectedDropType) => onDrop(droppedItem, value, selectedDropType), [value, onDrop] ); - return (
{ + const { icon, label, controlKey } = getPropsForDropType(type); return ( - + - - {type === 'duplicate' - ? i18n.translate('xpack.lens.dragDrop.duplicate', { - defaultMessage: 'Duplicate', - }) - : i18n.translate('xpack.lens.dragDrop.swap', { - defaultMessage: 'Swap', - })} - + {label} - - {' '} - {type === 'duplicate' - ? i18n.translate('xpack.lens.dragDrop.altOption', { - defaultMessage: 'Alt/Option', - }) - : i18n.translate('xpack.lens.dragDrop.shift', { - defaultMessage: 'Shift', - })} - + {controlKey} @@ -70,6 +92,9 @@ const customDropTargetsMap: Partial<{ [dropType in DropType]: React.ReactElement replace_duplicate_compatible: getExtraDrop({ type: 'duplicate' }), duplicate_compatible: getExtraDrop({ type: 'duplicate' }), swap_compatible: getExtraDrop({ type: 'swap' }), + field_combine: getExtraDrop({ type: 'combine' }), + combine_compatible: getExtraDrop({ type: 'combine' }), + combine_incompatible: getExtraDrop({ type: 'combine', isIncompatible: true }), }; export const getCustomDropTarget = (dropType: DropType) => customDropTargetsMap?.[dropType] || null; @@ -98,6 +123,7 @@ export const getAdditionalClassesOnDroppable = (dropType?: string) => { 'swap_incompatible', 'duplicate_incompatible', 'replace_duplicate_incompatible', + 'combine_incompatible', ].includes(dropType) ) { return 'lnsDragDrop-notCompatible'; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.tsx index f13ecb78593d9c..be230634886105 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.tsx @@ -19,6 +19,7 @@ import { updateVisualizationState, DatasourceStates, VisualizationState, + updateDatasourceState, } from '../../../state_management'; import { WorkspaceTitle } from './title'; @@ -60,6 +61,17 @@ export function WorkspacePanelWrapper({ }, [dispatchLens, activeVisualization] ); + const setDatasourceState = useCallback( + (updater: unknown, datasourceId: string) => { + dispatchLens( + updateDatasourceState({ + updater, + datasourceId, + }) + ); + }, + [dispatchLens] + ); const warningMessages: React.ReactNode[] = []; if (activeVisualization?.getWarningMessages) { warningMessages.push( @@ -70,7 +82,9 @@ export function WorkspacePanelWrapper({ const datasource = datasourceMap[datasourceId]; if (!datasourceState.isLoading && datasource.getWarningMessages) { warningMessages.push( - ...(datasource.getWarningMessages(datasourceState.state, framePublicAPI) || []) + ...(datasource.getWarningMessages(datasourceState.state, framePublicAPI, (updater) => + setDatasourceState(updater, datasourceId) + ) || []) ); } }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx index 2b85e372432376..079580ce69896f 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx @@ -634,6 +634,20 @@ export function DimensionEditor(props: DimensionEditorProps) { }, ]; + const defaultLabel = useMemo( + () => + String( + selectedColumn && + !selectedColumn.customLabel && + operationDefinitionMap[selectedColumn.operationType].getDefaultLabel( + selectedColumn, + state.indexPatterns[state.layers[layerId].indexPatternId], + state.layers[layerId].columns + ) + ), + [layerId, selectedColumn, state.indexPatterns, state.layers] + ); + return (
{hasTabs ? : null} @@ -750,6 +764,8 @@ export function DimensionEditor(props: DimensionEditorProps) {
{!incompleteInfo && selectedColumn && temporaryState === 'none' && ( { updateLayer({ diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/droppable.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/droppable.test.ts index fa200e8b556266..fab431e886d8ea 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/droppable.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/droppable.test.ts @@ -244,6 +244,35 @@ describe('IndexPatternDimensionEditorPanel', () => { let setState: jest.Mock; let defaultProps: IndexPatternDimensionEditorProps; + function getStateWithMultiFieldColumn() { + return { + ...state, + layers: { + ...state.layers, + first: { + ...state.layers.first, + columns: { + ...state.layers.first.columns, + col1: { + label: 'Top values of dest', + dataType: 'string', + isBucketed: true, + + // Private + operationType: 'terms', + params: { + orderBy: { type: 'alphabetical' }, + orderDirection: 'desc', + size: 10, + }, + sourceField: 'dest', + } as TermsIndexPatternColumn, + }, + }, + }, + }; + } + beforeEach(() => { state = { indexPatternRefs: [], @@ -398,16 +427,29 @@ describe('IndexPatternDimensionEditorPanel', () => { }) ).toBe(undefined); }); + + it('returns also field_combine if the field is supported by filterOperations and the dropTarget is an existing column that supports multiple fields', () => { + // replace the state with a top values column to enable the multi fields behaviour + state = getStateWithMultiFieldColumn(); + expect( + getDropProps({ + ...defaultProps, + state, + groupId, + dragging: draggingField, + filterOperations: (op: OperationMetadata) => op.dataType !== 'date', + }) + ).toEqual({ dropTypes: ['field_replace', 'field_combine'] }); + }); }); describe('dragging a column', () => { it('returns undefined if the dragged column from different group uses the same field as the dropTarget', () => { - const testState = { ...state }; - testState.layers.first = { + state.layers.first = { indexPatternId: 'foo', columnOrder: ['col1', 'col2', 'col3'], columns: { - col1: testState.layers.first.columns.col1, + col1: state.layers.first.columns.col1, col2: { label: 'Date histogram of timestamp (1)', @@ -438,13 +480,134 @@ describe('IndexPatternDimensionEditorPanel', () => { ).toEqual(undefined); }); + it('returns undefined if the dragged column from different group uses the same fields as the dropTarget', () => { + state = getStateWithMultiFieldColumn(); + const sourceMultiFieldColumn = { + ...state.layers.first.columns.col1, + sourceField: 'bytes', + params: { + ...(state.layers.first.columns.col1 as TermsIndexPatternColumn).params, + secondaryFields: ['dest'], + }, + } as TermsIndexPatternColumn; + // invert the fields + const targetMultiFieldColumn = { + ...state.layers.first.columns.col1, + sourceField: 'dest', + params: { + ...(state.layers.first.columns.col1 as TermsIndexPatternColumn).params, + secondaryFields: ['bytes'], + }, + } as TermsIndexPatternColumn; + state.layers.first = { + indexPatternId: 'foo', + columnOrder: ['col1', 'col2'], + columns: { + col1: sourceMultiFieldColumn, + col2: targetMultiFieldColumn, + }, + }; + + expect( + getDropProps({ + ...defaultProps, + state, + groupId, + dragging: { + ...draggingCol1, + groupId: 'c', + }, + columnId: 'col2', + }) + ).toEqual(undefined); + }); + + it('returns duplicate and replace if the dragged column from different group uses the same field as the dropTarget, but this last one is multifield, and can be swappable', () => { + state = getStateWithMultiFieldColumn(); + state.layers.first = { + indexPatternId: 'foo', + columnOrder: ['col1', 'col2'], + columns: { + col1: state.layers.first.columns.col1, + + col2: { + ...state.layers.first.columns.col1, + sourceField: 'bytes', + params: { + ...(state.layers.first.columns.col1 as TermsIndexPatternColumn).params, + secondaryFields: ['dest'], + }, + } as TermsIndexPatternColumn, + }, + }; + + expect( + getDropProps({ + ...defaultProps, + state, + groupId, + dragging: { + ...draggingCol1, + groupId: 'c', + }, + columnId: 'col2', + }) + ).toEqual({ + dropTypes: ['replace_compatible', 'replace_duplicate_compatible'], + }); + }); + + it('returns swap, duplicate and replace if the dragged column from different group uses the same field as the dropTarget, but this last one is multifield', () => { + state = getStateWithMultiFieldColumn(); + state.layers.first = { + indexPatternId: 'foo', + columnOrder: ['col1', 'col2'], + columns: { + col1: state.layers.first.columns.col1, + + col2: { + ...state.layers.first.columns.col1, + sourceField: 'bytes', + params: { + ...(state.layers.first.columns.col1 as TermsIndexPatternColumn).params, + secondaryFields: ['dest'], + }, + } as TermsIndexPatternColumn, + }, + }; + + expect( + getDropProps({ + ...defaultProps, + state, + // make it swappable + dimensionGroups: [ + { + accessors: [{ columnId: 'col1' }], + filterOperations: jest.fn(() => true), + groupId, + groupLabel: '', + supportsMoreColumns: false, + }, + ], + groupId, + dragging: { + ...draggingCol1, + groupId: 'c', + }, + columnId: 'col2', + }) + ).toEqual({ + dropTypes: ['replace_compatible', 'replace_duplicate_compatible', 'swap_compatible'], + }); + }); + it('returns reorder if drop target and droppedItem columns are from the same group and both are existing', () => { - const testState = { ...state }; - testState.layers.first = { + state.layers.first = { indexPatternId: 'foo', columnOrder: ['col1', 'col2', 'col3'], columns: { - col1: testState.layers.first.columns.col1, + col1: state.layers.first.columns.col1, col2: { label: 'Sum of bytes', @@ -500,12 +663,11 @@ describe('IndexPatternDimensionEditorPanel', () => { }); it('returns incompatible drop target types if dropping column to existing incompatible column', () => { - const testState = { ...state }; - testState.layers.first = { + state.layers.first = { indexPatternId: 'foo', columnOrder: ['col1', 'col2', 'col3'], columns: { - col1: testState.layers.first.columns.col1, + col1: state.layers.first.columns.col1, col2: { label: 'Sum of bytes', @@ -541,12 +703,11 @@ describe('IndexPatternDimensionEditorPanel', () => { }); it('does not return swap_incompatible if current dropTarget column cannot be swapped to the group of dragging column', () => { - const testState = { ...state }; - testState.layers.first = { + state.layers.first = { indexPatternId: 'foo', columnOrder: ['col1', 'col2', 'col3'], columns: { - col1: testState.layers.first.columns.col1, + col1: state.layers.first.columns.col1, col2: { label: 'Count of records', @@ -578,6 +739,117 @@ describe('IndexPatternDimensionEditorPanel', () => { nextLabel: 'Unique count', }); }); + + it('returns combine_compatible drop type if the dragged column is compatible and the target one support multiple fields', () => { + state = getStateWithMultiFieldColumn(); + state.layers.first = { + indexPatternId: 'foo', + columnOrder: ['col1', 'col2'], + columns: { + col1: state.layers.first.columns.col1, + + col2: { + ...state.layers.first.columns.col1, + sourceField: 'bytes', + }, + }, + }; + + expect( + getDropProps({ + ...defaultProps, + state, + groupId, + dragging: { + ...draggingCol1, + groupId: 'c', + }, + columnId: 'col2', + }) + ).toEqual({ + dropTypes: ['replace_compatible', 'replace_duplicate_compatible', 'combine_compatible'], + }); + }); + + it('returns no combine drop type if the dragged column is compatible, the target one supports multiple fields but there are too many fields', () => { + state = getStateWithMultiFieldColumn(); + state.layers.first = { + indexPatternId: 'foo', + columnOrder: ['col1', 'col2'], + columns: { + col1: state.layers.first.columns.col1, + + col2: { + ...state.layers.first.columns.col1, + sourceField: 'source', + params: { + ...(state.layers.first.columns.col1 as TermsIndexPatternColumn).params, + secondaryFields: ['memory', 'bytes', 'geo.src'], // too many fields here + }, + } as TermsIndexPatternColumn, + }, + }; + + expect( + getDropProps({ + ...defaultProps, + state, + groupId, + dragging: { + ...draggingCol1, + groupId: 'c', + }, + columnId: 'col2', + }) + ).toEqual({ + dropTypes: ['replace_compatible', 'replace_duplicate_compatible'], + }); + }); + + it('returns combine_incompatible drop target types if dropping column to existing incompatible column which supports multiple fields', () => { + state = getStateWithMultiFieldColumn(); + state.layers.first = { + indexPatternId: 'foo', + columnOrder: ['col1', 'col2', 'col3'], + columns: { + col1: state.layers.first.columns.col1, + + col2: { + label: 'Sum of bytes', + dataType: 'number', + isBucketed: false, + + // Private + operationType: 'sum', + sourceField: 'bytes', + }, + }, + }; + + expect( + getDropProps({ + ...defaultProps, + state, + groupId, + // drag the sum over the top values + dragging: { + ...draggingCol2, + groupId: 'c', + filterOperation: undefined, + }, + columnId: 'col1', + filterOperations: (op: OperationMetadata) => op.isBucketed, + }) + ).toEqual({ + dropTypes: [ + 'replace_incompatible', + 'replace_duplicate_incompatible', + 'swap_incompatible', + 'combine_incompatible', + ], + nextLabel: 'Top values', + }); + }); }); }); @@ -748,6 +1020,33 @@ describe('IndexPatternDimensionEditorPanel', () => { }, }); }); + + it('appends the new field to the column that supports multiple fields when a field is dropped', () => { + state = getStateWithMultiFieldColumn(); + onDrop({ + ...defaultProps, + state, + droppedItem: draggingField, + filterOperations: (op: OperationMetadata) => op.dataType === 'number', + dropType: 'field_combine', + }); + + expect(setState).toBeCalledTimes(1); + expect(setState).toHaveBeenCalledWith({ + ...state, + layers: { + first: expect.objectContaining({ + columns: expect.objectContaining({ + col1: expect.objectContaining({ + dataType: 'string', + sourceField: 'dest', + params: expect.objectContaining({ secondaryFields: ['bytes'] }), + }), + }), + }), + }, + }); + }); }); describe('dropping a dimension', () => { @@ -1335,6 +1634,57 @@ describe('IndexPatternDimensionEditorPanel', () => { }); }); + it('when combine compatible columns should append dropped column fields into the target one', () => { + state = getStateWithMultiFieldColumn(); + state.layers.first.columns = { + ...state.layers.first.columns, + col2: { + isBucketed: true, + label: 'Top values of source', + operationType: 'terms', + sourceField: 'bytes', + dataType: 'number', + params: { + orderBy: { + type: 'alphabetical', + }, + orderDirection: 'desc', + size: 10, + }, + } as TermsIndexPatternColumn, + }; + onDrop({ + ...defaultProps, + state, + droppedItem: { + columnId: 'col2', + groupId: 'a', + layerId: 'first', + id: 'col2', + humanData: { label: 'Label' }, + }, + filterOperations: (op: OperationMetadata) => op.isBucketed, + dropType: 'combine_compatible', + columnId: 'col1', + }); + + expect(setState).toBeCalledTimes(1); + expect(setState).toHaveBeenCalledWith({ + ...state, + layers: { + first: expect.objectContaining({ + columns: expect.objectContaining({ + col1: expect.objectContaining({ + dataType: 'string', + sourceField: 'dest', + params: expect.objectContaining({ secondaryFields: ['bytes'] }), + }), + }), + }), + }, + }); + }); + describe('dimension group aware ordering and copying', () => { let testState: IndexPatternPrivateState; beforeEach(() => { diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/get_drop_props.ts b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/get_drop_props.ts index 87daef0d40f620..d85cbd438ffe71 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/get_drop_props.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/get_drop_props.ts @@ -12,7 +12,11 @@ import { DropType, VisualizationDimensionGroupConfig, } from '../../../types'; -import { getOperationDisplay } from '../../operations'; +import { + getCurrentFieldsForOperation, + getOperationDisplay, + hasOperationSupportForMultipleFields, +} from '../../operations'; import { hasField, isDraggedField } from '../../pure_utils'; import { DragContextState } from '../../../drag_drop/providers'; import { OperationMetadata } from '../../../types'; @@ -85,14 +89,21 @@ export function getDropProps(props: GetDropProps) { ) { const sourceColumn = state.layers[dragging.layerId].columns[dragging.columnId]; const targetColumn = state.layers[layerId].columns[columnId]; + const layerIndexPattern = state.indexPatterns[state.layers[layerId].indexPatternId]; const isSameGroup = groupId === dragging.groupId; if (isSameGroup) { return getDropPropsForSameGroup(targetColumn); + } else if (filterOperations(sourceColumn)) { + return getDropPropsForCompatibleGroup( + props.dimensionGroups, + dragging.columnId, + sourceColumn, + targetColumn, + layerIndexPattern + ); } else if (hasTheSameField(sourceColumn, targetColumn)) { return; - } else if (filterOperations(sourceColumn)) { - return getDropPropsForCompatibleGroup(props.dimensionGroups, dragging.columnId, targetColumn); } else { return getDropPropsFromIncompatibleGroup({ ...props, dragging }); } @@ -103,11 +114,12 @@ function hasTheSameField( sourceColumn: GenericIndexPatternColumn, targetColumn?: GenericIndexPatternColumn ) { + const targetFields = targetColumn ? getCurrentFieldsForOperation(targetColumn) : []; + const sourceFields = new Set(getCurrentFieldsForOperation(sourceColumn)); + return ( - targetColumn && - hasField(targetColumn) && - hasField(sourceColumn) && - targetColumn.sourceField === sourceColumn.sourceField + targetFields.length === sourceFields.size && + targetFields.every((field) => sourceFields.has(field)) ); } @@ -131,10 +143,22 @@ function getDropPropsForField({ (hasField(targetColumn) && targetColumn.sourceField !== dragging.field.name) || !hasField(targetColumn) ) { - return { - dropTypes: ['field_replace'], - nextLabel, - }; + const layerIndexPattern = state.indexPatterns[state.layers[layerId].indexPatternId]; + return hasField(targetColumn) && + layerIndexPattern && + hasOperationSupportForMultipleFields( + layerIndexPattern, + targetColumn, + undefined, + dragging.field + ) + ? { + dropTypes: ['field_replace', 'field_combine'], + } + : { + dropTypes: ['field_replace'], + nextLabel, + }; } } return; @@ -147,23 +171,45 @@ function getDropPropsForSameGroup(targetColumn?: GenericIndexPatternColumn): Dro function getDropPropsForCompatibleGroup( dimensionGroups: VisualizationDimensionGroupConfig[], sourceId: string, - targetColumn?: GenericIndexPatternColumn + sourceColumn?: GenericIndexPatternColumn, + targetColumn?: GenericIndexPatternColumn, + indexPattern?: IndexPattern ): DropProps { + const hasSameField = sourceColumn && hasTheSameField(sourceColumn, targetColumn); + const canSwap = targetColumn && + !hasSameField && dimensionGroups .find((group) => group.accessors.some((accessor) => accessor.columnId === sourceId)) ?.filterOperations(targetColumn); - const dropTypes: DropProps = { - dropTypes: targetColumn - ? ['replace_compatible', 'replace_duplicate_compatible'] - : ['move_compatible', 'duplicate_compatible'], - }; + const swapType: DropType[] = canSwap ? ['swap_compatible'] : []; + + if (!targetColumn) { + return { dropTypes: ['move_compatible', 'duplicate_compatible', ...swapType] }; + } + if (!indexPattern || !hasField(targetColumn)) { + return { dropTypes: ['replace_compatible', 'replace_duplicate_compatible', ...swapType] }; + } + // With multi fields operations there are more combination of drops now + const dropTypes: DropType[] = []; + if (!hasSameField) { + dropTypes.push('replace_compatible', 'replace_duplicate_compatible'); + } if (canSwap) { - dropTypes.dropTypes.push('swap_compatible'); + dropTypes.push('swap_compatible'); } - return dropTypes; + if (hasOperationSupportForMultipleFields(indexPattern, targetColumn, sourceColumn)) { + dropTypes.push('combine_compatible'); + } + // return undefined if no drop action is available + if (!dropTypes.length) { + return; + } + return { + dropTypes, + }; } function getDropPropsFromIncompatibleGroup({ @@ -185,14 +231,23 @@ function getDropPropsFromIncompatibleGroup({ if (newOperationForSource) { const targetField = getField(targetColumn, layerIndexPattern); - const canSwap = !!getNewOperation(targetField, dragging.filterOperations, sourceColumn); + const canSwap = Boolean(getNewOperation(targetField, dragging.filterOperations, sourceColumn)); + + const dropTypes: DropType[] = []; + if (targetColumn) { + dropTypes.push('replace_incompatible', 'replace_duplicate_incompatible'); + if (canSwap) { + dropTypes.push('swap_incompatible'); + } + if (hasOperationSupportForMultipleFields(layerIndexPattern, targetColumn, sourceColumn)) { + dropTypes.push('combine_incompatible'); + } + } else { + dropTypes.push('move_incompatible', 'duplicate_incompatible'); + } return { - dropTypes: targetColumn - ? canSwap - ? ['replace_incompatible', 'replace_duplicate_incompatible', 'swap_incompatible'] - : ['replace_incompatible', 'replace_duplicate_incompatible'] - : ['move_incompatible', 'duplicate_incompatible'], + dropTypes, nextLabel: operationLabels[newOperationForSource].displayName, }; } diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/on_drop_handler.ts b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/on_drop_handler.ts index 1b5679786e717e..c9e806050caad9 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/on_drop_handler.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/on_drop_handler.ts @@ -11,6 +11,9 @@ import { getColumnOrder, reorderByGroups, copyColumn, + hasOperationSupportForMultipleFields, + getOperationHelperForMultipleFields, + replaceColumn, } from '../../operations'; import { mergeLayer } from '../../state_helpers'; import { isDraggedField } from '../../pure_utils'; @@ -25,7 +28,7 @@ type DropHandlerProps = DatasourceDimensionDropHandlerProps) { const { droppedItem, dropType } = props; - if (dropType === 'field_add' || dropType === 'field_replace') { + if (dropType === 'field_add' || dropType === 'field_replace' || dropType === 'field_combine') { return operationOnDropMap[dropType]({ ...props, droppedItem: droppedItem as DraggedField, @@ -40,6 +43,7 @@ export function onDrop(props: DatasourceDimensionDropHandlerProps) => onFieldDrop(props, true), reorder: onReorder, @@ -56,9 +60,72 @@ const operationOnDropMap = { swap_compatible: onSwapCompatible, swap_incompatible: onSwapIncompatible, + combine_compatible: onCombineCompatible, + combine_incompatible: onCombineCompatible, }; -function onFieldDrop(props: DropHandlerProps) { +function onCombineCompatible({ + columnId, + setState, + state, + layerId, + droppedItem, + dimensionGroups, + groupId, +}: DropHandlerProps) { + const layer = state.layers[layerId]; + const sourceId = droppedItem.columnId; + const targetId = columnId; + const indexPattern = state.indexPatterns[layer.indexPatternId]; + const sourceColumn = layer.columns[sourceId]; + const targetColumn = layer.columns[targetId]; + + // extract the field from the source column + const sourceField = getField(sourceColumn, indexPattern); + const targetField = getField(targetColumn, indexPattern); + if (!sourceField || !targetField) { + return false; + } + // pass it to the target column and delete the source column + const initialParams = { + params: + getOperationHelperForMultipleFields(targetColumn.operationType)?.({ + targetColumn, + sourceColumn, + indexPattern, + }) ?? {}, + }; + + const modifiedLayer = replaceColumn({ + layer, + columnId, + indexPattern, + op: targetColumn.operationType, + field: targetField, + visualizationGroups: dimensionGroups, + targetGroup: groupId, + initialParams, + shouldCombineField: true, + }); + const newLayer = deleteColumn({ + layer: modifiedLayer, + columnId: sourceId, + indexPattern, + }); + + // Time to replace + setState( + mergeLayer({ + state, + layerId, + newLayer, + }) + ); + + return { deleted: sourceId }; +} + +function onFieldDrop(props: DropHandlerProps, shouldAddField?: boolean) { const { columnId, setState, @@ -77,25 +144,45 @@ function onFieldDrop(props: DropHandlerProps) { const layer = state.layers[layerId]; const indexPattern = state.indexPatterns[layer.indexPatternId]; const targetColumn = layer.columns[columnId]; - const newOperation = getNewOperation( - droppedItem.field, - filterOperations, - targetColumn, - prioritizedOperation - ); - - if (!isDraggedField(droppedItem) || !newOperation) { + const newOperation = shouldAddField + ? targetColumn.operationType + : getNewOperation(droppedItem.field, filterOperations, targetColumn, prioritizedOperation); + + if ( + !isDraggedField(droppedItem) || + !newOperation || + (shouldAddField && + !hasOperationSupportForMultipleFields( + indexPattern, + targetColumn, + undefined, + droppedItem.field + )) + ) { return false; } + const field = shouldAddField ? getField(targetColumn, indexPattern) : droppedItem.field; + const initialParams = shouldAddField + ? { + params: + getOperationHelperForMultipleFields(targetColumn.operationType)?.({ + targetColumn, + field: droppedItem.field, + indexPattern, + }) || {}, + } + : undefined; const newLayer = insertOrReplaceColumn({ layer, columnId, indexPattern, op: newOperation, - field: droppedItem.field, + field, visualizationGroups: dimensionGroups, targetGroup: groupId, + shouldCombineField: shouldAddField, + initialParams, }); trackUiEvent('drop_onto_dimension'); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts index cc88375e4137bc..4e358564c9f76b 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts @@ -1449,7 +1449,7 @@ describe('IndexPattern Data Source', () => { }); it('should return mismatched time shifts', () => { - const warnings = indexPatternDatasource.getWarningMessages!(state, framePublicAPI); + const warnings = indexPatternDatasource.getWarningMessages!(state, framePublicAPI, () => {}); expect(warnings!.map((item) => (item as React.ReactElement).props.id)).toMatchInlineSnapshot(` Array [ @@ -1462,7 +1462,7 @@ describe('IndexPattern Data Source', () => { it('should show different types of warning messages', () => { framePublicAPI.activeData!.first.columns[0].meta.sourceParams!.hasPrecisionError = true; - const warnings = indexPatternDatasource.getWarningMessages!(state, framePublicAPI); + const warnings = indexPatternDatasource.getWarningMessages!(state, framePublicAPI, () => {}); expect(warnings!.map((item) => (item as React.ReactElement).props.id)).toMatchInlineSnapshot(` Array [ diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx index 81acac82355abf..005cbd4b119771 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx @@ -527,10 +527,10 @@ export function getIndexPatternDatasource({ }); return messages.length ? messages : undefined; }, - getWarningMessages: (state, frame) => { + getWarningMessages: (state, frame, setState) => { return [ ...(getStateTimeShiftWarningMessages(state, frame) || []), - ...getPrecisionErrorWarningMessages(state, frame, core.docLinks), + ...getPrecisionErrorWarningMessages(state, frame, core.docLinks, setState), ]; }, checkIntegrity: (state) => { diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts index 431b8a84341e88..d2922ed86614ae 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts @@ -94,6 +94,14 @@ const indexPattern1 = { searchable: true, esTypes: ['keyword'], }, + { + name: 'geo.src', + displayName: 'geo.src', + type: 'string', + aggregatable: true, + searchable: true, + esTypes: ['keyword'], + }, { name: 'scripted', displayName: 'Scripted', diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts b/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts index 4545e42b2ff997..b8b5b9a4e6293a 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts @@ -12,6 +12,16 @@ import type { IndexPattern, IndexPatternField } from './types'; export const createMockedIndexPatternWithoutType = ( typeToFilter: IndexPatternField['type'] ): IndexPattern => { + const { fields, ...otherIndexPatternProps } = createMockedIndexPattern(); + const filteredFields = fields.filter(({ type }) => type !== typeToFilter); + return { + ...otherIndexPatternProps, + fields: filteredFields, + getFieldByName: getFieldByNameFactory(filteredFields), + }; +}; + +export const createMockedIndexPattern = (): IndexPattern => { const fields = [ { name: 'timestamp', @@ -65,74 +75,8 @@ export const createMockedIndexPatternWithoutType = ( esTypes: ['keyword'], }, { - name: 'scripted', - displayName: 'Scripted', - type: 'string', - searchable: true, - aggregatable: true, - scripted: true, - lang: 'painless' as const, - script: '1234', - }, - ].filter(({ type }) => type !== typeToFilter); - return { - id: '1', - title: 'my-fake-index-pattern', - timeFieldName: 'timestamp', - hasRestrictions: false, - fields, - getFieldByName: getFieldByNameFactory(fields), - }; -}; - -export const createMockedIndexPattern = (): IndexPattern => { - const fields = [ - { - name: 'timestamp', - displayName: 'timestampLabel', - type: 'date', - aggregatable: true, - searchable: true, - }, - { - name: 'start_date', - displayName: 'start_date', - type: 'date', - aggregatable: true, - searchable: true, - }, - { - name: 'bytes', - displayName: 'bytes', - type: 'number', - aggregatable: true, - searchable: true, - }, - { - name: 'memory', - displayName: 'memory', - type: 'number', - aggregatable: true, - searchable: true, - }, - { - name: 'source', - displayName: 'source', - type: 'string', - aggregatable: true, - searchable: true, - esTypes: ['keyword'], - }, - { - name: 'unsupported', - displayName: 'unsupported', - type: 'geo', - aggregatable: true, - searchable: true, - }, - { - name: 'dest', - displayName: 'dest', + name: 'geo.src', + displayName: 'geo.src', type: 'string', aggregatable: true, searchable: true, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts index ccf86be7d2b08e..3a1a53ba1a5f00 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts @@ -191,7 +191,7 @@ export interface HelpProps { export type TimeScalingMode = 'disabled' | 'mandatory' | 'optional'; -interface BaseOperationDefinitionProps { +interface BaseOperationDefinitionProps { type: C['operationType']; /** * The priority of the operation. If multiple operations are possible in @@ -310,10 +310,28 @@ interface BaseOperationDefinitionProps { * React component for operation field specific behaviour */ renderFieldInput?: React.ComponentType>; + /** + * Builds the correct parameter for field additions + */ + getParamsForMultipleFields?: (props: { + targetColumn: C; + sourceColumn?: GenericIndexPatternColumn; + field?: IndexPatternField; + indexPattern: IndexPattern; + }) => Partial

; /** * Verify if the a new field can be added to the column */ - canAddNewField?: (column: C, field: IndexPatternField) => boolean; + canAddNewField?: (props: { + targetColumn: C; + sourceColumn?: GenericIndexPatternColumn; + field?: IndexPatternField; + indexPattern: IndexPattern; + }) => boolean; + /** + * Returns the list of current fields for a multi field operation + */ + getCurrentFields?: (targetColumn: C) => string[]; /** * Operation can influence some visual default settings. This function is used to collect default values offered */ @@ -408,8 +426,9 @@ interface FieldBasedOperationDefinition C; + onFieldChange: (oldColumn: C, field: IndexPatternField, params?: Partial

) => C; /** * Function turning a column into an agg config passed to the `esaggs` function * together with the agg configs returned from other columns. diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/field_inputs.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/field_inputs.tsx index de04e51ef872cb..e187b12f323c66 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/field_inputs.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/field_inputs.tsx @@ -109,6 +109,7 @@ export function FieldInputs({ label={i18n.translate('xpack.lens.indexPattern.terms.addField', { defaultMessage: 'Add field', })} + isDisabled={column.params.orderBy.type === 'rare'} /> ); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/index.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/index.tsx index f58893e6988fce..be286532ad75bb 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/index.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/index.tsx @@ -20,18 +20,19 @@ import { } from '@elastic/eui'; import { AggFunctionsMapping } from '../../../../../../../../src/plugins/data/public'; import { buildExpressionFunction } from '../../../../../../../../src/plugins/expressions/public'; -import { updateColumnParam } from '../../layer_helpers'; +import { updateColumnParam, updateDefaultLabels } from '../../layer_helpers'; import type { DataType } from '../../../../types'; import { OperationDefinition } from '../index'; import { FieldBasedIndexPatternColumn } from '../column_types'; import { ValuesInput } from './values_input'; -import { getInvalidFieldMessage } from '../helpers'; +import { getInvalidFieldMessage, isColumnOfType } from '../helpers'; import { FieldInputs, MAX_MULTI_FIELDS_SIZE } from './field_inputs'; import { FieldInput as FieldInputBase, getErrorMessage, } from '../../../dimension_panel/field_input'; import type { TermsIndexPatternColumn } from './types'; +import type { IndexPattern, IndexPatternField } from '../../../types'; import { getDisallowedTermsMessage, getMultiTermsScriptedFieldErrorMessage, @@ -44,7 +45,15 @@ const missingFieldLabel = i18n.translate('xpack.lens.indexPattern.missingFieldLa defaultMessage: 'Missing field', }); -function ofName(name?: string, count: number = 0) { +function ofName(name?: string, count: number = 0, rare: boolean = false) { + if (rare) { + return i18n.translate('xpack.lens.indexPattern.rareTermsOf', { + defaultMessage: 'Rare values of {name}', + values: { + name: name ?? missingFieldLabel, + }, + }); + } if (count) { return i18n.translate('xpack.lens.indexPattern.multipleTermsOf', { defaultMessage: 'Top values of {name} + {count} {count, plural, one {other} other {others}}', @@ -62,8 +71,21 @@ function ofName(name?: string, count: number = 0) { }); } +function isScriptedField(field: IndexPatternField): boolean; +function isScriptedField(fieldName: string, indexPattern: IndexPattern): boolean; +function isScriptedField(fieldName: string | IndexPatternField, indexPattern?: IndexPattern) { + if (typeof fieldName === 'string') { + const field = indexPattern?.getFieldByName(fieldName); + return field && field.scripted; + } + return fieldName.scripted; +} + const idPrefix = htmlIdGenerator()(); const DEFAULT_SIZE = 3; +// Elasticsearch limit +const MAXIMUM_MAX_DOC_COUNT = 100; +export const DEFAULT_MAX_DOC_COUNT = 1; const supportedTypes = new Set(['string', 'boolean', 'number', 'ip']); export const termsOperation: OperationDefinition = { @@ -73,8 +95,67 @@ export const termsOperation: OperationDefinition { - return (column.params?.secondaryFields?.length ?? 0) < MAX_MULTI_FIELDS_SIZE; + getCurrentFields: (targetColumn) => { + return [targetColumn.sourceField, ...(targetColumn?.params?.secondaryFields ?? [])]; + }, + getParamsForMultipleFields: ({ targetColumn, sourceColumn, field, indexPattern }) => { + const secondaryFields = new Set(); + if (targetColumn.params?.secondaryFields?.length) { + targetColumn.params.secondaryFields.forEach((fieldName) => { + if (!isScriptedField(fieldName, indexPattern)) { + secondaryFields.add(fieldName); + } + }); + } + if (sourceColumn && 'sourceField' in sourceColumn && sourceColumn?.sourceField) { + if (!isScriptedField(sourceColumn.sourceField, indexPattern)) { + secondaryFields.add(sourceColumn.sourceField); + } + } + if (sourceColumn && isColumnOfType('terms', sourceColumn)) { + if (sourceColumn?.params?.secondaryFields?.length) { + sourceColumn.params.secondaryFields.forEach((fieldName) => { + if (!isScriptedField(fieldName, indexPattern)) { + secondaryFields.add(fieldName); + } + }); + } + } + if (field && !isScriptedField(field)) { + secondaryFields.add(field.name); + } + return { + secondaryFields: [...secondaryFields].filter((f) => targetColumn.sourceField !== f), + }; + }, + canAddNewField: ({ targetColumn, sourceColumn, field, indexPattern }) => { + // first step: collect the fields from the targetColumn + const originalTerms = new Set([ + targetColumn.sourceField, + ...(targetColumn.params?.secondaryFields ?? []), + ]); + // now check how many fields can be added + let counter = field && !isScriptedField(field) && !originalTerms.has(field.name) ? 1 : 0; + if (sourceColumn) { + if ('sourceField' in sourceColumn) { + counter += + !isScriptedField(sourceColumn.sourceField, indexPattern) && + !originalTerms.has(sourceColumn.sourceField) + ? 1 + : 0; + if (isColumnOfType('terms', sourceColumn)) { + counter += + sourceColumn.params.secondaryFields?.filter((f) => { + return !isScriptedField(f, indexPattern) && !originalTerms.has(f); + }).length ?? 0; + } + } + } + // reject when there are no new fields to add + if (!counter) { + return false; + } + return counter + (targetColumn.params?.secondaryFields?.length ?? 0) <= MAX_MULTI_FIELDS_SIZE; }, getDefaultVisualSettings: (column) => ({ truncateText: Boolean(!column.params?.secondaryFields?.length), @@ -85,7 +166,11 @@ export const termsOperation: OperationDefinition { @@ -141,6 +226,15 @@ export const termsOperation: OperationDefinition { + if (column.params?.orderBy.type === 'rare') { + return buildExpressionFunction('aggRareTerms', { + id: columnId, + enabled: true, + schema: 'segment', + field: column.sourceField, + max_doc_count: column.params.orderBy.maxDocCount, + }).toAst(); + } if (column.params?.secondaryFields?.length) { return buildExpressionFunction('aggMultiTerms', { id: columnId, @@ -183,18 +277,26 @@ export const termsOperation: OperationDefinition ofName( indexPattern.getFieldByName(column.sourceField)?.displayName, - column.params.secondaryFields?.length + column.params.secondaryFields?.length, + column.params.orderBy.type === 'rare' ), - onFieldChange: (oldColumn, field) => { - // reset the secondary fields - const newParams = { ...oldColumn.params, secondaryFields: undefined }; + onFieldChange: (oldColumn, field, params) => { + const newParams = { + ...oldColumn.params, + secondaryFields: undefined, + ...(params as Partial), + }; if ('format' in newParams && field.type !== 'number') { delete newParams.format; } return { ...oldColumn, dataType: field.type as DataType, - label: ofName(field.displayName), + label: ofName( + field.displayName, + newParams.secondaryFields?.length, + newParams.orderBy.type === 'rare' + ), sourceField: field.name, params: newParams, }; @@ -202,7 +304,11 @@ export const termsOperation: OperationDefinition { const columns = layer.columns; const currentColumn = columns[thisColumnId] as TermsIndexPatternColumn; - if (currentColumn.params.orderBy.type === 'column' || currentColumn.params.orderBy.fallback) { + if ( + currentColumn.params.orderBy.type === 'column' || + (currentColumn.params.orderBy.type === 'alphabetical' && + currentColumn.params.orderBy.fallback) + ) { // check whether the column is still there and still a metric const columnSortedBy = currentColumn.params.orderBy.type === 'column' @@ -251,7 +357,11 @@ export const termsOperation: OperationDefinition 1 ? fields.slice(1) : undefined, @@ -319,7 +429,7 @@ export const termsOperation: OperationDefinition { updateLayer( updateColumnParam({ @@ -366,6 +488,25 @@ export const termsOperation: OperationDefinition + {currentColumn.params.orderBy.type === 'rare' && ( + { + updateLayer( + updateColumnParam({ + layer, + columnId, + paramName: 'orderBy', + value: { ...currentColumn.params.orderBy, maxDocCount: value }, + }) + ); + }} + /> + )} @@ -396,12 +537,15 @@ export const termsOperation: OperationDefinition) => { const newOrderByValue = fromValue(e.target.value); - const updatedLayer = updateColumnParam({ - layer, - columnId, - paramName: 'orderBy', - value: newOrderByValue, - }); + const updatedLayer = updateDefaultLabels( + updateColumnParam({ + layer, + columnId, + paramName: 'orderBy', + value: newOrderByValue, + }), + indexPattern + ); updateLayer( updateColumnParam({ layer: updatedLayer, @@ -434,6 +578,7 @@ export const termsOperation: OperationDefinition - {/* ) => - updateLayer( - updateColumnParam({ - layer, - columnId, - paramName: 'orderDirection', - value: e.target.value as 'asc' | 'desc', - }) - ) - } - aria-label={i18n.translate('xpack.lens.indexPattern.terms.orderBy', { - defaultMessage: 'Rank by', - })} - /> */} {!hasRestrictions && ( <> @@ -518,6 +631,7 @@ export const termsOperation: OperationDefinition updateLayer( updateColumnParam({ @@ -537,7 +651,8 @@ export const termsOperation: OperationDefinition { columnOrder: ['col1', 'col2'], columns: { col1: { - label: 'Top value of category', + label: 'Top values of source', dataType: 'string', isBucketed: true, operationType: 'terms', @@ -79,7 +79,7 @@ describe('terms', () => { sourceField: 'source', } as TermsIndexPatternColumn, col2: { - label: 'Count', + label: 'Count of records', dataType: 'number', isBucketed: false, sourceField: 'Records', @@ -89,6 +89,28 @@ describe('terms', () => { }; }); + function createMultiTermsColumn(terms: string | string[]): TermsIndexPatternColumn { + const termsArray = Array.isArray(terms) ? terms : [terms]; + + const [sourceField, ...secondaryFields] = termsArray; + + return { + operationType: 'terms', + sourceField, + label: 'Top values of source', + isBucketed: true, + dataType: 'string', + params: { + size: 5, + orderBy: { + type: 'alphabetical', + }, + orderDirection: 'asc', + secondaryFields, + }, + }; + } + describe('toEsAggsFn', () => { it('should reflect params correctly', () => { const termsColumn = layer.columns.col1 as TermsIndexPatternColumn; @@ -112,6 +134,30 @@ describe('terms', () => { ); }); + it('should reflect rare terms params correctly', () => { + const termsColumn = layer.columns.col1 as TermsIndexPatternColumn; + const esAggsFn = termsOperation.toEsAggsFn( + { + ...termsColumn, + params: { ...termsColumn.params, orderBy: { type: 'rare', maxDocCount: 3 } }, + }, + 'col1', + {} as IndexPattern, + layer, + uiSettingsMock, + [] + ); + expect(esAggsFn).toEqual( + expect.objectContaining({ + function: 'aggRareTerms', + arguments: expect.objectContaining({ + field: ['source'], + max_doc_count: [3], + }), + }) + ); + }); + it('should not enable missing bucket if other bucket is not set', () => { const termsColumn = layer.columns.col1 as TermsIndexPatternColumn; const esAggsFn = termsOperation.toEsAggsFn( @@ -212,6 +258,32 @@ describe('terms', () => { const column = termsOperation.onFieldChange(oldColumn, newStringField); expect(column.params.secondaryFields).toBeUndefined(); }); + + it('should merge secondaryFields when coming from partial column argument', () => { + const oldColumn: TermsIndexPatternColumn = { + operationType: 'terms', + sourceField: 'bytes', + label: 'Top values of bytes', + isBucketed: true, + dataType: 'number', + params: { + size: 5, + orderBy: { + type: 'alphabetical', + }, + orderDirection: 'asc', + format: { id: 'number', params: { decimals: 0 } }, + secondaryFields: ['dest'], + }, + }; + const indexPattern = createMockedIndexPattern(); + const sanemStringField = indexPattern.fields.find((i) => i.name === 'bytes')!; + + const column = termsOperation.onFieldChange(oldColumn, sanemStringField, { + secondaryFields: ['dest', 'geo.src'], + }); + expect(column.params.secondaryFields).toEqual(expect.arrayContaining(['dest', 'geo.src'])); + }); }); describe('getPossibleOperationForField', () => { @@ -1379,6 +1451,64 @@ describe('terms', () => { expect(select.prop('disabled')).toEqual(false); }); + it('should disable missing bucket and other bucket setting for rarity sorting', () => { + const updateLayerSpy = jest.fn(); + const instance = shallow( + + ); + + const select1 = instance + .find('[data-test-subj="indexPattern-terms-missing-bucket"]') + .find(EuiSwitch); + + expect(select1.prop('disabled')).toEqual(true); + + const select2 = instance + .find('[data-test-subj="indexPattern-terms-other-bucket"]') + .find(EuiSwitch); + + expect(select2.prop('disabled')).toEqual(true); + }); + + it('should disable size input and show max doc count input', () => { + const updateLayerSpy = jest.fn(); + const instance = shallow( + + ); + + const numberInputs = instance.find(ValuesInput); + + expect(numberInputs).toHaveLength(2); + + expect(numberInputs.first().prop('disabled')).toBeTruthy(); + expect(numberInputs.last().prop('disabled')).toBeFalsy(); + expect(numberInputs.last().prop('value')).toEqual(3); + }); + it('should disable missing bucket setting if field is not a string', () => { const updateLayerSpy = jest.fn(); const instance = shallow( @@ -1462,6 +1592,7 @@ describe('terms', () => { expect(select.prop('options')!.map(({ value }) => value)).toEqual([ 'column$$$col2', 'alphabetical', + 'rare', ]); }); @@ -1771,4 +1902,223 @@ describe('terms', () => { }); }); }); + + describe('canAddNewField', () => { + it("should reject if there's only sourceField but is not new", () => { + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn('source'), + sourceColumn: createMultiTermsColumn('source'), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual(false); + }); + + it("should reject if there's no additional field to add", () => { + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn(['source', 'bytes', 'dest']), + sourceColumn: createMultiTermsColumn(['source', 'dest']), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual(false); + }); + + it('should reject if the passed field is already present', () => { + const indexPattern = createMockedIndexPattern(); + const field = indexPattern.getFieldByName('source')!; + + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn('source'), + field, + indexPattern, + }) + ).toEqual(false); + }); + + it('should be positive if only the sourceField can be added', () => { + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['bytes', 'dest']), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual(true); + }); + + it('should be positive if some field can be added', () => { + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['dest', 'bytes', 'memory']), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual(true); + }); + + it('should be positive if the entire column can be added', () => { + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['bytes', 'memory']), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual(true); + }); + + it('should reject if all fields can be added but will overpass the terms limit', () => { + // limit is 5 terms + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['bytes', 'geo.src', 'dest', 'memory']), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual(false); + }); + + it('should be positive if the passed field is new', () => { + const indexPattern = createMockedIndexPattern(); + const field = indexPattern.getFieldByName('bytes')!; + + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn('source'), + field, + indexPattern, + }) + ).toEqual(true); + }); + + it('should reject if the passed field is new but it will overpass the terms limit', () => { + const indexPattern = createMockedIndexPattern(); + const field = indexPattern.getFieldByName('bytes')!; + + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn(['bytes', 'geo.src', 'dest', 'memory', 'source']), + field, + indexPattern, + }) + ).toEqual(false); + }); + + it('should reject if the passed field is a scripted field', () => { + const indexPattern = createMockedIndexPattern(); + const field = indexPattern.getFieldByName('scripted')!; + + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn(['bytes', 'source', 'dest', 'memory']), + field, + indexPattern, + }) + ).toEqual(false); + }); + + it('should reject if the entire column has scripted field', () => { + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['scripted', 'scripted']), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual(false); + }); + + it('should be positive if the entire column can be added (because ignoring scripted fields)', () => { + expect( + termsOperation.canAddNewField?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['bytes', 'memory', 'dest', 'scripted']), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual(true); + }); + }); + + describe('getParamsForMultipleFields', () => { + it('should return existing multiterms with multiple fields from source column', () => { + expect( + termsOperation.getParamsForMultipleFields?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['bytes', 'memory']), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual({ secondaryFields: expect.arrayContaining(['dest', 'bytes', 'memory']) }); + }); + + it('should return existing multiterms with only new fields from source column', () => { + expect( + termsOperation.getParamsForMultipleFields?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['bytes', 'dest']), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual({ secondaryFields: expect.arrayContaining(['dest', 'bytes']) }); + }); + + it('should return existing multiterms with only multiple new fields from source column', () => { + expect( + termsOperation.getParamsForMultipleFields?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['dest', 'bytes', 'memory']), + indexPattern: defaultProps.indexPattern, + }) + ).toEqual({ secondaryFields: expect.arrayContaining(['dest', 'bytes', 'memory']) }); + }); + + it('should append field to multiterms', () => { + const indexPattern = createMockedIndexPattern(); + const field = indexPattern.getFieldByName('bytes')!; + + expect( + termsOperation.getParamsForMultipleFields?.({ + targetColumn: createMultiTermsColumn('source'), + field, + indexPattern, + }) + ).toEqual({ secondaryFields: expect.arrayContaining(['bytes']) }); + }); + + it('should not append scripted field to multiterms', () => { + const indexPattern = createMockedIndexPattern(); + const field = indexPattern.getFieldByName('scripted')!; + + expect( + termsOperation.getParamsForMultipleFields?.({ + targetColumn: createMultiTermsColumn('source'), + field, + indexPattern, + }) + ).toEqual({ secondaryFields: [] }); + }); + + it('should add both sourceColumn and field (as last term) to the targetColumn', () => { + const indexPattern = createMockedIndexPattern(); + const field = indexPattern.getFieldByName('bytes')!; + expect( + termsOperation.getParamsForMultipleFields?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['memory']), + field, + indexPattern, + }) + ).toEqual({ secondaryFields: expect.arrayContaining(['dest', 'memory', 'bytes']) }); + }); + + it('should not add sourceColumn field if it has only scripted field', () => { + const indexPattern = createMockedIndexPattern(); + const field = indexPattern.getFieldByName('bytes')!; + expect( + termsOperation.getParamsForMultipleFields?.({ + targetColumn: createMultiTermsColumn(['source', 'dest']), + sourceColumn: createMultiTermsColumn(['scripted']), + field, + indexPattern, + }) + ).toEqual({ secondaryFields: expect.arrayContaining(['dest', 'bytes']) }); + }); + }); }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/types.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/types.ts index a1b61880ade3f0..584893f1826667 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/types.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/types.ts @@ -13,7 +13,10 @@ export interface TermsIndexPatternColumn extends FieldBasedIndexPatternColumn { size: number; // if order is alphabetical, the `fallback` flag indicates whether it became alphabetical because there wasn't // another option or whether the user explicitly chose to make it alphabetical. - orderBy: { type: 'alphabetical'; fallback?: boolean } | { type: 'column'; columnId: string }; + orderBy: + | { type: 'alphabetical'; fallback?: boolean } + | { type: 'rare'; maxDocCount: number } + | { type: 'column'; columnId: string }; orderDirection: 'asc' | 'desc'; otherBucket?: boolean; missingBucket?: boolean; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/values_input.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/values_input.tsx index a107893517ea3c..3130f2b8a5265d 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/values_input.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/values_input.tsx @@ -13,13 +13,20 @@ import { useDebounceWithOptions } from '../../../../shared_components'; export const ValuesInput = ({ value, onChange, + minValue = 1, + maxValue = 1000, + label = i18n.translate('xpack.lens.indexPattern.terms.size', { + defaultMessage: 'Number of values', + }), + disabled, }: { value: number; onChange: (value: number) => void; + minValue?: number; + maxValue?: number; + label?: string; + disabled?: boolean; }) => { - const MIN_NUMBER_OF_VALUES = 1; - const MAX_NUMBER_OF_VALUES = 1000; - const [inputValue, setInputValue] = useState(String(value)); useDebounceWithOptions( @@ -28,7 +35,7 @@ export const ValuesInput = ({ return; } const inputNumber = Number(inputValue); - onChange(Math.min(MAX_NUMBER_OF_VALUES, Math.max(inputNumber, MIN_NUMBER_OF_VALUES))); + onChange(Math.min(maxValue, Math.max(inputNumber, minValue))); }, { skipFirstRender: true }, 256, @@ -36,14 +43,12 @@ export const ValuesInput = ({ ); const isEmptyString = inputValue === ''; - const isHigherThanMax = !isEmptyString && Number(inputValue) > MAX_NUMBER_OF_VALUES; - const isLowerThanMin = !isEmptyString && Number(inputValue) < MIN_NUMBER_OF_VALUES; + const isHigherThanMax = !isEmptyString && Number(inputValue) > maxValue; + const isLowerThanMin = !isEmptyString && Number(inputValue) < minValue; return ( setInputValue(currentTarget.value)} - aria-label={i18n.translate('xpack.lens.indexPattern.terms.size', { - defaultMessage: 'Number of values', - })} + aria-label={label} onBlur={() => { if (inputValue === '') { return setInputValue(String(value)); } const inputNumber = Number(inputValue); - setInputValue( - String(Math.min(MAX_NUMBER_OF_VALUES, Math.max(inputNumber, MIN_NUMBER_OF_VALUES))) - ); + setInputValue(String(Math.min(maxValue, Math.max(inputNumber, minValue)))); }} /> diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.test.ts index 66ed0e83c97e45..9066641b522d98 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.test.ts @@ -1392,6 +1392,42 @@ describe('state_helpers', () => { ); }); + it('should combine multiple partial params if the column supports multiple fields', () => { + const termsColumn: TermsIndexPatternColumn = { + label: 'Top values of source', + dataType: 'string', + isBucketed: true, + + // Private + operationType: 'terms', + sourceField: 'source', + params: { + orderBy: { type: 'alphabetical', fallback: true }, + orderDirection: 'desc', + size: 5, + }, + }; + + replaceColumn({ + layer: { + indexPatternId: '1', + columnOrder: ['col1'], + columns: { + col1: termsColumn, + }, + }, + indexPattern, + columnId: 'col1', + op: 'cumulative_sum', + visualizationGroups: [], + field: indexPattern.getFieldByName(termsColumn.sourceField), + initialParams: { + params: { secondaryFields: ['dest'] }, + }, + shouldCombineField: true, + }); + }); + describe('switching from non-reference to reference test cases', () => { it('should wrap around the previous operation as a reference if possible (case new1)', () => { const expectedColumn = { diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts index dda1b16bc6c7b8..7985500798b385 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts @@ -55,6 +55,7 @@ interface ColumnChange { visualizationGroups: VisualizationDimensionGroupConfig[]; targetGroup?: string; shouldResetLabel?: boolean; + shouldCombineField?: boolean; incompleteParams?: ColumnAdvancedParams; initialParams?: { params: Record }; // TODO: bind this to the op parameter } @@ -374,7 +375,9 @@ export function replaceColumn({ op, field, visualizationGroups, + initialParams, shouldResetLabel, + shouldCombineField, }: ColumnChange): IndexPatternLayer { const previousColumn = layer.columns[columnId]; if (!previousColumn) { @@ -641,10 +644,14 @@ export function replaceColumn({ operationDefinition.input === 'field' && field && 'sourceField' in previousColumn && - previousColumn.sourceField !== field.name + (previousColumn.sourceField !== field.name || operationDefinition?.getParamsForMultipleFields) ) { // Same operation, new field - let newColumn = operationDefinition.onFieldChange(previousColumn, field); + let newColumn = operationDefinition.onFieldChange( + previousColumn, + field, + shouldCombineField ? initialParams?.params : undefined + ); if (!shouldResetLabel) { newColumn = copyCustomLabel(newColumn, previousColumn); } diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.ts index fc70be257c8ad9..82093b31a09d98 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.ts @@ -13,9 +13,11 @@ import { GenericOperationDefinition, OperationType, renameOperationsMapping, + BaseIndexPatternColumn, } from './definitions'; import { IndexPattern, IndexPatternField } from '../types'; import { documentField } from '../document_field'; +import { hasField } from '../pure_utils'; export { operationDefinitionMap } from './definitions'; /** @@ -61,6 +63,37 @@ export function getSortScoreByPriority( return (b.priority || Number.NEGATIVE_INFINITY) - (a.priority || Number.NEGATIVE_INFINITY); } +export function getCurrentFieldsForOperation(targetColumn: BaseIndexPatternColumn) { + if (!hasField(targetColumn)) { + return []; + } + return ( + operationDefinitionMap[targetColumn.operationType]?.getCurrentFields?.(targetColumn) ?? [ + targetColumn.sourceField, + ] + ); +} + +export function getOperationHelperForMultipleFields(operationType: string) { + return operationDefinitionMap[operationType]?.getParamsForMultipleFields; +} + +export function hasOperationSupportForMultipleFields( + indexPattern: IndexPattern, + targetColumn: BaseIndexPatternColumn, + sourceColumn?: BaseIndexPatternColumn, + field?: IndexPatternField +) { + return Boolean( + operationDefinitionMap[targetColumn.operationType]?.canAddNewField?.({ + targetColumn, + sourceColumn, + field, + indexPattern, + }) + ); +} + /** * Returns all `OperationType`s that can build a column using `buildColumn` based on the * passed in field. diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/utils.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/utils.test.tsx index 05be5c66fe5da4..ede2a38605d3f0 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/utils.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/utils.test.tsx @@ -5,10 +5,13 @@ * 2.0. */ +import React from 'react'; +import { shallow } from 'enzyme'; import { getPrecisionErrorWarningMessages } from './utils'; -import type { IndexPatternPrivateState } from './types'; +import type { IndexPatternPrivateState, GenericIndexPatternColumn } from './types'; import type { FramePublicAPI } from '../types'; import type { DocLinksStart } from 'kibana/public'; +import { EuiButton } from '@elastic/eui'; describe('indexpattern_datasource utils', () => { describe('getPrecisionErrorWarningMessages', () => { @@ -17,12 +20,34 @@ describe('indexpattern_datasource utils', () => { let docLinks: DocLinksStart; beforeEach(() => { - state = {} as IndexPatternPrivateState; + state = { + layers: { + id: { + indexPatternId: 'one', + columns: { + col1: { + operationType: 'terms', + params: { + orderBy: { + type: 'alphabetical', + }, + }, + }, + }, + }, + }, + indexPatterns: { + one: { + getFieldByName: (x: string) => ({ name: x, displayName: x }), + }, + }, + } as unknown as IndexPatternPrivateState; framePublicAPI = { activeData: { id: { columns: [ { + id: 'col1', meta: { sourceParams: { hasPrecisionError: false, @@ -43,19 +68,60 @@ describe('indexpattern_datasource utils', () => { } as DocLinksStart; }); test('should not show precisionError if hasPrecisionError is false', () => { - expect(getPrecisionErrorWarningMessages(state, framePublicAPI, docLinks)).toHaveLength(0); + expect( + getPrecisionErrorWarningMessages(state, framePublicAPI, docLinks, () => {}) + ).toHaveLength(0); }); test('should not show precisionError if hasPrecisionError is not defined', () => { delete framePublicAPI.activeData!.id.columns[0].meta.sourceParams!.hasPrecisionError; - expect(getPrecisionErrorWarningMessages(state, framePublicAPI, docLinks)).toHaveLength(0); + expect( + getPrecisionErrorWarningMessages(state, framePublicAPI, docLinks, () => {}) + ).toHaveLength(0); }); test('should show precisionError if hasPrecisionError is true', () => { framePublicAPI.activeData!.id.columns[0].meta.sourceParams!.hasPrecisionError = true; - expect(getPrecisionErrorWarningMessages(state, framePublicAPI, docLinks)).toHaveLength(1); + expect( + getPrecisionErrorWarningMessages(state, framePublicAPI, docLinks, () => {}) + ).toHaveLength(1); + }); + + test('if has precision error and sorting is by count ascending, show fix action and switch to rare terms', () => { + framePublicAPI.activeData!.id.columns[0].meta.sourceParams!.hasPrecisionError = true; + state.layers.id.columnOrder = ['col1', 'col2']; + state.layers.id.columns = { + col1: { + operationType: 'terms', + sourceField: 'category', + params: { + orderBy: { + type: 'column', + columnId: 'col2', + }, + orderDirection: 'asc', + }, + } as unknown as GenericIndexPatternColumn, + col2: { + operationType: 'count', + } as unknown as GenericIndexPatternColumn, + }; + const setState = jest.fn(); + const warnings = getPrecisionErrorWarningMessages(state, framePublicAPI, docLinks, setState); + + expect(warnings).toHaveLength(1); + const DummyComponent = () => <>{warnings[0]}; + const warningUi = shallow(); + warningUi.find(EuiButton).simulate('click'); + const stateSetter = setState.mock.calls[0][0]; + const newState = stateSetter(state); + expect(newState.layers.id.columns.col1.label).toEqual('Rare values of category'); + expect(newState.layers.id.columns.col1.params.orderBy).toEqual({ + type: 'rare', + maxDocCount: 1, + }); }); }); }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/utils.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/utils.tsx index 76156b5a57a114..cc8a5c322782dd 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/utils.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/utils.tsx @@ -6,21 +6,31 @@ */ import React from 'react'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { DocLinksStart } from 'kibana/public'; -import { EuiLink, EuiTextColor } from '@elastic/eui'; +import { EuiLink, EuiTextColor, EuiButton, EuiSpacer } from '@elastic/eui'; import { DatatableColumn } from 'src/plugins/expressions'; -import type { FramePublicAPI } from '../types'; +import type { FramePublicAPI, StateSetter } from '../types'; import type { IndexPattern, IndexPatternLayer, IndexPatternPrivateState } from './types'; import type { ReferenceBasedIndexPatternColumn } from './operations/definitions/column_types'; -import { operationDefinitionMap, GenericIndexPatternColumn } from './operations'; +import { + operationDefinitionMap, + GenericIndexPatternColumn, + TermsIndexPatternColumn, + CountIndexPatternColumn, + updateColumnParam, + updateDefaultLabels, +} from './operations'; -import { getInvalidFieldMessage } from './operations/definitions/helpers'; +import { getInvalidFieldMessage, isColumnOfType } from './operations/definitions/helpers'; import { isQueryValid } from './operations/definitions/filters'; import { checkColumnForPrecisionError } from '../../../../../src/plugins/data/common'; import { hasField } from './pure_utils'; +import { mergeLayer } from './state_helpers'; +import { DEFAULT_MAX_DOC_COUNT } from './operations/definitions/terms'; export function isColumnInvalid( layer: IndexPatternLayer, @@ -80,53 +90,125 @@ export function fieldIsInvalid( export function getPrecisionErrorWarningMessages( state: IndexPatternPrivateState, { activeData }: FramePublicAPI, - docLinks: DocLinksStart + docLinks: DocLinksStart, + setState: StateSetter ) { const warningMessages: React.ReactNode[] = []; if (state && activeData) { - Object.values(activeData) - .reduce((acc: DatatableColumn[], { columns }) => [...acc, ...columns], []) - .forEach((column) => { - if (checkColumnForPrecisionError(column)) { - warningMessages.push( - {column.name}, - topValues: ( - - - - ), - filters: ( - - - - ), - link: ( - - - - ), - }} - /> - ); + Object.entries(activeData) + .reduce( + (acc, [layerId, { columns }]) => [ + ...acc, + ...columns.map((column) => ({ layerId, column })), + ], + [] as Array<{ layerId: string; column: DatatableColumn }> + ) + .forEach(({ layerId, column }) => { + const currentLayer = state.layers[layerId]; + const currentColumn = currentLayer?.columns[column.id]; + if (currentLayer && currentColumn && checkColumnForPrecisionError(column)) { + const indexPattern = state.indexPatterns[currentLayer.indexPatternId]; + const isAscendingCountSorting = + isColumnOfType('terms', currentColumn) && + currentColumn.params.orderBy.type === 'column' && + currentColumn.params.orderDirection === 'asc' && + isColumnOfType( + 'count', + currentLayer.columns[currentColumn.params.orderBy.columnId] + ); + if (!isAscendingCountSorting) { + warningMessages.push( + {column.name}, + topValues: ( + + + + ), + filters: ( + + + + ), + link: ( + + + + ), + }} + /> + ); + } else { + warningMessages.push( + <> + {column.name}, + link: ( + + + + ), + }} + /> + + { + setState((prevState) => + mergeLayer({ + state: prevState, + layerId, + newLayer: updateDefaultLabels( + updateColumnParam({ + layer: currentLayer, + columnId: column.id, + paramName: 'orderBy', + value: { + type: 'rare', + maxDocCount: DEFAULT_MAX_DOC_COUNT, + }, + }), + indexPattern + ), + }) + ); + }} + > + {i18n.translate('xpack.lens.indexPattern.switchToRare', { + defaultMessage: 'Rank by rarity', + })} + + + ); + } } }); } diff --git a/x-pack/plugins/lens/public/pie_visualization/partition_charts_meta.ts b/x-pack/plugins/lens/public/pie_visualization/partition_charts_meta.ts index 2bafa5a1ff8e01..3d02c0f6d513ef 100644 --- a/x-pack/plugins/lens/public/pie_visualization/partition_charts_meta.ts +++ b/x-pack/plugins/lens/public/pie_visualization/partition_charts_meta.ts @@ -47,6 +47,7 @@ interface PartitionChartMeta { legend: { flat?: boolean; showValues?: boolean; + hideNestedLegendSwitch?: boolean; getShowLegendDefault?: (bucketColumns: DatatableColumn[]) => boolean; }; sortPredicate?: ( @@ -235,6 +236,7 @@ export const PartitionChartsMeta: Record = { legend: { flat: true, showValues: true, + hideNestedLegendSwitch: true, getShowLegendDefault: () => true, }, sortPredicate: diff --git a/x-pack/plugins/lens/public/pie_visualization/toolbar.tsx b/x-pack/plugins/lens/public/pie_visualization/toolbar.tsx index 6910a3ea0966c9..cebacd5c95863a 100644 --- a/x-pack/plugins/lens/public/pie_visualization/toolbar.tsx +++ b/x-pack/plugins/lens/public/pie_visualization/toolbar.tsx @@ -244,8 +244,8 @@ export function PieToolbar(props: VisualizationToolbarProps { state: T; @@ -280,7 +283,11 @@ export interface Datasource { /** * The frame calls this function to display warnings about visualization */ - getWarningMessages?: (state: T, frame: FramePublicAPI) => React.ReactNode[] | undefined; + getWarningMessages?: ( + state: T, + frame: FramePublicAPI, + setState: StateSetter + ) => React.ReactNode[] | undefined; /** * Checks if the visualization created is time based, for example date histogram */ diff --git a/x-pack/plugins/lists/server/routes/read_privileges_route.mock.ts b/x-pack/plugins/lists/server/routes/read_privileges_route.mock.ts index 1e027e50f50701..caf7e6d8da62b3 100644 --- a/x-pack/plugins/lists/server/routes/read_privileges_route.mock.ts +++ b/x-pack/plugins/lists/server/routes/read_privileges_route.mock.ts @@ -88,7 +88,7 @@ export const getReadPrivilegeMock = ( manage_index_templates: booleanValues, manage_ingest_pipelines: booleanValues, manage_ml: booleanValues, - manage_own_api_key: false, + manage_own_api_key: booleanValues, manage_pipeline: booleanValues, manage_rollup: booleanValues, manage_saml: booleanValues, @@ -105,7 +105,7 @@ export const getReadPrivilegeMock = ( read_ilm: booleanValues, transport_client: booleanValues, }, - has_all_requested: false, + has_all_requested: booleanValues, index: { [listItemsIndex]: { all: booleanValues, @@ -141,7 +141,7 @@ export const getReadPrivilegeMock = ( manage_index_templates: booleanValues, manage_ingest_pipelines: booleanValues, manage_ml: booleanValues, - manage_own_api_key: false, + manage_own_api_key: booleanValues, manage_pipeline: booleanValues, manage_rollup: booleanValues, manage_saml: booleanValues, @@ -158,7 +158,7 @@ export const getReadPrivilegeMock = ( read_ilm: booleanValues, transport_client: booleanValues, }, - has_all_requested: false, + has_all_requested: booleanValues, index: { [listIndex]: { all: booleanValues, diff --git a/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.test.js b/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.test.js index d4fcab060b01c0..096f5370ca3b97 100644 --- a/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.test.js +++ b/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.test.js @@ -42,14 +42,24 @@ describe('hitsToGeoJson', () => { _id: 'doc1', _index: 'index1', fields: { - [geoFieldName]: '20,100', + [geoFieldName]: [ + { + type: 'Point', + coordinates: [100, 20], + }, + ], }, }, { _id: 'doc2', _index: 'index1', - _source: { - [geoFieldName]: '30,110', + fields: { + [geoFieldName]: [ + { + type: 'Point', + coordinates: [110, 30], + }, + ], }, }, ]; @@ -73,12 +83,17 @@ describe('hitsToGeoJson', () => { it('Should handle documents where geoField is not populated', () => { const hits = [ { - _source: { - [geoFieldName]: '20,100', + fields: { + [geoFieldName]: [ + { + type: 'Point', + coordinates: [100, 20], + }, + ], }, }, { - _source: {}, + fields: {}, }, ]; const geojson = hitsToGeoJson(hits, flattenHitMock, geoFieldName, 'geo_point', []); @@ -90,10 +105,15 @@ describe('hitsToGeoJson', () => { const hits = [ { _source: { - [geoFieldName]: '20,100', myField: 8, }, fields: { + [geoFieldName]: [ + { + type: 'Point', + coordinates: [100, 20], + }, + ], myScriptedField: 10, }, }, @@ -109,8 +129,17 @@ describe('hitsToGeoJson', () => { { _id: 'doc1', _index: 'index1', - _source: { - [geoFieldName]: ['20,100', '30,110'], + fields: { + [geoFieldName]: [ + { + type: 'Point', + coordinates: [100, 20], + }, + { + type: 'Point', + coordinates: [110, 30], + }, + ], myField: 8, }, }, @@ -151,15 +180,15 @@ describe('hitsToGeoJson', () => { { _id: 'doc1', _index: 'index1', - _source: { + fields: { [geoFieldName]: { type: 'GeometryCollection', geometries: [ { - type: 'geometrycollection', //explicitly test coercion to proper GeoJson type value + type: 'geometrycollection', geometries: [ { - type: 'point', //explicitly test coercion to proper GeoJson type value + type: 'Point', coordinates: [0, 0], }, ], @@ -216,8 +245,11 @@ describe('hitsToGeoJson', () => { { _id: 'doc1', _index: 'index1', - _source: { - [geoFieldName]: '20,100', + fields: { + [geoFieldName]: { + type: 'Point', + coordinates: [100, 20], + }, myDateField: '1587156257081', }, }, @@ -234,16 +266,21 @@ describe('hitsToGeoJson', () => { const geoFieldName = 'my.location'; const indexPatternFlattenHit = (hit) => { return { - [geoFieldName]: _.get(hit._source, geoFieldName), + [geoFieldName]: _.get(hit.fields, geoFieldName), }; }; it('Should handle geoField being an object', () => { const hits = [ { - _source: { + fields: { my: { - location: '20,100', + location: [ + { + type: 'Point', + coordinates: [100, 20], + }, + ], }, }, }, @@ -258,8 +295,13 @@ describe('hitsToGeoJson', () => { it('Should handle geoField containing dot in the name', () => { const hits = [ { - _source: { - ['my.location']: '20,100', + fields: { + ['my.location']: [ + { + type: 'Point', + coordinates: [100, 20], + }, + ], }, }, ]; @@ -273,15 +315,25 @@ describe('hitsToGeoJson', () => { it('Should not modify results of flattenHit', () => { const geoFieldName = 'location'; const cachedProperities = { - [geoFieldName]: '20,100', + [geoFieldName]: [ + { + type: 'Point', + coordinates: [100, 20], + }, + ], }; const cachedFlattenHit = () => { return cachedProperities; }; const hits = [ { - _source: { - [geoFieldName]: '20,100', + fields: { + [geoFieldName]: [ + { + type: 'Point', + coordinates: [100, 20], + }, + ], }, }, ]; @@ -296,8 +348,11 @@ describe('geoPointToGeometry', () => { const lat = 41.12; const lon = -71.34; - it('Should convert single docvalue_field', () => { - const value = `${lat},${lon}`; + it('Should convert value', () => { + const value = { + type: 'Point', + coordinates: [lon, lat], + }; const points = []; geoPointToGeometry(value, points); expect(points.length).toBe(1); @@ -305,10 +360,19 @@ describe('geoPointToGeometry', () => { expect(points[0].coordinates).toEqual([lon, lat]); }); - it('Should convert multiple docvalue_fields', () => { + it('Should convert array of values', () => { const lat2 = 30; const lon2 = -60; - const value = [`${lat},${lon}`, `${lat2},${lon2}`]; + const value = [ + { + type: 'Point', + coordinates: [lon, lat], + }, + { + type: 'Point', + coordinates: [lon2, lat2], + }, + ]; const points = []; geoPointToGeometry(value, points); expect(points.length).toBe(2); @@ -318,13 +382,13 @@ describe('geoPointToGeometry', () => { }); describe('geoShapeToGeometry', () => { - it('Should convert value stored as geojson', () => { + it('Should convert value', () => { const coordinates = [ [-77.03653, 38.897676], [-77.009051, 38.889939], ]; const value = { - type: 'linestring', + type: 'LineString', coordinates: coordinates, }; const shapes = []; @@ -340,7 +404,7 @@ describe('geoShapeToGeometry', () => { [101.0, 0.0], ]; const value = { - type: 'envelope', + type: 'Envelope', coordinates: coordinates, }; const shapes = []; @@ -366,11 +430,11 @@ describe('geoShapeToGeometry', () => { const pointCoordinates = [125.6, 10.1]; const value = [ { - type: 'linestring', + type: 'LineString', coordinates: linestringCoordinates, }, { - type: 'point', + type: 'Point', coordinates: pointCoordinates, }, ]; @@ -382,28 +446,6 @@ describe('geoShapeToGeometry', () => { expect(shapes[1].type).toBe('Point'); expect(shapes[1].coordinates).toEqual(pointCoordinates); }); - - it('Should convert wkt shapes to geojson', () => { - const pointWkt = 'POINT (32 40)'; - const linestringWkt = 'LINESTRING (50 60, 70 80)'; - - const shapes = []; - geoShapeToGeometry(pointWkt, shapes); - geoShapeToGeometry(linestringWkt, shapes); - - expect(shapes.length).toBe(2); - expect(shapes[0]).toEqual({ - coordinates: [32, 40], - type: 'Point', - }); - expect(shapes[1]).toEqual({ - coordinates: [ - [50, 60], - [70, 80], - ], - type: 'LineString', - }); - }); }); describe('roundCoordinates', () => { diff --git a/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.ts b/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.ts index 98782e7447b348..3e494976787447 100644 --- a/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.ts +++ b/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.ts @@ -7,10 +7,6 @@ import _ from 'lodash'; import { i18n } from '@kbn/i18n'; -// @ts-expect-error -import { parse } from 'wellknown'; -// @ts-expect-error -import turfCircle from '@turf/circle'; import { Feature, FeatureCollection, Geometry, Polygon, Point, Position } from 'geojson'; import { BBox } from '@turf/helpers'; import { @@ -89,12 +85,12 @@ export function hitsToGeoJson( ensureGeoField(geoFieldType); if (geoFieldType === ES_GEO_FIELD_TYPE.GEO_POINT) { geoPointToGeometry( - properties[geoFieldName] as string | string[] | undefined, + properties[geoFieldName] as Point | Point[] | undefined, tmpGeometriesAccumulator ); } else { geoShapeToGeometry( - properties[geoFieldName] as string | string[] | ESGeometry | ESGeometry[] | undefined, + properties[geoFieldName] as ESGeometry | ESGeometry[] | undefined, tmpGeometriesAccumulator ); } @@ -131,12 +127,9 @@ export function hitsToGeoJson( }; } -// Parse geo_point docvalue_field -// Either -// 1) Array of latLon strings -// 2) latLon string +// Parse geo_point fields API response export function geoPointToGeometry( - value: string[] | string | undefined, + value: Point[] | Point | undefined, accumulator: Geometry[] ): void { if (!value) { @@ -150,99 +143,12 @@ export function geoPointToGeometry( return; } - const commaSplit = value.split(','); - const lat = parseFloat(commaSplit[0]); - const lon = parseFloat(commaSplit[1]); - accumulator.push({ - type: GEO_JSON_TYPE.POINT, - coordinates: [lon, lat], - } as Point); -} - -export function convertESShapeToGeojsonGeometry(value: ESGeometry): Geometry { - const geoJson = { - type: value.type, - coordinates: value.coordinates, - }; - - // https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html#input-structure - // For some unknown compatibility nightmarish reason, Elasticsearch types are not capitalized the same as geojson types - // For example: 'LineString' geojson type is 'linestring' in elasticsearch - // Convert feature types to geojson spec values - // Sometimes, the type in ES is capitalized correctly. Sometimes it is not. It depends on how the doc was ingested - // The below is the correction in-place. - switch (value.type) { - case 'point': - geoJson.type = GEO_JSON_TYPE.POINT; - break; - case 'linestring': - geoJson.type = GEO_JSON_TYPE.LINE_STRING; - break; - case 'polygon': - geoJson.type = GEO_JSON_TYPE.POLYGON; - break; - case 'multipoint': - geoJson.type = GEO_JSON_TYPE.MULTI_POINT; - break; - case 'multilinestring': - geoJson.type = GEO_JSON_TYPE.MULTI_LINE_STRING; - break; - case 'multipolygon': - geoJson.type = GEO_JSON_TYPE.MULTI_POLYGON; - break; - case 'geometrycollection': - case GEO_JSON_TYPE.GEOMETRY_COLLECTION: - // PEBKAC - geometry-collections need to be unrolled to their individual geometries first. - const invalidGeometrycollectionError = i18n.translate( - 'xpack.maps.es_geo_utils.convert.invalidGeometryCollectionErrorMessage', - { - defaultMessage: `Should not pass GeometryCollection to convertESShapeToGeojsonGeometry`, - } - ); - throw new Error(invalidGeometrycollectionError); - case 'envelope': - const envelopeCoords = geoJson.coordinates as Position[]; - // format defined here https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html#_envelope - const polygon = formatEnvelopeAsPolygon({ - minLon: envelopeCoords[0][0], - maxLon: envelopeCoords[1][0], - minLat: envelopeCoords[1][1], - maxLat: envelopeCoords[0][1], - }); - geoJson.type = polygon.type; - geoJson.coordinates = polygon.coordinates; - break; - case 'circle': - const errorMessage = i18n.translate( - 'xpack.maps.es_geo_utils.convert.unsupportedGeometryTypeErrorMessage', - { - defaultMessage: `Unable to convert {geometryType} geometry to geojson, not supported`, - values: { - geometryType: geoJson.type, - }, - } - ); - throw new Error(errorMessage); - } - return geoJson as unknown as Geometry; -} - -function convertWKTStringToGeojson(value: string): Geometry { - try { - return parse(value); - } catch (e) { - const errorMessage = i18n.translate('xpack.maps.es_geo_utils.wkt.invalidWKTErrorMessage', { - defaultMessage: `Unable to convert {wkt} to geojson. Valid WKT expected.`, - values: { - wkt: value, - }, - }); - throw new Error(errorMessage); - } + accumulator.push(value as Point); } +// Parse geo_shape fields API response export function geoShapeToGeometry( - value: string | ESGeometry | string[] | ESGeometry[] | undefined, + value: ESGeometry | ESGeometry[] | undefined, accumulator: Geometry[] ): void { if (!value) { @@ -257,21 +163,38 @@ export function geoShapeToGeometry( return; } - if (typeof value === 'string') { - const geoJson = convertWKTStringToGeojson(value); - accumulator.push(geoJson); - } else if ( - // Needs to deal with possible inconsistencies in capitalization - value.type === GEO_JSON_TYPE.GEOMETRY_COLLECTION || - value.type === 'geometrycollection' - ) { + if (value.type.toLowerCase() === GEO_JSON_TYPE.GEOMETRY_COLLECTION.toLowerCase()) { const geometryCollection = value as unknown as { geometries: ESGeometry[] }; for (let i = 0; i < geometryCollection.geometries.length; i++) { geoShapeToGeometry(geometryCollection.geometries[i], accumulator); } + return; + } + + // fields API does not return true geojson yet, circle and envelope still exist which are not part of geojson spec + if (value.type.toLowerCase() === 'envelope') { + const envelopeCoords = value.coordinates as Position[]; + // format defined here https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html#_envelope + const polygon = formatEnvelopeAsPolygon({ + minLon: envelopeCoords[0][0], + maxLon: envelopeCoords[1][0], + minLat: envelopeCoords[1][1], + maxLat: envelopeCoords[0][1], + }); + accumulator.push(polygon); + } else if (value.type.toLowerCase() === 'circle') { + const errorMessage = i18n.translate( + 'xpack.maps.es_geo_utils.convert.unsupportedGeometryTypeErrorMessage', + { + defaultMessage: `Unable to convert {geometryType} geometry to geojson, not supported`, + values: { + geometryType: value.type, + }, + } + ); + throw new Error(errorMessage); } else { - const geoJson = convertESShapeToGeojsonGeometry(value); - accumulator.push(geoJson); + accumulator.push(value as Geometry); } } diff --git a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx index 687418edd25b5b..1b7c9e1cd6aa0c 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx @@ -281,21 +281,26 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource const indexPattern: IndexPattern = await this.getIndexPattern(); + const fieldNames = searchFilters.fieldNames.filter( + (fieldName) => fieldName !== this._descriptor.geoField + ); const { docValueFields, sourceOnlyFields, scriptFields } = getDocValueAndSourceFields( indexPattern, - searchFilters.fieldNames, + fieldNames, 'epoch_millis' ); const topHits: { size: number; script_fields: Record; docvalue_fields: Array; + fields: string[]; _source?: boolean | { includes: string[] }; sort?: Array>; } = { size: topHitsSize, script_fields: scriptFields, docvalue_fields: docValueFields, + fields: [this._descriptor.geoField], }; if (this._hasSort()) { @@ -389,9 +394,12 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource ) { const indexPattern = await this.getIndexPattern(); + const fieldNames = searchFilters.fieldNames.filter( + (fieldName) => fieldName !== this._descriptor.geoField + ); const { docValueFields, sourceOnlyFields } = getDocValueAndSourceFields( indexPattern, - searchFilters.fieldNames, + fieldNames, 'epoch_millis' ); @@ -418,6 +426,7 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource } else { searchSource.setField('source', sourceOnlyFields); } + searchSource.setField('fields', [this._descriptor.geoField]); if (this._hasSort()) { searchSource.setField('sort', this._buildEsSort()); } @@ -800,9 +809,12 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource const indexPattern = await this.getIndexPattern(); const indexSettings = await loadIndexSettings(indexPattern.title); + const fieldNames = searchFilters.fieldNames.filter( + (fieldName) => fieldName !== this._descriptor.geoField + ); const { docValueFields, sourceOnlyFields } = getDocValueAndSourceFields( indexPattern, - searchFilters.fieldNames, + fieldNames, 'epoch_millis' ); diff --git a/x-pack/plugins/maps/server/maps_telemetry/index_pattern_stats/index_pattern_stats_collector.ts b/x-pack/plugins/maps/server/maps_telemetry/index_pattern_stats/index_pattern_stats_collector.ts index 0e5bb32be4f800..f8fbf907bca94b 100644 --- a/x-pack/plugins/maps/server/maps_telemetry/index_pattern_stats/index_pattern_stats_collector.ts +++ b/x-pack/plugins/maps/server/maps_telemetry/index_pattern_stats/index_pattern_stats_collector.ts @@ -55,7 +55,7 @@ export class IndexPatternStatsCollector { let pointCount = 0; let shapeCount = 0; - const indexPatternIds = await this._indexPatternsService.getIds(true); + const indexPatternIds = await this._indexPatternsService.getIds(); await asyncForEach(indexPatternIds, async (indexPatternId) => { let indexPattern; try { diff --git a/x-pack/plugins/ml/common/constants/messages.test.ts b/x-pack/plugins/ml/common/constants/messages.test.ts index afebdf9f14cbe5..13ef103ae0ff17 100644 --- a/x-pack/plugins/ml/common/constants/messages.test.ts +++ b/x-pack/plugins/ml/common/constants/messages.test.ts @@ -32,7 +32,7 @@ describe('Constants: Messages parseMessages()', () => { id: 'detectors_function_not_empty', status: 'success', text: 'Presence of detector functions validated in all detectors.', - url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html#ml-ad-detectors', + url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html', }, { bucketSpan: '15m', @@ -40,7 +40,7 @@ describe('Constants: Messages parseMessages()', () => { id: 'success_bucket_span', status: 'success', text: 'Format of "15m" is valid and passed validation checks.', - url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html#ml-ad-bucket-span', + url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html', }, { heading: 'Time range', @@ -53,7 +53,7 @@ describe('Constants: Messages parseMessages()', () => { id: 'success_mml', status: 'success', text: 'Valid and within the estimated model memory limit.', - url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html#ml-ad-model-memory-limits', + url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html', }, ]); }); @@ -71,7 +71,7 @@ describe('Constants: Messages parseMessages()', () => { id: 'detectors_function_not_empty', status: 'success', text: 'Presence of detector functions validated in all detectors.', - url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html#ml-ad-detectors', + url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html', }, { bucketSpan: '15m', @@ -103,7 +103,7 @@ describe('Constants: Messages parseMessages()', () => { id: 'detectors_function_not_empty', status: 'success', text: 'Presence of detector functions validated in all detectors.', - url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html#ml-ad-detectors', + url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html', }, { id: 'cardinality_model_plot_high', @@ -115,14 +115,14 @@ describe('Constants: Messages parseMessages()', () => { id: 'cardinality_partition_field', status: 'warning', text: 'Cardinality of partition_field "order_id" is above 1000 and might result in high memory usage.', - url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html#ml-ad-cardinality', + url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html', }, { heading: 'Bucket span', id: 'bucket_span_high', status: 'info', text: 'Bucket span is 1 day or more. Be aware that days are considered as UTC days, not local days.', - url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html#ml-ad-bucket-span', + url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html', }, { bucketSpanCompareFactor: 25, @@ -136,14 +136,14 @@ describe('Constants: Messages parseMessages()', () => { id: 'success_influencers', status: 'success', text: 'Influencer configuration passed the validation checks.', - url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html#ml-ad-influencers', + url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html', }, { id: 'half_estimated_mml_greater_than_mml', mml: '1MB', status: 'warning', text: 'The specified model memory limit is less than half of the estimated model memory limit and will likely hit the hard limit.', - url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html#ml-ad-model-memory-limits', + url: 'https://www.elastic.co/guide/en/machine-learning/mocked-test-branch/ml-ad-finding-anomalies.html', }, { id: 'missing_summary_count_field_name', diff --git a/x-pack/plugins/ml/common/types/anomaly_detection_jobs/summary_job.ts b/x-pack/plugins/ml/common/types/anomaly_detection_jobs/summary_job.ts index 8c53e7b1f5a87e..6bcba719deaee5 100644 --- a/x-pack/plugins/ml/common/types/anomaly_detection_jobs/summary_job.ts +++ b/x-pack/plugins/ml/common/types/anomaly_detection_jobs/summary_job.ts @@ -7,6 +7,7 @@ import { Moment } from 'moment'; +import { MlCustomSettings } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { CombinedJob, CombinedJobWithStats } from './combined_job'; import type { MlAnomalyDetectionAlertRule } from '../alerts'; import type { MlJobBlocked } from './job'; @@ -39,6 +40,7 @@ export interface MlSummaryJob { alertingRules?: MlAnomalyDetectionAlertRule[]; jobTags: Record; bucketSpanSeconds: number; + customSettings?: MlCustomSettings; } export interface AuditMessage { diff --git a/x-pack/plugins/ml/common/util/runtime_field_utils.test.ts b/x-pack/plugins/ml/common/util/runtime_field_utils.test.ts index e7f92306668981..6aa50753445565 100644 --- a/x-pack/plugins/ml/common/util/runtime_field_utils.test.ts +++ b/x-pack/plugins/ml/common/util/runtime_field_utils.test.ts @@ -30,7 +30,9 @@ describe('ML runtime field utils', () => { expect(isRuntimeField({ type: 'keyword' })).toBe(true); }); it('allows objects with both type and script attributes', () => { - expect(isRuntimeField({ type: 'keyword', script: 'some script' })).toBe(true); + expect( + isRuntimeField({ type: 'keyword', script: 'some script', format: 'some format' }) + ).toBe(true); }); }); @@ -90,6 +92,19 @@ describe('ML runtime field utils', () => { isRuntimeMappings({ fieldName1: { type: 'keyword' }, fieldName2: { type: 'keyword', script: 'some script as script' }, + fieldName3: { + type: 'keyword', + script: { + source: 'source script', + }, + }, + fieldName4: { + type: 'keyword', + script: { + source: 'source script', + params: {}, + }, + }, }) ).toBe(true); expect( @@ -97,6 +112,28 @@ describe('ML runtime field utils', () => { fieldName: { type: 'long', script: { source: 'some script as source' } }, }) ).toBe(true); + expect( + isRuntimeMappings({ + fieldName: { + type: 'long', + script: { + source: 'source script', + params: {}, + lang: 'lang', + }, + }, + }) + ).toBe(true); + expect( + isRuntimeMappings({ + fieldName: { + type: 'long', + script: { + id: 'a script id', + }, + }, + }) + ).toBe(true); }); }); }); diff --git a/x-pack/plugins/ml/common/util/runtime_field_utils.ts b/x-pack/plugins/ml/common/util/runtime_field_utils.ts index edda547d363e49..a9ec27c7b1577c 100644 --- a/x-pack/plugins/ml/common/util/runtime_field_utils.ts +++ b/x-pack/plugins/ml/common/util/runtime_field_utils.ts @@ -7,7 +7,6 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { isPopulatedObject } from './object_utils'; import { RUNTIME_FIELD_TYPES } from '../../../../../src/plugins/data/common'; -import type { RuntimeMappings } from '../types/fields'; type RuntimeType = typeof RUNTIME_FIELD_TYPES[number]; @@ -15,15 +14,16 @@ export function isRuntimeField(arg: unknown): arg is estypes.MappingRuntimeField return ( ((isPopulatedObject(arg, ['type']) && Object.keys(arg).length === 1) || (isPopulatedObject(arg, ['type', 'script']) && - Object.keys(arg).length === 2 && + // Can be a string (typeof arg.script === 'string' || - (isPopulatedObject(arg.script, ['source']) && - Object.keys(arg.script).length === 1 && - typeof arg.script.source === 'string')))) && + // Can be InlineScript + (isPopulatedObject(arg.script, ['source']) && typeof arg.script.source === 'string') || + // Can be StoredScriptId + (isPopulatedObject(arg.script, ['id']) && typeof arg.script.id === 'string')))) && RUNTIME_FIELD_TYPES.includes(arg.type as RuntimeType) ); } -export function isRuntimeMappings(arg: unknown): arg is RuntimeMappings { +export function isRuntimeMappings(arg: unknown): arg is estypes.MappingRuntimeFields { return isPopulatedObject(arg) && Object.values(arg).every((d) => isRuntimeField(d)); } diff --git a/x-pack/plugins/ml/kibana.json b/x-pack/plugins/ml/kibana.json index 577e41b8816cd0..6c76a61139714f 100644 --- a/x-pack/plugins/ml/kibana.json +++ b/x-pack/plugins/ml/kibana.json @@ -28,7 +28,8 @@ "management", "licenseManagement", "maps", - "usageCollection" + "usageCollection", + "dashboard" ], "server": true, "ui": true, diff --git a/x-pack/plugins/ml/public/application/app.tsx b/x-pack/plugins/ml/public/application/app.tsx index b6d0626fff7cde..e61549efe8adc9 100644 --- a/x-pack/plugins/ml/public/application/app.tsx +++ b/x-pack/plugins/ml/public/application/app.tsx @@ -87,6 +87,7 @@ const App: FC = ({ coreStart, deps, appMountParams }) => { dataVisualizer: deps.dataVisualizer, usageCollection: deps.usageCollection, fieldFormats: deps.fieldFormats, + dashboard: deps.dashboard, ...coreStart, }; diff --git a/x-pack/plugins/ml/public/application/components/delete_job_check_modal/delete_job_check_modal.tsx b/x-pack/plugins/ml/public/application/components/delete_job_check_modal/delete_job_check_modal.tsx index 5507cbfe155b43..6834f16386ce2e 100644 --- a/x-pack/plugins/ml/public/application/components/delete_job_check_modal/delete_job_check_modal.tsx +++ b/x-pack/plugins/ml/public/application/components/delete_job_check_modal/delete_job_check_modal.tsx @@ -20,10 +20,12 @@ import { EuiButton, EuiLoadingSpinner, EuiText, + EuiSpacer, } from '@elastic/eui'; import { JobType, CanDeleteJobResponse } from '../../../../common/types/saved_objects'; import { useMlApiContext } from '../../contexts/kibana'; import { useToastNotificationService } from '../../services/toast_notification_service'; +import { ManagedJobsWarningCallout } from '../../jobs/jobs_list/components/confirm_modals/managed_jobs_warning_callout'; const shouldUnTagLabel = i18n.translate('xpack.ml.deleteJobCheckModal.shouldUnTagLabel', { defaultMessage: 'Remove job from current space', @@ -58,7 +60,8 @@ function getRespSummary(resp: CanDeleteJobResponse): JobCheckRespSummary { function getModalContent( jobIds: string[], - respSummary: JobCheckRespSummary + respSummary: JobCheckRespSummary, + hasManagedJob?: boolean ): ModalContentReturnType { const { canDelete, canRemoveFromSpace, canTakeAnyAction } = respSummary; @@ -107,13 +110,30 @@ function getModalContent( /> ), modalText: ( - - - + <> + {hasManagedJob ? ( + <> + + + + ) : null} + + + + + ), }; } else if (canRemoveFromSpace) { @@ -125,13 +145,27 @@ function getModalContent( /> ), modalText: ( - - - + <> + {hasManagedJob ? ( + <> + + + + ) : null} + + + + + ), }; } else { @@ -146,6 +180,7 @@ interface Props { jobType: JobType; jobIds: string[]; setDidUntag?: React.Dispatch>; + hasManagedJob?: boolean; } export const DeleteJobCheckModal: FC = ({ @@ -155,6 +190,7 @@ export const DeleteJobCheckModal: FC = ({ jobType, jobIds, setDidUntag, + hasManagedJob, }) => { const [buttonContent, setButtonContent] = useState(); const [modalContent, setModalContent] = useState(); @@ -180,7 +216,7 @@ export const DeleteJobCheckModal: FC = ({ return; } setJobCheckRespSummary(respSummary); - const { buttonText, modalText } = getModalContent(jobIds, respSummary); + const { buttonText, modalText } = getModalContent(jobIds, respSummary, hasManagedJob); setButtonContent(buttonText); setModalContent(modalText); }); @@ -188,7 +224,7 @@ export const DeleteJobCheckModal: FC = ({ setDidUntag(false); } setIsLoading(false); - }, []); + }, [hasManagedJob]); const onUntagClick = async () => { setIsUntagging(true); diff --git a/x-pack/plugins/ml/public/application/components/ml_page/ml_page.tsx b/x-pack/plugins/ml/public/application/components/ml_page/ml_page.tsx index d399409f95c9ba..f7f715a598c94a 100644 --- a/x-pack/plugins/ml/public/application/components/ml_page/ml_page.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_page/ml_page.tsx @@ -98,7 +98,7 @@ export const MlPage: FC<{ pageDeps: PageDependencies }> = React.memo(({ pageDeps { id: '', name: '', - items: useSideNavItems(activeRoute.id), + items: useSideNavItems(activeRoute), }, ], }} diff --git a/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx b/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx index 6bb410668c6ac8..bb0092621c04b9 100644 --- a/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx @@ -13,6 +13,7 @@ import { useUrlState } from '../../util/url_state'; import { useMlKibana, useMlLocator, useNavigateToPath } from '../../contexts/kibana'; import { isFullLicense } from '../../license'; import { ML_APP_NAME } from '../../../../common/constants/app'; +import type { MlRoute } from '../../routing'; export type TabId = | 'access-denied' @@ -20,12 +21,14 @@ export type TabId = | 'data_frame_analytics' | 'trained_models' | 'datavisualizer' + | 'data_view_datavisualizer' + | 'filedatavisualizer' | 'overview' | 'settings'; export interface Tab { id: TabId; - name: any; + name: string; disabled: boolean; betaTag?: JSX.Element; items?: Tab[]; @@ -76,6 +79,22 @@ function getTabs(disableLinks: boolean): Tab[] { defaultMessage: 'Data Visualizer', }), disabled: false, + items: [ + { + id: 'filedatavisualizer', + name: i18n.translate('xpack.ml.navMenu.fileDataVisualizerLinkText', { + defaultMessage: 'File', + }), + disabled: false, + }, + { + id: 'data_view_datavisualizer', + name: i18n.translate('xpack.ml.navMenu.dataViewDataVisualizerLinkText', { + defaultMessage: 'Data View', + }), + disabled: false, + }, + ], }, ]; } @@ -119,6 +138,20 @@ export const TAB_DATA: Record = { defaultMessage: 'Data Visualizer', }), }, + data_view_datavisualizer: { + testSubject: 'mlMainTab dataVisualizer dataViewDatavisualizer', + name: i18n.translate('xpack.ml.dataViewDataVisualizerTabLabel', { + defaultMessage: 'Data View', + }), + pathId: 'datavisualizer_index_select', + }, + filedatavisualizer: { + testSubject: 'mlMainTab dataVisualizer fileDatavisualizer', + name: i18n.translate('xpack.ml.fileDataVisualizerTabLabel', { + defaultMessage: 'File', + }), + pathId: 'filedatavisualizer', + }, settings: { testSubject: 'mlMainTab settings', name: i18n.translate('xpack.ml.settingsTabLabel', { @@ -133,7 +166,8 @@ export const TAB_DATA: Record = { }, }; -export function useSideNavItems(activeRouteId: string | undefined) { +export function useSideNavItems(activeRoute: MlRoute | undefined) { + const activeRouteId = activeRoute?.id; const { services: { chrome: { docTitle }, @@ -174,7 +208,7 @@ export function useSideNavItems(activeRouteId: string | undefined) { const tabs = getTabs(!isFullLicense()); - function getTabItem(tab: Tab): EuiSideNavItemType { + function getTabItem(tab: Tab): EuiSideNavItemType { const { id, disabled, items } = tab; const testSubject = TAB_DATA[id].testSubject; const defaultPathId = (TAB_DATA[id].pathId || id) as MlLocatorParams['page']; @@ -182,7 +216,7 @@ export function useSideNavItems(activeRouteId: string | undefined) { return { id, name: tab.name, - isSelected: id === activeRouteId, + isSelected: id === activeRouteId || activeRoute?.path.includes(`${id}/`), disabled, onClick: () => { redirectToTab(defaultPathId); diff --git a/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts b/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts index 10c00098d82d56..a72ce380eef857 100644 --- a/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts +++ b/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts @@ -22,6 +22,7 @@ import type { MapsStartApi } from '../../../../../maps/public'; import type { DataVisualizerPluginStart } from '../../../../../data_visualizer/public'; import type { TriggersAndActionsUIPublicPluginStart } from '../../../../../triggers_actions_ui/public'; import type { FieldFormatsRegistry } from '../../../../../../../src/plugins/field_formats/common'; +import type { DashboardSetup } from '../../../../../../../src/plugins/dashboard/public'; interface StartPlugins { data: DataPublicPluginStart; @@ -34,6 +35,7 @@ interface StartPlugins { dataVisualizer?: DataVisualizerPluginStart; usageCollection?: UsageCollectionSetup; fieldFormats: FieldFormatsRegistry; + dashboard: DashboardSetup; } export type StartServices = CoreStart & StartPlugins & { diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/page.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/page.tsx index 1356fe180fe202..59767216b79e87 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/page.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/page.tsx @@ -59,7 +59,7 @@ export const Page: FC = () => { diff --git a/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx b/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx index dc48d71a7d492d..4ddf3b8e4810ec 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx @@ -102,7 +102,7 @@ export const DatavisualizerSelector: FC = () => { title={ } description={ @@ -134,15 +134,10 @@ export const DatavisualizerSelector: FC = () => { title={ - } - description={ - } + description={''} footer={ = ({ const [isAddDashboardsActive, setIsAddDashboardActive] = useState(false); const canEditDashboards = capabilities.dashboard?.createNew ?? false; + const menuItems = useMemo(() => { const items = []; if (canEditDashboards) { @@ -91,20 +92,17 @@ export const AnomalyContextMenu: FC = ({ )} - {isAddDashboardsActive && selectedJobs && ( + {isAddDashboardsActive && selectedJobs ? ( { + onClose={async () => { setIsAddDashboardActive(false); - if (callback) { - await callback(); - } }} selectedCells={selectedCells} bounds={bounds} interval={interval} jobIds={jobIds} /> - )} + ) : null} ); }; diff --git a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_anomaly_charts_to_dashboard_controls.tsx b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_anomaly_charts_to_dashboard_controls.tsx index dd08abf8e895e3..bb134666b08d17 100644 --- a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_anomaly_charts_to_dashboard_controls.tsx +++ b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_anomaly_charts_to_dashboard_controls.tsx @@ -6,7 +6,7 @@ */ import React, { FC, useCallback, useState } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiFieldNumber, EuiFormRow, formatDate } from '@elastic/eui'; +import { EuiFieldNumber, EuiFormRow, formatDate, htmlIdGenerator } from '@elastic/eui'; import { useDashboardTable } from './use_dashboards_table'; import { AddToDashboardControl } from './add_to_dashboard_controls'; import { useAddToDashboardActions } from './use_add_to_dashboard_actions'; @@ -22,7 +22,7 @@ import { MAX_ANOMALY_CHARTS_ALLOWED } from '../../../embeddables/anomaly_charts/ function getDefaultEmbeddablePanelConfig(jobIds: JobId[]) { return { - type: ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, + id: htmlIdGenerator()(), title: getDefaultExplorerChartsPanelTitle(jobIds), }; } @@ -48,7 +48,7 @@ export const AddAnomalyChartsToDashboardControl: FC const [severity] = useTableSeverity(); const [maxSeriesToPlot, setMaxSeriesToPlot] = useState(DEFAULT_MAX_SERIES_TO_PLOT); - const getPanelsData = useCallback(async () => { + const getEmbeddableInput = useCallback(() => { let timeRange: TimeRange | undefined; if (selectedCells !== undefined && interval !== undefined && bounds !== undefined) { const { earliestMs, latestMs } = getSelectionTimeRange(selectedCells, interval, bounds); @@ -60,25 +60,21 @@ export const AddAnomalyChartsToDashboardControl: FC } const config = getDefaultEmbeddablePanelConfig(jobIds); - return [ - { - ...config, - embeddableConfig: { - jobIds, - maxSeriesToPlot: maxSeriesToPlot ?? DEFAULT_MAX_SERIES_TO_PLOT, - severityThreshold: severity.val, - ...(timeRange ?? {}), - }, - }, - ]; + + return { + ...config, + jobIds, + maxSeriesToPlot: maxSeriesToPlot ?? DEFAULT_MAX_SERIES_TO_PLOT, + severityThreshold: severity.val, + ...(timeRange ?? {}), + }; }, [selectedCells, interval, bounds, jobIds, maxSeriesToPlot, severity]); - const { selectedItems, selection, dashboardItems, isLoading, search } = useDashboardTable(); - const { addToDashboardAndEditCallback, addToDashboardCallback } = useAddToDashboardActions({ - onClose, - getPanelsData, - selectedDashboards: selectedItems, - }); + const { dashboardItems, isLoading, search } = useDashboardTable(); + const { addToDashboardAndEditCallback } = useAddToDashboardActions( + ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, + getEmbeddableInput + ); const title = ( /> ); - const disabled = selectedItems.length < 1 && !Array.isArray(jobIds === undefined); - const extraControls = ( return ( {extraControls} diff --git a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_swimlane_to_dashboard_controls.tsx b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_swimlane_to_dashboard_controls.tsx index d343f88ce78320..519bbede140299 100644 --- a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_swimlane_to_dashboard_controls.tsx +++ b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_swimlane_to_dashboard_controls.tsx @@ -6,7 +6,13 @@ */ import React, { FC, useCallback, useState } from 'react'; -import { EuiFormRow, EuiCheckboxGroup, EuiInMemoryTableProps, EuiSpacer } from '@elastic/eui'; +import { + EuiFormRow, + EuiInMemoryTableProps, + EuiSpacer, + EuiRadioGroup, + htmlIdGenerator, +} from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { DashboardSavedObject } from '../../../../../../../src/plugins/dashboard/public'; @@ -29,8 +35,8 @@ export type EuiTableProps = EuiInMemoryTableProps; function getDefaultEmbeddablePanelConfig(jobIds: JobId[]) { return { - type: ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, title: getDefaultSwimlanePanelTitle(jobIds), + id: htmlIdGenerator()(), }; } @@ -48,44 +54,25 @@ export const AddSwimlaneToDashboardControl: FC = ({ jobIds, viewBy, }) => { - const { selectedItems, selection, dashboardItems, isLoading, search } = useDashboardTable(); + const { dashboardItems, isLoading, search } = useDashboardTable(); - const [selectedSwimlanes, setSelectedSwimlanes] = useState<{ [key in SwimlaneType]: boolean }>({ - [SWIMLANE_TYPE.OVERALL]: true, - [SWIMLANE_TYPE.VIEW_BY]: false, - }); + const [selectedSwimlane, setSelectedSwimlane] = useState(SWIMLANE_TYPE.OVERALL); - const getPanelsData = useCallback(async () => { - const swimlanes = Object.entries(selectedSwimlanes) - .filter(([, isSelected]) => isSelected) - .map(([swimlaneType]) => swimlaneType); + const getEmbeddableInput = useCallback(() => { + const config = getDefaultEmbeddablePanelConfig(jobIds); - return swimlanes.map((swimlaneType) => { - const config = getDefaultEmbeddablePanelConfig(jobIds); - if (swimlaneType === SWIMLANE_TYPE.VIEW_BY) { - return { - ...config, - embeddableConfig: { - jobIds, - swimlaneType, - viewBy, - }, - }; - } - return { - ...config, - embeddableConfig: { - jobIds, - swimlaneType, - }, - }; - }); - }, [selectedSwimlanes, selectedItems]); - const { addToDashboardAndEditCallback, addToDashboardCallback } = useAddToDashboardActions({ - onClose, - getPanelsData, - selectedDashboards: selectedItems, - }); + return { + ...config, + jobIds, + swimlaneType: selectedSwimlane, + ...(selectedSwimlane === SWIMLANE_TYPE.VIEW_BY ? { viewBy } : {}), + }; + }, [selectedSwimlane]); + + const { addToDashboardAndEditCallback } = useAddToDashboardActions( + ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, + getEmbeddableInput + ); const swimlaneTypeOptions = [ { @@ -103,8 +90,6 @@ export const AddSwimlaneToDashboardControl: FC = ({ }, ]; - const noSwimlaneSelected = Object.values(selectedSwimlanes).every((isSelected) => !isSelected); - const extraControls = ( <> = ({ /> } > - { - const newSelection = { - ...selectedSwimlanes, - [optionId]: !selectedSwimlanes[optionId as SwimlaneType], - }; - setSelectedSwimlanes(newSelection); + setSelectedSwimlane(optionId as SwimlaneType); }} data-test-subj="mlAddToDashboardSwimlaneTypeSelector" /> @@ -135,22 +116,18 @@ export const AddSwimlaneToDashboardControl: FC = ({ const title = ( ); - const disabled = noSwimlaneSelected || selectedItems.length === 0; return ( {extraControls} diff --git a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_to_dashboard_controls.tsx b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_to_dashboard_controls.tsx index 0231e5d03aab3e..d030cfc9b92b62 100644 --- a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_to_dashboard_controls.tsx +++ b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_to_dashboard_controls.tsx @@ -6,7 +6,6 @@ */ import React, { FC } from 'react'; import { - EuiButton, EuiButtonEmpty, EuiFormRow, EuiInMemoryTable, @@ -18,46 +17,67 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiTableProps, useDashboardTable } from './use_dashboards_table'; - -export const columns: EuiTableProps['columns'] = [ - { - field: 'title', - name: i18n.translate('xpack.ml.explorer.dashboardsTable.titleColumnHeader', { - defaultMessage: 'Title', - }), - sortable: true, - truncateText: true, - }, - { - field: 'description', - name: i18n.translate('xpack.ml.explorer.dashboardsTable.descriptionColumnHeader', { - defaultMessage: 'Description', - }), - truncateText: true, - }, -]; +import { DashboardItem, EuiTableProps, useDashboardTable } from './use_dashboards_table'; interface AddToDashboardControlProps extends ReturnType { onClose: (callback?: () => Promise) => void; - addToDashboardAndEditCallback: () => Promise; - addToDashboardCallback: () => Promise; + addToDashboardAndEditCallback: (dashboardItem: DashboardItem) => Promise; title: React.ReactNode; disabled: boolean; children?: React.ReactElement; } export const AddToDashboardControl: FC = ({ onClose, - selection, dashboardItems, isLoading, search, addToDashboardAndEditCallback, - addToDashboardCallback, title, disabled, children, }) => { + const columns: EuiTableProps['columns'] = [ + { + field: 'title', + name: i18n.translate('xpack.ml.explorer.dashboardsTable.titleColumnHeader', { + defaultMessage: 'Title', + }), + sortable: true, + truncateText: true, + }, + { + field: 'description', + name: i18n.translate('xpack.ml.explorer.dashboardsTable.descriptionColumnHeader', { + defaultMessage: 'Description', + }), + truncateText: true, + }, + { + field: 'description', + name: i18n.translate('xpack.ml.explorer.dashboardsTable.actionsHeader', { + defaultMessage: 'Actions', + }), + width: '80px', + actions: [ + { + name: i18n.translate('xpack.ml.explorer.dashboardsTable.editActionName', { + defaultMessage: 'Add to dashboard', + }), + description: i18n.translate('xpack.ml.explorer.dashboardsTable.editActionName', { + defaultMessage: 'Add to dashboard', + }), + icon: 'documentEdit', + type: 'icon', + enabled: () => !disabled, + onClick: async (item) => { + await addToDashboardAndEditCallback(item); + }, + 'data-test-subj': 'mlEmbeddableAddAndEditDashboard', + }, + ], + }, + ]; + return ( @@ -77,8 +97,8 @@ export const AddToDashboardControl: FC = ({ > = ({ defaultMessage="Cancel" /> - - - - - - ); diff --git a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/use_add_to_dashboard_actions.tsx b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/use_add_to_dashboard_actions.tsx index 450266125e1a9e..21d3a320ee5915 100644 --- a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/use_add_to_dashboard_actions.tsx +++ b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/use_add_to_dashboard_actions.tsx @@ -5,66 +5,50 @@ * 2.0. */ -import React, { useCallback } from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; +import { useCallback } from 'react'; import { DashboardItem } from './use_dashboards_table'; -import { SavedDashboardPanel } from '../../../../../../../src/plugins/dashboard/common/types'; import { useMlKibana } from '../../contexts/kibana'; import { useDashboardService } from '../../services/dashboard_service'; +import { DashboardConstants } from '../../../../../../../src/plugins/dashboard/public'; +import { + ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, + ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, + AnomalyChartsEmbeddableInput, + AnomalySwimlaneEmbeddableInput, +} from '../../../embeddables'; -export const useAddToDashboardActions = ({ - onClose, - getPanelsData, - selectedDashboards, -}: { - onClose: (callback?: () => Promise) => void; - getPanelsData: ( - selectedDashboards: DashboardItem[] - ) => Promise>>; - selectedDashboards: DashboardItem[]; -}) => { +export function useAddToDashboardActions< + T extends typeof ANOMALY_SWIMLANE_EMBEDDABLE_TYPE | typeof ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE +>( + type: T, + getEmbeddableInput: () => Partial< + T extends typeof ANOMALY_SWIMLANE_EMBEDDABLE_TYPE + ? AnomalySwimlaneEmbeddableInput + : AnomalyChartsEmbeddableInput + > +) { const { - notifications: { toasts }, - services: { - application: { navigateToUrl }, - }, + services: { embeddable }, } = useMlKibana(); const dashboardService = useDashboardService(); - const addToDashboardCallback = useCallback(async () => { - const panelsData = await getPanelsData(selectedDashboards); - for (const selectedDashboard of selectedDashboards) { - try { - await dashboardService.attachPanels( - selectedDashboard.id, - selectedDashboard.attributes, - panelsData - ); - toasts.success({ - title: ( - - ), - toastLifeTimeMs: 3000, - }); - } catch (e) { - toasts.danger({ - body: e, - }); - } - } - }, [selectedDashboards, getPanelsData]); + const addToDashboardAndEditCallback = useCallback( + async (selectedDashboard: DashboardItem) => { + const stateTransfer = embeddable.getStateTransfer(); + const selectedDashboardId = selectedDashboard.id; + + const dashboardPath = await dashboardService.getDashboardEditUrl(selectedDashboardId); - const addToDashboardAndEditCallback = useCallback(async () => { - onClose(async () => { - await addToDashboardCallback(); - const selectedDashboardId = selectedDashboards[0].id; - await navigateToUrl(await dashboardService.getDashboardEditUrl(selectedDashboardId)); - }); - }, [addToDashboardCallback, selectedDashboards, navigateToUrl]); + await stateTransfer.navigateToWithEmbeddablePackage(DashboardConstants.DASHBOARDS_ID, { + path: dashboardPath, + state: { + type, + input: getEmbeddableInput(), + }, + }); + }, + [getEmbeddableInput] + ); - return { addToDashboardCallback, addToDashboardAndEditCallback }; -}; + return { addToDashboardAndEditCallback }; +} diff --git a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/use_dashboards_table.tsx b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/use_dashboards_table.tsx index 8721de497eedcc..b114797bbc5502 100644 --- a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/use_dashboards_table.tsx +++ b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/use_dashboards_table.tsx @@ -51,7 +51,6 @@ export const useDashboardTable = () => { }, []); const [dashboardItems, setDashboardItems] = useState([]); - const [selectedItems, setSelectedItems] = useState([]); const fetchDashboards = useCallback( debounce(async (query?: string) => { @@ -75,8 +74,6 @@ export const useDashboardTable = () => { }, 500), [] ); - const selection: EuiTableProps['selection'] = { - onSelectionChange: setSelectedItems, - }; - return { dashboardItems, selectedItems, selection, search, isLoading }; + + return { dashboardItems, search, isLoading }; }; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/close_jobs_confirm_modal.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/close_jobs_confirm_modal.tsx new file mode 100644 index 00000000000000..5e7b7a18e33632 --- /dev/null +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/close_jobs_confirm_modal.tsx @@ -0,0 +1,136 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { FC, useState, useEffect, useCallback, useMemo } from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + EuiSpacer, + EuiModal, + EuiModalHeader, + EuiModalHeaderTitle, + EuiModalBody, + EuiModalFooter, + EuiButtonEmpty, + EuiButton, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { MlSummaryJob } from '../../../../../../common/types/anomaly_detection_jobs'; +import { isManagedJob } from '../../../jobs_utils'; +import { closeJobs } from '../utils'; +import { ManagedJobsWarningCallout } from './managed_jobs_warning_callout'; + +type ShowFunc = (jobs: MlSummaryJob[]) => void; + +interface Props { + setShowFunction(showFunc: ShowFunc): void; + unsetShowFunction(): void; + refreshJobs(): void; +} + +export const CloseJobsConfirmModal: FC = ({ + setShowFunction, + unsetShowFunction, + refreshJobs, +}) => { + const [modalVisible, setModalVisible] = useState(false); + const [hasManagedJob, setHasManaged] = useState(true); + const [jobsToReset, setJobsToReset] = useState([]); + + const jobIds = useMemo(() => jobsToReset.map(({ id }) => id), [jobsToReset]); + + useEffect(() => { + if (typeof setShowFunction === 'function') { + setShowFunction(showModal); + } + return () => { + if (typeof unsetShowFunction === 'function') { + unsetShowFunction(); + } + }; + }, []); + + const showModal = useCallback((jobs: MlSummaryJob[]) => { + setJobsToReset(jobs); + + if (jobs.some((j) => isManagedJob(j))) { + setModalVisible(true); + setHasManaged(true); + } + }, []); + + const closeModal = useCallback(() => { + setModalVisible(false); + setHasManaged(false); + }, []); + + if (modalVisible === false) { + return null; + } + + if (hasManagedJob) { + const title = ( + + ); + + return ( + + + {title} + + + + + <> + + + + + + + { + closeJobs(jobsToReset, refreshJobs); + closeModal(); + }} + fill + color="danger" + data-test-subj="mlCloseJobsConfirmModalButton" + > + + + + + + ); + } else { + return <>; + } +}; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/managed_jobs_warning_callout.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/managed_jobs_warning_callout.tsx new file mode 100644 index 00000000000000..5d6a72e927ecb9 --- /dev/null +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/managed_jobs_warning_callout.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiCallOut, EuiSpacer } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import React from 'react'; + +export const ManagedJobsWarningCallout = ({ + jobsCount, + action, + message, +}: { + jobsCount: number; + action?: string; + message?: string; +}) => { + return ( + <> + + + {message ?? ( + + )} + + + ); +}; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/stop_datafeeds_confirm_modal.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/stop_datafeeds_confirm_modal.tsx new file mode 100644 index 00000000000000..1a6d9e1e433ff1 --- /dev/null +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/stop_datafeeds_confirm_modal.tsx @@ -0,0 +1,137 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { FC, useState, useEffect, useCallback, useMemo } from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + EuiSpacer, + EuiModal, + EuiModalHeader, + EuiModalHeaderTitle, + EuiModalBody, + EuiModalFooter, + EuiButtonEmpty, + EuiButton, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { MlSummaryJob } from '../../../../../../common/types/anomaly_detection_jobs'; +import { isManagedJob } from '../../../jobs_utils'; +import { stopDatafeeds } from '../utils'; +import { ManagedJobsWarningCallout } from './managed_jobs_warning_callout'; + +type ShowFunc = (jobs: MlSummaryJob[]) => void; + +interface Props { + setShowFunction(showFunc: ShowFunc): void; + unsetShowFunction(): void; + refreshJobs(): void; + showStopDatafeedsFlyout(job: MlSummaryJob[]): void; +} + +export const StopDatafeedsConfirmModal: FC = ({ + setShowFunction, + unsetShowFunction, + refreshJobs, +}) => { + const [modalVisible, setModalVisible] = useState(false); + const [hasManagedJob, setHasManaged] = useState(true); + const [jobsToStop, setJobsToStop] = useState([]); + + const jobIds = useMemo(() => jobsToStop.map(({ id }) => id), [jobsToStop]); + + useEffect(() => { + if (typeof setShowFunction === 'function') { + setShowFunction(showModal); + } + return () => { + if (typeof unsetShowFunction === 'function') { + unsetShowFunction(); + } + }; + }, []); + + const showModal = useCallback((jobs: MlSummaryJob[]) => { + setJobsToStop(jobs); + + if (jobs.some((j) => isManagedJob(j))) { + setModalVisible(true); + setHasManaged(true); + } + }, []); + + const closeModal = useCallback(() => { + setModalVisible(false); + setHasManaged(false); + }, []); + + if (modalVisible === false) { + return null; + } + + if (hasManagedJob) { + const title = ( + + ); + + return ( + + + {title} + + + + + <> + + + + + + + { + stopDatafeeds(jobsToStop, refreshJobs); + closeModal(); + }} + fill + color="danger" + data-test-subj="mlStopDatafeedsConfirmModalButton" + > + + + + + + ); + } else { + return <>; + } +}; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/delete_job_modal/delete_job_modal.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/delete_job_modal/delete_job_modal.tsx index 2f04e8ae86e73c..49c09761bc8150 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/delete_job_modal/delete_job_modal.tsx +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/delete_job_modal/delete_job_modal.tsx @@ -20,10 +20,13 @@ import { EuiText, } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { deleteJobs } from '../utils'; import { DELETING_JOBS_REFRESH_INTERVAL_MS } from '../../../../../../common/constants/jobs_list'; import { DeleteJobCheckModal } from '../../../../components/delete_job_check_modal'; import { MlSummaryJob } from '../../../../../../common/types/anomaly_detection_jobs'; +import { isManagedJob } from '../../../jobs_utils'; +import { ManagedJobsWarningCallout } from '../confirm_modals/managed_jobs_warning_callout'; type ShowFunc = (jobs: MlSummaryJob[]) => void; @@ -38,6 +41,7 @@ export const DeleteJobModal: FC = ({ setShowFunction, unsetShowFunction, const [modalVisible, setModalVisible] = useState(false); const [jobIds, setJobIds] = useState([]); const [canDelete, setCanDelete] = useState(false); + const [hasManagedJob, setHasManagedJob] = useState(false); useEffect(() => { if (typeof setShowFunction === 'function') { @@ -52,6 +56,7 @@ export const DeleteJobModal: FC = ({ setShowFunction, unsetShowFunction, const showModal = useCallback((jobs: MlSummaryJob[]) => { setJobIds(jobs.map(({ id }) => id)); + setHasManagedJob(jobs.some((job) => isManagedJob(job))); setModalVisible(true); setDeleting(false); }, []); @@ -104,17 +109,30 @@ export const DeleteJobModal: FC = ({ setShowFunction, unsetShowFunction,

) : ( - - - + values={{ + jobsCount: jobIds.length, + }} + /> + + )}

@@ -155,6 +173,7 @@ export const DeleteJobModal: FC = ({ setShowFunction, unsetShowFunction, }} onCloseCallback={closeModal} refreshJobsCallback={refreshJobs} + hasManagedJob={hasManagedJob} /> ); diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/edit_job_flyout.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/edit_job_flyout.js index c278f8790984fc..3ede5cf813f448 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/edit_job_flyout.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/edit_job_flyout.js @@ -22,6 +22,7 @@ import { EuiFlexItem, EuiTabbedContent, EuiConfirmModal, + EuiSpacer, } from '@elastic/eui'; import { JobDetails, Detectors, Datafeed, CustomUrls } from './tabs'; @@ -33,6 +34,8 @@ import { ml } from '../../../../services/ml_api_service'; import { withKibana } from '../../../../../../../../../src/plugins/kibana_react/public'; import { collapseLiteralStrings } from '../../../../../../shared_imports'; import { DATAFEED_STATE, JOB_STATE } from '../../../../../../common/constants/states'; +import { isManagedJob } from '../../../jobs_utils'; +import { ManagedJobsWarningCallout } from '../confirm_modals/managed_jobs_warning_callout'; export class EditJobFlyoutUI extends Component { _initialJobFormState = null; @@ -412,6 +415,21 @@ export class EditJobFlyoutUI extends Component { /> + + {isManagedJob(job) ? ( + <> + + + + ) : null} {}} /> diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_actions/management.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_actions/management.js index 64bc7f4a517c28..5b8b4b386213d4 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_actions/management.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_actions/management.js @@ -19,12 +19,15 @@ import { isResettable, } from '../utils'; import { i18n } from '@kbn/i18n'; +import { isManagedJob } from '../../../jobs_utils'; export function actionsMenuContent( showEditJobFlyout, showDeleteJobModal, showResetJobModal, showStartDatafeedModal, + showCloseJobsConfirmModal, + showStopDatafeedsConfirmModal, refreshJobs, showCreateAlertFlyout ) { @@ -65,7 +68,12 @@ export function actionsMenuContent( enabled: (item) => isJobBlocked(item) === false && canStartStopDatafeed, available: (item) => isStoppable([item]), onClick: (item) => { - stopDatafeeds([item], refreshJobs); + if (isManagedJob(item)) { + showStopDatafeedsConfirmModal([item]); + } else { + stopDatafeeds([item], refreshJobs); + } + closeMenu(true); }, 'data-test-subj': 'mlActionButtonStopDatafeed', @@ -97,7 +105,12 @@ export function actionsMenuContent( enabled: (item) => isJobBlocked(item) === false && canCloseJob, available: (item) => isClosable([item]), onClick: (item) => { - closeJobs([item], refreshJobs); + if (isManagedJob(item)) { + showCloseJobsConfirmModal([item]); + } else { + closeJobs([item], refreshJobs); + } + closeMenu(true); }, 'data-test-subj': 'mlActionButtonCloseJob', diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/extract_job_details.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/extract_job_details.js index dea8fdd30e3727..fd00058e647130 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/extract_job_details.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/extract_job_details.js @@ -42,7 +42,7 @@ export function extractJobDetails(job, basePath, refreshJobList) { defaultMessage: 'Custom settings', }), position: 'right', - items: settings ? filterObjects(settings, true, true) : [], + items: settings ? filterObjects(settings, true, true).map(formatValues) : [], }; const jobTags = { diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/format_values.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/format_values.js index 92bbc720d8dddb..6bbbe9e59f783b 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/format_values.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/format_values.js @@ -80,6 +80,10 @@ export function formatValues(obj) { typeof value === 'number' ? roundToDecimalPlace(value, 3).toLocaleString() : value, ]; + // boolean + case 'managed': + return [key, value.toString()]; + default: return [key, value]; } diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js index 5fe005c4b34ff8..71a6b7d88fe1a5 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js @@ -24,10 +24,12 @@ import { EuiIcon, EuiScreenReaderOnly, EuiToolTip, + EuiBadge, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { AnomalyDetectionJobIdLink } from './job_id_link'; +import { isManagedJob } from '../../../jobs_utils'; const PAGE_SIZE_OPTIONS = [10, 25, 50]; @@ -169,7 +171,31 @@ export class JobsList extends Component { truncateText: false, width: '15%', scope: 'row', - render: isManagementTable ? (id) => this.getJobIdLink(id) : undefined, + render: isManagementTable + ? (id) => this.getJobIdLink(id) + : (id, item) => { + if (!isManagedJob(item)) return id; + + return ( + <> + + {id}   + + + {i18n.translate('xpack.ml.jobsList.managedBadgeLabel', { + defaultMessage: 'Managed', + })} + + + + + ); + }, }, { field: 'auditMessage', @@ -340,6 +366,8 @@ export class JobsList extends Component { this.props.showDeleteJobModal, this.props.showResetJobModal, this.props.showStartDatafeedModal, + this.props.showCloseJobsConfirmModal, + this.props.showStopDatafeedsConfirmModal, this.props.refreshJobs, this.props.showCreateAlertFlyout ), @@ -414,7 +442,9 @@ JobsList.propTypes = { showEditJobFlyout: PropTypes.func, showDeleteJobModal: PropTypes.func, showStartDatafeedModal: PropTypes.func, + showCloseJobsConfirmModal: PropTypes.func, showCreateAlertFlyout: PropTypes.func, + showStopDatafeedsConfirmModal: PropTypes.func, refreshJobs: PropTypes.func, selectedJobsCount: PropTypes.number.isRequired, loading: PropTypes.bool, diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js index edcb38c6305efa..539d0c475bb00b 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js @@ -29,6 +29,8 @@ import { RefreshJobsListButton } from '../refresh_jobs_list_button'; import { DELETING_JOBS_REFRESH_INTERVAL_MS } from '../../../../../../common/constants/jobs_list'; import { JobListMlAnomalyAlertFlyout } from '../../../../../alerting/ml_alerting_flyout'; +import { StopDatafeedsConfirmModal } from '../confirm_modals/stop_datafeeds_confirm_modal'; +import { CloseJobsConfirmModal } from '../confirm_modals/close_jobs_confirm_modal'; let blockingJobsRefreshTimeout = null; @@ -58,6 +60,8 @@ export class JobsListView extends Component { this.updateFunctions = {}; this.showEditJobFlyout = () => {}; + this.showStopDatafeedsConfirmModal = () => {}; + this.showCloseJobsConfirmModal = () => {}; this.showDeleteJobModal = () => {}; this.showResetJobModal = () => {}; this.showStartDatafeedModal = () => {}; @@ -193,6 +197,22 @@ export class JobsListView extends Component { this.showEditJobFlyout = () => {}; }; + setShowStopDatafeedsConfirmModalFunction = (func) => { + this.showStopDatafeedsConfirmModal = func; + }; + + unsetShowStopDatafeedsConfirmModalFunction = () => { + this.showStopDatafeedsConfirmModal = () => {}; + }; + + setShowCloseJobsConfirmModalFunction = (func) => { + this.showCloseJobsConfirmModal = func; + }; + + unsetShowCloseJobsConfirmModalFunction = () => { + this.showCloseJobsConfirmModal = () => {}; + }; + setShowDeleteJobModalFunction = (func) => { this.showDeleteJobModal = func; }; @@ -490,10 +510,12 @@ export class JobsListView extends Component { this.refreshJobSummaryList(true)} /> this.refreshJobSummaryList(true)} jobsViewState={this.props.jobsViewState} onJobsViewStateUpdate={this.props.onJobsViewStateUpdate} @@ -524,6 +548,18 @@ export class JobsListView extends Component { refreshJobs={() => this.refreshJobSummaryList(true)} allJobIds={jobIds} /> + this.refreshJobSummaryList(true)} + allJobIds={jobIds} + /> + + this.refreshJobSummaryList(true)} + /> { - closeJobs(this.props.jobs); + if (this.props.jobs.some((j) => isManagedJob(j))) { + this.props.showCloseJobsConfirmModal(this.props.jobs); + } else { + closeJobs(this.props.jobs); + } + this.closePopover(); }} data-test-subj="mlADJobListMultiSelectCloseJobActionButton" @@ -139,7 +145,11 @@ class MultiJobActionsMenuUI extends Component { icon="stop" disabled={this.canStartStopDatafeed === false} onClick={() => { - stopDatafeeds(this.props.jobs, this.props.refreshJobs); + if (this.props.jobs.some((j) => isManagedJob(j))) { + this.props.showStopDatafeedsConfirmModal(this.props.jobs); + } else { + stopDatafeeds(this.props.jobs, this.props.refreshJobs); + } this.closePopover(); }} data-test-subj="mlADJobListMultiSelectStopDatafeedActionButton" @@ -211,6 +221,7 @@ MultiJobActionsMenuUI.propTypes = { jobs: PropTypes.array.isRequired, showStartDatafeedModal: PropTypes.func.isRequired, showDeleteJobModal: PropTypes.func.isRequired, + showStopDatafeedsConfirmModal: PropTypes.func.isRequired, refreshJobs: PropTypes.func.isRequired, showCreateAlertFlyout: PropTypes.func.isRequired, }; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/multi_job_actions/multi_job_actions.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/multi_job_actions/multi_job_actions.js index 148f1a9276c502..eede9d45732255 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/multi_job_actions/multi_job_actions.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/multi_job_actions/multi_job_actions.js @@ -64,9 +64,11 @@ export class MultiJobActions extends Component { @@ -81,8 +83,10 @@ MultiJobActions.propTypes = { selectedJobs: PropTypes.array.isRequired, allJobIds: PropTypes.array.isRequired, showStartDatafeedModal: PropTypes.func.isRequired, + showCloseJobsConfirmModal: PropTypes.func.isRequired, showDeleteJobModal: PropTypes.func.isRequired, showResetJobModal: PropTypes.func.isRequired, + showStopDatafeedsConfirmModal: PropTypes.func.isRequired, refreshJobs: PropTypes.func.isRequired, showCreateAlertFlyout: PropTypes.func.isRequired, }; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/reset_job_modal/reset_job_modal.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/reset_job_modal/reset_job_modal.tsx index 45e928cdf39055..49a2b810c10002 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/reset_job_modal/reset_job_modal.tsx +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/reset_job_modal/reset_job_modal.tsx @@ -19,10 +19,13 @@ import { EuiText, } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { resetJobs } from '../utils'; import type { MlSummaryJob } from '../../../../../../common/types/anomaly_detection_jobs'; import { RESETTING_JOBS_REFRESH_INTERVAL_MS } from '../../../../../../common/constants/jobs_list'; import { OpenJobsWarningCallout } from './open_jobs_warning_callout'; +import { isManagedJob } from '../../../jobs_utils'; +import { ManagedJobsWarningCallout } from '../confirm_modals/managed_jobs_warning_callout'; type ShowFunc = (jobs: MlSummaryJob[]) => void; @@ -37,6 +40,7 @@ export const ResetJobModal: FC = ({ setShowFunction, unsetShowFunction, r const [modalVisible, setModalVisible] = useState(false); const [jobIds, setJobIds] = useState([]); const [jobs, setJobs] = useState([]); + const [hasManagedJob, setHasManagedJob] = useState(false); useEffect(() => { if (typeof setShowFunction === 'function') { @@ -52,6 +56,8 @@ export const ResetJobModal: FC = ({ setShowFunction, unsetShowFunction, r const showModal = useCallback((tempJobs: MlSummaryJob[]) => { setJobIds(tempJobs.map(({ id }) => id)); setJobs(tempJobs); + setHasManagedJob(tempJobs.some((j) => isManagedJob(j))); + setModalVisible(true); setResetting(false); }, []); @@ -90,6 +96,22 @@ export const ResetJobModal: FC = ({ setShowFunction, unsetShowFunction, r <> + + {hasManagedJob === true ? ( + <> + + + + ) : null} + 0; + this.setState({ jobs, isModalVisible: true, @@ -98,6 +101,7 @@ export class StartDatafeedModal extends Component { allowCreateAlert, createAlert: false, now, + hasManagedJob: jobs.some((j) => isManagedJob(j)), }); }; @@ -164,6 +168,8 @@ export class StartDatafeedModal extends Component { setEndTime={this.setEndTime} now={now} setTimeRangeValid={this.setTimeRangeValid} + hasManagedJob={this.state.hasManagedJob} + jobsCount={startableJobs.length} /> {this.state.endTime === undefined && (
diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/time_range_selector.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/time_range_selector.js index 20ffba0e11d4c0..4300a918b948f0 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/time_range_selector.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/time_range_selector/time_range_selector.js @@ -9,12 +9,13 @@ import './_time_range_selector.scss'; import PropTypes from 'prop-types'; import React, { Component, useState, useEffect } from 'react'; -import { EuiDatePicker, EuiFieldText } from '@elastic/eui'; +import { EuiDatePicker, EuiFieldText, EuiSpacer } from '@elastic/eui'; import moment from 'moment'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { TIME_FORMAT } from '../../../../../../../common/constants/time_format'; +import { ManagedJobsWarningCallout } from '../../confirm_modals/managed_jobs_warning_callout'; export class TimeRangeSelector extends Component { constructor(props) { @@ -162,6 +163,24 @@ export class TimeRangeSelector extends Component { const { startItems, endItems } = this.getTabItems(); return (
+ {this.props.hasManagedJob === true && this.state.endTab !== 0 ? ( + <> + + + + ) : null}
, callback?: () => void): Promise; +export function closeJobs(jobs: Array<{ id: string }>, callback?: () => void): Promise; export function deleteJobs(jobs: Array<{ id: string }>, callback?: () => void): Promise; export function resetJobs(jobIds: string[], callback?: () => void): Promise; export function loadFullJob(jobId: string): Promise; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx index 492db7c981acc5..0ef0f69b7736eb 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx @@ -44,7 +44,7 @@ export const JobsPage: FC = (props) => { return ( <> - + diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_utils.ts b/x-pack/plugins/ml/public/application/jobs/jobs_utils.ts new file mode 100644 index 00000000000000..103f079b88ff3b --- /dev/null +++ b/x-pack/plugins/ml/public/application/jobs/jobs_utils.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MlJob } from '@elastic/elasticsearch/lib/api/types'; +import { isPopulatedObject } from '../../../common'; +import { MlSummaryJob } from '../../../common/types/anomaly_detection_jobs'; + +export const isManagedJob = (job: MlSummaryJob | MlJob) => { + return ( + (isPopulatedObject(job, ['customSettings']) && job.customSettings.managed === true) || + (isPopulatedObject(job, ['custom_settings']) && job.custom_settings.managed === true) + ); +}; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts b/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts index 9cea7aef2e1177..804a368174c76b 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts @@ -767,6 +767,7 @@ export class JobCreator { this._detectors = this._job_config.analysis_config.detectors; this._influencers = this._job_config.analysis_config.influencers!; + if (this._job_config.groups === undefined) { this._job_config.groups = []; } diff --git a/x-pack/plugins/ml/public/application/routing/breadcrumbs.ts b/x-pack/plugins/ml/public/application/routing/breadcrumbs.ts index ad11c879b29183..051371f6ae8342 100644 --- a/x-pack/plugins/ml/public/application/routing/breadcrumbs.ts +++ b/x-pack/plugins/ml/public/application/routing/breadcrumbs.ts @@ -42,8 +42,8 @@ export const DATA_FRAME_ANALYTICS_BREADCRUMB: ChromeBreadcrumb = Object.freeze({ }); export const TRAINED_MODELS: ChromeBreadcrumb = Object.freeze({ - text: i18n.translate('xpack.ml.trainedModelsLabel', { - defaultMessage: 'Trained Models', + text: i18n.translate('xpack.ml.modelManagementLabel', { + defaultMessage: 'Model Management', }), href: '/trained_models', }); @@ -101,12 +101,16 @@ export const breadcrumbOnClickFactory = ( export const getBreadcrumbWithUrlForApp = ( breadcrumbName: Breadcrumb, - navigateToPath: NavigateToPath, - basePath: string + navigateToPath?: NavigateToPath, + basePath?: string ): EuiBreadcrumb => { return { text: breadcrumbs[breadcrumbName].text, - href: `${basePath}/app/ml${breadcrumbs[breadcrumbName].href}`, - onClick: breadcrumbOnClickFactory(breadcrumbs[breadcrumbName].href, navigateToPath), + ...(navigateToPath && basePath + ? { + href: `${basePath}/app/ml${breadcrumbs[breadcrumbName].href}`, + onClick: breadcrumbOnClickFactory(breadcrumbs[breadcrumbName].href, navigateToPath), + } + : {}), }; }; diff --git a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_creation.tsx b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_creation.tsx index e550eaa338b08b..335b041c816a4e 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_creation.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_creation.tsx @@ -16,7 +16,7 @@ import { MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { Page } from '../../../data_frame_analytics/pages/analytics_creation'; -import { breadcrumbOnClickFactory, getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; +import { getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; import { loadNewJobCapabilities, DATA_FRAME_ANALYTICS, @@ -30,11 +30,11 @@ export const analyticsJobsCreationRouteFactory = ( render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('DATA_FRAME_ANALYTICS_BREADCRUMB', navigateToPath, basePath), { - text: i18n.translate('xpack.ml.dataFrameAnalyticsBreadcrumbs.dataFrameManagementLabel', { - defaultMessage: 'Data Frame Analytics', + text: i18n.translate('xpack.ml.dataFrameAnalyticsBreadcrumbs.dataFrameCreationLabel', { + defaultMessage: 'Create job', }), - onClick: breadcrumbOnClickFactory('/data_frame_analytics', navigateToPath), }, ], }); diff --git a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_exploration.tsx b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_exploration.tsx index 49a756fd12ced5..88502bd86f08cf 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_exploration.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_exploration.tsx @@ -33,7 +33,6 @@ export const analyticsJobExplorationRouteFactory = ( text: i18n.translate('xpack.ml.dataFrameAnalyticsBreadcrumbs.dataFrameExplorationLabel', { defaultMessage: 'Exploration', }), - href: '', }, ], }); diff --git a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx index 6e645e2373dc1d..b62cd749243a4c 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx @@ -6,7 +6,6 @@ */ import React, { FC } from 'react'; -import { i18n } from '@kbn/i18n'; import { NavigateToPath } from '../../../contexts/kibana'; @@ -25,13 +24,7 @@ export const analyticsJobsListRouteFactory = ( render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), - getBreadcrumbWithUrlForApp('DATA_FRAME_ANALYTICS_BREADCRUMB', navigateToPath, basePath), - { - text: i18n.translate('xpack.ml.dataFrameAnalyticsBreadcrumbs.dataFrameListLabel', { - defaultMessage: 'Job Management', - }), - href: '', - }, + getBreadcrumbWithUrlForApp('DATA_FRAME_ANALYTICS_BREADCRUMB'), ], 'data-test-subj': 'mlPageDataFrameAnalytics', enableDatePicker: true, diff --git a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/datavisualizer.tsx b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/datavisualizer.tsx index 1ff37ebe52f1b2..c45d5f94c238f1 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/datavisualizer.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/datavisualizer.tsx @@ -26,7 +26,7 @@ export const selectorRouteFactory = ( render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), - getBreadcrumbWithUrlForApp('DATA_VISUALIZER_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('DATA_VISUALIZER_BREADCRUMB'), ], }); diff --git a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index_based.tsx b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index_based.tsx index b94ee5882ca285..1ae2445e19a1c1 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index_based.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index_based.tsx @@ -25,15 +25,15 @@ export const indexBasedRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - id: 'datavisualizer', + id: 'data_view_datavisualizer', path: '/jobs/new_job/datavisualizer', render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), getBreadcrumbWithUrlForApp('DATA_VISUALIZER_BREADCRUMB', navigateToPath, basePath), { - text: i18n.translate('xpack.ml.dataFrameAnalyticsBreadcrumbs.indexLabel', { - defaultMessage: 'Index', + text: i18n.translate('xpack.ml.dataFrameAnalyticsBreadcrumbs.dataViewLabel', { + defaultMessage: 'Data View', }), href: '', }, diff --git a/x-pack/plugins/ml/public/application/routing/routes/jobs_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/jobs_list.tsx index b3e1208871f951..9b4f020ca1fc33 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/jobs_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/jobs_list.tsx @@ -32,13 +32,7 @@ export const jobListRouteFactory = (navigateToPath: NavigateToPath, basePath: st render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), - getBreadcrumbWithUrlForApp('ANOMALY_DETECTION_BREADCRUMB', navigateToPath, basePath), - { - text: i18n.translate('xpack.ml.anomalyDetection.jobManagementLabel', { - defaultMessage: 'Job Management', - }), - href: '', - }, + getBreadcrumbWithUrlForApp('ANOMALY_DETECTION_BREADCRUMB'), ], 'data-test-subj': 'mlPageJobManagement', enableDatePicker: true, diff --git a/x-pack/plugins/ml/public/application/routing/routes/new_job/index_or_search.tsx b/x-pack/plugins/ml/public/application/routing/routes/new_job/index_or_search.tsx index e92bac32debcbd..69246ad69965a1 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/new_job/index_or_search.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/new_job/index_or_search.tsx @@ -34,13 +34,24 @@ const getBreadcrumbs = (navigateToPath: NavigateToPath, basePath: string) => [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), getBreadcrumbWithUrlForApp('ANOMALY_DETECTION_BREADCRUMB', navigateToPath, basePath), { - text: i18n.translate('xpack.ml.jobsBreadcrumbs.selectIndexOrSearchLabel', { + text: i18n.translate('xpack.ml.jobsBreadcrumbs.createJobLabel', { defaultMessage: 'Create job', }), href: '', }, ]; +const getDataVisBreadcrumbs = (navigateToPath: NavigateToPath, basePath: string) => [ + getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('DATA_VISUALIZER_BREADCRUMB', navigateToPath, basePath), + { + text: i18n.translate('xpack.ml.jobsBreadcrumbs.selectDateViewLabel', { + defaultMessage: 'Data View', + }), + href: '', + }, +]; + export const indexOrSearchRouteFactory = ( navigateToPath: NavigateToPath, basePath: string @@ -61,6 +72,7 @@ export const dataVizIndexOrSearchRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ + id: 'data_view_datavisualizer', path: '/datavisualizer_index_select', render: (props, deps) => ( ), - breadcrumbs: getBreadcrumbs(navigateToPath, basePath), + breadcrumbs: getDataVisBreadcrumbs(navigateToPath, basePath), }); const PageWrapper: FC = ({ nextStepPath, deps, mode }) => { diff --git a/x-pack/plugins/ml/public/application/routing/routes/overview.tsx b/x-pack/plugins/ml/public/application/routing/routes/overview.tsx index 1e3c3c595e6d9b..1a954f72f17e46 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/overview.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/overview.tsx @@ -20,7 +20,7 @@ import { checkGetJobsCapabilitiesResolver } from '../../capabilities/check_capab import { getMlNodeCount } from '../../ml_nodes_check'; import { loadMlServerInfo } from '../../services/ml_server_info'; import { useTimefilter } from '../../contexts/kibana'; -import { breadcrumbOnClickFactory, getBreadcrumbWithUrlForApp } from '../breadcrumbs'; +import { getBreadcrumbWithUrlForApp } from '../breadcrumbs'; const OverviewPage = React.lazy(() => import('../../overview/overview_page')); @@ -41,7 +41,6 @@ export const overviewRouteFactory = ( text: i18n.translate('xpack.ml.overview.overviewLabel', { defaultMessage: 'Overview', }), - onClick: breadcrumbOnClickFactory('/overview', navigateToPath), }, ], 'data-test-subj': 'mlPageOverview', diff --git a/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_list.tsx index 08949d5d514b2b..c70bf6529f6b15 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_list.tsx @@ -30,8 +30,9 @@ export const calendarListRouteFactory = ( render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('ANOMALY_DETECTION_BREADCRUMB', navigateToPath, basePath), getBreadcrumbWithUrlForApp('SETTINGS_BREADCRUMB', navigateToPath, basePath), - getBreadcrumbWithUrlForApp('CALENDAR_MANAGEMENT_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('CALENDAR_MANAGEMENT_BREADCRUMB'), ], }); diff --git a/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_new_edit.tsx b/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_new_edit.tsx index 05f9f92479f45c..ba5c9cf5a337bf 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_new_edit.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_new_edit.tsx @@ -21,7 +21,7 @@ import { } from '../../../capabilities/check_capabilities'; import { checkMlNodesAvailable } from '../../../ml_nodes_check/check_ml_nodes'; import { NewCalendar } from '../../../settings/calendars'; -import { breadcrumbOnClickFactory, getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; +import { getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; import { useCreateAndNavigateToMlLink } from '../../../contexts/kibana/use_create_url'; import { ML_PAGES } from '../../../../../common/constants/locator'; @@ -42,13 +42,13 @@ export const newCalendarRouteFactory = ( render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('ANOMALY_DETECTION_BREADCRUMB', navigateToPath, basePath), getBreadcrumbWithUrlForApp('SETTINGS_BREADCRUMB', navigateToPath, basePath), getBreadcrumbWithUrlForApp('CALENDAR_MANAGEMENT_BREADCRUMB', navigateToPath, basePath), { text: i18n.translate('xpack.ml.settings.breadcrumbs.calendarManagement.createLabel', { defaultMessage: 'Create', }), - onClick: breadcrumbOnClickFactory('/settings/calendars_list/new_calendar', navigateToPath), }, ], }); @@ -67,7 +67,6 @@ export const editCalendarRouteFactory = ( text: i18n.translate('xpack.ml.settings.breadcrumbs.calendarManagement.editLabel', { defaultMessage: 'Edit', }), - onClick: breadcrumbOnClickFactory('/settings/calendars_list/edit_calendar', navigateToPath), }, ], }); diff --git a/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list.tsx index 8e956ecf59d5d5..11599f01e74b9f 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list.tsx @@ -31,8 +31,9 @@ export const filterListRouteFactory = ( render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('ANOMALY_DETECTION_BREADCRUMB', navigateToPath, basePath), getBreadcrumbWithUrlForApp('SETTINGS_BREADCRUMB', navigateToPath, basePath), - getBreadcrumbWithUrlForApp('FILTER_LISTS_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('FILTER_LISTS_BREADCRUMB'), ], }); diff --git a/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list_new_edit.tsx b/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list_new_edit.tsx index cf320632106242..0c372e58e2f98a 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list_new_edit.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list_new_edit.tsx @@ -22,7 +22,7 @@ import { import { checkMlNodesAvailable } from '../../../ml_nodes_check/check_ml_nodes'; import { EditFilterList } from '../../../settings/filter_lists'; -import { breadcrumbOnClickFactory, getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; +import { getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; import { useCreateAndNavigateToMlLink } from '../../../contexts/kibana/use_create_url'; import { ML_PAGES } from '../../../../../common/constants/locator'; @@ -43,14 +43,13 @@ export const newFilterListRouteFactory = ( render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('ANOMALY_DETECTION_BREADCRUMB', navigateToPath, basePath), getBreadcrumbWithUrlForApp('SETTINGS_BREADCRUMB', navigateToPath, basePath), getBreadcrumbWithUrlForApp('FILTER_LISTS_BREADCRUMB', navigateToPath, basePath), - { text: i18n.translate('xpack.ml.settings.breadcrumbs.filterLists.createLabel', { defaultMessage: 'Create', }), - onClick: breadcrumbOnClickFactory('/settings/filter_lists/new', navigateToPath), }, ], }); @@ -69,7 +68,6 @@ export const editFilterListRouteFactory = ( text: i18n.translate('xpack.ml.settings.breadcrumbs.filterLists.editLabel', { defaultMessage: 'Edit', }), - onClick: breadcrumbOnClickFactory('/settings/filter_lists/edit', navigateToPath), }, ], }); diff --git a/x-pack/plugins/ml/public/application/routing/routes/settings/settings.tsx b/x-pack/plugins/ml/public/application/routing/routes/settings/settings.tsx index b3dc387975a083..2611674f0d8690 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/settings/settings.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/settings/settings.tsx @@ -31,7 +31,8 @@ export const settingsRouteFactory = ( render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), - getBreadcrumbWithUrlForApp('SETTINGS_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('ANOMALY_DETECTION_BREADCRUMB', navigateToPath, basePath), + getBreadcrumbWithUrlForApp('SETTINGS_BREADCRUMB'), ], }); diff --git a/x-pack/plugins/ml/public/application/routing/routes/trained_models/models_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/trained_models/models_list.tsx index 1166afb36055d5..0231bca003c876 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/trained_models/models_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/trained_models/models_list.tsx @@ -6,7 +6,6 @@ */ import React, { FC } from 'react'; -import { i18n } from '@kbn/i18n'; import { NavigateToPath } from '../../../contexts/kibana'; import { MlRoute, PageLoader, PageProps } from '../../router'; @@ -24,13 +23,7 @@ export const modelsListRouteFactory = ( render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), - getBreadcrumbWithUrlForApp('TRAINED_MODELS', navigateToPath, basePath), - { - text: i18n.translate('xpack.ml.trainedModelsBreadcrumbs.modelsListLabel', { - defaultMessage: 'Model Management', - }), - href: '', - }, + getBreadcrumbWithUrlForApp('TRAINED_MODELS'), ], enableDatePicker: true, 'data-test-subj': 'mlPageModelManagement', diff --git a/x-pack/plugins/ml/public/application/routing/routes/trained_models/nodes_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/trained_models/nodes_list.tsx index a6f4b4a7ff18a6..2a09aff7c42add 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/trained_models/nodes_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/trained_models/nodes_list.tsx @@ -6,7 +6,6 @@ */ import React, { FC } from 'react'; -import { i18n } from '@kbn/i18n'; import { NavigateToPath, useTimefilter } from '../../../contexts/kibana'; @@ -24,13 +23,7 @@ export const nodesListRouteFactory = ( render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), - getBreadcrumbWithUrlForApp('TRAINED_MODELS', navigateToPath, basePath), - { - text: i18n.translate('xpack.ml.trainedModelsBreadcrumbs.nodesListLabel', { - defaultMessage: 'Nodes Overview', - }), - href: '', - }, + getBreadcrumbWithUrlForApp('TRAINED_MODELS'), ], enableDatePicker: true, }); diff --git a/x-pack/plugins/ml/public/application/services/dashboard_service.test.ts b/x-pack/plugins/ml/public/application/services/dashboard_service.test.ts index 9fb4a22a4942bd..79e2cff4da3022 100644 --- a/x-pack/plugins/ml/public/application/services/dashboard_service.test.ts +++ b/x-pack/plugins/ml/public/application/services/dashboard_service.test.ts @@ -7,30 +7,14 @@ import { dashboardServiceProvider } from './dashboard_service'; import { savedObjectsServiceMock } from '../../../../../../src/core/public/mocks'; -import { DashboardSavedObject } from '../../../../../../src/plugins/dashboard/public/saved_dashboards'; -import { - DashboardUrlGenerator, - SavedDashboardPanel, -} from '../../../../../../src/plugins/dashboard/public'; - -jest.mock('@elastic/eui', () => { - return { - htmlIdGenerator: jest.fn(() => { - return jest.fn(() => 'test-panel-id'); - }), - }; -}); +import type { DashboardAppLocator } from '../../../../../../src/plugins/dashboard/public'; describe('DashboardService', () => { const mockSavedObjectClient = savedObjectsServiceMock.createStartContract().client; const dashboardUrlGenerator = { - createUrl: jest.fn(), - } as unknown as DashboardUrlGenerator; - const dashboardService = dashboardServiceProvider( - mockSavedObjectClient, - '8.0.0', - dashboardUrlGenerator - ); + getUrl: jest.fn(), + } as unknown as DashboardAppLocator; + const dashboardService = dashboardServiceProvider(mockSavedObjectClient, dashboardUrlGenerator); test('should fetch dashboard', () => { // act @@ -44,132 +28,12 @@ describe('DashboardService', () => { }); }); - test('should attach panel to the dashboard', () => { - // act - dashboardService.attachPanels( - 'test-dashboard', - { - title: 'ML Test', - hits: 0, - description: '', - panelsJSON: JSON.stringify([ - { - version: '8.0.0', - type: 'ml_anomaly_swimlane', - gridData: { x: 0, y: 0, w: 24, h: 15, i: 'i63c960b1-ab1b-11ea-809d-f5c60c43347f' }, - panelIndex: 'i63c960b1-ab1b-11ea-809d-f5c60c43347f', - embeddableConfig: { - title: 'Panel test!', - jobIds: ['cw_multi_1'], - swimlaneType: 'overall', - }, - title: 'Panel test!', - }, - { - version: '8.0.0', - type: 'ml_anomaly_swimlane', - gridData: { x: 24, y: 0, w: 24, h: 15, i: '0aa334bd-8308-4ded-9462-80dbd37680ee' }, - panelIndex: '0aa334bd-8308-4ded-9462-80dbd37680ee', - embeddableConfig: { - title: 'ML anomaly swim lane for fb_population_1', - jobIds: ['fb_population_1'], - limit: 5, - swimlaneType: 'overall', - }, - title: 'ML anomaly swim lane for fb_population_1', - }, - { - version: '8.0.0', - gridData: { x: 0, y: 15, w: 24, h: 15, i: 'abd36eb7-4774-4216-891e-12100752b46d' }, - panelIndex: 'abd36eb7-4774-4216-891e-12100752b46d', - embeddableConfig: {}, - panelRefName: 'panel_2', - }, - ]), - optionsJSON: '{"hidePanelTitles":false,"useMargins":true}', - version: 1, - timeRestore: false, - kibanaSavedObjectMeta: { - searchSourceJSON: '{"query":{"language":"kuery","query":""},"filter":[]}', - }, - } as unknown as DashboardSavedObject, - [{ title: 'Test title', type: 'test-panel', embeddableConfig: { testConfig: '' } }] - ); - // assert - expect(mockSavedObjectClient.update).toHaveBeenCalledWith('dashboard', 'test-dashboard', { - title: 'ML Test', - hits: 0, - description: '', - panelsJSON: JSON.stringify([ - { - version: '8.0.0', - type: 'ml_anomaly_swimlane', - gridData: { x: 0, y: 0, w: 24, h: 15, i: 'i63c960b1-ab1b-11ea-809d-f5c60c43347f' }, - panelIndex: 'i63c960b1-ab1b-11ea-809d-f5c60c43347f', - embeddableConfig: { - title: 'Panel test!', - jobIds: ['cw_multi_1'], - swimlaneType: 'overall', - }, - title: 'Panel test!', - }, - { - version: '8.0.0', - type: 'ml_anomaly_swimlane', - gridData: { x: 24, y: 0, w: 24, h: 15, i: '0aa334bd-8308-4ded-9462-80dbd37680ee' }, - panelIndex: '0aa334bd-8308-4ded-9462-80dbd37680ee', - embeddableConfig: { - title: 'ML anomaly swim lane for fb_population_1', - jobIds: ['fb_population_1'], - limit: 5, - swimlaneType: 'overall', - }, - title: 'ML anomaly swim lane for fb_population_1', - }, - { - version: '8.0.0', - gridData: { x: 0, y: 15, w: 24, h: 15, i: 'abd36eb7-4774-4216-891e-12100752b46d' }, - panelIndex: 'abd36eb7-4774-4216-891e-12100752b46d', - embeddableConfig: {}, - panelRefName: 'panel_2', - }, - { - panelIndex: 'test-panel-id', - embeddableConfig: { testConfig: '' }, - title: 'Test title', - type: 'test-panel', - version: '8.0.0', - gridData: { h: 15, i: 'test-panel-id', w: 24, x: 24, y: 15 }, - }, - ]), - optionsJSON: '{"hidePanelTitles":false,"useMargins":true}', - version: 1, - timeRestore: false, - kibanaSavedObjectMeta: { - searchSourceJSON: '{"query":{"language":"kuery","query":""},"filter":[]}', - }, - }); - }); - test('should generate edit url to the dashboard', () => { dashboardService.getDashboardEditUrl('test-id'); - expect(dashboardUrlGenerator.createUrl).toHaveBeenCalledWith({ + expect(dashboardUrlGenerator.getUrl).toHaveBeenCalledWith({ dashboardId: 'test-id', useHash: false, viewMode: 'edit', }); }); - - test('should find the panel positioned at the end', () => { - expect( - dashboardService.getLastPanel([ - { gridData: { y: 15, x: 7 } }, - { gridData: { y: 17, x: 9 } }, - { gridData: { y: 15, x: 1 } }, - { gridData: { y: 17, x: 10 } }, - { gridData: { y: 15, x: 22 } }, - { gridData: { y: 17, x: 9 } }, - ] as SavedDashboardPanel[]) - ).toEqual({ gridData: { y: 17, x: 10 } }); - }); }); diff --git a/x-pack/plugins/ml/public/application/services/dashboard_service.ts b/x-pack/plugins/ml/public/application/services/dashboard_service.ts index b010ea1e8631e6..f8eb23eae9f4c4 100644 --- a/x-pack/plugins/ml/public/application/services/dashboard_service.ts +++ b/x-pack/plugins/ml/public/application/services/dashboard_service.ts @@ -6,13 +6,10 @@ */ import { SavedObjectsClientContract } from 'kibana/public'; -import { htmlIdGenerator } from '@elastic/eui'; import { useMemo } from 'react'; import { - DASHBOARD_APP_URL_GENERATOR, - DashboardUrlGenerator, - SavedDashboardPanel, DashboardSavedObject, + DashboardAppLocator, } from '../../../../../../src/plugins/dashboard/public'; import { useMlKibana } from '../contexts/kibana'; import { ViewMode } from '../../../../../../src/plugins/embeddable/public'; @@ -21,13 +18,8 @@ export type DashboardService = ReturnType; export function dashboardServiceProvider( savedObjectClient: SavedObjectsClientContract, - kibanaVersion: string, - dashboardUrlGenerator: DashboardUrlGenerator + dashboardLocator: DashboardAppLocator ) { - const generateId = htmlIdGenerator(); - const DEFAULT_PANEL_WIDTH = 24; - const DEFAULT_PANEL_HEIGHT = 15; - return { /** * Fetches dashboards @@ -40,75 +32,14 @@ export function dashboardServiceProvider( searchFields: ['title^3', 'description'], }); }, - /** - * Resolves the last positioned panel from the collection. - */ - getLastPanel(panels: SavedDashboardPanel[]): SavedDashboardPanel | null { - return panels.length > 0 - ? panels.reduce((prev, current) => - prev.gridData.y >= current.gridData.y - ? prev.gridData.y === current.gridData.y - ? prev.gridData.x > current.gridData.x - ? prev - : current - : prev - : current - ) - : null; - }, - /** - * Attaches embeddable panels to the dashboard - */ - async attachPanels( - dashboardId: string, - dashboardAttributes: DashboardSavedObject, - panelsData: Array> - ) { - const panels = JSON.parse(dashboardAttributes.panelsJSON) as SavedDashboardPanel[]; - const version = kibanaVersion; - const rowWidth = DEFAULT_PANEL_WIDTH * 2; - - for (const panelData of panelsData) { - const panelIndex = generateId(); - const lastPanel = this.getLastPanel(panels); - - const xOffset = lastPanel ? lastPanel.gridData.w + lastPanel.gridData.x : 0; - const availableRowSpace = rowWidth - xOffset; - const xPosition = availableRowSpace - DEFAULT_PANEL_WIDTH >= 0 ? xOffset : 0; - - panels.push({ - panelIndex, - embeddableConfig: panelData.embeddableConfig as { [key: string]: any }, - title: panelData.title, - type: panelData.type, - version, - gridData: { - h: DEFAULT_PANEL_HEIGHT, - i: panelIndex, - w: DEFAULT_PANEL_WIDTH, - x: xPosition, - y: lastPanel - ? xPosition > 0 - ? lastPanel.gridData.y - : lastPanel.gridData.y + lastPanel.gridData.h - : 0, - }, - }); - } - - await savedObjectClient.update('dashboard', dashboardId, { - ...dashboardAttributes, - panelsJSON: JSON.stringify(panels), - }); - }, /** * Generates dashboard url with edit mode */ async getDashboardEditUrl(dashboardId: string) { - return await dashboardUrlGenerator.createUrl({ + return await dashboardLocator.getUrl({ dashboardId, - useHash: false, viewMode: ViewMode.EDIT, + useHash: false, }); }, }; @@ -121,17 +52,12 @@ export function useDashboardService(): DashboardService { const { services: { savedObjects: { client: savedObjectClient }, - kibanaVersion, - share: { urlGenerators }, + dashboard: { locator: dashboardLocator }, }, } = useMlKibana(); + return useMemo( - () => - dashboardServiceProvider( - savedObjectClient, - kibanaVersion, - urlGenerators.getUrlGenerator(DASHBOARD_APP_URL_GENERATOR) - ), - [savedObjectClient, kibanaVersion] + () => dashboardServiceProvider(savedObjectClient, dashboardLocator!), + [savedObjectClient, dashboardLocator] ); } diff --git a/x-pack/plugins/ml/public/application/trained_models/models_management/models_list.tsx b/x-pack/plugins/ml/public/application/trained_models/models_management/models_list.tsx index 8b387e60ffce74..8bafabf35e1d5f 100644 --- a/x-pack/plugins/ml/public/application/trained_models/models_management/models_list.tsx +++ b/x-pack/plugins/ml/public/application/trained_models/models_management/models_list.tsx @@ -8,7 +8,6 @@ import React, { FC, useCallback, useEffect, useMemo, useState } from 'react'; import { EuiBadge, - EuiBetaBadge, EuiButton, EuiButtonIcon, EuiFlexGroup, @@ -50,7 +49,6 @@ import { FIELD_FORMAT_IDS } from '../../../../../../../src/plugins/field_formats import { useRefresh } from '../../routing/use_refresh'; import { DEPLOYMENT_STATE } from '../../../../common/constants/trained_models'; import { getUserConfirmationProvider } from './force_stop_dialog'; -import { MlPageHeader } from '../../components/page_header'; type Stats = Omit; @@ -687,30 +685,6 @@ export const ModelsList: FC = () => { return ( <> - - - - - - - - - - {modelsStats && ( diff --git a/x-pack/plugins/ml/public/application/trained_models/navigation_bar.tsx b/x-pack/plugins/ml/public/application/trained_models/navigation_bar.tsx index ec91499bdb7223..f32748e5d0c996 100644 --- a/x-pack/plugins/ml/public/application/trained_models/navigation_bar.tsx +++ b/x-pack/plugins/ml/public/application/trained_models/navigation_bar.tsx @@ -29,7 +29,7 @@ export const TrainedModelsNavigationBar: FC<{ { id: 'trained_models', name: i18n.translate('xpack.ml.trainedModels.modelsTabLabel', { - defaultMessage: 'Models', + defaultMessage: 'Trained Models', }), path: '/trained_models', testSubj: 'mlTrainedModelsTab', @@ -39,7 +39,7 @@ export const TrainedModelsNavigationBar: FC<{ { id: 'nodes', name: i18n.translate('xpack.ml.trainedModels.nodesTabLabel', { - defaultMessage: 'Nodes', + defaultMessage: 'Nodes Overview', }), path: '/trained_models/nodes', testSubj: 'mlNodesOverviewTab', diff --git a/x-pack/plugins/ml/public/application/trained_models/page.tsx b/x-pack/plugins/ml/public/application/trained_models/page.tsx index 493638f1a5febb..998bc7c0c01cc8 100644 --- a/x-pack/plugins/ml/public/application/trained_models/page.tsx +++ b/x-pack/plugins/ml/public/application/trained_models/page.tsx @@ -6,8 +6,10 @@ */ import React, { FC, useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { useLocation } from 'react-router-dom'; +import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { ModelsList } from './models_management'; import { TrainedModelsNavigationBar } from './navigation_bar'; import { NodesList } from './nodes_overview'; @@ -19,19 +21,37 @@ export const Page: FC = () => { return ( <> - - {selectedTabId === 'trained_models' ? : null} - {selectedTabId === 'nodes' ? ( - <> - + + + + + + - - - - ) : null} + + + + + + {selectedTabId === 'trained_models' ? : null} + {selectedTabId === 'nodes' ? : null} ); }; diff --git a/x-pack/plugins/ml/public/embeddables/constants.ts b/x-pack/plugins/ml/public/embeddables/constants.ts index 8307eeda23ec6b..afa851e9766e77 100644 --- a/x-pack/plugins/ml/public/embeddables/constants.ts +++ b/x-pack/plugins/ml/public/embeddables/constants.ts @@ -5,5 +5,5 @@ * 2.0. */ -export const ANOMALY_SWIMLANE_EMBEDDABLE_TYPE = 'ml_anomaly_swimlane'; -export const ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE = 'ml_anomaly_charts'; +export const ANOMALY_SWIMLANE_EMBEDDABLE_TYPE = 'ml_anomaly_swimlane' as const; +export const ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE = 'ml_anomaly_charts' as const; diff --git a/x-pack/plugins/ml/public/plugin.ts b/x-pack/plugins/ml/public/plugin.ts index 59419303d7a6f5..2a5cb2ab4ae2af 100644 --- a/x-pack/plugins/ml/public/plugin.ts +++ b/x-pack/plugins/ml/public/plugin.ts @@ -49,6 +49,7 @@ import type { FieldFormatsSetup, FieldFormatsStart, } from '../../../../src/plugins/field_formats/public'; +import type { DashboardSetup, DashboardStart } from '../../../../src/plugins/dashboard/public'; export interface MlStartDependencies { data: DataPublicPluginStart; @@ -60,6 +61,7 @@ export interface MlStartDependencies { triggersActionsUi?: TriggersAndActionsUIPublicPluginStart; dataVisualizer: DataVisualizerPluginStart; fieldFormats: FieldFormatsStart; + dashboard: DashboardStart; } export interface MlSetupDependencies { @@ -76,6 +78,7 @@ export interface MlSetupDependencies { alerting?: AlertingSetup; usageCollection?: UsageCollectionSetup; fieldFormats: FieldFormatsSetup; + dashboard: DashboardSetup; } export type MlCoreSetup = CoreSetup; @@ -120,6 +123,7 @@ export class MlPlugin implements Plugin { dataVisualizer: pluginsStart.dataVisualizer, usageCollection: pluginsSetup.usageCollection, fieldFormats: pluginsStart.fieldFormats, + dashboard: pluginsStart.dashboard, }, params ); diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/apm_transaction/ml/apm_tx_metrics.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/apm_transaction/ml/apm_tx_metrics.json index f93b4fb009a143..9f67527ba677da 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/apm_transaction/ml/apm_tx_metrics.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/apm_transaction/ml/apm_tx_metrics.json @@ -48,6 +48,7 @@ }, "results_index_name" : "custom-apm", "custom_settings": { - "created_by": "ml-module-apm-transaction" + "created_by": "ml-module-apm-transaction", + "managed": true } } diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_analysis/ml/log_entry_rate.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_analysis/ml/log_entry_rate.json index 42ba15591e5c4c..0cd99ae71765da 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_analysis/ml/log_entry_rate.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_analysis/ml/log_entry_rate.json @@ -25,6 +25,7 @@ "enabled": true }, "custom_settings": { + "managed": true, "created_by": "ml-module-logs-ui-analysis", "job_revision": 2 } diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_categories/ml/log_entry_categories_count.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_categories/ml/log_entry_categories_count.json index 90f88275cb6d0b..74f434f36e4ed5 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_categories/ml/log_entry_categories_count.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_categories/ml/log_entry_categories_count.json @@ -37,6 +37,7 @@ "enabled": true }, "custom_settings": { + "managed": true, "created_by": "ml-module-logs-ui-categories", "job_revision": 2 } diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_memory_usage.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_memory_usage.json index c5f62105613ba7..07f2c7fe9a927b 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_memory_usage.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_memory_usage.json @@ -39,6 +39,7 @@ "model_memory_limit": "64mb" }, "custom_settings": { + "managed": true, "created_by": "ml-module-metrics-ui-hosts", "custom_urls": [ { diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_in.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_in.json index 258fb87f5260c7..6025777e49d056 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_in.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_in.json @@ -26,6 +26,7 @@ "model_memory_limit": "32mb" }, "custom_settings": { + "managed": true, "created_by": "ml-module-metrics-ui-hosts", "custom_urls": [ { diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_out.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_out.json index 381bc09bac46c3..95b3950dfc35a6 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_out.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_out.json @@ -26,6 +26,7 @@ "model_memory_limit": "32mb" }, "custom_settings": { + "managed": true, "created_by": "ml-module-metrics-ui-hosts", "custom_urls": [ { diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_memory_usage.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_memory_usage.json index ef57612e9f90ee..8b76b328a05dbb 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_memory_usage.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_memory_usage.json @@ -42,6 +42,7 @@ "model_memory_limit": "64mb" }, "custom_settings": { + "managed": true, "created_by": "ml-module-metrics-ui-k8s", "custom_urls": [ { diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_in.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_in.json index 91f855a59add59..de591577d2d351 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_in.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_in.json @@ -28,6 +28,7 @@ "model_memory_limit": "32mb" }, "custom_settings": { + "managed": true, "created_by": "ml-module-metrics-ui-k8s", "custom_urls": [ { diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_out.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_out.json index e68866a655acf2..61ce7b25eacc08 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_out.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_out.json @@ -28,6 +28,7 @@ "model_memory_limit": "32mb" }, "custom_settings": { + "managed": true, "created_by": "ml-module-metrics-ui-k8s", "custom_urls": [ { diff --git a/x-pack/plugins/ml/server/models/job_service/jobs.ts b/x-pack/plugins/ml/server/models/job_service/jobs.ts index ffc07e06db0f93..a79093caabbefc 100644 --- a/x-pack/plugins/ml/server/models/job_service/jobs.ts +++ b/x-pack/plugins/ml/server/models/job_service/jobs.ts @@ -220,6 +220,7 @@ export function jobsProvider( const tempJob: MlSummaryJob = { id: job.job_id, description: job.description || '', + customSettings: job.custom_settings, groups: Array.isArray(job.groups) ? job.groups.sort() : [], processed_record_count: job.data_counts?.processed_record_count, earliestStartTimestampMs: getEarliestDatafeedStartTime( @@ -319,12 +320,19 @@ export function jobsProvider( if (jobResults && jobResults.jobs) { const job = jobResults.jobs.find((j) => j.job_id === jobId); if (job) { + removeUnClonableCustomSettings(job); result.job = job; } } return result; } + function removeUnClonableCustomSettings(job: Job) { + if (isPopulatedObject(job.custom_settings)) { + delete job.custom_settings.managed; + } + } + async function createFullJobsList(jobIds: string[] = []) { const jobs: CombinedJobWithStats[] = []; const groups: { [jobId: string]: string[] } = {}; diff --git a/x-pack/plugins/ml/server/routes/schemas/runtime_mappings_schema.ts b/x-pack/plugins/ml/server/routes/schemas/runtime_mappings_schema.ts index 36d4ba8cee5e9d..31d8d615c8e33d 100644 --- a/x-pack/plugins/ml/server/routes/schemas/runtime_mappings_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/runtime_mappings_schema.ts @@ -6,6 +6,7 @@ */ import { schema } from '@kbn/config-schema'; +import { i18n } from '@kbn/i18n'; import { isRuntimeField } from '../../../common/util/runtime_field_utils'; export const runtimeMappingsSchema = schema.object( @@ -14,7 +15,9 @@ export const runtimeMappingsSchema = schema.object( unknowns: 'allow', validate: (v: object) => { if (Object.values(v).some((o) => !isRuntimeField(o))) { - return 'Invalid runtime field'; + return i18n.translate('xpack.ml.invalidRuntimeFieldMessage', { + defaultMessage: 'Invalid runtime field', + }); } }, } diff --git a/x-pack/plugins/observability/common/index.ts b/x-pack/plugins/observability/common/index.ts index 03860fd3cd1227..4f303390e1e1b2 100644 --- a/x-pack/plugins/observability/common/index.ts +++ b/x-pack/plugins/observability/common/index.ts @@ -10,6 +10,7 @@ export { enableInspectEsQueries, maxSuggestions, enableComparisonByDefault, + enableInfrastructureView, } from './ui_settings_keys'; export const casesFeatureId = 'observabilityCases'; diff --git a/x-pack/plugins/observability/common/ui_settings_keys.ts b/x-pack/plugins/observability/common/ui_settings_keys.ts index 4d34e216a017c0..ea8a2f20ea4e78 100644 --- a/x-pack/plugins/observability/common/ui_settings_keys.ts +++ b/x-pack/plugins/observability/common/ui_settings_keys.ts @@ -8,3 +8,4 @@ export const enableInspectEsQueries = 'observability:enableInspectEsQueries'; export const maxSuggestions = 'observability:maxSuggestions'; export const enableComparisonByDefault = 'observability:enableComparisonByDefault'; +export const enableInfrastructureView = 'observability:enableInfrastructureView'; diff --git a/x-pack/plugins/observability/kibana.json b/x-pack/plugins/observability/kibana.json index 343e16f4a4095b..8074462fd90aa4 100644 --- a/x-pack/plugins/observability/kibana.json +++ b/x-pack/plugins/observability/kibana.json @@ -31,5 +31,5 @@ ], "ui": true, "server": true, - "requiredBundles": ["data", "kibanaReact", "kibanaUtils"] + "requiredBundles": ["data", "dataViews", "kibanaReact", "kibanaUtils"] } diff --git a/x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/index.tsx b/x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/index.tsx index e68ddfe55e6f50..7b0e2d10c0d3bc 100644 --- a/x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/index.tsx +++ b/x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/index.tsx @@ -9,7 +9,7 @@ import React, { useCallback, useEffect, useState } from 'react'; import { EuiLoadingSpinner } from '@elastic/eui'; import { CoreStart } from 'kibana/public'; import type { ExploratoryEmbeddableProps, ExploratoryEmbeddableComponentProps } from './embeddable'; -import { ObservabilityIndexPatterns } from '../utils/observability_index_patterns'; +import { ObservabilityDataViews } from '../../../../utils/observability_data_views'; import { ObservabilityPublicPluginsStart } from '../../../../plugin'; import type { IndexPatternState } from '../hooks/use_app_index_pattern'; import { EuiThemeProvider } from '../../../../../../../../src/plugins/kibana_react/common'; @@ -43,8 +43,8 @@ export function getExploratoryViewEmbeddable( setLoading(true); try { - const obsvIndexP = new ObservabilityIndexPatterns(plugins.data); - const indPattern = await obsvIndexP.getIndexPattern( + const obsvIndexP = new ObservabilityDataViews(plugins.data); + const indPattern = await obsvIndexP.getDataView( dataType, dataTypesIndexPatterns?.[dataType] ); diff --git a/x-pack/plugins/observability/public/components/shared/exploratory_view/exploratory_view.test.tsx b/x-pack/plugins/observability/public/components/shared/exploratory_view/exploratory_view.test.tsx index 87ae00b3c72e75..458bcc0ea4a5f9 100644 --- a/x-pack/plugins/observability/public/components/shared/exploratory_view/exploratory_view.test.tsx +++ b/x-pack/plugins/observability/public/components/shared/exploratory_view/exploratory_view.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { screen } from '@testing-library/dom'; import { render, mockAppIndexPattern } from './rtl_helpers'; import { ExploratoryView } from './exploratory_view'; -import * as obsvInd from './utils/observability_index_patterns'; +import * as obsvDataViews from '../../../utils/observability_data_views/observability_data_views'; import * as pluginHook from '../../../hooks/use_plugin_context'; import { createStubIndexPattern } from '../../../../../../../src/plugins/data/common/stubs'; @@ -40,8 +40,8 @@ describe('ExploratoryView', () => { }, }); - jest.spyOn(obsvInd, 'ObservabilityIndexPatterns').mockReturnValue({ - getIndexPattern: jest.fn().mockReturnValue(indexPattern), + jest.spyOn(obsvDataViews, 'ObservabilityDataViews').mockReturnValue({ + getDataView: jest.fn().mockReturnValue(indexPattern), } as any); }); diff --git a/x-pack/plugins/observability/public/components/shared/exploratory_view/hooks/use_app_index_pattern.tsx b/x-pack/plugins/observability/public/components/shared/exploratory_view/hooks/use_app_index_pattern.tsx index c957d239ea278b..c865d8e6dca5e0 100644 --- a/x-pack/plugins/observability/public/components/shared/exploratory_view/hooks/use_app_index_pattern.tsx +++ b/x-pack/plugins/observability/public/components/shared/exploratory_view/hooks/use_app_index_pattern.tsx @@ -11,9 +11,10 @@ import { IndexPattern } from '../../../../../../../../src/plugins/data/common'; import { AppDataType } from '../types'; import { useKibana } from '../../../../../../../../src/plugins/kibana_react/public'; import { ObservabilityPublicPluginsStart } from '../../../../plugin'; -import { ObservabilityIndexPatterns } from '../utils/observability_index_patterns'; +import { ObservabilityDataViews } from '../../../../utils/observability_data_views'; import { getDataHandler } from '../../../../data_handler'; import { useExploratoryView } from '../contexts/exploratory_view_config'; +import { DataViewInsufficientAccessError } from '../../../../../../../../src/plugins/data_views/common'; export interface IndexPatternContext { loading: boolean; @@ -82,14 +83,17 @@ export function IndexPatternContextProvider({ children }: ProviderProps) { setHasAppData((prevState) => ({ ...prevState, [dataType]: hasDataT })); if (hasDataT && indices) { - const obsvIndexP = new ObservabilityIndexPatterns(data); - const indPattern = await obsvIndexP.getIndexPattern(dataType, indices); + const obsvIndexP = new ObservabilityDataViews(data); + const indPattern = await obsvIndexP.getDataView(dataType, indices); setIndexPatterns((prevState) => ({ ...prevState, [dataType]: indPattern })); } setLoading((prevState) => ({ ...prevState, [dataType]: false })); } catch (e) { - if ((e as HttpFetchError).body.error === 'Forbidden') { + if ( + e instanceof DataViewInsufficientAccessError || + (e as HttpFetchError).body === 'Forbidden' + ) { setIndexPatternErrors((prevState) => ({ ...prevState, [dataType]: e })); } setLoading((prevState) => ({ ...prevState, [dataType]: false })); diff --git a/x-pack/plugins/observability/public/components/shared/exploratory_view/series_editor/report_metric_options.tsx b/x-pack/plugins/observability/public/components/shared/exploratory_view/series_editor/report_metric_options.tsx index 5eec147379d25b..0aec19dc572b7d 100644 --- a/x-pack/plugins/observability/public/components/shared/exploratory_view/series_editor/report_metric_options.tsx +++ b/x-pack/plugins/observability/public/components/shared/exploratory_view/series_editor/report_metric_options.tsx @@ -89,7 +89,8 @@ export function ReportMetricOptions({ seriesId, series, seriesConfig }: Props) { // TODO: Add a link to docs to explain how to add index patterns return ( - {indexPatternError.body.error === 'Forbidden' + {indexPatternError.body?.error === 'Forbidden' || + indexPatternError.name === 'DataViewInsufficientAccessError' ? NO_PERMISSIONS : indexPatternError.body.message} diff --git a/x-pack/plugins/observability/public/index.ts b/x-pack/plugins/observability/public/index.ts index e502cf7fb37e0c..d855d0178192ed 100644 --- a/x-pack/plugins/observability/public/index.ts +++ b/x-pack/plugins/observability/public/index.ts @@ -23,7 +23,11 @@ export type { ObservabilityPublicPluginsSetup, ObservabilityPublicPluginsStart, }; -export { enableInspectEsQueries } from '../common/ui_settings_keys'; +export { + enableInspectEsQueries, + enableComparisonByDefault, + enableInfrastructureView, +} from '../common/ui_settings_keys'; export { uptimeOverviewLocatorID } from '../common'; export interface ConfigSchema { @@ -94,7 +98,6 @@ export type { AddInspectorRequest } from './context/inspector/inspector_context' export { InspectorContextProvider } from './context/inspector/inspector_context'; export { useInspectorContext } from './context/inspector/use_inspector_context'; -export { enableComparisonByDefault } from '../common/ui_settings_keys'; export type { SeriesConfig, ConfigProps } from './components/shared/exploratory_view/types'; export { ReportTypes, diff --git a/x-pack/plugins/observability/public/utils/observability_data_views/index.ts b/x-pack/plugins/observability/public/utils/observability_data_views/index.ts new file mode 100644 index 00000000000000..571f5ea4c11a25 --- /dev/null +++ b/x-pack/plugins/observability/public/utils/observability_data_views/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './observability_data_views'; diff --git a/x-pack/plugins/observability/public/components/shared/exploratory_view/utils/observability_index_patterns.test.ts b/x-pack/plugins/observability/public/utils/observability_data_views/observability_data_views.test.ts similarity index 81% rename from x-pack/plugins/observability/public/components/shared/exploratory_view/utils/observability_index_patterns.test.ts rename to x-pack/plugins/observability/public/utils/observability_data_views/observability_data_views.test.ts index a8c5c1a0a3b79e..78899e9cabca0e 100644 --- a/x-pack/plugins/observability/public/components/shared/exploratory_view/utils/observability_index_patterns.test.ts +++ b/x-pack/plugins/observability/public/utils/observability_data_views/observability_data_views.test.ts @@ -5,9 +5,9 @@ * 2.0. */ -import { indexPatternList, ObservabilityIndexPatterns } from './observability_index_patterns'; -import { mockCore, mockIndexPattern } from '../rtl_helpers'; -import { SavedObjectNotFound } from '../../../../../../../../src/plugins/kibana_utils/public'; +import { dataViewList, ObservabilityDataViews } from './observability_data_views'; +import { mockCore, mockIndexPattern } from '../../components/shared/exploratory_view/rtl_helpers'; +import { SavedObjectNotFound } from '../../../../../../src/plugins/kibana_utils/public'; const fieldFormats = { 'transaction.duration.us': { @@ -70,13 +70,13 @@ const fieldFormats = { describe('ObservabilityIndexPatterns', function () { const { data } = mockCore(); data!.indexPatterns.get = jest.fn().mockReturnValue({ title: 'index-*' }); - data!.indexPatterns.createAndSave = jest.fn().mockReturnValue({ id: indexPatternList.ux }); + data!.indexPatterns.createAndSave = jest.fn().mockReturnValue({ id: dataViewList.ux }); data!.indexPatterns.updateSavedObject = jest.fn(); it('should return index pattern for app', async function () { - const obsv = new ObservabilityIndexPatterns(data!); + const obsv = new ObservabilityDataViews(data!); - const indexP = await obsv.getIndexPattern('ux', 'heartbeat-8*,synthetics-*'); + const indexP = await obsv.getDataView('ux', 'heartbeat-8*,synthetics-*'); expect(indexP).toEqual({ id: 'rum_static_index_pattern_id' }); @@ -91,13 +91,13 @@ describe('ObservabilityIndexPatterns', function () { throw new SavedObjectNotFound('index_pattern'); }); - data!.indexPatterns.createAndSave = jest.fn().mockReturnValue({ id: indexPatternList.ux }); + data!.indexPatterns.createAndSave = jest.fn().mockReturnValue({ id: dataViewList.ux }); - const obsv = new ObservabilityIndexPatterns(data!); + const obsv = new ObservabilityDataViews(data!); - const indexP = await obsv.getIndexPattern('ux', 'trace-*,apm-*'); + const indexP = await obsv.getDataView('ux', 'trace-*,apm-*'); - expect(indexP).toEqual({ id: indexPatternList.ux }); + expect(indexP).toEqual({ id: dataViewList.ux }); expect(data?.indexPatterns.createAndSave).toHaveBeenCalledWith({ fieldFormats, @@ -110,7 +110,7 @@ describe('ObservabilityIndexPatterns', function () { }); it('should return getFieldFormats', function () { - const obsv = new ObservabilityIndexPatterns(data!); + const obsv = new ObservabilityDataViews(data!); expect(obsv.getFieldFormats('ux')).toEqual(fieldFormats); }); @@ -118,7 +118,7 @@ describe('ObservabilityIndexPatterns', function () { it('should validate field formats', async function () { mockIndexPattern.getFormatterForField = jest.fn().mockReturnValue({ params: () => {} }); - const obsv = new ObservabilityIndexPatterns(data!); + const obsv = new ObservabilityDataViews(data!); await obsv.validateFieldFormats('ux', mockIndexPattern); diff --git a/x-pack/plugins/observability/public/components/shared/exploratory_view/utils/observability_index_patterns.ts b/x-pack/plugins/observability/public/utils/observability_data_views/observability_data_views.ts similarity index 63% rename from x-pack/plugins/observability/public/components/shared/exploratory_view/utils/observability_index_patterns.ts rename to x-pack/plugins/observability/public/utils/observability_data_views/observability_data_views.ts index b35acaae6fe80c..eb66894772dfd8 100644 --- a/x-pack/plugins/observability/public/components/shared/exploratory_view/utils/observability_index_patterns.ts +++ b/x-pack/plugins/observability/public/utils/observability_data_views/observability_data_views.ts @@ -6,18 +6,19 @@ */ import type { FieldFormat as IFieldFormat } from 'src/plugins/field_formats/common'; -import { SavedObjectNotFound } from '../../../../../../../../src/plugins/kibana_utils/public'; +import { SavedObjectNotFound } from '../../../../../../src/plugins/kibana_utils/public'; +import { DataPublicPluginStart } from '../../../../../../src/plugins/data/public'; +import type { DataView, DataViewSpec } from '../../../../../../src/plugins/data/common'; +import { rumFieldFormats } from '../../components/shared/exploratory_view/configurations/rum/field_formats'; +import { syntheticsFieldFormats } from '../../components/shared/exploratory_view/configurations/synthetics/field_formats'; import { - DataPublicPluginStart, - IndexPattern, - IndexPatternSpec, -} from '../../../../../../../../src/plugins/data/public'; -import { rumFieldFormats } from '../configurations/rum/field_formats'; -import { syntheticsFieldFormats } from '../configurations/synthetics/field_formats'; -import { AppDataType, FieldFormat, FieldFormatParams } from '../types'; -import { apmFieldFormats } from '../configurations/apm/field_formats'; -import { getDataHandler } from '../../../../data_handler'; -import { infraMetricsFieldFormats } from '../configurations/infra_metrics/field_formats'; + AppDataType, + FieldFormat, + FieldFormatParams, +} from '../../components/shared/exploratory_view/types'; +import { apmFieldFormats } from '../../components/shared/exploratory_view/configurations/apm/field_formats'; +import { getDataHandler } from '../../data_handler'; +import { infraMetricsFieldFormats } from '../../components/shared/exploratory_view/configurations/infra_metrics/field_formats'; const appFieldFormats: Record = { infra_logs: null, @@ -32,7 +33,7 @@ function getFieldFormatsForApp(app: AppDataType) { return appFieldFormats[app]; } -export const indexPatternList: Record = { +export const dataViewList: Record = { synthetics: 'synthetics_static_index_pattern_id', apm: 'apm_static_index_pattern_id', ux: 'rum_static_index_pattern_id', @@ -54,11 +55,11 @@ const getAppIndicesWithPattern = (app: AppDataType, indices: string) => { return `${appToPatternMap?.[app] ?? app},${indices}`; }; -const getAppIndexPatternId = (app: AppDataType, indices: string) => { +const getAppDataViewId = (app: AppDataType, indices: string) => { // Replace characters / ? , " < > | * with _ const postfix = indices.replace(/[^A-Z0-9]+/gi, '_').toLowerCase(); - return `${indexPatternList?.[app] ?? app}_${postfix}`; + return `${dataViewList?.[app] ?? app}_${postfix}`; }; export function isParamsSame(param1: IFieldFormat['_params'], param2: FieldFormatParams) { @@ -75,50 +76,50 @@ export function isParamsSame(param1: IFieldFormat['_params'], param2: FieldForma return isSame; } -export class ObservabilityIndexPatterns { +export class ObservabilityDataViews { data?: DataPublicPluginStart; constructor(data: DataPublicPluginStart) { this.data = data; } - async createIndexPattern(app: AppDataType, indices: string) { + async createDataView(app: AppDataType, indices: string) { if (!this.data) { throw new Error('data is not defined'); } const appIndicesPattern = getAppIndicesWithPattern(app, indices); - return await this.data.indexPatterns.createAndSave({ + return await this.data.dataViews.createAndSave({ title: appIndicesPattern, - id: getAppIndexPatternId(app, indices), + id: getAppDataViewId(app, indices), timeFieldName: '@timestamp', fieldFormats: this.getFieldFormats(app), }); } // we want to make sure field formats remain same - async validateFieldFormats(app: AppDataType, indexPattern: IndexPattern) { + async validateFieldFormats(app: AppDataType, dataView: DataView) { const defaultFieldFormats = getFieldFormatsForApp(app); if (defaultFieldFormats && defaultFieldFormats.length > 0) { let isParamsDifferent = false; defaultFieldFormats.forEach(({ field, format }) => { - const fieldByName = indexPattern.getFieldByName(field); + const fieldByName = dataView.getFieldByName(field); if (fieldByName) { - const fieldFormat = indexPattern.getFormatterForField(fieldByName); + const fieldFormat = dataView.getFormatterForField(fieldByName); const params = fieldFormat.params(); if (!isParamsSame(params, format.params) || format.id !== fieldFormat.type.id) { - indexPattern.setFieldFormat(field, format); + dataView.setFieldFormat(field, format); isParamsDifferent = true; } } }); if (isParamsDifferent) { - await this.data?.indexPatterns.updateSavedObject(indexPattern); + await this.data?.dataViews.updateSavedObject(dataView); } } } getFieldFormats(app: AppDataType) { - const fieldFormatMap: IndexPatternSpec['fieldFormats'] = {}; + const fieldFormatMap: DataViewSpec['fieldFormats'] = {}; (appFieldFormats?.[app] ?? []).forEach(({ field, format }) => { fieldFormatMap[field] = format; @@ -140,7 +141,7 @@ export class ObservabilityIndexPatterns { } } - async getIndexPattern(app: AppDataType, indices?: string): Promise { + async getDataView(app: AppDataType, indices?: string): Promise { if (!this.data) { throw new Error('data is not defined'); } @@ -151,22 +152,22 @@ export class ObservabilityIndexPatterns { if (appIndices) { try { - const indexPatternId = getAppIndexPatternId(app, appIndices); - const indexPatternTitle = getAppIndicesWithPattern(app, appIndices); - // we will get index pattern by id - const indexPattern = await this.data?.indexPatterns.get(indexPatternId); + const dataViewId = getAppDataViewId(app, appIndices); + const dataViewTitle = getAppIndicesWithPattern(app, appIndices); + // we will get the data view by id + const dataView = await this.data?.indexPatterns.get(dataViewId); // and make sure title matches, otherwise, we will need to create it - if (indexPattern.title !== indexPatternTitle) { - return await this.createIndexPattern(app, appIndices); + if (dataView.title !== dataViewTitle) { + return await this.createDataView(app, appIndices); } // this is intentional a non blocking call, so no await clause - this.validateFieldFormats(app, indexPattern); - return indexPattern; + this.validateFieldFormats(app, dataView); + return dataView; } catch (e: unknown) { if (e instanceof SavedObjectNotFound) { - return await this.createIndexPattern(app, appIndices); + return await this.createDataView(app, appIndices); } } } diff --git a/x-pack/plugins/observability/server/ui_settings.ts b/x-pack/plugins/observability/server/ui_settings.ts index ad0aa31542e8c7..8d37398b8a07b0 100644 --- a/x-pack/plugins/observability/server/ui_settings.ts +++ b/x-pack/plugins/observability/server/ui_settings.ts @@ -13,6 +13,7 @@ import { enableComparisonByDefault, enableInspectEsQueries, maxSuggestions, + enableInfrastructureView, } from '../common/ui_settings_keys'; /** @@ -48,7 +49,18 @@ export const uiSettings: Record> = { }), value: true, description: i18n.translate('xpack.observability.enableComparisonByDefaultDescription', { - defaultMessage: 'Enable the comparison feature on APM UI', + defaultMessage: 'Enable the comparison feature in APM app', + }), + schema: schema.boolean(), + }, + [enableInfrastructureView]: { + category: [observabilityFeatureId], + name: i18n.translate('xpack.observability.enableInfrastructureView', { + defaultMessage: 'Infrastructure feature', + }), + value: true, + description: i18n.translate('xpack.observability.enableInfrastructureViewDescription', { + defaultMessage: 'Enable the Infrastruture view feature in APM app', }), schema: schema.boolean(), }, diff --git a/x-pack/plugins/rule_registry/common/assets/component_templates/ecs_component_template.ts b/x-pack/plugins/rule_registry/common/assets/component_templates/ecs_component_template.ts index 81a3a76fc65f64..05ff64a2b753e9 100644 --- a/x-pack/plugins/rule_registry/common/assets/component_templates/ecs_component_template.ts +++ b/x-pack/plugins/rule_registry/common/assets/component_templates/ecs_component_template.ts @@ -14,6 +14,7 @@ export const ecsComponentTemplate: ClusterPutComponentTemplateBody = { template: { settings: { number_of_shards: 1, + 'index.mapping.total_fields.limit': 1500, }, mappings: merge( {}, diff --git a/x-pack/plugins/rule_registry/common/assets/field_maps/ecs_field_map.ts b/x-pack/plugins/rule_registry/common/assets/field_maps/ecs_field_map.ts index 114d54eb7b4bb5..7c4095cca039fd 100644 --- a/x-pack/plugins/rule_registry/common/assets/field_maps/ecs_field_map.ts +++ b/x-pack/plugins/rule_registry/common/assets/field_maps/ecs_field_map.ts @@ -75,6 +75,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'client.geo.continent_code': { + type: 'keyword', + array: false, + required: false, + }, 'client.geo.continent_name': { type: 'keyword', array: false, @@ -100,6 +105,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'client.geo.postal_code': { + type: 'keyword', + array: false, + required: false, + }, 'client.geo.region_iso_code': { type: 'keyword', array: false, @@ -110,6 +120,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'client.geo.timezone': { + type: 'keyword', + array: false, + required: false, + }, 'client.ip': { type: 'ip', array: false, @@ -235,6 +250,61 @@ export const ecsFieldMap = { array: false, required: false, }, + 'cloud.origin.account.id': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.origin.account.name': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.origin.availability_zone': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.origin.instance.id': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.origin.instance.name': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.origin.machine.type': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.origin.project.id': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.origin.project.name': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.origin.provider': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.origin.region': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.origin.service.name': { + type: 'keyword', + array: false, + required: false, + }, 'cloud.project.id': { type: 'keyword', array: false, @@ -255,6 +325,66 @@ export const ecsFieldMap = { array: false, required: false, }, + 'cloud.service.name': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.account.id': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.account.name': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.availability_zone': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.instance.id': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.instance.name': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.machine.type': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.project.id': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.project.name': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.provider': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.region': { + type: 'keyword', + array: false, + required: false, + }, + 'cloud.target.service.name': { + type: 'keyword', + array: false, + required: false, + }, 'container.id': { type: 'keyword', array: false, @@ -285,6 +415,21 @@ export const ecsFieldMap = { array: false, required: false, }, + 'data_stream.dataset': { + type: 'constant_keyword', + array: false, + required: false, + }, + 'data_stream.namespace': { + type: 'constant_keyword', + array: false, + required: false, + }, + 'data_stream.type': { + type: 'constant_keyword', + array: false, + required: false, + }, 'destination.address': { type: 'keyword', array: false, @@ -315,6 +460,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'destination.geo.continent_code': { + type: 'keyword', + array: false, + required: false, + }, 'destination.geo.continent_name': { type: 'keyword', array: false, @@ -340,6 +490,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'destination.geo.postal_code': { + type: 'keyword', + array: false, + required: false, + }, 'destination.geo.region_iso_code': { type: 'keyword', array: false, @@ -350,6 +505,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'destination.geo.timezone': { + type: 'keyword', + array: false, + required: false, + }, 'destination.ip': { type: 'ip', array: false, @@ -445,11 +605,21 @@ export const ecsFieldMap = { array: true, required: false, }, + 'dll.code_signature.digest_algorithm': { + type: 'keyword', + array: false, + required: false, + }, 'dll.code_signature.exists': { type: 'boolean', array: false, required: false, }, + 'dll.code_signature.signing_id': { + type: 'keyword', + array: false, + required: false, + }, 'dll.code_signature.status': { type: 'keyword', array: false, @@ -460,6 +630,16 @@ export const ecsFieldMap = { array: false, required: false, }, + 'dll.code_signature.team_id': { + type: 'keyword', + array: false, + required: false, + }, + 'dll.code_signature.timestamp': { + type: 'date', + array: false, + required: false, + }, 'dll.code_signature.trusted': { type: 'boolean', array: false, @@ -490,6 +670,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'dll.hash.ssdeep': { + type: 'keyword', + array: false, + required: false, + }, 'dll.name': { type: 'keyword', array: false, @@ -641,12 +826,12 @@ export const ecsFieldMap = { required: false, }, 'error.message': { - type: 'text', + type: 'match_only_text', array: false, required: false, }, 'error.stack_trace': { - type: 'keyword', + type: 'wildcard', array: false, required: false, }, @@ -785,6 +970,31 @@ export const ecsFieldMap = { array: false, required: false, }, + 'faas.coldstart': { + type: 'boolean', + array: false, + required: false, + }, + 'faas.execution': { + type: 'keyword', + array: false, + required: false, + }, + 'faas.trigger': { + type: 'nested', + array: false, + required: false, + }, + 'faas.trigger.request_id': { + type: 'keyword', + array: false, + required: false, + }, + 'faas.trigger.type': { + type: 'keyword', + array: false, + required: false, + }, 'file.accessed': { type: 'date', array: false, @@ -795,11 +1005,21 @@ export const ecsFieldMap = { array: true, required: false, }, + 'file.code_signature.digest_algorithm': { + type: 'keyword', + array: false, + required: false, + }, 'file.code_signature.exists': { type: 'boolean', array: false, required: false, }, + 'file.code_signature.signing_id': { + type: 'keyword', + array: false, + required: false, + }, 'file.code_signature.status': { type: 'keyword', array: false, @@ -810,6 +1030,16 @@ export const ecsFieldMap = { array: false, required: false, }, + 'file.code_signature.team_id': { + type: 'keyword', + array: false, + required: false, + }, + 'file.code_signature.timestamp': { + type: 'date', + array: false, + required: false, + }, 'file.code_signature.trusted': { type: 'boolean', array: false, @@ -845,164 +1075,319 @@ export const ecsFieldMap = { array: false, required: false, }, - 'file.extension': { + 'file.elf.architecture': { type: 'keyword', array: false, required: false, }, - 'file.gid': { + 'file.elf.byte_order': { type: 'keyword', array: false, required: false, }, - 'file.group': { + 'file.elf.cpu_type': { type: 'keyword', array: false, required: false, }, - 'file.hash.md5': { - type: 'keyword', + 'file.elf.creation_date': { + type: 'date', array: false, required: false, }, - 'file.hash.sha1': { - type: 'keyword', - array: false, + 'file.elf.exports': { + type: 'flattened', + array: true, required: false, }, - 'file.hash.sha256': { + 'file.elf.header.abi_version': { type: 'keyword', array: false, required: false, }, - 'file.hash.sha512': { + 'file.elf.header.class': { type: 'keyword', array: false, required: false, }, - 'file.inode': { + 'file.elf.header.data': { type: 'keyword', array: false, required: false, }, - 'file.mime_type': { - type: 'keyword', + 'file.elf.header.entrypoint': { + type: 'long', array: false, required: false, }, - 'file.mode': { + 'file.elf.header.object_version': { type: 'keyword', array: false, required: false, }, - 'file.mtime': { - type: 'date', + 'file.elf.header.os_abi': { + type: 'keyword', array: false, required: false, }, - 'file.name': { + 'file.elf.header.type': { type: 'keyword', array: false, required: false, }, - 'file.owner': { + 'file.elf.header.version': { type: 'keyword', array: false, required: false, }, - 'file.path': { - type: 'keyword', - array: false, + 'file.elf.imports': { + type: 'flattened', + array: true, required: false, }, - 'file.pe.architecture': { - type: 'keyword', + 'file.elf.sections': { + type: 'nested', + array: true, + required: false, + }, + 'file.elf.sections.chi2': { + type: 'long', array: false, required: false, }, - 'file.pe.company': { - type: 'keyword', + 'file.elf.sections.entropy': { + type: 'long', array: false, required: false, }, - 'file.pe.description': { + 'file.elf.sections.flags': { type: 'keyword', array: false, required: false, }, - 'file.pe.file_version': { + 'file.elf.sections.name': { type: 'keyword', array: false, required: false, }, - 'file.pe.imphash': { + 'file.elf.sections.physical_offset': { type: 'keyword', array: false, required: false, }, - 'file.pe.original_file_name': { - type: 'keyword', + 'file.elf.sections.physical_size': { + type: 'long', array: false, required: false, }, - 'file.pe.product': { + 'file.elf.sections.type': { type: 'keyword', array: false, required: false, }, - 'file.size': { + 'file.elf.sections.virtual_address': { type: 'long', array: false, required: false, }, - 'file.target_path': { - type: 'keyword', + 'file.elf.sections.virtual_size': { + type: 'long', array: false, required: false, }, - 'file.type': { - type: 'keyword', - array: false, + 'file.elf.segments': { + type: 'nested', + array: true, required: false, }, - 'file.uid': { + 'file.elf.segments.sections': { type: 'keyword', array: false, required: false, }, - 'file.x509.alternative_names': { + 'file.elf.segments.type': { type: 'keyword', - array: true, + array: false, required: false, }, - 'file.x509.issuer.common_name': { + 'file.elf.shared_libraries': { type: 'keyword', array: true, required: false, }, - 'file.x509.issuer.country': { + 'file.elf.telfhash': { type: 'keyword', - array: true, + array: false, required: false, }, - 'file.x509.issuer.distinguished_name': { + 'file.extension': { type: 'keyword', array: false, required: false, }, - 'file.x509.issuer.locality': { + 'file.fork_name': { type: 'keyword', - array: true, + array: false, required: false, }, - 'file.x509.issuer.organization': { + 'file.gid': { type: 'keyword', - array: true, + array: false, required: false, }, - 'file.x509.issuer.organizational_unit': { + 'file.group': { type: 'keyword', - array: true, + array: false, + required: false, + }, + 'file.hash.md5': { + type: 'keyword', + array: false, + required: false, + }, + 'file.hash.sha1': { + type: 'keyword', + array: false, + required: false, + }, + 'file.hash.sha256': { + type: 'keyword', + array: false, + required: false, + }, + 'file.hash.sha512': { + type: 'keyword', + array: false, + required: false, + }, + 'file.hash.ssdeep': { + type: 'keyword', + array: false, + required: false, + }, + 'file.inode': { + type: 'keyword', + array: false, + required: false, + }, + 'file.mime_type': { + type: 'keyword', + array: false, + required: false, + }, + 'file.mode': { + type: 'keyword', + array: false, + required: false, + }, + 'file.mtime': { + type: 'date', + array: false, + required: false, + }, + 'file.name': { + type: 'keyword', + array: false, + required: false, + }, + 'file.owner': { + type: 'keyword', + array: false, + required: false, + }, + 'file.path': { + type: 'keyword', + array: false, + required: false, + }, + 'file.pe.architecture': { + type: 'keyword', + array: false, + required: false, + }, + 'file.pe.company': { + type: 'keyword', + array: false, + required: false, + }, + 'file.pe.description': { + type: 'keyword', + array: false, + required: false, + }, + 'file.pe.file_version': { + type: 'keyword', + array: false, + required: false, + }, + 'file.pe.imphash': { + type: 'keyword', + array: false, + required: false, + }, + 'file.pe.original_file_name': { + type: 'keyword', + array: false, + required: false, + }, + 'file.pe.product': { + type: 'keyword', + array: false, + required: false, + }, + 'file.size': { + type: 'long', + array: false, + required: false, + }, + 'file.target_path': { + type: 'keyword', + array: false, + required: false, + }, + 'file.type': { + type: 'keyword', + array: false, + required: false, + }, + 'file.uid': { + type: 'keyword', + array: false, + required: false, + }, + 'file.x509.alternative_names': { + type: 'keyword', + array: true, + required: false, + }, + 'file.x509.issuer.common_name': { + type: 'keyword', + array: true, + required: false, + }, + 'file.x509.issuer.country': { + type: 'keyword', + array: true, + required: false, + }, + 'file.x509.issuer.distinguished_name': { + type: 'keyword', + array: false, + required: false, + }, + 'file.x509.issuer.locality': { + type: 'keyword', + array: true, + required: false, + }, + 'file.x509.issuer.organization': { + type: 'keyword', + array: true, + required: false, + }, + 'file.x509.issuer.organizational_unit': { + type: 'keyword', + array: true, required: false, }, 'file.x509.issuer.state_or_province': { @@ -1110,6 +1495,22 @@ export const ecsFieldMap = { array: false, required: false, }, + 'host.cpu.usage': { + type: 'scaled_float', + array: false, + required: false, + scaling_factor: 1000, + }, + 'host.disk.read.bytes': { + type: 'long', + array: false, + required: false, + }, + 'host.disk.write.bytes': { + type: 'long', + array: false, + required: false, + }, 'host.domain': { type: 'keyword', array: false, @@ -1120,6 +1521,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'host.geo.continent_code': { + type: 'keyword', + array: false, + required: false, + }, 'host.geo.continent_name': { type: 'keyword', array: false, @@ -1145,6 +1551,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'host.geo.postal_code': { + type: 'keyword', + array: false, + required: false, + }, 'host.geo.region_iso_code': { type: 'keyword', array: false, @@ -1155,6 +1566,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'host.geo.timezone': { + type: 'keyword', + array: false, + required: false, + }, 'host.hostname': { type: 'keyword', array: false, @@ -1180,108 +1596,78 @@ export const ecsFieldMap = { array: false, required: false, }, - 'host.os.family': { - type: 'keyword', - array: false, - required: false, - }, - 'host.os.full': { - type: 'keyword', - array: false, - required: false, - }, - 'host.os.kernel': { - type: 'keyword', - array: false, - required: false, - }, - 'host.os.name': { - type: 'keyword', - array: false, - required: false, - }, - 'host.os.platform': { - type: 'keyword', - array: false, - required: false, - }, - 'host.os.type': { - type: 'keyword', + 'host.network.egress.bytes': { + type: 'long', array: false, required: false, }, - 'host.os.version': { - type: 'keyword', + 'host.network.egress.packets': { + type: 'long', array: false, required: false, }, - 'host.type': { - type: 'keyword', + 'host.network.ingress.bytes': { + type: 'long', array: false, required: false, }, - 'host.uptime': { + 'host.network.ingress.packets': { type: 'long', array: false, required: false, }, - 'host.user.domain': { + 'host.os.family': { type: 'keyword', array: false, required: false, }, - 'host.user.email': { + 'host.os.full': { type: 'keyword', array: false, required: false, }, - 'host.user.full_name': { + 'host.os.kernel': { type: 'keyword', array: false, required: false, }, - 'host.user.group.domain': { + 'host.os.name': { type: 'keyword', array: false, required: false, }, - 'host.user.group.id': { + 'host.os.platform': { type: 'keyword', array: false, required: false, }, - 'host.user.group.name': { + 'host.os.type': { type: 'keyword', array: false, required: false, }, - 'host.user.hash': { + 'host.os.version': { type: 'keyword', array: false, required: false, }, - 'host.user.id': { + 'host.type': { type: 'keyword', array: false, required: false, }, - 'host.user.name': { - type: 'keyword', + 'host.uptime': { + type: 'long', array: false, required: false, }, - 'host.user.roles': { - type: 'keyword', - array: true, - required: false, - }, 'http.request.body.bytes': { type: 'long', array: false, required: false, }, 'http.request.body.content': { - type: 'keyword', + type: 'wildcard', array: false, required: false, }, @@ -1290,6 +1676,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'http.request.id': { + type: 'keyword', + array: false, + required: false, + }, 'http.request.method': { type: 'keyword', array: false, @@ -1311,7 +1702,7 @@ export const ecsFieldMap = { required: false, }, 'http.response.body.content': { - type: 'keyword', + type: 'wildcard', array: false, required: false, }, @@ -1356,7 +1747,7 @@ export const ecsFieldMap = { required: false, }, 'log.origin.file.line': { - type: 'integer', + type: 'long', array: false, required: false, }, @@ -1370,11 +1761,6 @@ export const ecsFieldMap = { array: false, required: false, }, - 'log.original': { - type: 'keyword', - array: false, - required: false, - }, 'log.syslog': { type: 'object', array: false, @@ -1406,7 +1792,7 @@ export const ecsFieldMap = { required: false, }, message: { - type: 'text', + type: 'match_only_text', array: false, required: false, }, @@ -1530,6 +1916,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'observer.geo.continent_code': { + type: 'keyword', + array: false, + required: false, + }, 'observer.geo.continent_name': { type: 'keyword', array: false, @@ -1555,6 +1946,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'observer.geo.postal_code': { + type: 'keyword', + array: false, + required: false, + }, 'observer.geo.region_iso_code': { type: 'keyword', array: false, @@ -1565,6 +1961,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'observer.geo.timezone': { + type: 'keyword', + array: false, + required: false, + }, 'observer.hostname': { type: 'keyword', array: false, @@ -1680,43 +2081,88 @@ export const ecsFieldMap = { array: false, required: false, }, - 'organization.id': { + 'orchestrator.api_version': { type: 'keyword', array: false, required: false, }, - 'organization.name': { + 'orchestrator.cluster.name': { type: 'keyword', array: false, required: false, }, - 'package.architecture': { + 'orchestrator.cluster.url': { type: 'keyword', array: false, required: false, }, - 'package.build_version': { + 'orchestrator.cluster.version': { type: 'keyword', array: false, required: false, }, - 'package.checksum': { + 'orchestrator.namespace': { type: 'keyword', array: false, required: false, }, - 'package.description': { + 'orchestrator.organization': { type: 'keyword', array: false, required: false, }, - 'package.install_scope': { + 'orchestrator.resource.name': { type: 'keyword', array: false, required: false, }, - 'package.installed': { - type: 'date', + 'orchestrator.resource.type': { + type: 'keyword', + array: false, + required: false, + }, + 'orchestrator.type': { + type: 'keyword', + array: false, + required: false, + }, + 'organization.id': { + type: 'keyword', + array: false, + required: false, + }, + 'organization.name': { + type: 'keyword', + array: false, + required: false, + }, + 'package.architecture': { + type: 'keyword', + array: false, + required: false, + }, + 'package.build_version': { + type: 'keyword', + array: false, + required: false, + }, + 'package.checksum': { + type: 'keyword', + array: false, + required: false, + }, + 'package.description': { + type: 'keyword', + array: false, + required: false, + }, + 'package.install_scope': { + type: 'keyword', + array: false, + required: false, + }, + 'package.installed': { + type: 'date', array: false, required: false, }, @@ -1765,11 +2211,21 @@ export const ecsFieldMap = { array: false, required: false, }, + 'process.code_signature.digest_algorithm': { + type: 'keyword', + array: false, + required: false, + }, 'process.code_signature.exists': { type: 'boolean', array: false, required: false, }, + 'process.code_signature.signing_id': { + type: 'keyword', + array: false, + required: false, + }, 'process.code_signature.status': { type: 'keyword', array: false, @@ -1780,6 +2236,16 @@ export const ecsFieldMap = { array: false, required: false, }, + 'process.code_signature.team_id': { + type: 'keyword', + array: false, + required: false, + }, + 'process.code_signature.timestamp': { + type: 'date', + array: false, + required: false, + }, 'process.code_signature.trusted': { type: 'boolean', array: false, @@ -1791,10 +2257,160 @@ export const ecsFieldMap = { required: false, }, 'process.command_line': { + type: 'wildcard', + array: false, + required: false, + }, + 'process.elf.architecture': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.byte_order': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.cpu_type': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.creation_date': { + type: 'date', + array: false, + required: false, + }, + 'process.elf.exports': { + type: 'flattened', + array: true, + required: false, + }, + 'process.elf.header.abi_version': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.header.class': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.header.data': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.header.entrypoint': { + type: 'long', + array: false, + required: false, + }, + 'process.elf.header.object_version': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.header.os_abi': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.header.type': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.header.version': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.imports': { + type: 'flattened', + array: true, + required: false, + }, + 'process.elf.sections': { + type: 'nested', + array: true, + required: false, + }, + 'process.elf.sections.chi2': { + type: 'long', + array: false, + required: false, + }, + 'process.elf.sections.entropy': { + type: 'long', + array: false, + required: false, + }, + 'process.elf.sections.flags': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.sections.name': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.sections.physical_offset': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.sections.physical_size': { + type: 'long', + array: false, + required: false, + }, + 'process.elf.sections.type': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.sections.virtual_address': { + type: 'long', + array: false, + required: false, + }, + 'process.elf.sections.virtual_size': { + type: 'long', + array: false, + required: false, + }, + 'process.elf.segments': { + type: 'nested', + array: true, + required: false, + }, + 'process.elf.segments.sections': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.segments.type': { + type: 'keyword', + array: false, + required: false, + }, + 'process.elf.shared_libraries': { + type: 'keyword', + array: true, + required: false, + }, + 'process.elf.telfhash': { type: 'keyword', array: false, required: false, }, + 'process.end': { + type: 'date', + array: false, + required: false, + }, 'process.entity_id': { type: 'keyword', array: false, @@ -1830,6 +2446,11 @@ export const ecsFieldMap = { array: false, required: false, }, + 'process.hash.ssdeep': { + type: 'keyword', + array: false, + required: false, + }, 'process.name': { type: 'keyword', array: false, @@ -1845,11 +2466,21 @@ export const ecsFieldMap = { array: false, required: false, }, + 'process.parent.code_signature.digest_algorithm': { + type: 'keyword', + array: false, + required: false, + }, 'process.parent.code_signature.exists': { type: 'boolean', array: false, required: false, }, + 'process.parent.code_signature.signing_id': { + type: 'keyword', + array: false, + required: false, + }, 'process.parent.code_signature.status': { type: 'keyword', array: false, @@ -1860,6 +2491,16 @@ export const ecsFieldMap = { array: false, required: false, }, + 'process.parent.code_signature.team_id': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.code_signature.timestamp': { + type: 'date', + array: false, + required: false, + }, 'process.parent.code_signature.trusted': { type: 'boolean', array: false, @@ -1870,1112 +2511,2722 @@ export const ecsFieldMap = { array: false, required: false, }, - 'process.parent.command_line': { - type: 'keyword', + 'process.parent.command_line': { + type: 'wildcard', + array: false, + required: false, + }, + 'process.parent.elf.architecture': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.byte_order': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.cpu_type': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.creation_date': { + type: 'date', + array: false, + required: false, + }, + 'process.parent.elf.exports': { + type: 'flattened', + array: true, + required: false, + }, + 'process.parent.elf.header.abi_version': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.header.class': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.header.data': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.header.entrypoint': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.elf.header.object_version': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.header.os_abi': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.header.type': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.header.version': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.imports': { + type: 'flattened', + array: true, + required: false, + }, + 'process.parent.elf.sections': { + type: 'nested', + array: true, + required: false, + }, + 'process.parent.elf.sections.chi2': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.elf.sections.entropy': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.elf.sections.flags': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.sections.name': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.sections.physical_offset': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.sections.physical_size': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.elf.sections.type': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.sections.virtual_address': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.elf.sections.virtual_size': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.elf.segments': { + type: 'nested', + array: true, + required: false, + }, + 'process.parent.elf.segments.sections': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.segments.type': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.elf.shared_libraries': { + type: 'keyword', + array: true, + required: false, + }, + 'process.parent.elf.telfhash': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.end': { + type: 'date', + array: false, + required: false, + }, + 'process.parent.entity_id': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.executable': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.exit_code': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.hash.md5': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.hash.sha1': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.hash.sha256': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.hash.sha512': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.hash.ssdeep': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.name': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.pe.architecture': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.pe.company': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.pe.description': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.pe.file_version': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.pe.imphash': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.pe.original_file_name': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.pe.product': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.pgid': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.pid': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.start': { + type: 'date', + array: false, + required: false, + }, + 'process.parent.thread.id': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.thread.name': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.title': { + type: 'keyword', + array: false, + required: false, + }, + 'process.parent.uptime': { + type: 'long', + array: false, + required: false, + }, + 'process.parent.working_directory': { + type: 'keyword', + array: false, + required: false, + }, + 'process.pe.architecture': { + type: 'keyword', + array: false, + required: false, + }, + 'process.pe.company': { + type: 'keyword', + array: false, + required: false, + }, + 'process.pe.description': { + type: 'keyword', + array: false, + required: false, + }, + 'process.pe.file_version': { + type: 'keyword', + array: false, + required: false, + }, + 'process.pe.imphash': { + type: 'keyword', + array: false, + required: false, + }, + 'process.pe.original_file_name': { + type: 'keyword', + array: false, + required: false, + }, + 'process.pe.product': { + type: 'keyword', + array: false, + required: false, + }, + 'process.pgid': { + type: 'long', + array: false, + required: false, + }, + 'process.pid': { + type: 'long', + array: false, + required: false, + }, + 'process.start': { + type: 'date', + array: false, + required: false, + }, + 'process.thread.id': { + type: 'long', + array: false, + required: false, + }, + 'process.thread.name': { + type: 'keyword', + array: false, + required: false, + }, + 'process.title': { + type: 'keyword', + array: false, + required: false, + }, + 'process.uptime': { + type: 'long', + array: false, + required: false, + }, + 'process.working_directory': { + type: 'keyword', + array: false, + required: false, + }, + 'registry.data.bytes': { + type: 'keyword', + array: false, + required: false, + }, + 'registry.data.strings': { + type: 'wildcard', + array: true, + required: false, + }, + 'registry.data.type': { + type: 'keyword', + array: false, + required: false, + }, + 'registry.hive': { + type: 'keyword', + array: false, + required: false, + }, + 'registry.key': { + type: 'keyword', + array: false, + required: false, + }, + 'registry.path': { + type: 'keyword', + array: false, + required: false, + }, + 'registry.value': { + type: 'keyword', + array: false, + required: false, + }, + 'related.hash': { + type: 'keyword', + array: true, + required: false, + }, + 'related.hosts': { + type: 'keyword', + array: true, + required: false, + }, + 'related.ip': { + type: 'ip', + array: true, + required: false, + }, + 'related.user': { + type: 'keyword', + array: true, + required: false, + }, + 'rule.author': { + type: 'keyword', + array: true, + required: false, + }, + 'rule.category': { + type: 'keyword', + array: false, + required: false, + }, + 'rule.description': { + type: 'keyword', + array: false, + required: false, + }, + 'rule.id': { + type: 'keyword', + array: false, + required: false, + }, + 'rule.license': { + type: 'keyword', + array: false, + required: false, + }, + 'rule.name': { + type: 'keyword', + array: false, + required: false, + }, + 'rule.reference': { + type: 'keyword', + array: false, + required: false, + }, + 'rule.ruleset': { + type: 'keyword', + array: false, + required: false, + }, + 'rule.uuid': { + type: 'keyword', + array: false, + required: false, + }, + 'rule.version': { + type: 'keyword', + array: false, + required: false, + }, + 'server.address': { + type: 'keyword', + array: false, + required: false, + }, + 'server.as.number': { + type: 'long', + array: false, + required: false, + }, + 'server.as.organization.name': { + type: 'keyword', + array: false, + required: false, + }, + 'server.bytes': { + type: 'long', + array: false, + required: false, + }, + 'server.domain': { + type: 'keyword', + array: false, + required: false, + }, + 'server.geo.city_name': { + type: 'keyword', + array: false, + required: false, + }, + 'server.geo.continent_code': { + type: 'keyword', + array: false, + required: false, + }, + 'server.geo.continent_name': { + type: 'keyword', + array: false, + required: false, + }, + 'server.geo.country_iso_code': { + type: 'keyword', + array: false, + required: false, + }, + 'server.geo.country_name': { + type: 'keyword', + array: false, + required: false, + }, + 'server.geo.location': { + type: 'geo_point', + array: false, + required: false, + }, + 'server.geo.name': { + type: 'keyword', + array: false, + required: false, + }, + 'server.geo.postal_code': { + type: 'keyword', + array: false, + required: false, + }, + 'server.geo.region_iso_code': { + type: 'keyword', + array: false, + required: false, + }, + 'server.geo.region_name': { + type: 'keyword', + array: false, + required: false, + }, + 'server.geo.timezone': { + type: 'keyword', + array: false, + required: false, + }, + 'server.ip': { + type: 'ip', + array: false, + required: false, + }, + 'server.mac': { + type: 'keyword', + array: false, + required: false, + }, + 'server.nat.ip': { + type: 'ip', + array: false, + required: false, + }, + 'server.nat.port': { + type: 'long', + array: false, + required: false, + }, + 'server.packets': { + type: 'long', + array: false, + required: false, + }, + 'server.port': { + type: 'long', + array: false, + required: false, + }, + 'server.registered_domain': { + type: 'keyword', + array: false, + required: false, + }, + 'server.subdomain': { + type: 'keyword', + array: false, + required: false, + }, + 'server.top_level_domain': { + type: 'keyword', + array: false, + required: false, + }, + 'server.user.domain': { + type: 'keyword', + array: false, + required: false, + }, + 'server.user.email': { + type: 'keyword', + array: false, + required: false, + }, + 'server.user.full_name': { + type: 'keyword', + array: false, + required: false, + }, + 'server.user.group.domain': { + type: 'keyword', + array: false, + required: false, + }, + 'server.user.group.id': { + type: 'keyword', + array: false, + required: false, + }, + 'server.user.group.name': { + type: 'keyword', + array: false, + required: false, + }, + 'server.user.hash': { + type: 'keyword', + array: false, + required: false, + }, + 'server.user.id': { + type: 'keyword', + array: false, + required: false, + }, + 'server.user.name': { + type: 'keyword', + array: false, + required: false, + }, + 'server.user.roles': { + type: 'keyword', + array: true, + required: false, + }, + 'service.address': { + type: 'keyword', + array: false, + required: false, + }, + 'service.environment': { + type: 'keyword', + array: false, + required: false, + }, + 'service.ephemeral_id': { + type: 'keyword', + array: false, + required: false, + }, + 'service.id': { + type: 'keyword', + array: false, + required: false, + }, + 'service.name': { + type: 'keyword', + array: false, + required: false, + }, + 'service.node.name': { + type: 'keyword', + array: false, + required: false, + }, + 'service.origin.address': { + type: 'keyword', + array: false, + required: false, + }, + 'service.origin.environment': { + type: 'keyword', + array: false, + required: false, + }, + 'service.origin.ephemeral_id': { + type: 'keyword', + array: false, + required: false, + }, + 'service.origin.id': { + type: 'keyword', + array: false, + required: false, + }, + 'service.origin.name': { + type: 'keyword', + array: false, + required: false, + }, + 'service.origin.node.name': { + type: 'keyword', + array: false, + required: false, + }, + 'service.origin.state': { + type: 'keyword', + array: false, + required: false, + }, + 'service.origin.type': { + type: 'keyword', + array: false, + required: false, + }, + 'service.origin.version': { + type: 'keyword', + array: false, + required: false, + }, + 'service.state': { + type: 'keyword', + array: false, + required: false, + }, + 'service.target.address': { + type: 'keyword', + array: false, + required: false, + }, + 'service.target.environment': { + type: 'keyword', + array: false, + required: false, + }, + 'service.target.ephemeral_id': { + type: 'keyword', + array: false, + required: false, + }, + 'service.target.id': { + type: 'keyword', + array: false, + required: false, + }, + 'service.target.name': { + type: 'keyword', + array: false, + required: false, + }, + 'service.target.node.name': { + type: 'keyword', + array: false, + required: false, + }, + 'service.target.state': { + type: 'keyword', + array: false, + required: false, + }, + 'service.target.type': { + type: 'keyword', + array: false, + required: false, + }, + 'service.target.version': { + type: 'keyword', + array: false, + required: false, + }, + 'service.type': { + type: 'keyword', + array: false, + required: false, + }, + 'service.version': { + type: 'keyword', + array: false, + required: false, + }, + 'source.address': { + type: 'keyword', + array: false, + required: false, + }, + 'source.as.number': { + type: 'long', + array: false, + required: false, + }, + 'source.as.organization.name': { + type: 'keyword', + array: false, + required: false, + }, + 'source.bytes': { + type: 'long', + array: false, + required: false, + }, + 'source.domain': { + type: 'keyword', + array: false, + required: false, + }, + 'source.geo.city_name': { + type: 'keyword', + array: false, + required: false, + }, + 'source.geo.continent_code': { + type: 'keyword', + array: false, + required: false, + }, + 'source.geo.continent_name': { + type: 'keyword', + array: false, + required: false, + }, + 'source.geo.country_iso_code': { + type: 'keyword', + array: false, + required: false, + }, + 'source.geo.country_name': { + type: 'keyword', + array: false, + required: false, + }, + 'source.geo.location': { + type: 'geo_point', + array: false, + required: false, + }, + 'source.geo.name': { + type: 'keyword', + array: false, + required: false, + }, + 'source.geo.postal_code': { + type: 'keyword', + array: false, + required: false, + }, + 'source.geo.region_iso_code': { + type: 'keyword', + array: false, + required: false, + }, + 'source.geo.region_name': { + type: 'keyword', + array: false, + required: false, + }, + 'source.geo.timezone': { + type: 'keyword', + array: false, + required: false, + }, + 'source.ip': { + type: 'ip', + array: false, + required: false, + }, + 'source.mac': { + type: 'keyword', + array: false, + required: false, + }, + 'source.nat.ip': { + type: 'ip', + array: false, + required: false, + }, + 'source.nat.port': { + type: 'long', + array: false, + required: false, + }, + 'source.packets': { + type: 'long', + array: false, + required: false, + }, + 'source.port': { + type: 'long', + array: false, + required: false, + }, + 'source.registered_domain': { + type: 'keyword', + array: false, + required: false, + }, + 'source.subdomain': { + type: 'keyword', + array: false, + required: false, + }, + 'source.top_level_domain': { + type: 'keyword', + array: false, + required: false, + }, + 'source.user.domain': { + type: 'keyword', + array: false, + required: false, + }, + 'source.user.email': { + type: 'keyword', + array: false, + required: false, + }, + 'source.user.full_name': { + type: 'keyword', + array: false, + required: false, + }, + 'source.user.group.domain': { + type: 'keyword', + array: false, + required: false, + }, + 'source.user.group.id': { + type: 'keyword', + array: false, + required: false, + }, + 'source.user.group.name': { + type: 'keyword', + array: false, + required: false, + }, + 'source.user.hash': { + type: 'keyword', + array: false, + required: false, + }, + 'source.user.id': { + type: 'keyword', + array: false, + required: false, + }, + 'source.user.name': { + type: 'keyword', + array: false, + required: false, + }, + 'source.user.roles': { + type: 'keyword', + array: true, + required: false, + }, + 'span.id': { + type: 'keyword', + array: false, + required: false, + }, + tags: { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments': { + type: 'nested', + array: true, + required: false, + }, + 'threat.enrichments.indicator': { + type: 'object', + array: false, + required: false, + }, + 'threat.enrichments.indicator.as.number': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.as.organization.name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.confidence': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.description': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.email.address': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.accessed': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.attributes': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.code_signature.digest_algorithm': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.code_signature.exists': { + type: 'boolean', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.code_signature.signing_id': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.code_signature.status': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.code_signature.subject_name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.code_signature.team_id': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.code_signature.timestamp': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.code_signature.trusted': { + type: 'boolean', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.code_signature.valid': { + type: 'boolean', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.created': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.ctime': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.device': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.directory': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.drive_letter': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.architecture': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.byte_order': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.cpu_type': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.creation_date': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.exports': { + type: 'flattened', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.elf.header.abi_version': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.header.class': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.header.data': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.header.entrypoint': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.header.object_version': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.header.os_abi': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.header.type': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.header.version': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.imports': { + type: 'flattened', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.elf.sections': { + type: 'nested', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.elf.sections.chi2': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.sections.entropy': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.sections.flags': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.sections.name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.sections.physical_offset': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.sections.physical_size': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.sections.type': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.sections.virtual_address': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.sections.virtual_size': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.segments': { + type: 'nested', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.elf.segments.sections': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.segments.type': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.elf.shared_libraries': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.elf.telfhash': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.extension': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.fork_name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.gid': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.group': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.hash.md5': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.hash.sha1': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.hash.sha256': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.hash.sha512': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.hash.ssdeep': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.inode': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.mime_type': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.mode': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.mtime': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.owner': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.path': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.pe.architecture': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.pe.company': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.pe.description': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.pe.file_version': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.pe.imphash': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.pe.original_file_name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.pe.product': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.size': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.target_path': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.type': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.uid': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.alternative_names': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.issuer.common_name': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.issuer.country': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.issuer.distinguished_name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.issuer.locality': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.issuer.organization': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.issuer.organizational_unit': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.issuer.state_or_province': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.not_after': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.not_before': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.public_key_algorithm': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.public_key_curve': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.public_key_exponent': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.public_key_size': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.serial_number': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.signature_algorithm': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.subject.common_name': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.subject.country': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.subject.distinguished_name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.file.x509.subject.locality': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.subject.organization': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.subject.organizational_unit': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.subject.state_or_province': { + type: 'keyword', + array: true, + required: false, + }, + 'threat.enrichments.indicator.file.x509.version_number': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.first_seen': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.city_name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.continent_code': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.continent_name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.country_iso_code': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.country_name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.location': { + type: 'geo_point', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.postal_code': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.region_iso_code': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.region_name': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.geo.timezone': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.ip': { + type: 'ip', + array: false, + required: false, + }, + 'threat.enrichments.indicator.last_seen': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.marking.tlp': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.modified_at': { + type: 'date', + array: false, + required: false, + }, + 'threat.enrichments.indicator.port': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.provider': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.reference': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.registry.data.bytes': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.registry.data.strings': { + type: 'wildcard', + array: true, + required: false, + }, + 'threat.enrichments.indicator.registry.data.type': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.registry.hive': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.registry.key': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.registry.path': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.registry.value': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.scanner_stats': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.sightings': { + type: 'long', + array: false, + required: false, + }, + 'threat.enrichments.indicator.type': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.url.domain': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.url.extension': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.url.fragment': { + type: 'keyword', + array: false, + required: false, + }, + 'threat.enrichments.indicator.url.full': { + type: 'wildcard', + array: false, + required: false, + }, + 'threat.enrichments.indicator.url.original': { + type: 'wildcard', array: false, required: false, }, - 'process.parent.entity_id': { + 'threat.enrichments.indicator.url.password': { type: 'keyword', array: false, required: false, }, - 'process.parent.executable': { - type: 'keyword', + 'threat.enrichments.indicator.url.path': { + type: 'wildcard', array: false, required: false, }, - 'process.parent.exit_code': { + 'threat.enrichments.indicator.url.port': { type: 'long', array: false, required: false, }, - 'process.parent.hash.md5': { + 'threat.enrichments.indicator.url.query': { type: 'keyword', array: false, required: false, }, - 'process.parent.hash.sha1': { + 'threat.enrichments.indicator.url.registered_domain': { type: 'keyword', array: false, required: false, }, - 'process.parent.hash.sha256': { + 'threat.enrichments.indicator.url.scheme': { type: 'keyword', array: false, required: false, }, - 'process.parent.hash.sha512': { + 'threat.enrichments.indicator.url.subdomain': { type: 'keyword', array: false, required: false, }, - 'process.parent.name': { + 'threat.enrichments.indicator.url.top_level_domain': { type: 'keyword', array: false, required: false, }, - 'process.parent.pe.architecture': { + 'threat.enrichments.indicator.url.username': { type: 'keyword', array: false, required: false, }, - 'process.parent.pe.company': { + 'threat.enrichments.indicator.x509.alternative_names': { type: 'keyword', - array: false, + array: true, required: false, }, - 'process.parent.pe.description': { + 'threat.enrichments.indicator.x509.issuer.common_name': { type: 'keyword', - array: false, + array: true, required: false, }, - 'process.parent.pe.file_version': { + 'threat.enrichments.indicator.x509.issuer.country': { type: 'keyword', - array: false, + array: true, required: false, }, - 'process.parent.pe.imphash': { + 'threat.enrichments.indicator.x509.issuer.distinguished_name': { type: 'keyword', array: false, required: false, }, - 'process.parent.pe.original_file_name': { + 'threat.enrichments.indicator.x509.issuer.locality': { type: 'keyword', - array: false, + array: true, required: false, }, - 'process.parent.pe.product': { + 'threat.enrichments.indicator.x509.issuer.organization': { type: 'keyword', - array: false, - required: false, - }, - 'process.parent.pgid': { - type: 'long', - array: false, + array: true, required: false, }, - 'process.parent.pid': { - type: 'long', - array: false, + 'threat.enrichments.indicator.x509.issuer.organizational_unit': { + type: 'keyword', + array: true, required: false, }, - 'process.parent.ppid': { - type: 'long', - array: false, + 'threat.enrichments.indicator.x509.issuer.state_or_province': { + type: 'keyword', + array: true, required: false, }, - 'process.parent.start': { + 'threat.enrichments.indicator.x509.not_after': { type: 'date', array: false, required: false, }, - 'process.parent.thread.id': { - type: 'long', + 'threat.enrichments.indicator.x509.not_before': { + type: 'date', array: false, required: false, }, - 'process.parent.thread.name': { + 'threat.enrichments.indicator.x509.public_key_algorithm': { type: 'keyword', array: false, required: false, }, - 'process.parent.title': { + 'threat.enrichments.indicator.x509.public_key_curve': { type: 'keyword', array: false, required: false, }, - 'process.parent.uptime': { + 'threat.enrichments.indicator.x509.public_key_exponent': { type: 'long', array: false, required: false, }, - 'process.parent.working_directory': { - type: 'keyword', + 'threat.enrichments.indicator.x509.public_key_size': { + type: 'long', array: false, required: false, }, - 'process.pe.architecture': { + 'threat.enrichments.indicator.x509.serial_number': { type: 'keyword', array: false, required: false, }, - 'process.pe.company': { + 'threat.enrichments.indicator.x509.signature_algorithm': { type: 'keyword', array: false, required: false, }, - 'process.pe.description': { + 'threat.enrichments.indicator.x509.subject.common_name': { type: 'keyword', - array: false, + array: true, required: false, }, - 'process.pe.file_version': { + 'threat.enrichments.indicator.x509.subject.country': { type: 'keyword', - array: false, + array: true, required: false, }, - 'process.pe.imphash': { + 'threat.enrichments.indicator.x509.subject.distinguished_name': { type: 'keyword', array: false, required: false, }, - 'process.pe.original_file_name': { + 'threat.enrichments.indicator.x509.subject.locality': { type: 'keyword', - array: false, + array: true, required: false, }, - 'process.pe.product': { + 'threat.enrichments.indicator.x509.subject.organization': { type: 'keyword', - array: false, - required: false, - }, - 'process.pgid': { - type: 'long', - array: false, + array: true, required: false, }, - 'process.pid': { - type: 'long', - array: false, + 'threat.enrichments.indicator.x509.subject.organizational_unit': { + type: 'keyword', + array: true, required: false, }, - 'process.ppid': { - type: 'long', - array: false, + 'threat.enrichments.indicator.x509.subject.state_or_province': { + type: 'keyword', + array: true, required: false, }, - 'process.start': { - type: 'date', + 'threat.enrichments.indicator.x509.version_number': { + type: 'keyword', array: false, required: false, }, - 'process.thread.id': { - type: 'long', + 'threat.enrichments.matched.atomic': { + type: 'keyword', array: false, required: false, }, - 'process.thread.name': { + 'threat.enrichments.matched.field': { type: 'keyword', array: false, required: false, }, - 'process.title': { + 'threat.enrichments.matched.id': { type: 'keyword', array: false, required: false, }, - 'process.uptime': { - type: 'long', + 'threat.enrichments.matched.index': { + type: 'keyword', array: false, required: false, }, - 'process.working_directory': { + 'threat.enrichments.matched.type': { type: 'keyword', array: false, required: false, }, - 'registry.data.bytes': { + 'threat.framework': { type: 'keyword', array: false, required: false, }, - 'registry.data.strings': { + 'threat.group.alias': { type: 'keyword', array: true, required: false, }, - 'registry.data.type': { + 'threat.group.id': { type: 'keyword', array: false, required: false, }, - 'registry.hive': { + 'threat.group.name': { type: 'keyword', array: false, required: false, }, - 'registry.key': { + 'threat.group.reference': { type: 'keyword', array: false, required: false, }, - 'registry.path': { - type: 'keyword', + 'threat.indicator.as.number': { + type: 'long', array: false, required: false, }, - 'registry.value': { + 'threat.indicator.as.organization.name': { type: 'keyword', array: false, required: false, }, - 'related.hash': { + 'threat.indicator.confidence': { type: 'keyword', - array: true, + array: false, required: false, }, - 'related.hosts': { + 'threat.indicator.description': { type: 'keyword', - array: true, + array: false, required: false, }, - 'related.ip': { - type: 'ip', - array: true, + 'threat.indicator.email.address': { + type: 'keyword', + array: false, required: false, }, - 'related.user': { - type: 'keyword', - array: true, + 'threat.indicator.file.accessed': { + type: 'date', + array: false, required: false, }, - 'rule.author': { + 'threat.indicator.file.attributes': { type: 'keyword', array: true, required: false, }, - 'rule.category': { + 'threat.indicator.file.code_signature.digest_algorithm': { type: 'keyword', array: false, required: false, }, - 'rule.description': { - type: 'keyword', + 'threat.indicator.file.code_signature.exists': { + type: 'boolean', array: false, required: false, }, - 'rule.id': { - type: 'keyword', - array: false, - required: true, - }, - 'rule.license': { + 'threat.indicator.file.code_signature.signing_id': { type: 'keyword', array: false, required: false, }, - 'rule.name': { + 'threat.indicator.file.code_signature.status': { type: 'keyword', array: false, required: false, }, - 'rule.reference': { + 'threat.indicator.file.code_signature.subject_name': { type: 'keyword', array: false, required: false, }, - 'rule.ruleset': { + 'threat.indicator.file.code_signature.team_id': { type: 'keyword', array: false, required: false, }, - 'rule.uuid': { - type: 'keyword', + 'threat.indicator.file.code_signature.timestamp': { + type: 'date', array: false, required: false, }, - 'rule.version': { - type: 'keyword', + 'threat.indicator.file.code_signature.trusted': { + type: 'boolean', array: false, required: false, }, - 'server.address': { - type: 'keyword', + 'threat.indicator.file.code_signature.valid': { + type: 'boolean', array: false, required: false, }, - 'server.as.number': { - type: 'long', + 'threat.indicator.file.created': { + type: 'date', array: false, required: false, }, - 'server.as.organization.name': { - type: 'keyword', + 'threat.indicator.file.ctime': { + type: 'date', array: false, required: false, }, - 'server.bytes': { - type: 'long', + 'threat.indicator.file.device': { + type: 'keyword', array: false, required: false, }, - 'server.domain': { + 'threat.indicator.file.directory': { type: 'keyword', array: false, required: false, }, - 'server.geo.city_name': { + 'threat.indicator.file.drive_letter': { type: 'keyword', array: false, required: false, }, - 'server.geo.continent_name': { + 'threat.indicator.file.elf.architecture': { type: 'keyword', array: false, required: false, }, - 'server.geo.country_iso_code': { + 'threat.indicator.file.elf.byte_order': { type: 'keyword', array: false, required: false, }, - 'server.geo.country_name': { + 'threat.indicator.file.elf.cpu_type': { type: 'keyword', array: false, required: false, }, - 'server.geo.location': { - type: 'geo_point', + 'threat.indicator.file.elf.creation_date': { + type: 'date', array: false, required: false, }, - 'server.geo.name': { - type: 'keyword', - array: false, + 'threat.indicator.file.elf.exports': { + type: 'flattened', + array: true, required: false, }, - 'server.geo.region_iso_code': { + 'threat.indicator.file.elf.header.abi_version': { type: 'keyword', array: false, required: false, }, - 'server.geo.region_name': { + 'threat.indicator.file.elf.header.class': { type: 'keyword', array: false, required: false, }, - 'server.ip': { - type: 'ip', - array: false, - required: false, - }, - 'server.mac': { + 'threat.indicator.file.elf.header.data': { type: 'keyword', array: false, required: false, }, - 'server.nat.ip': { - type: 'ip', - array: false, - required: false, - }, - 'server.nat.port': { + 'threat.indicator.file.elf.header.entrypoint': { type: 'long', array: false, required: false, }, - 'server.packets': { - type: 'long', + 'threat.indicator.file.elf.header.object_version': { + type: 'keyword', array: false, required: false, }, - 'server.port': { - type: 'long', + 'threat.indicator.file.elf.header.os_abi': { + type: 'keyword', array: false, required: false, }, - 'server.registered_domain': { + 'threat.indicator.file.elf.header.type': { type: 'keyword', array: false, required: false, }, - 'server.subdomain': { + 'threat.indicator.file.elf.header.version': { type: 'keyword', array: false, required: false, }, - 'server.top_level_domain': { - type: 'keyword', - array: false, + 'threat.indicator.file.elf.imports': { + type: 'flattened', + array: true, required: false, }, - 'server.user.domain': { - type: 'keyword', + 'threat.indicator.file.elf.sections': { + type: 'nested', + array: true, + required: false, + }, + 'threat.indicator.file.elf.sections.chi2': { + type: 'long', array: false, required: false, }, - 'server.user.email': { - type: 'keyword', + 'threat.indicator.file.elf.sections.entropy': { + type: 'long', array: false, required: false, }, - 'server.user.full_name': { + 'threat.indicator.file.elf.sections.flags': { type: 'keyword', array: false, required: false, }, - 'server.user.group.domain': { + 'threat.indicator.file.elf.sections.name': { type: 'keyword', array: false, required: false, }, - 'server.user.group.id': { + 'threat.indicator.file.elf.sections.physical_offset': { type: 'keyword', array: false, required: false, }, - 'server.user.group.name': { - type: 'keyword', + 'threat.indicator.file.elf.sections.physical_size': { + type: 'long', array: false, required: false, }, - 'server.user.hash': { + 'threat.indicator.file.elf.sections.type': { type: 'keyword', array: false, required: false, }, - 'server.user.id': { - type: 'keyword', + 'threat.indicator.file.elf.sections.virtual_address': { + type: 'long', array: false, required: false, }, - 'server.user.name': { - type: 'keyword', + 'threat.indicator.file.elf.sections.virtual_size': { + type: 'long', array: false, required: false, }, - 'server.user.roles': { - type: 'keyword', + 'threat.indicator.file.elf.segments': { + type: 'nested', array: true, required: false, }, - 'service.ephemeral_id': { + 'threat.indicator.file.elf.segments.sections': { type: 'keyword', array: false, required: false, }, - 'service.id': { + 'threat.indicator.file.elf.segments.type': { type: 'keyword', array: false, required: false, }, - 'service.name': { + 'threat.indicator.file.elf.shared_libraries': { type: 'keyword', - array: false, + array: true, required: false, }, - 'service.node.name': { + 'threat.indicator.file.elf.telfhash': { type: 'keyword', array: false, required: false, }, - 'service.state': { + 'threat.indicator.file.extension': { type: 'keyword', array: false, required: false, }, - 'service.type': { + 'threat.indicator.file.fork_name': { type: 'keyword', array: false, required: false, }, - 'service.version': { + 'threat.indicator.file.gid': { type: 'keyword', array: false, required: false, }, - 'source.address': { + 'threat.indicator.file.group': { type: 'keyword', array: false, required: false, }, - 'source.as.number': { - type: 'long', + 'threat.indicator.file.hash.md5': { + type: 'keyword', array: false, required: false, }, - 'source.as.organization.name': { + 'threat.indicator.file.hash.sha1': { type: 'keyword', array: false, required: false, }, - 'source.bytes': { - type: 'long', + 'threat.indicator.file.hash.sha256': { + type: 'keyword', array: false, required: false, }, - 'source.domain': { + 'threat.indicator.file.hash.sha512': { type: 'keyword', array: false, required: false, }, - 'source.geo.city_name': { + 'threat.indicator.file.hash.ssdeep': { type: 'keyword', array: false, required: false, }, - 'source.geo.continent_name': { + 'threat.indicator.file.inode': { type: 'keyword', array: false, required: false, }, - 'source.geo.country_iso_code': { + 'threat.indicator.file.mime_type': { type: 'keyword', array: false, required: false, }, - 'source.geo.country_name': { + 'threat.indicator.file.mode': { type: 'keyword', array: false, required: false, }, - 'source.geo.location': { - type: 'geo_point', + 'threat.indicator.file.mtime': { + type: 'date', array: false, required: false, }, - 'source.geo.name': { + 'threat.indicator.file.name': { type: 'keyword', array: false, required: false, }, - 'source.geo.region_iso_code': { + 'threat.indicator.file.owner': { type: 'keyword', array: false, required: false, }, - 'source.geo.region_name': { + 'threat.indicator.file.path': { type: 'keyword', array: false, required: false, }, - 'source.ip': { - type: 'ip', + 'threat.indicator.file.pe.architecture': { + type: 'keyword', array: false, required: false, }, - 'source.mac': { + 'threat.indicator.file.pe.company': { type: 'keyword', array: false, required: false, }, - 'source.nat.ip': { - type: 'ip', + 'threat.indicator.file.pe.description': { + type: 'keyword', array: false, required: false, }, - 'source.nat.port': { - type: 'long', + 'threat.indicator.file.pe.file_version': { + type: 'keyword', array: false, required: false, }, - 'source.packets': { - type: 'long', + 'threat.indicator.file.pe.imphash': { + type: 'keyword', array: false, required: false, }, - 'source.port': { - type: 'long', + 'threat.indicator.file.pe.original_file_name': { + type: 'keyword', array: false, required: false, }, - 'source.registered_domain': { + 'threat.indicator.file.pe.product': { type: 'keyword', array: false, required: false, }, - 'source.subdomain': { - type: 'keyword', + 'threat.indicator.file.size': { + type: 'long', array: false, required: false, }, - 'source.top_level_domain': { + 'threat.indicator.file.target_path': { type: 'keyword', array: false, required: false, }, - 'source.user.domain': { + 'threat.indicator.file.type': { type: 'keyword', array: false, required: false, }, - 'source.user.email': { + 'threat.indicator.file.uid': { type: 'keyword', array: false, required: false, }, - 'source.user.full_name': { + 'threat.indicator.file.x509.alternative_names': { type: 'keyword', - array: false, + array: true, required: false, }, - 'source.user.group.domain': { + 'threat.indicator.file.x509.issuer.common_name': { type: 'keyword', - array: false, + array: true, required: false, }, - 'source.user.group.id': { + 'threat.indicator.file.x509.issuer.country': { type: 'keyword', - array: false, + array: true, required: false, }, - 'source.user.group.name': { + 'threat.indicator.file.x509.issuer.distinguished_name': { type: 'keyword', array: false, required: false, }, - 'source.user.hash': { + 'threat.indicator.file.x509.issuer.locality': { type: 'keyword', - array: false, + array: true, required: false, }, - 'source.user.id': { + 'threat.indicator.file.x509.issuer.organization': { type: 'keyword', - array: false, + array: true, required: false, }, - 'source.user.name': { + 'threat.indicator.file.x509.issuer.organizational_unit': { type: 'keyword', - array: false, + array: true, required: false, }, - 'source.user.roles': { + 'threat.indicator.file.x509.issuer.state_or_province': { type: 'keyword', array: true, required: false, }, - 'span.id': { - type: 'keyword', + 'threat.indicator.file.x509.not_after': { + type: 'date', array: false, required: false, }, - tags: { - type: 'keyword', - array: true, + 'threat.indicator.file.x509.not_before': { + type: 'date', + array: false, required: false, }, - 'threat.framework': { + 'threat.indicator.file.x509.public_key_algorithm': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments': { - type: 'nested', - array: true, + 'threat.indicator.file.x509.public_key_curve': { + type: 'keyword', + array: false, required: false, }, - 'threat.enrichments.indicator': { - type: 'object', + 'threat.indicator.file.x509.public_key_exponent': { + type: 'long', array: false, required: false, }, - 'threat.enrichments.indicator.as.number': { + 'threat.indicator.file.x509.public_key_size': { type: 'long', array: false, required: false, }, - 'threat.enrichments.indicator.as.organization.name': { + 'threat.indicator.file.x509.serial_number': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.confidence': { + 'threat.indicator.file.x509.signature_algorithm': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.description': { + 'threat.indicator.file.x509.subject.common_name': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.email.address': { + 'threat.indicator.file.x509.subject.country': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.file.accessed': { - type: 'date', + 'threat.indicator.file.x509.subject.distinguished_name': { + type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.attributes': { + 'threat.indicator.file.x509.subject.locality': { type: 'keyword', array: true, required: false, }, - 'threat.enrichments.indicator.file.code_signature.digest_algorithm': { + 'threat.indicator.file.x509.subject.organization': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.file.code_signature.exists': { - type: 'boolean', - array: false, + 'threat.indicator.file.x509.subject.organizational_unit': { + type: 'keyword', + array: true, required: false, }, - 'threat.enrichments.indicator.file.code_signature.signing_id': { + 'threat.indicator.file.x509.subject.state_or_province': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.file.code_signature.status': { + 'threat.indicator.file.x509.version_number': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.code_signature.subject_name': { - type: 'keyword', + 'threat.indicator.first_seen': { + type: 'date', array: false, required: false, }, - 'threat.enrichments.indicator.file.code_signature.team_id': { + 'threat.indicator.geo.city_name': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.code_signature.timestamp': { - type: 'date', + 'threat.indicator.geo.continent_code': { + type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.code_signature.trusted': { - type: 'boolean', + 'threat.indicator.geo.continent_name': { + type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.code_signature.valid': { - type: 'boolean', + 'threat.indicator.geo.country_iso_code': { + type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.created': { - type: 'date', + 'threat.indicator.geo.country_name': { + type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.ctime': { - type: 'date', + 'threat.indicator.geo.location': { + type: 'geo_point', array: false, required: false, }, - 'threat.enrichments.indicator.file.device': { + 'threat.indicator.geo.name': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.directory': { + 'threat.indicator.geo.postal_code': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.drive_letter': { + 'threat.indicator.geo.region_iso_code': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.extension': { + 'threat.indicator.geo.region_name': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.fork_name': { + 'threat.indicator.geo.timezone': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.gid': { - type: 'keyword', + 'threat.indicator.ip': { + type: 'ip', array: false, required: false, }, - 'threat.enrichments.indicator.file.group': { - type: 'keyword', + 'threat.indicator.last_seen': { + type: 'date', array: false, required: false, }, - 'threat.enrichments.indicator.file.hash.md5': { + 'threat.indicator.marking.tlp': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.hash.sha1': { - type: 'keyword', + 'threat.indicator.modified_at': { + type: 'date', array: false, required: false, }, - 'threat.enrichments.indicator.file.hash.sha256': { - type: 'keyword', + 'threat.indicator.port': { + type: 'long', array: false, required: false, }, - 'threat.enrichments.indicator.file.hash.sha512': { + 'threat.indicator.provider': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.hash.ssdeep': { + 'threat.indicator.reference': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.inode': { + 'threat.indicator.registry.data.bytes': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.mime_type': { + 'threat.indicator.registry.data.strings': { + type: 'wildcard', + array: true, + required: false, + }, + 'threat.indicator.registry.data.type': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.mode': { + 'threat.indicator.registry.hive': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.mtime': { - type: 'date', + 'threat.indicator.registry.key': { + type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.name': { + 'threat.indicator.registry.path': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.owner': { + 'threat.indicator.registry.value': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.path': { - type: 'keyword', + 'threat.indicator.scanner_stats': { + type: 'long', array: false, required: false, }, - 'threat.enrichments.indicator.file.size': { + 'threat.indicator.sightings': { type: 'long', array: false, required: false, }, - 'threat.enrichments.indicator.file.target_path': { + 'threat.indicator.type': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.type': { + 'threat.indicator.url.domain': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.file.uid': { + 'threat.indicator.url.extension': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.first_seen': { - type: 'date', + 'threat.indicator.url.fragment': { + type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.ip': { - type: 'ip', + 'threat.indicator.url.full': { + type: 'wildcard', array: false, required: false, }, - 'threat.enrichments.indicator.last_seen': { - type: 'date', + 'threat.indicator.url.original': { + type: 'wildcard', array: false, required: false, }, - 'threat.enrichments.indicator.marking.tlp': { + 'threat.indicator.url.password': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.modified_at': { - type: 'date', + 'threat.indicator.url.path': { + type: 'wildcard', array: false, required: false, }, - 'threat.enrichments.indicator.port': { + 'threat.indicator.url.port': { type: 'long', array: false, required: false, }, - 'threat.enrichments.indicator.provider': { + 'threat.indicator.url.query': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.reference': { + 'threat.indicator.url.registered_domain': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.registry.data.bytes': { + 'threat.indicator.url.scheme': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.registry.data.strings': { - type: 'wildcard', - array: true, - required: false, - }, - 'threat.enrichments.indicator.registry.data.type': { + 'threat.indicator.url.subdomain': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.registry.hive': { + 'threat.indicator.url.top_level_domain': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.registry.key': { + 'threat.indicator.url.username': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.registry.path': { + 'threat.indicator.x509.alternative_names': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.registry.value': { + 'threat.indicator.x509.issuer.common_name': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.scanner_stats': { - type: 'long', - array: false, + 'threat.indicator.x509.issuer.country': { + type: 'keyword', + array: true, required: false, }, - 'threat.enrichments.indicator.sightings': { - type: 'long', + 'threat.indicator.x509.issuer.distinguished_name': { + type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.type': { + 'threat.indicator.x509.issuer.locality': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.url.domain': { + 'threat.indicator.x509.issuer.organization': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.url.extension': { + 'threat.indicator.x509.issuer.organizational_unit': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.url.fragment': { + 'threat.indicator.x509.issuer.state_or_province': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.url.full': { - type: 'wildcard', + 'threat.indicator.x509.not_after': { + type: 'date', array: false, required: false, }, - 'threat.enrichments.indicator.url.original': { - type: 'wildcard', + 'threat.indicator.x509.not_before': { + type: 'date', array: false, required: false, }, - 'threat.enrichments.indicator.url.password': { + 'threat.indicator.x509.public_key_algorithm': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.url.path': { - type: 'wildcard', + 'threat.indicator.x509.public_key_curve': { + type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.url.port': { + 'threat.indicator.x509.public_key_exponent': { type: 'long', array: false, required: false, }, - 'threat.enrichments.indicator.url.query': { - type: 'keyword', + 'threat.indicator.x509.public_key_size': { + type: 'long', array: false, required: false, }, - 'threat.enrichments.indicator.url.registered_domain': { + 'threat.indicator.x509.serial_number': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.url.scheme': { + 'threat.indicator.x509.signature_algorithm': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.indicator.url.subdomain': { + 'threat.indicator.x509.subject.common_name': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.url.top_level_domain': { + 'threat.indicator.x509.subject.country': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.indicator.url.username': { + 'threat.indicator.x509.subject.distinguished_name': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.feed': { - type: 'object', - array: false, + 'threat.indicator.x509.subject.locality': { + type: 'keyword', + array: true, required: false, }, - 'threat.enrichments.feed.name': { + 'threat.indicator.x509.subject.organization': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.matched.atomic': { + 'threat.indicator.x509.subject.organizational_unit': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.matched.field': { + 'threat.indicator.x509.subject.state_or_province': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.matched.id': { + 'threat.indicator.x509.version_number': { type: 'keyword', array: false, required: false, }, - 'threat.enrichments.matched.index': { + 'threat.software.alias': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.enrichments.matched.type': { + 'threat.software.id': { type: 'keyword', array: false, required: false, }, - 'threat.group.alias': { + 'threat.software.name': { type: 'keyword', - array: true, + array: false, required: false, }, - 'threat.group.id': { + 'threat.software.platforms': { type: 'keyword', - array: false, + array: true, required: false, }, - 'threat.group.name': { + 'threat.software.reference': { type: 'keyword', array: false, required: false, }, - 'threat.group.reference': { + 'threat.software.type': { type: 'keyword', array: false, required: false, @@ -3436,12 +5687,12 @@ export const ecsFieldMap = { required: false, }, 'url.full': { - type: 'keyword', + type: 'wildcard', array: false, required: false, }, 'url.original': { - type: 'keyword', + type: 'wildcard', array: false, required: false, }, @@ -3451,7 +5702,7 @@ export const ecsFieldMap = { required: false, }, 'url.path': { - type: 'keyword', + type: 'wildcard', array: false, required: false, }, diff --git a/x-pack/plugins/rule_registry/common/field_map/types.ts b/x-pack/plugins/rule_registry/common/field_map/types.ts index ad2f8ed1e5536d..6eeffa12400fe2 100644 --- a/x-pack/plugins/rule_registry/common/field_map/types.ts +++ b/x-pack/plugins/rule_registry/common/field_map/types.ts @@ -11,5 +11,6 @@ export interface FieldMap { required?: boolean; array?: boolean; path?: string; + scaling_factor?: number; }; } diff --git a/x-pack/plugins/rule_registry/common/types.ts b/x-pack/plugins/rule_registry/common/types.ts index 8ffbebbc631a16..4bf5fa8b23fdc1 100644 --- a/x-pack/plugins/rule_registry/common/types.ts +++ b/x-pack/plugins/rule_registry/common/types.ts @@ -275,6 +275,7 @@ export interface ClusterPutComponentTemplateBody { template: { settings: { number_of_shards: number; + 'index.mapping.total_fields.limit'?: number; }; mappings: estypes.MappingTypeMapping; }; diff --git a/x-pack/plugins/rule_registry/scripts/generate_ecs_fieldmap/index.js b/x-pack/plugins/rule_registry/scripts/generate_ecs_fieldmap/index.js index bbcf651bd6d691..5e90a3c16aa7c6 100644 --- a/x-pack/plugins/rule_registry/scripts/generate_ecs_fieldmap/index.js +++ b/x-pack/plugins/rule_registry/scripts/generate_ecs_fieldmap/index.js @@ -33,11 +33,17 @@ async function generate() { const flatYaml = await yaml.safeLoad(await readFile(ecsYamlFilename)); const fields = mapValues(flatYaml, (description) => { - return { + const field = { type: description.type, array: description.normalize.includes('array'), required: !!description.required, }; + + if (description.scaling_factor) { + field.scaling_factor = description.scaling_factor; + } + + return field; }); await Promise.all([ diff --git a/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.ts b/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.ts index 0d55335a652ea9..c49e9d1e111bfe 100644 --- a/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.ts +++ b/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.ts @@ -315,7 +315,7 @@ export class ResourceInstaller { // @ts-expect-error rollover_alias: primaryNamespacedAlias, }, - 'index.mapping.total_fields.limit': 1200, + 'index.mapping.total_fields.limit': 1700, }, mappings: { dynamic: false, diff --git a/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts b/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts index 2d914e5e0945e9..a23ae0d1b99c9d 100644 --- a/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts +++ b/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts @@ -10,6 +10,7 @@ import { chunk } from 'lodash'; import { ALERT_UUID, VERSION } from '@kbn/rule-data-utils'; import { getCommonAlertFields } from './get_common_alert_fields'; import { CreatePersistenceRuleTypeWrapper } from './persistence_types'; +import { errorAggregator } from './utils'; export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper = ({ logger, ruleDataClient }) => @@ -77,7 +78,7 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper } if (filteredAlerts.length === 0) { - return { createdAlerts: [] }; + return { createdAlerts: [], errors: {} }; } const augmentedAlerts = filteredAlerts.map((alert) => { @@ -102,7 +103,7 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper }); if (response == null) { - return { createdAlerts: [] }; + return { createdAlerts: [], errors: {} }; } return { @@ -116,10 +117,11 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper }; }) .filter((_, idx) => response.body.items[idx].create?.status === 201), + errors: errorAggregator(response.body, [409]), }; } else { logger.debug('Writing is disabled.'); - return { createdAlerts: [] }; + return { createdAlerts: [], errors: {} }; } }, }, diff --git a/x-pack/plugins/rule_registry/server/utils/persistence_types.ts b/x-pack/plugins/rule_registry/server/utils/persistence_types.ts index 61136b432a5520..70e37dd20e34d7 100644 --- a/x-pack/plugins/rule_registry/server/utils/persistence_types.ts +++ b/x-pack/plugins/rule_registry/server/utils/persistence_types.ts @@ -16,6 +16,7 @@ import { } from '../../../alerting/server'; import { WithoutReservedActionGroups } from '../../../alerting/common'; import { IRuleDataClient } from '../rule_data_client'; +import { BulkResponseErrorAggregation } from './utils'; export type PersistenceAlertService = ( alerts: Array<{ @@ -27,6 +28,7 @@ export type PersistenceAlertService = ( export interface PersistenceAlertServiceResult { createdAlerts: Array; + errors: BulkResponseErrorAggregation; } export interface PersistenceServices { diff --git a/x-pack/plugins/rule_registry/server/utils/utils.test.ts b/x-pack/plugins/rule_registry/server/utils/utils.test.ts new file mode 100644 index 00000000000000..57a8c7dd379365 --- /dev/null +++ b/x-pack/plugins/rule_registry/server/utils/utils.test.ts @@ -0,0 +1,288 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +import { errorAggregator } from './utils'; +import { BulkResponseErrorAggregation } from './utils'; + +const sampleBulkErrorItem = ( + { + status, + reason, + }: { + status: number; + reason: string; + } = { status: 400, reason: 'Invalid call' } +): { create: estypes.BulkResponseItem } => { + return { + create: { + _index: 'mock_index', + _id: '123', + _version: 1, + status, + _shards: { + total: 1, + successful: 0, + failed: 1, + }, + error: { + type: 'Invalid', + reason, + shard: 'shard 123', + index: 'mock_index', + }, + }, + }; +}; + +const sampleBulkItem = (): { create: estypes.BulkResponseItem } => { + return { + create: { + _index: 'mock_index', + _id: '123', + _version: 1, + status: 200, + result: 'some result here', + _shards: { + total: 1, + successful: 1, + failed: 0, + }, + }, + }; +}; + +const sampleEmptyBulkResponse = (): estypes.BulkResponse => ({ + took: 0, + errors: false, + items: [], +}); + +const sampleBulkError = (): estypes.BulkResponse => ({ + took: 0, + errors: true, + items: [sampleBulkErrorItem()], +}); + +const sampleBulkResponse = (): estypes.BulkResponse => ({ + took: 0, + errors: true, + items: [sampleBulkItem()], +}); + +describe('utils', () => { + describe('errorAggregator', () => { + test('it should aggregate with an empty object when given an empty bulk response', () => { + const empty = sampleEmptyBulkResponse(); + const aggregated = errorAggregator(empty, []); + const expected: BulkResponseErrorAggregation = {}; + expect(aggregated).toEqual(expected); + }); + + test('it should aggregate with an empty create object', () => { + const empty = sampleBulkResponse(); + empty.items = [{}]; + const aggregated = errorAggregator(empty, []); + const expected: BulkResponseErrorAggregation = {}; + expect(aggregated).toEqual(expected); + }); + + test('it should aggregate with an empty object when given a valid bulk response with no errors', () => { + const validResponse = sampleBulkResponse(); + const aggregated = errorAggregator(validResponse, []); + const expected: BulkResponseErrorAggregation = {}; + expect(aggregated).toEqual(expected); + }); + + test('it should aggregate with a single error when given a single error item', () => { + const singleError = sampleBulkError(); + const aggregated = errorAggregator(singleError, []); + const expected: BulkResponseErrorAggregation = { + 'Invalid call': { + count: 1, + statusCode: 400, + }, + }; + expect(aggregated).toEqual(expected); + }); + + test('it should aggregate two errors with a correct count when given the same two error items', () => { + const twoAggregatedErrors = sampleBulkError(); + const item1 = sampleBulkErrorItem(); + const item2 = sampleBulkErrorItem(); + twoAggregatedErrors.items = [item1, item2]; + const aggregated = errorAggregator(twoAggregatedErrors, []); + const expected: BulkResponseErrorAggregation = { + 'Invalid call': { + count: 2, + statusCode: 400, + }, + }; + expect(aggregated).toEqual(expected); + }); + + test('it should aggregate three errors with a correct count when given the same two error items', () => { + const twoAggregatedErrors = sampleBulkError(); + const item1 = sampleBulkErrorItem(); + const item2 = sampleBulkErrorItem(); + const item3 = sampleBulkErrorItem(); + twoAggregatedErrors.items = [item1, item2, item3]; + const aggregated = errorAggregator(twoAggregatedErrors, []); + const expected: BulkResponseErrorAggregation = { + 'Invalid call': { + count: 3, + statusCode: 400, + }, + }; + expect(aggregated).toEqual(expected); + }); + + test('it should aggregate two distinct errors with the correct count of 1 for each error type', () => { + const twoAggregatedErrors = sampleBulkError(); + const item1 = sampleBulkErrorItem({ status: 400, reason: 'Parse Error' }); + const item2 = sampleBulkErrorItem({ status: 500, reason: 'Bad Network' }); + twoAggregatedErrors.items = [item1, item2]; + const aggregated = errorAggregator(twoAggregatedErrors, []); + const expected: BulkResponseErrorAggregation = { + 'Parse Error': { + count: 1, + statusCode: 400, + }, + 'Bad Network': { + count: 1, + statusCode: 500, + }, + }; + expect(aggregated).toEqual(expected); + }); + + test('it should aggregate two of the same errors with the correct count of 2 for each error type', () => { + const twoAggregatedErrors = sampleBulkError(); + const item1 = sampleBulkErrorItem({ status: 400, reason: 'Parse Error' }); + const item2 = sampleBulkErrorItem({ status: 400, reason: 'Parse Error' }); + const item3 = sampleBulkErrorItem({ status: 500, reason: 'Bad Network' }); + const item4 = sampleBulkErrorItem({ status: 500, reason: 'Bad Network' }); + twoAggregatedErrors.items = [item1, item2, item3, item4]; + const aggregated = errorAggregator(twoAggregatedErrors, []); + const expected: BulkResponseErrorAggregation = { + 'Parse Error': { + count: 2, + statusCode: 400, + }, + 'Bad Network': { + count: 2, + statusCode: 500, + }, + }; + expect(aggregated).toEqual(expected); + }); + + test('it should aggregate three of the same errors with the correct count of 2 for each error type', () => { + const twoAggregatedErrors = sampleBulkError(); + const item1 = sampleBulkErrorItem({ status: 400, reason: 'Parse Error' }); + const item2 = sampleBulkErrorItem({ status: 400, reason: 'Parse Error' }); + const item3 = sampleBulkErrorItem({ status: 500, reason: 'Bad Network' }); + const item4 = sampleBulkErrorItem({ status: 500, reason: 'Bad Network' }); + const item5 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + const item6 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + twoAggregatedErrors.items = [item1, item2, item3, item4, item5, item6]; + const aggregated = errorAggregator(twoAggregatedErrors, []); + const expected: BulkResponseErrorAggregation = { + 'Parse Error': { + count: 2, + statusCode: 400, + }, + 'Bad Network': { + count: 2, + statusCode: 500, + }, + 'Bad Gateway': { + count: 2, + statusCode: 502, + }, + }; + expect(aggregated).toEqual(expected); + }); + + test('it should aggregate a mix of errors with the correct aggregate count of each', () => { + const twoAggregatedErrors = sampleBulkError(); + const item1 = sampleBulkErrorItem({ status: 400, reason: 'Parse Error' }); + const item2 = sampleBulkErrorItem({ status: 500, reason: 'Bad Network' }); + const item3 = sampleBulkErrorItem({ status: 500, reason: 'Bad Network' }); + const item4 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + const item5 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + const item6 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + twoAggregatedErrors.items = [item1, item2, item3, item4, item5, item6]; + const aggregated = errorAggregator(twoAggregatedErrors, []); + const expected: BulkResponseErrorAggregation = { + 'Parse Error': { + count: 1, + statusCode: 400, + }, + 'Bad Network': { + count: 2, + statusCode: 500, + }, + 'Bad Gateway': { + count: 3, + statusCode: 502, + }, + }; + expect(aggregated).toEqual(expected); + }); + + test('it will ignore error single codes such as 409', () => { + const twoAggregatedErrors = sampleBulkError(); + const item1 = sampleBulkErrorItem({ status: 409, reason: 'Conflict Error' }); + const item2 = sampleBulkErrorItem({ status: 409, reason: 'Conflict Error' }); + const item3 = sampleBulkErrorItem({ status: 500, reason: 'Bad Network' }); + const item4 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + const item5 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + const item6 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + twoAggregatedErrors.items = [item1, item2, item3, item4, item5, item6]; + const aggregated = errorAggregator(twoAggregatedErrors, [409]); + const expected: BulkResponseErrorAggregation = { + 'Bad Network': { + count: 1, + statusCode: 500, + }, + 'Bad Gateway': { + count: 3, + statusCode: 502, + }, + }; + expect(aggregated).toEqual(expected); + }); + + test('it will ignore two error codes such as 409 and 502', () => { + const twoAggregatedErrors = sampleBulkError(); + const item1 = sampleBulkErrorItem({ status: 409, reason: 'Conflict Error' }); + const item2 = sampleBulkErrorItem({ status: 409, reason: 'Conflict Error' }); + const item3 = sampleBulkErrorItem({ status: 500, reason: 'Bad Network' }); + const item4 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + const item5 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + const item6 = sampleBulkErrorItem({ status: 502, reason: 'Bad Gateway' }); + twoAggregatedErrors.items = [item1, item2, item3, item4, item5, item6]; + const aggregated = errorAggregator(twoAggregatedErrors, [409, 502]); + const expected: BulkResponseErrorAggregation = { + 'Bad Network': { + count: 1, + statusCode: 500, + }, + }; + expect(aggregated).toEqual(expected); + }); + + test('it will return an empty object given valid inputs and status codes to ignore', () => { + const bulkResponse = sampleBulkResponse(); + const aggregated = errorAggregator(bulkResponse, [409, 502]); + const expected: BulkResponseErrorAggregation = {}; + expect(aggregated).toEqual(expected); + }); + }); +}); diff --git a/x-pack/plugins/rule_registry/server/utils/utils.ts b/x-pack/plugins/rule_registry/server/utils/utils.ts new file mode 100644 index 00000000000000..2d5d3766e19b25 --- /dev/null +++ b/x-pack/plugins/rule_registry/server/utils/utils.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +export type BulkResponseErrorAggregation = Record; + +/** + * Given a BulkResponse this will return an aggregation based on the errors if any exist + * from the BulkResponse. Errors are aggregated on the reason as the unique key. + * + * Example would be: + * { + * 'Parse Error': { + * count: 100, + * statusCode: 400, + * }, + * 'Internal server error': { + * count: 3, + * statusCode: 500, + * } + * } + * If this does not return any errors then you will get an empty object like so: {} + * @param response The bulk response to aggregate based on the error message + * @param ignoreStatusCodes Optional array of status codes to ignore when creating aggregate error messages + * @returns The aggregated example as shown above. + */ +export const errorAggregator = ( + response: estypes.BulkResponse, + ignoreStatusCodes: number[] +): BulkResponseErrorAggregation => { + return response.items.reduce((accum, item) => { + if (item.create?.error != null && !ignoreStatusCodes.includes(item.create.status)) { + if (accum[item.create.error.reason] == null) { + accum[item.create.error.reason] = { + count: 1, + statusCode: item.create.status, + }; + } else { + accum[item.create.error.reason] = { + count: accum[item.create.error.reason].count + 1, + statusCode: item.create.status, + }; + } + } + return accum; + }, {}); +}; diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts index 9a9236d573fc4e..7514edea6247ff 100644 --- a/x-pack/plugins/security_solution/common/constants.ts +++ b/x-pack/plugins/security_solution/common/constants.ts @@ -99,6 +99,7 @@ export enum SecurityPageName { hosts = 'hosts', hostsAnomalies = 'hosts-anomalies', hostsExternalAlerts = 'hosts-external_alerts', + hostsRisk = 'hosts-risk', investigate = 'investigate', network = 'network', networkAnomalies = 'network-anomalies', @@ -359,7 +360,7 @@ export const showAllOthersBucket: string[] = [ */ export const ELASTIC_NAME = 'estc' as const; -export const RISKY_HOSTS_INDEX_PREFIX = 'ml_host_risk_score_latest_' as const; +export const RISKY_HOSTS_INDEX_PREFIX = 'ml_host_risk_score_' as const; export const TRANSFORM_STATES = { ABORTING: 'aborting', diff --git a/x-pack/plugins/security_solution/common/detection_engine/schemas/request/query_signals_index_schema.ts b/x-pack/plugins/security_solution/common/detection_engine/schemas/request/query_signals_index_schema.ts index ed3664b6792b3b..083c60a0a85270 100644 --- a/x-pack/plugins/security_solution/common/detection_engine/schemas/request/query_signals_index_schema.ts +++ b/x-pack/plugins/security_solution/common/detection_engine/schemas/request/query_signals_index_schema.ts @@ -15,6 +15,7 @@ export const querySignalsSchema = t.exact( size: PositiveInteger, track_total_hits: t.boolean, _source: t.array(t.string), + runtime_mappings: t.unknown, }) ); diff --git a/x-pack/plugins/security_solution/common/field_maps/alerts.ts b/x-pack/plugins/security_solution/common/field_maps/alerts.ts index 08ce8f098f6fd8..330f85a8a83439 100644 --- a/x-pack/plugins/security_solution/common/field_maps/alerts.ts +++ b/x-pack/plugins/security_solution/common/field_maps/alerts.ts @@ -54,7 +54,7 @@ export const alertsFieldMap: FieldMap = { required: false, }, 'kibana.alert.group.index': { - type: 'keyword', + type: 'integer', array: false, required: false, }, diff --git a/x-pack/plugins/security_solution/common/field_maps/rules.ts b/x-pack/plugins/security_solution/common/field_maps/rules.ts index 5277a594bc31ea..062e4ee5c52475 100644 --- a/x-pack/plugins/security_solution/common/field_maps/rules.ts +++ b/x-pack/plugins/security_solution/common/field_maps/rules.ts @@ -26,31 +26,11 @@ export const rulesFieldMap = { array: true, required: false, }, - 'kibana.alert.rule.index': { - type: 'keyword', - array: true, - required: true, - }, - 'kibana.alert.rule.language': { - type: 'keyword', - array: true, - required: true, - }, 'kibana.alert.rule.max_signals': { type: 'long', array: true, required: true, }, - 'kibana.alert.rule.query': { - type: 'keyword', - array: true, - required: true, - }, - 'kibana.alert.rule.saved_id': { - type: 'keyword', - array: true, - required: true, - }, 'kibana.alert.rule.threat.framework': { type: 'keyword', array: false, @@ -101,91 +81,21 @@ export const rulesFieldMap = { array: false, required: true, }, - 'kibana.alert.rule.threat_filters': { - type: 'keyword', - array: true, - required: false, - }, - 'kibana.alert.rule.threat_index': { - type: 'keyword', - array: true, - required: false, - }, - 'kibana.alert.rule.threat_indicator_path': { - type: 'keyword', - array: true, - required: false, - }, - 'kibana.alert.rule.threat_language': { - type: 'keyword', - array: true, - required: false, - }, - 'kibana.alert.rule.threat_mapping': { - type: 'object', - array: true, - required: false, - }, - 'kibana.alert.rule.threat_mapping.entries.field': { - type: 'keyword', - array: true, - required: false, - }, - 'kibana.alert.rule.threat_mapping.entries.value': { + 'kibana.alert.rule.timeline_id': { type: 'keyword', array: true, required: false, }, - 'kibana.alert.rule.threat_mapping.entries.type': { + 'kibana.alert.rule.timeline_title': { type: 'keyword', array: true, required: false, }, - 'kibana.alert.rule.threat_query': { + 'kibana.alert.rule.timestamp_override': { type: 'keyword', - array: true, - required: false, - }, - 'kibana.alert.rule.threshold': { - type: 'object', - array: true, - required: false, - }, - 'kibana.alert.rule.threshold.field': { - type: 'keyword', - array: false, - required: false, - }, - 'kibana.alert.rule.threshold.value': { - type: 'float', array: false, required: false, }, - 'kibana.alert.rule.threshold.cardinality': { - type: 'object', - array: true, - required: false, - }, - 'kibana.alert.rule.threshold.cardinality.field': { - type: 'keyword', - array: false, - required: false, - }, - 'kibana.alert.rule.threshold.cardinality.value': { - type: 'long', - array: false, - required: false, - }, - 'kibana.alert.rule.timeline_id': { - type: 'keyword', - array: true, - required: false, - }, - 'kibana.alert.rule.timeline_title': { - type: 'keyword', - array: true, - required: false, - }, } as const; export type RulesFieldMap = typeof rulesFieldMap; diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/risk_score/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/risk_score/index.ts index 4273c08c638f3f..1c0d20161823ba 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/risk_score/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts/risk_score/index.ts @@ -11,13 +11,16 @@ import type { IEsSearchResponse, } from '../../../../../../../../src/plugins/data/common'; import { RISKY_HOSTS_INDEX_PREFIX } from '../../../../constants'; -import { Inspect, Maybe, TimerangeInput } from '../../../common'; +import { Direction, Inspect, Maybe, TimerangeInput } from '../../../common'; export interface HostsRiskScoreRequestOptions extends IEsSearchRequest { defaultIndex: string[]; factoryQueryType?: FactoryQueryTypes; hostNames?: string[]; timerange?: TimerangeInput; + onlyLatest?: boolean; + limit?: number; + sortOrder?: Direction.asc | Direction.desc; } export interface HostsRiskScoreStrategyResponse extends IEsSearchResponse { @@ -25,6 +28,7 @@ export interface HostsRiskScoreStrategyResponse extends IEsSearchResponse { } export interface HostsRiskScore { + '@timestamp': string; host: { name: string; }; @@ -37,9 +41,9 @@ export interface HostsRiskScore { export interface RuleRisk { rule_name: string; - rule_risk: string; + rule_risk: number; } -export const getHostRiskIndex = (spaceId: string): string => { - return `${RISKY_HOSTS_INDEX_PREFIX}${spaceId}`; +export const getHostRiskIndex = (spaceId: string, onlyLatest: boolean = true): string => { + return `${RISKY_HOSTS_INDEX_PREFIX}${onlyLatest ? 'latest_' : ''}${spaceId}`; }; diff --git a/x-pack/plugins/security_solution/cypress/integration/detection_alerts/attach_to_case.spec.ts b/x-pack/plugins/security_solution/cypress/integration/detection_alerts/attach_to_case.spec.ts index d7a5ce6799230c..e5c9832c52fd7b 100644 --- a/x-pack/plugins/security_solution/cypress/integration/detection_alerts/attach_to_case.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/detection_alerts/attach_to_case.spec.ts @@ -20,7 +20,7 @@ import { login, loginAndWaitForPage, waitForPageWithoutDateRange } from '../../t import { refreshPage } from '../../tasks/security_header'; import { ALERTS_URL } from '../../urls/navigation'; -import { ATTACH_ALERT_TO_CASE_BUTTON } from '../../screens/alerts'; +import { ATTACH_ALERT_TO_CASE_BUTTON, TIMELINE_CONTEXT_MENU_BTN } from '../../screens/alerts'; const loadDetectionsPage = (role: ROLES) => { waitForPageWithoutDateRange(ALERTS_URL, role); @@ -48,8 +48,8 @@ describe('Alerts timeline', () => { }); it('should not allow user with read only privileges to attach alerts to cases', () => { - expandFirstAlertActions(); - cy.get(ATTACH_ALERT_TO_CASE_BUTTON).should('not.exist'); + // Disabled actions for read only users are hidden, so actions button should not show + cy.get(TIMELINE_CONTEXT_MENU_BTN).should('not.exist'); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/detection_rules/export_rule.spec.ts b/x-pack/plugins/security_solution/cypress/integration/detection_rules/export_rule.spec.ts index 18b7b122f0967b..1923343f65e61d 100644 --- a/x-pack/plugins/security_solution/cypress/integration/detection_rules/export_rule.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/detection_rules/export_rule.spec.ts @@ -11,7 +11,7 @@ import { waitForAlertsIndexToBeCreated, waitForAlertsPanelToBeLoaded, } from '../../tasks/alerts'; -import { exportFirstRule } from '../../tasks/alerts_detection_rules'; +import { exportFirstRule, getRulesImportExportToast } from '../../tasks/alerts_detection_rules'; import { createCustomRule } from '../../tasks/api_calls/rules'; import { cleanKibana } from '../../tasks/common'; import { loginAndWaitForPageWithoutDateRange } from '../../tasks/login'; @@ -36,6 +36,9 @@ describe('Export rules', () => { exportFirstRule(); cy.wait('@export').then(({ response }) => { cy.wrap(response?.body).should('eql', expectedExportedRule(this.ruleResponse)); + getRulesImportExportToast([ + 'Successfully exported 1 of 1 rule. Prebuilt rules were excluded from the resulting file.', + ]); }); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/detection_rules/import_rules.spec.ts b/x-pack/plugins/security_solution/cypress/integration/detection_rules/import_rules.spec.ts index f12df0bf7f026d..f6aeafaa97e7ac 100644 --- a/x-pack/plugins/security_solution/cypress/integration/detection_rules/import_rules.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/detection_rules/import_rules.spec.ts @@ -11,7 +11,7 @@ import { waitForAlertsPanelToBeLoaded, } from '../../tasks/alerts'; import { - getRulesImportToast, + getRulesImportExportToast, importRules, importRulesWithOverwriteAll, } from '../../tasks/alerts_detection_rules'; @@ -35,7 +35,10 @@ describe('Import rules', () => { cy.wait('@import').then(({ response }) => { cy.wrap(response?.statusCode).should('eql', 200); - getRulesImportToast(['Successfully imported 1 rule', 'Successfully imported 2 exceptions.']); + getRulesImportExportToast([ + 'Successfully imported 1 rule', + 'Successfully imported 2 exceptions.', + ]); }); }); @@ -51,7 +54,7 @@ describe('Import rules', () => { cy.wait('@import').then(({ response }) => { cy.wrap(response?.statusCode).should('eql', 200); - getRulesImportToast(['Failed to import 1 rule', 'Failed to import 2 exceptions']); + getRulesImportExportToast(['Failed to import 1 rule', 'Failed to import 2 exceptions']); }); }); @@ -67,7 +70,10 @@ describe('Import rules', () => { cy.wait('@import').then(({ response }) => { cy.wrap(response?.statusCode).should('eql', 200); - getRulesImportToast(['Successfully imported 1 rule', 'Successfully imported 2 exceptions.']); + getRulesImportExportToast([ + 'Successfully imported 1 rule', + 'Successfully imported 2 exceptions.', + ]); }); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/hosts/host_details_risk_tab.spec.ts b/x-pack/plugins/security_solution/cypress/integration/hosts/host_details_risk_tab.spec.ts new file mode 100644 index 00000000000000..8f17d69a0d35be --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/integration/hosts/host_details_risk_tab.spec.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { loginAndWaitForHostDetailsPage } from '../../tasks/login'; + +import { cleanKibana } from '../../tasks/common'; +import { esArchiverLoad, esArchiverUnload } from '../../tasks/es_archiver'; +import { + navigateToHostRiskDetailTab, + openRiskFlyout, + waitForTableToLoad, +} from '../../tasks/host_risk'; +import { RULE_NAME, RISK_FLYOUT } from '../../screens/hosts/host_risk'; + +describe('risk tab', () => { + before(() => { + cleanKibana(); + esArchiverLoad('risky_hosts'); + loginAndWaitForHostDetailsPage('siem-kibana'); + navigateToHostRiskDetailTab(); + waitForTableToLoad(); + }); + + after(() => { + esArchiverUnload('risky_hosts'); + }); + + it('renders risk tab', () => { + cy.get(RULE_NAME).eq(3).should('have.text', 'Unusual Linux Username'); + }); + + it('shows risk information overlay when button is clicked', () => { + openRiskFlyout(); + cy.get(RISK_FLYOUT).should('have.text', 'How is host risk calculated?'); + }); +}); diff --git a/x-pack/plugins/security_solution/cypress/integration/hosts/hosts_risk_column.ts b/x-pack/plugins/security_solution/cypress/integration/hosts/hosts_risk_column.spec.ts similarity index 100% rename from x-pack/plugins/security_solution/cypress/integration/hosts/hosts_risk_column.ts rename to x-pack/plugins/security_solution/cypress/integration/hosts/hosts_risk_column.spec.ts diff --git a/x-pack/plugins/security_solution/cypress/integration/timelines/fields_browser.spec.ts b/x-pack/plugins/security_solution/cypress/integration/timelines/fields_browser.spec.ts index df194136c6bb2c..be726f0323d48c 100644 --- a/x-pack/plugins/security_solution/cypress/integration/timelines/fields_browser.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/timelines/fields_browser.spec.ts @@ -109,7 +109,7 @@ describe('Fields Browser', () => { filterFieldsBrowser(filterInput); - cy.get(FIELDS_BROWSER_SELECTED_CATEGORY_COUNT).should('have.text', '4'); + cy.get(FIELDS_BROWSER_SELECTED_CATEGORY_COUNT).should('have.text', '5'); }); }); diff --git a/x-pack/plugins/security_solution/cypress/screens/hosts/host_risk.ts b/x-pack/plugins/security_solution/cypress/screens/hosts/host_risk.ts new file mode 100644 index 00000000000000..00bd39b911fb81 --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/screens/hosts/host_risk.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const RULE_NAME = '[data-test-subj="topHostScoreContributors"] .euiTableCellContent__text'; + +export const RISK_FLYOUT = '[data-test-subj="open-risk-information-flyout"] .euiFlyoutHeader'; + +export const RISK_DETAILS_NAV = '[data-test-subj="navigation-hostRisk"]'; + +export const RISK_FLYOUT_TRIGGER = '[data-test-subj="open-risk-information-flyout-trigger"]'; + +export const LOADING_TABLE = '.euiBasicTable-loading'; diff --git a/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts b/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts index e2c3882d10b8c7..a000607d0a8036 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts @@ -275,7 +275,7 @@ export const importRules = (rulesFile: string) => { cy.get(INPUT_FILE).should('not.exist'); }; -export const getRulesImportToast = (headers: string[]) => { +export const getRulesImportExportToast = (headers: string[]) => { cy.get(TOASTER) .should('exist') .then(($els) => { diff --git a/x-pack/plugins/security_solution/cypress/tasks/host_risk.ts b/x-pack/plugins/security_solution/cypress/tasks/host_risk.ts new file mode 100644 index 00000000000000..7a357e8a5c7fb2 --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/tasks/host_risk.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { LOADING_TABLE, RISK_DETAILS_NAV, RISK_FLYOUT_TRIGGER } from '../screens/hosts/host_risk'; + +export const navigateToHostRiskDetailTab = () => cy.get(RISK_DETAILS_NAV).click(); + +export const openRiskFlyout = () => cy.get(RISK_FLYOUT_TRIGGER).click(); + +export const waitForTableToLoad = () => { + cy.get(LOADING_TABLE).should('exist'); + cy.get(LOADING_TABLE).should('not.exist'); +}; diff --git a/x-pack/plugins/security_solution/cypress/tasks/login.ts b/x-pack/plugins/security_solution/cypress/tasks/login.ts index 0610333352ce85..ad6ad0486e5185 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/login.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/login.ts @@ -334,8 +334,8 @@ export const loginAndWaitForTimeline = (timelineId: string, role?: ROLES) => { cy.get(TIMELINE_FLYOUT_BODY).should('be.visible'); }; -export const loginAndWaitForHostDetailsPage = () => { - loginAndWaitForPage(hostDetailsUrl('suricata-iowa')); +export const loginAndWaitForHostDetailsPage = (hostName = 'suricata-iowa') => { + loginAndWaitForPage(hostDetailsUrl(hostName)); cy.get('[data-test-subj="loading-spinner"]', { timeout: 12000 }).should('not.exist'); }; diff --git a/x-pack/plugins/security_solution/package.json b/x-pack/plugins/security_solution/package.json index 821550f21919ac..a899f5948c7809 100644 --- a/x-pack/plugins/security_solution/package.json +++ b/x-pack/plugins/security_solution/package.json @@ -6,7 +6,7 @@ "license": "Elastic-License", "scripts": { "extract-mitre-attacks": "node scripts/extract_tactics_techniques_mitre.js && node ../../../scripts/eslint ./public/detections/mitre/mitre_tactics_techniques.ts --fix", - "build-beat-doc": "node scripts/beat_docs/build.js && node ../../../scripts/eslint ./server/utils/beat_schema/fields.ts --fix", + "build-beat-doc": "node scripts/beat_docs/build.js && node ../../../scripts/eslint ../timelines/server/utils/beat_schema/fields.ts --fix", "cypress": "../../../node_modules/.bin/cypress", "cypress:open": "yarn cypress open --config-file ./cypress/cypress.json", "cypress:open:ccs": "yarn cypress:open --config integrationFolder=./cypress/ccs_integration", diff --git a/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts b/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts index 1334ab6acd467e..a43ae947a5f124 100644 --- a/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts +++ b/x-pack/plugins/security_solution/public/common/components/drag_and_drop/helpers.ts @@ -139,31 +139,20 @@ export const allowTopN = ({ 'kibana.alert.original_event.timezone', 'kibana.alert.original_event.type', 'kibana.alert.original_time', - 'kibana.alert.parent.depth', - 'kibana.alert.parent.id', - 'kibana.alert.parent.index', - 'kibana.alert.parent.rule', - 'kibana.alert.parent.type', 'kibana.alert.rule.created_by', 'kibana.alert.rule.description', 'kibana.alert.rule.enabled', 'kibana.alert.rule.false_positives', - 'kibana.alert.rule.filters', 'kibana.alert.rule.from', 'kibana.alert.rule.uuid', 'kibana.alert.rule.immutable', - 'kibana.alert.rule.index', 'kibana.alert.rule.interval', - 'kibana.alert.rule.language', 'kibana.alert.rule.max_signals', 'kibana.alert.rule.name', 'kibana.alert.rule.note', - 'kibana.alert.rule.output_index', - 'kibana.alert.rule.query', 'kibana.alert.rule.references', 'kibana.alert.risk_score', 'kibana.alert.rule.rule_id', - 'kibana.alert.rule.saved_id', 'kibana.alert.severity', 'kibana.alert.rule.size', 'kibana.alert.rule.tags', diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/__mocks__/index.ts b/x-pack/plugins/security_solution/public/common/components/event_details/__mocks__/index.ts index e06cd379e51311..98075f3db187c3 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/__mocks__/index.ts +++ b/x-pack/plugins/security_solution/public/common/components/event_details/__mocks__/index.ts @@ -332,22 +332,6 @@ export const mockAlertDetailsData = [ originalValue: 'administrator', }, { category: 'user', field: 'user.id', values: ['S-1-0-0'], originalValue: 'S-1-0-0' }, - // TODO: The `parents` field no longer exists... use `ancestors` and `depth` - { - category: 'kibana', - field: 'kibana.alert.parents', - values: [ - '{"id":"688MAHYB7WTwW_Glsi_d","type":"event","index":"winlogbeat-7.10.0-2020.11.12-000001","depth":0}', - ], - originalValue: [ - { - id: '688MAHYB7WTwW_Glsi_d', - type: 'event', - index: 'winlogbeat-7.10.0-2020.11.12-000001', - depth: 0, - }, - ], - }, { category: 'kibana', field: 'kibana.alert.ancestors', @@ -399,12 +383,6 @@ export const mockAlertDetailsData = [ values: [], originalValue: [], }, - { - category: 'kibana', - field: 'kibana.alert.rule.output_index', - values: ['.siem-signals-angelachuang-default'], - originalValue: '.siem-signals-angelachuang-default', - }, { category: 'kibana', field: 'kibana.alert.rule.description', @@ -417,45 +395,9 @@ export const mockAlertDetailsData = [ values: ['now-360s'], originalValue: 'now-360s', }, - { - category: 'kibana', - field: 'kibana.alert.rule.index', - values: [ - 'apm-*-transaction*', - 'traces-apm*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ], - originalValue: [ - 'apm-*-transaction*', - 'traces-apm*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ], - }, { category: 'kibana', field: 'kibana.alert.rule.interval', values: ['5m'], originalValue: '5m' }, - { - category: 'kibana', - field: 'kibana.alert.rule.language', - values: ['kuery'], - originalValue: 'kuery', - }, { category: 'kibana', field: 'kibana.alert.rule.license', values: [''], originalValue: '' }, { category: 'kibana', field: 'kibana.alert.rule.name', values: ['xxx'], originalValue: 'xxx' }, - { - category: 'kibana', - field: 'kibana.alert.rule.query', - values: ['@timestamp : * '], - originalValue: '@timestamp : * ', - }, { category: 'kibana', field: 'kibana.alert.rule.references', values: [], originalValue: [] }, { category: 'kibana', @@ -477,27 +419,6 @@ export const mockAlertDetailsData = [ originalValue: 'query', }, { category: 'kibana', field: 'kibana.alert.rule.to', values: ['now'], originalValue: 'now' }, - { - category: 'kibana', - field: 'kibana.alert.rule.filters', - values: [ - '{"meta":{"alias":null,"negate":false,"disabled":false,"type":"exists","key":"message","value":"exists"},"exists":{"field":"message"},"$state":{"store":"appState"}}', - ], - originalValue: [ - { - meta: { - alias: null, - negate: false, - disabled: false, - type: 'exists', - key: 'message', - value: 'exists', - }, - exists: { field: 'message' }, - $state: { store: 'appState' }, - }, - ], - }, { category: 'kibana', field: 'kibana.alert.rule.created_by', @@ -526,28 +447,6 @@ export const mockAlertDetailsData = [ }, { category: 'kibana', field: 'kibana.alert.rule.exceptions_list', values: [], originalValue: [] }, { category: 'kibana', field: 'kibana.alert.depth', values: [1], originalValue: 1 }, - // TODO: The `parent` no longer exists. Use `ancestors` and `depth` - { - category: 'kibana', - field: 'kibana.alert.parent.id', - values: ['688MAHYB7WTwW_Glsi_d'], - originalValue: '688MAHYB7WTwW_Glsi_d', - }, - // TODO: The `parent` no longer exists. Use `ancestors` and `depth` - { - category: 'kibana', - field: 'kibana.alert.parent.type', - values: ['event'], - originalValue: 'event', - }, - // TODO: The `parent` no longer exists. Use `ancestors` and `depth` - { - category: 'kibana', - field: 'kibana.alert.parent.index', - values: ['winlogbeat-7.10.0-2020.11.12-000001'], - originalValue: 'winlogbeat-7.10.0-2020.11.12-000001', - }, - { category: 'kibana', field: 'kibana.alert.parent.depth', values: [0], originalValue: 0 }, { category: 'kibana', field: 'kibana.alert.original_time', diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/host_risk_summary.test.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/host_risk_summary.test.tsx index 9d60fbc496d8db..945317036e7bcb 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/host_risk_summary.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/host_risk_summary.test.tsx @@ -20,6 +20,7 @@ describe('HostRiskSummary', () => { isModuleEnabled: true, result: [ { + '@timestamp': '1641902481', host: { name: 'test-host-name', }, @@ -63,6 +64,7 @@ describe('HostRiskSummary', () => { isModuleEnabled: false, result: [ { + '@timestamp': '1641902530', host: { name: 'test-host-name', }, diff --git a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/exception_entries.test.tsx b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/exception_entries.test.tsx index 228de32fee7d29..6070924523f63c 100644 --- a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/exception_entries.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/exception_entries.test.tsx @@ -23,7 +23,7 @@ describe('ExceptionEntries', () => { const wrapper = mount( { const wrapper = mount( { const wrapper = mount( { const wrapper = mount( { expect(mockOnDelete).toHaveBeenCalledTimes(1); }); - test('it renders edit button disabled if "disableDelete" is "true"', () => { + test('it does not render edit button if "disableActions" is "true"', () => { const wrapper = mount( ); - const editBtn = wrapper.find('[data-test-subj="exceptionsViewerEditBtn"] button').at(0); + const editBtns = wrapper.find('[data-test-subj="exceptionsViewerEditBtn"] button'); - expect(editBtn.prop('disabled')).toBeTruthy(); + expect(editBtns).toHaveLength(0); }); - test('it renders delete button in loading state if "disableDelete" is "true"', () => { + test('it does not render delete button if "disableActions" is "true"', () => { const wrapper = mount( ); - const deleteBtn = wrapper.find('[data-test-subj="exceptionsViewerDeleteBtn"] button').at(0); + const deleteBtns = wrapper.find('[data-test-subj="exceptionsViewerDeleteBtn"] button').at(0); - expect(deleteBtn.prop('disabled')).toBeTruthy(); - expect(deleteBtn.find('.euiLoadingSpinner')).toBeTruthy(); + expect(deleteBtns).toHaveLength(0); }); test('it renders nested entry', () => { @@ -126,7 +125,7 @@ describe('ExceptionEntries', () => { const wrapper = mount( { const wrapper = mount( void; onEdit: () => void; } const ExceptionEntriesComponent = ({ entries, - disableDelete, + disableActions, onDelete, onEdit, }: ExceptionEntriesComponentProps): JSX.Element => { @@ -181,32 +181,32 @@ const ExceptionEntriesComponent = ({ - - - - - {i18n.EDIT} - - - - - {i18n.REMOVE} - - - - + {!disableActions && ( + + + + + {i18n.EDIT} + + + + + {i18n.REMOVE} + + + + + )} ); diff --git a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.stories.tsx b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.stories.tsx index f8697b2f3db797..898a9e3ab03886 100644 --- a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.stories.tsx +++ b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.stories.tsx @@ -35,6 +35,7 @@ storiesOf('Components/ExceptionItem', module) return ( ); + }) + .add('with actions disabled', () => { + const payload = getExceptionListItemSchemaMock(); + payload.description = ''; + payload.comments = getCommentsArrayMock(); + payload.entries = [ + { + field: 'actingProcess.file.signer', + type: 'match', + operator: 'included', + value: 'Elastic, N.V.', + }, + ]; + + return ( + + ); }); diff --git a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.test.tsx index 7c55c0de68c641..983d837267795a 100644 --- a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.test.tsx @@ -32,6 +32,7 @@ describe('ExceptionItem', () => { const wrapper = mount( { const wrapper = mount( { ); }); + it('it does not render edit or delete action buttons when "disableActions" is "true"', () => { + const mockOnEditException = jest.fn(); + const exceptionItem = getExceptionListItemSchemaMock(); + + const wrapper = mount( + + + + ); + + const editBtn = wrapper.find('[data-test-subj="exceptionsViewerEditBtn"] button'); + const deleteBtn = wrapper.find('[data-test-subj="exceptionsViewerDeleteBtn"] button'); + + expect(editBtn).toHaveLength(0); + expect(deleteBtn).toHaveLength(0); + }); + it('it invokes "onEditException" when edit button clicked', () => { const mockOnEditException = jest.fn(); const exceptionItem = getExceptionListItemSchemaMock(); @@ -77,6 +103,7 @@ describe('ExceptionItem', () => { const wrapper = mount( { const wrapper = mount( { ); - const editBtn = wrapper.find('[data-test-subj="exceptionsViewerDeleteBtn"] button').at(0); - editBtn.simulate('click'); + const deleteBtn = wrapper.find('[data-test-subj="exceptionsViewerDeleteBtn"] button').at(0); + deleteBtn.simulate('click'); expect(mockOnDeleteException).toHaveBeenCalledWith({ id: '1', @@ -124,6 +152,7 @@ describe('ExceptionItem', () => { const wrapper = mount( { const wrapper = mount( void; showName?: boolean; showModified?: boolean; + disableActions: boolean; 'data-test-subj'?: string; } const ExceptionItemComponent = ({ + disableActions, loadingItemIds, exceptionItem, commentsAccordionId, @@ -78,7 +80,7 @@ const ExceptionItemComponent = ({ return getFormattedComments(exceptionItem.comments); }, [exceptionItem.comments]); - const disableDelete = useMemo((): boolean => { + const disableItemActions = useMemo((): boolean => { const foundItems = loadingItemIds.filter(({ id }) => id === exceptionItem.id); return foundItems.length > 0; }, [loadingItemIds, exceptionItem.id]); @@ -96,7 +98,7 @@ const ExceptionItemComponent = ({ showName={showName} /> { ).toBeTruthy(); }); + // This occurs if user does not have sufficient privileges + it('it does not display add exception button if no list types available', () => { + const wrapper = mount( + + ); + + expect(wrapper.find('[data-test-subj="exceptionsHeaderAddExceptionBtn"]').exists()).toBeFalsy(); + }); + it('it displays toggles and add exception popover when more than one list type available', () => { const wrapper = mount( - {supportedListTypes.length < 2 && ( + {supportedListTypes.length === 1 && ( { showEmpty showNoResults={false} isInitLoading={false} + disableActions={false} exceptions={[]} loadingItemIds={[]} commentsAccordionId="comments-accordion-id" @@ -54,6 +55,7 @@ describe('ExceptionsViewerItems', () => { showEmpty={false} showNoResults isInitLoading={false} + disableActions={false} exceptions={[]} loadingItemIds={[]} commentsAccordionId="comments-accordion-id" @@ -78,6 +80,7 @@ describe('ExceptionsViewerItems', () => { showEmpty={false} showNoResults={false} isInitLoading={false} + disableActions={false} exceptions={[getExceptionListItemSchemaMock()]} loadingItemIds={[]} commentsAccordionId="comments-accordion-id" @@ -98,6 +101,7 @@ describe('ExceptionsViewerItems', () => { showEmpty={false} showNoResults={false} isInitLoading={true} + disableActions={false} exceptions={[]} loadingItemIds={[]} commentsAccordionId="comments-accordion-id" @@ -122,6 +126,7 @@ describe('ExceptionsViewerItems', () => { showEmpty={false} showNoResults={false} isInitLoading={false} + disableActions={false} exceptions={[exception1, exception2]} loadingItemIds={[]} commentsAccordionId="comments-accordion-id" @@ -147,6 +152,7 @@ describe('ExceptionsViewerItems', () => { showEmpty={false} showNoResults={false} isInitLoading={false} + disableActions={false} exceptions={[exception1, exception2]} loadingItemIds={[]} commentsAccordionId="comments-accordion-id" @@ -172,6 +178,7 @@ describe('ExceptionsViewerItems', () => { showEmpty={false} showNoResults={false} isInitLoading={false} + disableActions={false} exceptions={[getExceptionListItemSchemaMock()]} loadingItemIds={[]} commentsAccordionId="comments-accordion-id" diff --git a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exceptions_viewer_items.tsx b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exceptions_viewer_items.tsx index 64fb032b0425cb..5331b2376fd9f1 100644 --- a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exceptions_viewer_items.tsx +++ b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exceptions_viewer_items.tsx @@ -36,6 +36,7 @@ interface ExceptionsViewerItemsProps { showEmpty: boolean; showNoResults: boolean; isInitLoading: boolean; + disableActions: boolean; exceptions: ExceptionListItemSchema[]; loadingItemIds: ExceptionListItemIdentifiers[]; commentsAccordionId: string; @@ -52,6 +53,7 @@ const ExceptionsViewerItemsComponent: React.FC = ({ commentsAccordionId, onDeleteException, onEditExceptionItem, + disableActions, }): JSX.Element => ( {showEmpty || showNoResults || isInitLoading ? ( @@ -93,6 +95,7 @@ const ExceptionsViewerItemsComponent: React.FC = ({ )} ([]); + + const [{ canUserCRUD, hasIndexWrite }] = useUserData(); + + useEffect((): void => { + if (!canUserCRUD || !hasIndexWrite) { + setSupportedListTypes([]); + } else { + setSupportedListTypes(availableListTypes); + } + }, [availableListTypes, canUserCRUD, hasIndexWrite]); const setExceptions = useCallback( ({ @@ -356,7 +368,7 @@ const ExceptionsViewerComponent = ({ { const mockHasMlUserPermissions = true; + const mockRiskyHostEnabled = true; const mockProps: TabNavigationProps & RouteSpyState = { pageName: 'hosts', pathName: '/hosts', detailName: undefined, search: '', tabName: HostsTableType.authentications, - navTabs: navTabsHostDetails(hostName, mockHasMlUserPermissions), + navTabs: navTabsHostDetails(hostName, mockHasMlUserPermissions, mockRiskyHostEnabled), [CONSTANTS.timerange]: { global: { [CONSTANTS.timerange]: { diff --git a/x-pack/plugins/security_solution/public/common/components/news_feed/helpers.test.ts b/x-pack/plugins/security_solution/public/common/components/news_feed/helpers.test.ts index 5ccf9ba505b557..a5f04fe32f0a46 100644 --- a/x-pack/plugins/security_solution/public/common/components/news_feed/helpers.test.ts +++ b/x-pack/plugins/security_solution/public/common/components/news_feed/helpers.test.ts @@ -15,7 +15,7 @@ import { getLocale, getNewsFeedUrl, getNewsItemsFromApiResponse, - removeSnapshotFromVersion, + removeSuffixFromVersion, showNewsItem, } from './helpers'; import { NewsItem, RawNewsApiResponse } from './types'; @@ -23,53 +23,46 @@ import { NewsItem, RawNewsApiResponse } from './types'; jest.mock('../../lib/kibana'); describe('helpers', () => { - describe('removeSnapshotFromVersion', () => { + describe('removeSuffixFromVersion', () => { + test('removes entire suffix after version number', () => { + const version = '8.0.0-SNAPSHOT-rc1'; + + expect(removeSuffixFromVersion(version)).toEqual('8.0.0'); + }); test('it should remove an all-caps `-SNAPSHOT`', () => { const version = '8.0.0-SNAPSHOT'; - expect(removeSnapshotFromVersion(version)).toEqual('8.0.0'); + expect(removeSuffixFromVersion(version)).toEqual('8.0.0'); }); test('it should remove a mixed-case `-SnApShoT`', () => { const version = '8.0.0-SnApShoT'; - expect(removeSnapshotFromVersion(version)).toEqual('8.0.0'); - }); - - test('it should remove all occurrences of `-SNAPSHOT`, regardless of where they appear in the version', () => { - const version = '-SNAPSHOT8.0.0-SNAPSHOT'; - - expect(removeSnapshotFromVersion(version)).toEqual('8.0.0'); + expect(removeSuffixFromVersion(version)).toEqual('8.0.0'); }); test('it should NOT transform a version when it does not contain a `-SNAPSHOT`', () => { const version = '8.0.0'; - expect(removeSnapshotFromVersion(version)).toEqual('8.0.0'); + expect(removeSuffixFromVersion(version)).toEqual('8.0.0'); }); - test('it should NOT transform a version if it omits the dash in `SNAPSHOT`', () => { + test('it should transform a version if it omits the dash in `SNAPSHOT`', () => { const version = '8.0.0SNAPSHOT'; - expect(removeSnapshotFromVersion(version)).toEqual('8.0.0SNAPSHOT'); - }); - - test('it should NOT transform a version if has only a partial `-SNAPSHOT`', () => { - const version = '8.0.0-SNAP'; - - expect(removeSnapshotFromVersion(version)).toEqual('8.0.0-SNAP'); + expect(removeSuffixFromVersion(version)).toEqual('8.0.0'); }); test('it should NOT transform an undefined version', () => { const version = undefined; - expect(removeSnapshotFromVersion(version)).toBeUndefined(); + expect(removeSuffixFromVersion(version)).toBeUndefined(); }); test('it should NOT transform an empty version', () => { const version = ''; - expect(removeSnapshotFromVersion(version)).toEqual(''); + expect(removeSuffixFromVersion(version)).toEqual(''); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/news_feed/helpers.ts b/x-pack/plugins/security_solution/public/common/components/news_feed/helpers.ts index a6e551b378c5d8..0b6411f8362139 100644 --- a/x-pack/plugins/security_solution/public/common/components/news_feed/helpers.ts +++ b/x-pack/plugins/security_solution/public/common/components/news_feed/helpers.ts @@ -8,17 +8,17 @@ import { get } from 'lodash/fp'; import moment from 'moment'; import uuid from 'uuid'; - +import semverCoerce from 'semver/functions/coerce'; import { NewsItem, RawNewsApiItem, RawNewsApiResponse } from './types'; import { KibanaServices } from '../../lib/kibana'; /** - * Removes the `-SNAPSHOT` that is sometimes appended to the Kibana version, - * (e.g. `8.0.0-SNAPSHOT`), which is typically only seen in non-production + * Removes the suffix that is sometimes appended to the Kibana version, + * (e.g. `8.0.0-SNAPSHOT-rc1`), which is typically only seen in non-production * environments */ -export const removeSnapshotFromVersion = (kibanaVersion?: string) => - kibanaVersion?.replace(/-SNAPSHOT/gi, '') ?? kibanaVersion; +export const removeSuffixFromVersion = (kibanaVersion?: string) => + semverCoerce(kibanaVersion)?.version ?? kibanaVersion; /** * Combines the URL specified in the `newsFeedUrlSetting`, e.g. @@ -36,7 +36,7 @@ export const getNewsFeedUrl = ({ }) => [ newsFeedUrlSetting?.trim().replace(/\/$/, ''), - `v${removeSnapshotFromVersion(getKibanaVersion())}.json`, + `v${removeSuffixFromVersion(getKibanaVersion())}.json`, ].join('/'); /** Fall back to this language when extracting i18n news items from the feed */ diff --git a/x-pack/plugins/security_solution/public/common/components/top_n/helpers.test.tsx b/x-pack/plugins/security_solution/public/common/components/top_n/helpers.test.tsx index ffc49a0cfe36cf..68e1e6614e5f1b 100644 --- a/x-pack/plugins/security_solution/public/common/components/top_n/helpers.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/top_n/helpers.test.tsx @@ -115,17 +115,12 @@ const ruleNameFilter: Filter = { const threatMappingFilter: Filter = { meta: { alias: null, - negate: true, disabled: false, - type: 'exists', - key: 'kibana.alert.rule.threat_mapping', - value: 'exists', - }, - query: { - exists: { - field: 'kibana.alert.rule.threat_mapping', - }, + negate: false, + key: 'kibana.alert.rule.type', + type: 'term', }, + query: { term: { 'kibana.alert.rule.type': 'threat_match' } }, }; const workflowStatusFilter: Filter = { diff --git a/x-pack/plugins/security_solution/public/common/components/top_n/helpers.ts b/x-pack/plugins/security_solution/public/common/components/top_n/helpers.ts index 20ac48789a32fb..78a380bafe82c3 100644 --- a/x-pack/plugins/security_solution/public/common/components/top_n/helpers.ts +++ b/x-pack/plugins/security_solution/public/common/components/top_n/helpers.ts @@ -158,7 +158,6 @@ export const IGNORED_ALERT_FILTERS = [ ALERT_RULE_RULE_ID, // filters alerts to a single rule on the Security > Rules > details pages ALERT_RULE_RULE_NAME_OVERRIDE, ALERT_RULE_TAGS, - 'kibana.alert.rule.threat_mapping', // an "Additional filters" option on the alerts table ALERT_RULE_TO, ALERT_RULE_TYPE, ALERT_RULE_TYPE_ID, diff --git a/x-pack/plugins/security_solution/public/common/containers/hosts_risk/types.ts b/x-pack/plugins/security_solution/public/common/containers/hosts_risk/types.ts new file mode 100644 index 00000000000000..4a231b38ce6126 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/containers/hosts_risk/types.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const enum HostRiskScoreQueryId { + DEFAULT = 'HostRiskScore', + HOST_RISK_SCORE_OVER_TIME = 'HostRiskScoreOverTimeQuery', + TOP_HOST_SCORE_CONTRIBUTORS = 'TopHostScoreContributorsQuery', + OVERVIEW_RISKY_HOSTS = 'OverviewRiskyHosts', +} diff --git a/x-pack/plugins/security_solution/public/common/containers/hosts_risk/use_hosts_risk_score.ts b/x-pack/plugins/security_solution/public/common/containers/hosts_risk/use_hosts_risk_score.ts index debdacb570ad05..3c47c4d02b358c 100644 --- a/x-pack/plugins/security_solution/public/common/containers/hosts_risk/use_hosts_risk_score.ts +++ b/x-pack/plugins/security_solution/public/common/containers/hosts_risk/use_hosts_risk_score.ts @@ -8,17 +8,16 @@ import { i18n } from '@kbn/i18n'; import { useCallback, useEffect, useState } from 'react'; import { useDispatch } from 'react-redux'; - import { useAppToasts } from '../../hooks/use_app_toasts'; import { useKibana } from '../../lib/kibana'; import { inputsActions } from '../../store/actions'; import { isIndexNotFoundError } from '../../utils/exceptions'; -import { getHostRiskIndex, HostsRiskScore } from '../../../../common/search_strategy'; +import { Direction, getHostRiskIndex, HostsRiskScore } from '../../../../common/search_strategy'; import { useHostsRiskScoreComplete } from './use_hosts_risk_score_complete'; import { useIsExperimentalFeatureEnabled } from '../../hooks/use_experimental_features'; +import { HostRiskScoreQueryId } from './types'; -export const QUERY_ID = 'host_risk_score'; const noop = () => {}; const isRecord = (item: unknown): item is Record => @@ -37,12 +36,23 @@ export interface HostRisk { result?: HostsRiskScore[]; } +/** + * @param queryId Provide this parameter when using query inspector to identify the query. + */ export const useHostsRiskScore = ({ timerange, hostName, + onlyLatest = true, + queryId = HostRiskScoreQueryId.DEFAULT, + sortOrder, + limit, }: { timerange?: { to: string; from: string }; hostName?: string; + onlyLatest?: boolean; + queryId?: HostRiskScoreQueryId; + limit?: number; + sortOrder?: Direction; }): HostRisk | null => { const riskyHostsFeatureEnabled = useIsExperimentalFeatureEnabled('riskyHostsEnabled'); const [isModuleEnabled, setIsModuleEnabled] = useState(undefined); @@ -56,8 +66,8 @@ export const useHostsRiskScore = ({ const { error, result, start, loading: isHostsRiskScoreLoading } = useHostsRiskScoreComplete(); const deleteQuery = useCallback(() => { - dispatch(inputsActions.deleteOneQuery({ inputId: 'global', id: QUERY_ID })); - }, [dispatch]); + dispatch(inputsActions.deleteOneQuery({ inputId: 'global', id: queryId })); + }, [dispatch, queryId]); useEffect(() => { if (!isHostsRiskScoreLoading && result) { @@ -66,7 +76,7 @@ export const useHostsRiskScore = ({ dispatch( inputsActions.setQuery({ inputId: 'global', - id: QUERY_ID, + id: queryId, inspect: { dsl: result.inspect?.dsl ?? [], response: [JSON.stringify(result.rawResponse, null, 2)], @@ -77,7 +87,7 @@ export const useHostsRiskScore = ({ ); } return deleteQuery; - }, [deleteQuery, dispatch, isHostsRiskScoreLoading, result, setIsModuleEnabled]); + }, [deleteQuery, dispatch, isHostsRiskScoreLoading, result, setIsModuleEnabled, queryId]); useEffect(() => { if (error) { @@ -105,11 +115,24 @@ export const useHostsRiskScore = ({ ? { to: timerange.to, from: timerange.from, interval: '' } : undefined, hostNames: hostName ? [hostName] : undefined, - defaultIndex: [getHostRiskIndex(space.id)], + defaultIndex: [getHostRiskIndex(space.id, onlyLatest)], + onlyLatest, + sortOrder, + limit, }); }); } - }, [start, data, timerange, hostName, riskyHostsFeatureEnabled, spaces]); + }, [ + start, + data, + timerange, + hostName, + onlyLatest, + riskyHostsFeatureEnabled, + spaces, + sortOrder, + limit, + ]); if ((!hostName && !timerange) || !riskyHostsFeatureEnabled) { return null; diff --git a/x-pack/plugins/security_solution/public/common/containers/hosts_risk/use_hosts_risk_score_complete.ts b/x-pack/plugins/security_solution/public/common/containers/hosts_risk/use_hosts_risk_score_complete.ts index 6faaa3c8f08dbf..2531d533d830bf 100644 --- a/x-pack/plugins/security_solution/public/common/containers/hosts_risk/use_hosts_risk_score_complete.ts +++ b/x-pack/plugins/security_solution/public/common/containers/hosts_risk/use_hosts_risk_score_complete.ts @@ -30,6 +30,8 @@ export const getHostsRiskScore = ({ timerange, hostNames, signal, + limit, + sortOrder, }: GetHostsRiskScoreProps): Observable => data.search.search( { @@ -37,6 +39,8 @@ export const getHostsRiskScore = ({ factoryQueryType: HostsQueries.hostsRiskScore, timerange, hostNames, + limit, + sortOrder, }, { strategy: 'securitySolutionSearchStrategy', diff --git a/x-pack/plugins/security_solution/public/common/mock/global_state.ts b/x-pack/plugins/security_solution/public/common/mock/global_state.ts index 2d804392580d0a..cf7d9f1dae23e6 100644 --- a/x-pack/plugins/security_solution/public/common/mock/global_state.ts +++ b/x-pack/plugins/security_solution/public/common/mock/global_state.ts @@ -83,6 +83,7 @@ export const mockGlobalState: State = { uncommonProcesses: { activePage: 0, limit: 10 }, anomalies: null, externalAlerts: { activePage: 0, limit: 10 }, + hostRisk: null, }, }, details: { @@ -98,6 +99,7 @@ export const mockGlobalState: State = { uncommonProcesses: { activePage: 0, limit: 10 }, anomalies: null, externalAlerts: { activePage: 0, limit: 10 }, + hostRisk: null, }, }, }, diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/helpers.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/helpers.tsx index cd407a125cdb65..141df7a154c944 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/helpers.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/helpers.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { DEFAULT_MAX_TABLE_QUERY_SIZE } from '../../../../../common/constants'; export const getAlertsCountQuery = ( @@ -13,7 +14,8 @@ export const getAlertsCountQuery = ( to: string, additionalFilters: Array<{ bool: { filter: unknown[]; should: unknown[]; must_not: unknown[]; must: unknown[] }; - }> = [] + }> = [], + runtimeMappings?: MappingRuntimeFields ) => { return { size: 0, @@ -43,5 +45,6 @@ export const getAlertsCountQuery = ( ], }, }, + runtime_mappings: runtimeMappings, }; }; diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.tsx index b69f4f1f498f9e..04b8f482fd1213 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_count_panel/index.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/types'; import React, { memo, useMemo, useState, useEffect } from 'react'; import uuid from 'uuid'; @@ -30,10 +31,11 @@ interface AlertsCountPanelProps { filters?: Filter[]; query?: Query; signalIndexName: string | null; + runtimeMappings?: MappingRuntimeFields; } export const AlertsCountPanel = memo( - ({ filters, query, signalIndexName }) => { + ({ filters, query, signalIndexName, runtimeMappings }) => { const { to, from, deleteQuery, setQuery } = useGlobalTime(); // create a unique, but stable (across re-renders) query id @@ -70,13 +72,21 @@ export const AlertsCountPanel = memo( request, refetch, } = useQueryAlerts<{}, AlertsCountAggregation>({ - query: getAlertsCountQuery(selectedStackByOption, from, to, additionalFilters), + query: getAlertsCountQuery( + selectedStackByOption, + from, + to, + additionalFilters, + runtimeMappings + ), indexName: signalIndexName, }); useEffect(() => { - setAlertsQuery(getAlertsCountQuery(selectedStackByOption, from, to, additionalFilters)); - }, [setAlertsQuery, selectedStackByOption, from, to, additionalFilters]); + setAlertsQuery( + getAlertsCountQuery(selectedStackByOption, from, to, additionalFilters, runtimeMappings) + ); + }, [setAlertsQuery, selectedStackByOption, from, to, additionalFilters, runtimeMappings]); useInspectButton({ setQuery, diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/helpers.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/helpers.tsx index a4768ac3c4c8f2..1f5c67c61b9e2e 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/helpers.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/helpers.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { isEmpty } from 'lodash/fp'; import moment from 'moment'; @@ -37,7 +38,8 @@ export const getAlertsHistogramQuery = ( to: string, additionalFilters: Array<{ bool: { filter: unknown[]; should: unknown[]; must_not: unknown[]; must: unknown[] }; - }> + }>, + runtimeMappings?: MappingRuntimeFields ) => { return { aggs: { @@ -79,6 +81,7 @@ export const getAlertsHistogramQuery = ( ], }, }, + runtime_mappings: runtimeMappings, }; }; diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.test.tsx index eb06f85a0a76fe..29e18a1c49c12e 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.test.tsx @@ -197,6 +197,7 @@ describe('AlertsHistogramPanel', () => { }, }, ], + undefined, ]); }); wrapper.unmount(); @@ -250,6 +251,7 @@ describe('AlertsHistogramPanel', () => { }, }, ], + undefined, ]); }); wrapper.unmount(); diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.tsx index 2e029d43cc7173..571f656389f6a7 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_histogram_panel/index.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/types'; import type { Position } from '@elastic/charts'; import { EuiFlexGroup, EuiFlexItem, EuiTitleSize } from '@elastic/eui'; import numeral from '@elastic/numeral'; @@ -76,6 +77,7 @@ interface AlertsHistogramPanelProps { timelineId?: string; title?: string; updateDateRange: UpdateDateRange; + runtimeMappings?: MappingRuntimeFields; } const NO_LEGEND_DATA: LegendItem[] = []; @@ -100,6 +102,7 @@ export const AlertsHistogramPanel = memo( title = i18n.HISTOGRAM_HEADER, updateDateRange, titleSize = 'm', + runtimeMappings, }) => { const { to, from, deleteQuery, setQuery } = useGlobalTime(false); @@ -125,7 +128,8 @@ export const AlertsHistogramPanel = memo( selectedStackByOption, from, to, - buildCombinedQueries(combinedQueries) + buildCombinedQueries(combinedQueries), + runtimeMappings ), indexName: signalIndexName, }); @@ -231,15 +235,18 @@ export const AlertsHistogramPanel = memo( selectedStackByOption, from, to, - !isEmpty(converted) ? [converted] : [] + !isEmpty(converted) ? [converted] : [], + runtimeMappings ) ); } catch (e) { setIsInspectDisabled(true); - setAlertsQuery(getAlertsHistogramQuery(selectedStackByOption, from, to, [])); + setAlertsQuery( + getAlertsHistogramQuery(selectedStackByOption, from, to, [], runtimeMappings) + ); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [selectedStackByOption, from, to, query, filters, combinedQueries]); + }, [selectedStackByOption, from, to, query, filters, combinedQueries, runtimeMappings]); const linkButton = useMemo(() => { if (showLinkToAlerts) { diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/default_config.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/default_config.tsx index 911ab7fed59f57..dc8c5bf4de65e1 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/default_config.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/default_config.tsx @@ -162,14 +162,10 @@ export const requiredFieldsForActions = [ 'kibana.alert.group.id', 'kibana.alert.original_time', 'kibana.alert.building_block_type', - 'kibana.alert.rule.filters', 'kibana.alert.rule.from', - 'kibana.alert.rule.language', - 'kibana.alert.rule.query', 'kibana.alert.rule.name', 'kibana.alert.rule.to', 'kibana.alert.rule.uuid', - 'kibana.alert.rule.index', 'kibana.alert.rule.type', 'kibana.alert.original_event.kind', 'kibana.alert.original_event.module', diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx index d64864a699a60e..3e4090706f91eb 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx @@ -286,13 +286,29 @@ export const AddExceptionModalWrapper: React.FC = } }, [data?.hits.hits, isLoadingAlertData]); + /** + * This should be re-visited after UEBA work is merged + */ + const useRuleIndices = useMemo(() => { + if (enrichedAlert != null && enrichedAlert['kibana.alert.rule.parameters']?.index != null) { + return Array.isArray(enrichedAlert['kibana.alert.rule.parameters'].index) + ? enrichedAlert['kibana.alert.rule.parameters'].index + : [enrichedAlert['kibana.alert.rule.parameters'].index]; + } else if (enrichedAlert != null && enrichedAlert?.signal?.rule?.index != null) { + return Array.isArray(enrichedAlert.signal.rule.index) + ? enrichedAlert.signal.rule.index + : [enrichedAlert.signal.rule.index]; + } + return ruleIndices; + }, [enrichedAlert, ruleIndices]); + const isLoading = isLoadingAlertData && isSignalIndexLoading; return ( [ - - {ACTION_ADD_ENDPOINT_EXCEPTION} - , + () => + disabledAddException + ? [] + : [ + + {ACTION_ADD_ENDPOINT_EXCEPTION} + , - - {ACTION_ADD_EXCEPTION} - , - ], + + {ACTION_ADD_EXCEPTION} + , + ], [ disabledAddEndpointException, disabledAddException, diff --git a/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.test.tsx b/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.test.tsx index bf990cb292cd79..e12f01458da4c4 100644 --- a/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.test.tsx @@ -18,6 +18,9 @@ import { mockTimelines } from '../../../common/mock/mock_timelines_plugin'; import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock'; import { useKibana } from '../../../common/lib/kibana'; +jest.mock('../user_info', () => ({ + useUserData: jest.fn().mockReturnValue([{ canUserCRUD: true, hasIndexWrite: true }]), +})); jest.mock('../../../common/hooks/endpoint/use_isolate_privileges', () => ({ useIsolationPrivileges: jest.fn().mockReturnValue({ isAllowed: true }), })); diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.tsx b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.tsx index 8ad6716670c320..7702f38c7ab901 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.tsx +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.tsx @@ -130,10 +130,17 @@ const DetectionEnginePageComponent: React.FC = ({ ] = useUserData(); const { loading: listsConfigLoading, needsConfiguration: needsListsConfiguration } = useListsConfig(); + + const { + indexPattern, + runtimeMappings, + loading: isLoadingIndexPattern, + } = useSourcererDataView(SourcererScopeName.detections); + const { formatUrl } = useFormatUrl(SecurityPageName.rules); const [showBuildingBlockAlerts, setShowBuildingBlockAlerts] = useState(false); const [showOnlyThreatIndicatorAlerts, setShowOnlyThreatIndicatorAlerts] = useState(false); - const loading = userInfoLoading || listsConfigLoading; + const loading = userInfoLoading || listsConfigLoading || isLoadingIndexPattern; const { application: { navigateToUrl }, timelines: timelinesUi, @@ -212,8 +219,6 @@ const DetectionEnginePageComponent: React.FC = ({ [setShowOnlyThreatIndicatorAlerts] ); - const { indexPattern } = useSourcererDataView(SourcererScopeName.detections); - const { signalIndexNeedsInit, pollForSignalIndex } = useSignalHelpers(); const onSkipFocusBeforeEventsTable = useCallback(() => { @@ -340,6 +345,7 @@ const DetectionEnginePageComponent: React.FC = ({ filters={alertsHistogramDefaultFilters} query={query} signalIndexName={signalIndexName} + runtimeMappings={runtimeMappings} /> @@ -351,6 +357,7 @@ const DetectionEnginePageComponent: React.FC = ({ titleSize={'s'} signalIndexName={signalIndexName} updateDateRange={updateDateRangeCallback} + runtimeMappings={runtimeMappings} /> diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/all/helpers.ts b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/all/helpers.ts index b03c5ebc84688c..99fc72b9d0c2b9 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/all/helpers.ts +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/all/helpers.ts @@ -6,6 +6,7 @@ */ import { Query } from '@elastic/eui'; +import { ExportRulesDetails } from '../../../../../../common/detection_engine/schemas/response/export_rules_details_schema'; import { BulkRuleResponse, RuleResponseBuckets, @@ -71,16 +72,29 @@ export const getSearchFilters = ({ /** * This function helps to parse NDJSON with exported rules - * and retrieve the number of successfully exported rules. + * and retrieve the metadata of exported rules. * * @param blob a Blob received from an _export endpoint - * @returns Number of exported rules + * @returns Export details */ -export const getExportedRulesCount = async (blob: Blob): Promise => { +export const getExportedRulesDetails = async (blob: Blob): Promise => { const blobContent = await blob.text(); // The Blob content is an NDJSON file, the last line of which contains export details. const exportDetailsJson = blobContent.split('\n').filter(Boolean).slice(-1)[0]; const exportDetails = JSON.parse(exportDetailsJson); - return exportDetails.exported_count; + return exportDetails; +}; + +/** + * This function helps to parse NDJSON with exported rules + * and retrieve the number of successfully exported rules. + * + * @param blob a Blob received from an _export endpoint + * @returns Number of exported rules + */ +export const getExportedRulesCount = async (blob: Blob): Promise => { + const details = await getExportedRulesDetails(blob); + + return details.exported_rules_count; }; diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/details/index.tsx b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/details/index.tsx index b9f73dd03c106b..03d43e3969c10e 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/details/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/details/index.tsx @@ -208,7 +208,14 @@ const RuleDetailsPageComponent: React.FC = ({ ] = useUserData(); const { loading: listsConfigLoading, needsConfiguration: needsListsConfiguration } = useListsConfig(); - const loading = userInfoLoading || listsConfigLoading; + + const { + indexPattern, + runtimeMappings, + loading: isLoadingIndexPattern, + } = useSourcererDataView(SourcererScopeName.detections); + + const loading = userInfoLoading || listsConfigLoading || isLoadingIndexPattern; const { detailName: ruleId } = useParams<{ detailName: string }>(); const { rule: maybeRule, @@ -601,7 +608,6 @@ const RuleDetailsPageComponent: React.FC = ({ [setShowOnlyThreatIndicatorAlerts] ); - const { indexPattern } = useSourcererDataView(SourcererScopeName.detections); const exceptionLists = useMemo((): { lists: ExceptionListIdentifiers[]; allowedExceptionListTypes: ExceptionListTypeEnum[]; @@ -819,6 +825,7 @@ const RuleDetailsPageComponent: React.FC = ({ signalIndexName={signalIndexName} defaultStackByOption={defaultRuleStackByOption} updateDateRange={updateDateRangeCallback} + runtimeMappings={runtimeMappings} /> diff --git a/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/index.test.tsx b/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/index.test.tsx index 09d0375cf7dffb..7f5e512978ee9c 100644 --- a/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/index.test.tsx +++ b/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/index.test.tsx @@ -7,25 +7,35 @@ import { render, fireEvent } from '@testing-library/react'; import React from 'react'; -import { HostRiskInformation } from '.'; +import { HostRiskInformationButtonIcon, HostRiskInformationButtonEmpty } from '.'; import { TestProviders } from '../../../common/mock'; describe('Host Risk Flyout', () => { - it('renders', () => { - const { queryByTestId } = render(); + describe('HostRiskInformationButtonIcon', () => { + it('renders', () => { + const { queryByTestId } = render(); - expect(queryByTestId('open-risk-information-flyout')).toBeInTheDocument(); + expect(queryByTestId('open-risk-information-flyout-trigger')).toBeInTheDocument(); + }); + }); + + describe('HostRiskInformationButtonEmpty', () => { + it('renders', () => { + const { queryByTestId } = render(); + + expect(queryByTestId('open-risk-information-flyout-trigger')).toBeInTheDocument(); + }); }); it('opens and displays table with 5 rows', () => { const NUMBER_OF_ROWS = 1 + 5; // 1 header row + 5 severity rows const { getByTestId, queryByTestId, queryAllByRole } = render( - + ); - fireEvent.click(getByTestId('open-risk-information-flyout')); + fireEvent.click(getByTestId('open-risk-information-flyout-trigger')); expect(queryByTestId('risk-information-table')).toBeInTheDocument(); expect(queryAllByRole('row')).toHaveLength(NUMBER_OF_ROWS); diff --git a/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/index.tsx b/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/index.tsx index b4632466672e28..00230b0a4d2786 100644 --- a/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/index.tsx +++ b/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/index.tsx @@ -21,10 +21,11 @@ import { EuiButton, EuiSpacer, EuiBasicTableColumn, + EuiButtonEmpty, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import React, { useState, useCallback } from 'react'; +import React, { useState, useCallback, memo } from 'react'; import { HostRiskSeverity } from '../../../../common/search_strategy'; import { RISKY_HOSTS_DOC_LINK } from '../../../overview/components/overview_risky_host_links/risky_hosts_disabled_module'; import { HostRiskScore } from '../common/host_risk_score'; @@ -61,16 +62,8 @@ const tableItems: TableItem[] = [ export const HOST_RISK_INFO_BUTTON_CLASS = 'HostRiskInformation__button'; -export const HostRiskInformation = () => { - const [isFlyoutVisible, setIsFlyoutVisible] = useState(false); - - const handleOnClose = useCallback(() => { - setIsFlyoutVisible(false); - }, []); - - const handleOnOpen = useCallback(() => { - setIsFlyoutVisible(true); - }, []); +export const HostRiskInformationButtonIcon = memo(() => { + const [isFlyoutVisible, handleOnOpen, handleOnClose] = useOnOpenCloseHandler(); return ( <> @@ -81,11 +74,39 @@ export const HostRiskInformation = () => { aria-label={i18n.INFORMATION_ARIA_LABEL} onClick={handleOnOpen} className={HOST_RISK_INFO_BUTTON_CLASS} - data-test-subj="open-risk-information-flyout" + data-test-subj="open-risk-information-flyout-trigger" /> {isFlyoutVisible && } ); +}); +HostRiskInformationButtonIcon.displayName = 'HostRiskInformationButtonIcon'; + +export const HostRiskInformationButtonEmpty = memo(() => { + const [isFlyoutVisible, handleOnOpen, handleOnClose] = useOnOpenCloseHandler(); + + return ( + <> + + {i18n.INFO_BUTTON_TEXT} + + {isFlyoutVisible && } + + ); +}); +HostRiskInformationButtonEmpty.displayName = 'HostRiskInformationButtonEmpty'; + +const useOnOpenCloseHandler = (): [boolean, () => void, () => void] => { + const [isOpen, setIsOpen] = useState(false); + + const handleOnClose = useCallback(() => { + setIsOpen(false); + }, []); + + const handleOnOpen = useCallback(() => { + setIsOpen(true); + }, []); + return [isOpen, handleOnOpen, handleOnClose]; }; const HostRiskInformationFlyout = ({ handleOnClose }: { handleOnClose: () => void }) => { @@ -94,7 +115,13 @@ const HostRiskInformationFlyout = ({ handleOnClose }: { handleOnClose: () => voi }); return ( - +

{i18n.TITLE}

diff --git a/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/translations.ts b/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/translations.ts index 244c7b458b2060..1e031a84ae8a50 100644 --- a/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/translations.ts +++ b/x-pack/plugins/security_solution/public/hosts/components/host_risk_information/translations.ts @@ -68,3 +68,10 @@ export const CLOSE_BUTTON_LTEXT = i18n.translate( defaultMessage: 'Close', } ); + +export const INFO_BUTTON_TEXT = i18n.translate( + 'xpack.securitySolution.hosts.hostRiskInformation.buttonLabel', + { + defaultMessage: 'How is risk score calculated?', + } +); diff --git a/x-pack/plugins/security_solution/public/hosts/components/host_score_over_time/index.test.tsx b/x-pack/plugins/security_solution/public/hosts/components/host_score_over_time/index.test.tsx new file mode 100644 index 00000000000000..9a7dfcc967fbb4 --- /dev/null +++ b/x-pack/plugins/security_solution/public/hosts/components/host_score_over_time/index.test.tsx @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render } from '@testing-library/react'; +import React from 'react'; +import { HostRiskScoreOverTime } from '.'; +import { TestProviders } from '../../../common/mock'; +import { useHostsRiskScore } from '../../../common/containers/hosts_risk/use_hosts_risk_score'; + +jest.mock('../../../common/containers/hosts_risk/use_hosts_risk_score'); +const useHostsRiskScoreMock = useHostsRiskScore as jest.Mock; + +describe('Host Risk Flyout', () => { + it('renders', () => { + const { queryByTestId } = render( + + + + ); + + expect(queryByTestId('hostRiskScoreOverTime')).toBeInTheDocument(); + }); + + it('renders loader when HostsRiskScore is laoding', () => { + useHostsRiskScoreMock.mockReturnValueOnce({ + loading: true, + isModuleEnabled: true, + result: [], + }); + + const { queryByTestId } = render( + + + + ); + + expect(queryByTestId('HostRiskScoreOverTime-loading')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/hosts/components/host_score_over_time/index.tsx b/x-pack/plugins/security_solution/public/hosts/components/host_score_over_time/index.tsx new file mode 100644 index 00000000000000..eb34f9100101b3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/hosts/components/host_score_over_time/index.tsx @@ -0,0 +1,202 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo, useCallback } from 'react'; +import { + Chart, + LineSeries, + ScaleType, + Settings, + Axis, + Position, + AnnotationDomainType, + LineAnnotation, + TooltipValue, +} from '@elastic/charts'; +import { euiThemeVars } from '@kbn/ui-shared-deps-src/theme'; +import { EuiFlexGroup, EuiFlexItem, EuiLoadingChart, EuiText, EuiPanel } from '@elastic/eui'; +import styled from 'styled-components'; +import { chartDefaultSettings, useTheme } from '../../../common/components/charts/common'; +import { useTimeZone } from '../../../common/lib/kibana'; +import { histogramDateTimeFormatter } from '../../../common/components/utils'; +import { HeaderSection } from '../../../common/components/header_section'; +import { InspectButton, InspectButtonContainer } from '../../../common/components/inspect'; +import * as i18n from './translations'; +import { useHostsRiskScore } from '../../../common/containers/hosts_risk/use_hosts_risk_score'; +import { PreferenceFormattedDate } from '../../../common/components/formatted_date'; +import { HostRiskScoreQueryId } from '../../../common/containers/hosts_risk/types'; + +export interface HostRiskScoreOverTimeProps { + hostName: string; + from: string; + to: string; +} + +const RISKY_TRESHOULD = 70; +const DEFAULT_CHART_HEIGH = 250; + +const StyledEuiText = styled(EuiText)` + font-size: 9px; + font-weight: ${({ theme }) => theme.eui.euiFontWeightSemiBold}; + margin-right: ${({ theme }) => theme.eui.paddingSizes.xs}; +`; + +const LoadingChart = styled(EuiLoadingChart)` + display: block; + text-align: center; +`; + +const HostRiskScoreOverTimeComponent: React.FC = ({ + hostName, + from, + to, +}) => { + const timeZone = useTimeZone(); + + const memoizedDataTimeFormatter = useMemo( + () => histogramDateTimeFormatter([from, to]), + [from, to] + ); + const scoreFormatter = useCallback((d: number) => Math.round(d).toString(), []); + const headerFormatter = useCallback( + (tooltip: TooltipValue) => , + [] + ); + + const timerange = useMemo( + () => ({ + from, + to, + }), + [from, to] + ); + const theme = useTheme(); + + const hostRisk = useHostsRiskScore({ + hostName, + onlyLatest: false, + timerange, + queryId: HostRiskScoreQueryId.HOST_RISK_SCORE_OVER_TIME, + }); + + const data = useMemo( + () => + hostRisk?.result + ?.map((result) => ({ + x: result['@timestamp'], + y: result.risk_stats.risk_score, + })) + .reverse() ?? [], + [hostRisk] + ); + + return ( + + + + + + + + + + + + + + +
+ {hostRisk?.loading ? ( + + ) : ( + + + + + + + {i18n.RISKY} + + } + /> + + )} +
+
+
+
+
+ ); +}; + +HostRiskScoreOverTimeComponent.displayName = 'HostRiskScoreOverTimeComponent'; +export const HostRiskScoreOverTime = React.memo(HostRiskScoreOverTimeComponent); +HostRiskScoreOverTime.displayName = 'HostRiskScoreOverTime'; diff --git a/x-pack/plugins/security_solution/public/hosts/components/host_score_over_time/translations.ts b/x-pack/plugins/security_solution/public/hosts/components/host_score_over_time/translations.ts new file mode 100644 index 00000000000000..5e1b4ca7410a83 --- /dev/null +++ b/x-pack/plugins/security_solution/public/hosts/components/host_score_over_time/translations.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const HOST_RISK_SCORE_OVER_TIME = i18n.translate( + 'xpack.securitySolution.hosts.hostScoreOverTime.title', + { + defaultMessage: 'Host risk score over time', + } +); + +export const HOST_RISK_THRESHOLD = i18n.translate( + 'xpack.securitySolution.hosts.hostScoreOverTime.riskyThresholdHeader', + { + defaultMessage: 'Risky threshold', + } +); + +export const RISKY = i18n.translate('xpack.securitySolution.hosts.hostScoreOverTime.riskyLabel', { + defaultMessage: 'Risky', +}); + +export const RISK_SCORE = i18n.translate( + 'xpack.securitySolution.hosts.hostScoreOverTime.riskScore', + { + defaultMessage: 'Risk score', + } +); diff --git a/x-pack/plugins/security_solution/public/hosts/components/kpi_hosts/risky_hosts/index.tsx b/x-pack/plugins/security_solution/public/hosts/components/kpi_hosts/risky_hosts/index.tsx index f882e12d211d39..9e7e01c64a4325 100644 --- a/x-pack/plugins/security_solution/public/hosts/components/kpi_hosts/risky_hosts/index.tsx +++ b/x-pack/plugins/security_solution/public/hosts/components/kpi_hosts/risky_hosts/index.tsx @@ -33,7 +33,10 @@ import { import { useInspectQuery } from '../../../../common/hooks/use_inspect_query'; import { useErrorToast } from '../../../../common/hooks/use_error_toast'; import { HostRiskScore } from '../../common/host_risk_score'; -import { HostRiskInformation, HOST_RISK_INFO_BUTTON_CLASS } from '../../host_risk_information'; +import { + HostRiskInformationButtonIcon, + HOST_RISK_INFO_BUTTON_CLASS, +} from '../../host_risk_information'; import { HoverVisibilityContainer } from '../../../../common/components/hover_visibility_container'; const QUERY_ID = 'hostsKpiRiskyHostsQuery'; @@ -80,7 +83,7 @@ const RiskyHostsComponent: React.FC<{ - + {data?.inspect && ( diff --git a/x-pack/plugins/security_solution/public/hosts/components/top_host_score_contributors/index.test.tsx b/x-pack/plugins/security_solution/public/hosts/components/top_host_score_contributors/index.test.tsx new file mode 100644 index 00000000000000..6315897fac1d2f --- /dev/null +++ b/x-pack/plugins/security_solution/public/hosts/components/top_host_score_contributors/index.test.tsx @@ -0,0 +1,72 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render } from '@testing-library/react'; +import React from 'react'; +import { TopHostScoreContributors } from '.'; +import { TestProviders } from '../../../common/mock'; +import { useHostsRiskScore } from '../../../common/containers/hosts_risk/use_hosts_risk_score'; + +jest.mock('../../../common/containers/hosts_risk/use_hosts_risk_score'); +const useHostsRiskScoreMock = useHostsRiskScore as jest.Mock; + +describe('Host Risk Flyout', () => { + it('renders', () => { + const { queryByTestId } = render( + + + + ); + + expect(queryByTestId('topHostScoreContributors')).toBeInTheDocument(); + }); + + it('renders sorted items', () => { + useHostsRiskScoreMock.mockReturnValueOnce({ + loading: true, + isModuleEnabled: true, + result: [ + { + risk_stats: { + rule_risks: [ + { + rule_name: 'third', + rule_risk: '10', + }, + { + rule_name: 'first', + rule_risk: '99', + }, + { + rule_name: 'second', + rule_risk: '55', + }, + ], + }, + }, + ], + }); + + const { queryAllByRole } = render( + + + + ); + + expect(queryAllByRole('row')[1]).toHaveTextContent('first'); + expect(queryAllByRole('row')[2]).toHaveTextContent('second'); + expect(queryAllByRole('row')[3]).toHaveTextContent('third'); + }); +}); diff --git a/x-pack/plugins/security_solution/public/hosts/components/top_host_score_contributors/index.tsx b/x-pack/plugins/security_solution/public/hosts/components/top_host_score_contributors/index.tsx new file mode 100644 index 00000000000000..84892da3b6e3cb --- /dev/null +++ b/x-pack/plugins/security_solution/public/hosts/components/top_host_score_contributors/index.tsx @@ -0,0 +1,125 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo } from 'react'; + +import { + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiInMemoryTable, + EuiTableFieldDataColumnType, +} from '@elastic/eui'; + +import { HeaderSection } from '../../../common/components/header_section'; +import { InspectButton, InspectButtonContainer } from '../../../common/components/inspect'; +import * as i18n from './translations'; +import { useHostsRiskScore } from '../../../common/containers/hosts_risk/use_hosts_risk_score'; +import { Direction } from '../../../../../timelines/common'; +import { HostRiskScoreQueryId } from '../../../common/containers/hosts_risk/types'; + +export interface TopHostScoreContributorsProps { + hostName: string; + from: string; + to: string; +} + +interface TableItem { + rank: number; + name: string; +} + +const columns: Array> = [ + { + name: i18n.RANK_TITLE, + field: 'rank', + width: '45px', + align: 'right', + }, + { + name: i18n.RULE_NAME_TITLE, + field: 'name', + sortable: true, + truncateText: true, + }, +]; + +const PAGE_SIZE = 5; + +const TopHostScoreContributorsComponent: React.FC = ({ + hostName, + from, + to, +}) => { + const timerange = useMemo( + () => ({ + from, + to, + }), + [from, to] + ); + + const hostRisk = useHostsRiskScore({ + hostName, + timerange, + onlyLatest: false, + queryId: HostRiskScoreQueryId.TOP_HOST_SCORE_CONTRIBUTORS, + limit: 1, + sortOrder: Direction.desc, + }); + + const result = hostRisk?.result; + + const items = useMemo(() => { + const rules = result && result.length > 0 ? result[0].risk_stats.rule_risks : []; + return rules + .sort((a, b) => b.rule_risk - a.rule_risk) + .map(({ rule_name: name }, i) => ({ rank: i + 1, name })); + }, [result]); + + const pagination = useMemo( + () => ({ + hidePerPageOptions: true, + pageSize: PAGE_SIZE, + totalItemCount: items.length, + }), + [items.length] + ); + + return ( + + + + + + + + + + + + + + + + + + + + ); +}; + +export const TopHostScoreContributors = React.memo(TopHostScoreContributorsComponent); +TopHostScoreContributors.displayName = 'TopHostScoreContributors'; diff --git a/x-pack/plugins/security_solution/public/hosts/components/top_host_score_contributors/translations.ts b/x-pack/plugins/security_solution/public/hosts/components/top_host_score_contributors/translations.ts new file mode 100644 index 00000000000000..02017bf33d2da0 --- /dev/null +++ b/x-pack/plugins/security_solution/public/hosts/components/top_host_score_contributors/translations.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const TOP_RISK_SCORE_CONTRIBUTORS = i18n.translate( + 'xpack.securitySolution.hosts.topRiskScoreContributors.title', + { + defaultMessage: 'Top risk score contributors', + } +); + +export const RANK_TITLE = i18n.translate( + 'xpack.securitySolution.hosts.topRiskScoreContributors.rankColumnTitle', + { + defaultMessage: 'Rank', + } +); + +export const RULE_NAME_TITLE = i18n.translate( + 'xpack.securitySolution.hosts.topRiskScoreContributors.ruleNameColumnTitle', + { + defaultMessage: 'Rule name', + } +); diff --git a/x-pack/plugins/security_solution/public/hosts/pages/details/details_tabs.tsx b/x-pack/plugins/security_solution/public/hosts/pages/details/details_tabs.tsx index dc537f2f6ffe35..891db470161d42 100644 --- a/x-pack/plugins/security_solution/public/hosts/pages/details/details_tabs.tsx +++ b/x-pack/plugins/security_solution/public/hosts/pages/details/details_tabs.tsx @@ -25,6 +25,7 @@ import { UncommonProcessQueryTabBody, EventsQueryTabBody, HostAlertsQueryTabBody, + HostRiskTabBody, } from '../navigation'; export const HostDetailsTabs = React.memo( @@ -102,6 +103,9 @@ export const HostDetailsTabs = React.memo( + + + ); } diff --git a/x-pack/plugins/security_solution/public/hosts/pages/details/index.tsx b/x-pack/plugins/security_solution/public/hosts/pages/details/index.tsx index 2f89efa56b4d06..40ba3990ee9a7e 100644 --- a/x-pack/plugins/security_solution/public/hosts/pages/details/index.tsx +++ b/x-pack/plugins/security_solution/public/hosts/pages/details/index.tsx @@ -53,6 +53,7 @@ import { ID, useHostDetails } from '../../containers/hosts/details'; import { manageQuery } from '../../../common/components/page/manage_query'; import { useInvalidFilterQuery } from '../../../common/hooks/use_invalid_filter_query'; import { useSourcererDataView } from '../../../common/containers/sourcerer'; +import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; const HostOverviewManage = manageQuery(HostOverview); @@ -119,6 +120,8 @@ const HostDetailsComponent: React.FC = ({ detailName, hostDeta dispatch(setHostDetailsTablesActivePageToZero()); }, [dispatch, detailName]); + const riskyHostsFeatureEnabled = useIsExperimentalFeatureEnabled('riskyHostsEnabled'); + return ( <> {indicesExist ? ( @@ -195,7 +198,11 @@ const HostDetailsComponent: React.FC = ({ detailName, hostDeta diff --git a/x-pack/plugins/security_solution/public/hosts/pages/details/nav_tabs.test.tsx b/x-pack/plugins/security_solution/public/hosts/pages/details/nav_tabs.test.tsx index 872afc4e82440d..90f3c223c5501f 100644 --- a/x-pack/plugins/security_solution/public/hosts/pages/details/nav_tabs.test.tsx +++ b/x-pack/plugins/security_solution/public/hosts/pages/details/nav_tabs.test.tsx @@ -11,18 +11,29 @@ import { navTabsHostDetails } from './nav_tabs'; describe('navTabsHostDetails', () => { const mockHostName = 'mockHostName'; test('it should skip anomalies tab if without mlUserPermission', () => { - const tabs = navTabsHostDetails(mockHostName, false); + const tabs = navTabsHostDetails(mockHostName, false, false); expect(tabs).toHaveProperty(HostsTableType.authentications); expect(tabs).toHaveProperty(HostsTableType.uncommonProcesses); expect(tabs).not.toHaveProperty(HostsTableType.anomalies); expect(tabs).toHaveProperty(HostsTableType.events); + expect(tabs).not.toHaveProperty(HostsTableType.risk); }); test('it should display anomalies tab if with mlUserPermission', () => { - const tabs = navTabsHostDetails(mockHostName, true); + const tabs = navTabsHostDetails(mockHostName, true, false); expect(tabs).toHaveProperty(HostsTableType.authentications); expect(tabs).toHaveProperty(HostsTableType.uncommonProcesses); expect(tabs).toHaveProperty(HostsTableType.anomalies); expect(tabs).toHaveProperty(HostsTableType.events); + expect(tabs).not.toHaveProperty(HostsTableType.risk); + }); + + test('it should display risky hosts tab if when risky hosts is enabled', () => { + const tabs = navTabsHostDetails(mockHostName, false, true); + expect(tabs).toHaveProperty(HostsTableType.authentications); + expect(tabs).toHaveProperty(HostsTableType.uncommonProcesses); + expect(tabs).not.toHaveProperty(HostsTableType.anomalies); + expect(tabs).toHaveProperty(HostsTableType.events); + expect(tabs).toHaveProperty(HostsTableType.risk); }); }); diff --git a/x-pack/plugins/security_solution/public/hosts/pages/details/nav_tabs.tsx b/x-pack/plugins/security_solution/public/hosts/pages/details/nav_tabs.tsx index 02f8fa740c024b..c58fbde09aef1d 100644 --- a/x-pack/plugins/security_solution/public/hosts/pages/details/nav_tabs.tsx +++ b/x-pack/plugins/security_solution/public/hosts/pages/details/nav_tabs.tsx @@ -16,8 +16,11 @@ const getTabsOnHostDetailsUrl = (hostName: string, tabName: HostsTableType) => export const navTabsHostDetails = ( hostName: string, - hasMlUserPermissions: boolean + hasMlUserPermissions: boolean, + isRiskyHostsEnabled: boolean ): HostDetailsNavTab => { + const hiddenTabs = []; + const hostDetailsNavTabs = { [HostsTableType.authentications]: { id: HostsTableType.authentications, @@ -49,9 +52,21 @@ export const navTabsHostDetails = ( href: getTabsOnHostDetailsUrl(hostName, HostsTableType.alerts), disabled: false, }, + [HostsTableType.risk]: { + id: HostsTableType.risk, + name: i18n.NAVIGATION_HOST_RISK_TITLE, + href: getTabsOnHostDetailsUrl(hostName, HostsTableType.risk), + disabled: false, + }, }; - return hasMlUserPermissions - ? hostDetailsNavTabs - : omit(HostsTableType.anomalies, hostDetailsNavTabs); + if (!hasMlUserPermissions) { + hiddenTabs.push(HostsTableType.anomalies); + } + + if (!isRiskyHostsEnabled) { + hiddenTabs.push(HostsTableType.risk); + } + + return omit(hiddenTabs, hostDetailsNavTabs); }; diff --git a/x-pack/plugins/security_solution/public/hosts/pages/details/utils.ts b/x-pack/plugins/security_solution/public/hosts/pages/details/utils.ts index 3a584f7fefb500..19975b6ad7abb7 100644 --- a/x-pack/plugins/security_solution/public/hosts/pages/details/utils.ts +++ b/x-pack/plugins/security_solution/public/hosts/pages/details/utils.ts @@ -27,6 +27,7 @@ const TabNameMappedToI18nKey: Record = { [HostsTableType.anomalies]: i18n.NAVIGATION_ANOMALIES_TITLE, [HostsTableType.events]: i18n.NAVIGATION_EVENTS_TITLE, [HostsTableType.alerts]: i18n.NAVIGATION_ALERTS_TITLE, + [HostsTableType.risk]: i18n.NAVIGATION_HOST_RISK_TITLE, }; export const getBreadcrumbs = ( diff --git a/x-pack/plugins/security_solution/public/hosts/pages/index.tsx b/x-pack/plugins/security_solution/public/hosts/pages/index.tsx index 23be8f09ce1405..64acbbc666312e 100644 --- a/x-pack/plugins/security_solution/public/hosts/pages/index.tsx +++ b/x-pack/plugins/security_solution/public/hosts/pages/index.tsx @@ -30,6 +30,7 @@ const getHostDetailsTabPath = () => `${HostsTableType.uncommonProcesses}|` + `${HostsTableType.anomalies}|` + `${HostsTableType.events}|` + + `${HostsTableType.risk}|` + `${HostsTableType.alerts})`; export const HostsContainer = React.memo(() => { diff --git a/x-pack/plugins/security_solution/public/hosts/pages/navigation/host_risk_tab_body.tsx b/x-pack/plugins/security_solution/public/hosts/pages/navigation/host_risk_tab_body.tsx new file mode 100644 index 00000000000000..6982047aa26ada --- /dev/null +++ b/x-pack/plugins/security_solution/public/hosts/pages/navigation/host_risk_tab_body.tsx @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import React from 'react'; +import styled from 'styled-components'; +import { HostRiskScoreOverTime } from '../../components/host_score_over_time'; +import { TopHostScoreContributors } from '../../components/top_host_score_contributors'; +import { HostsComponentsQueryProps } from './types'; +import * as i18n from '../translations'; +import { useRiskyHostsDashboardButtonHref } from '../../../overview/containers/overview_risky_host_links/use_risky_hosts_dashboard_button_href'; +import { HostRiskInformationButtonEmpty } from '../../components/host_risk_information'; + +const StyledEuiFlexGroup = styled(EuiFlexGroup)` + margin-top: ${({ theme }) => theme.eui.paddingSizes.l}; +`; + +const HostRiskTabBodyComponent: React.FC< + Pick & { hostName: string } +> = ({ hostName, startDate, endDate }) => { + const { buttonHref } = useRiskyHostsDashboardButtonHref(startDate, endDate); + + return ( + <> + + + + + + + + + + + + {i18n.VIEW_DASHBOARD_BUTTON} + + + + + + + + ); +}; + +HostRiskTabBodyComponent.displayName = 'HostRiskTabBodyComponent'; + +export const HostRiskTabBody = React.memo(HostRiskTabBodyComponent); + +HostRiskTabBody.displayName = 'HostRiskTabBody'; diff --git a/x-pack/plugins/security_solution/public/hosts/pages/navigation/index.ts b/x-pack/plugins/security_solution/public/hosts/pages/navigation/index.ts index 09adfece7b01ed..d5961cdc788e4d 100644 --- a/x-pack/plugins/security_solution/public/hosts/pages/navigation/index.ts +++ b/x-pack/plugins/security_solution/public/hosts/pages/navigation/index.ts @@ -10,3 +10,4 @@ export * from './events_query_tab_body'; export * from './hosts_query_tab_body'; export * from './uncommon_process_query_tab_body'; export * from './alerts_query_tab_body'; +export * from './host_risk_tab_body'; diff --git a/x-pack/plugins/security_solution/public/hosts/pages/translations.ts b/x-pack/plugins/security_solution/public/hosts/pages/translations.ts index 5563dc285ad5a8..337f18ef335034 100644 --- a/x-pack/plugins/security_solution/public/hosts/pages/translations.ts +++ b/x-pack/plugins/security_solution/public/hosts/pages/translations.ts @@ -57,6 +57,13 @@ export const NAVIGATION_ALERTS_TITLE = i18n.translate( } ); +export const NAVIGATION_HOST_RISK_TITLE = i18n.translate( + 'xpack.securitySolution.hosts.navigation.hostRisk', + { + defaultMessage: 'Host risk', + } +); + export const ERROR_FETCHING_AUTHENTICATIONS_DATA = i18n.translate( 'xpack.securitySolution.hosts.navigaton.matrixHistogram.errorFetchingAuthenticationsData', { @@ -76,3 +83,10 @@ export const EVENTS_UNIT = (totalCount: number) => values: { totalCount }, defaultMessage: `{totalCount, plural, =1 {event} other {events}}`, }); + +export const VIEW_DASHBOARD_BUTTON = i18n.translate( + 'xpack.securitySolution.hosts.navigaton.hostRisk.viewDashboardButtonLabel', + { + defaultMessage: 'View source dashboard', + } +); diff --git a/x-pack/plugins/security_solution/public/hosts/store/helpers.test.ts b/x-pack/plugins/security_solution/public/hosts/store/helpers.test.ts index 8c3a3e27ffb38b..0d7df790f8f317 100644 --- a/x-pack/plugins/security_solution/public/hosts/store/helpers.test.ts +++ b/x-pack/plugins/security_solution/public/hosts/store/helpers.test.ts @@ -36,6 +36,7 @@ export const mockHostsState: HostsModel = { activePage: 4, limit: DEFAULT_TABLE_LIMIT, }, + [HostsTableType.risk]: null, }, }, details: { @@ -63,6 +64,7 @@ export const mockHostsState: HostsModel = { activePage: 4, limit: DEFAULT_TABLE_LIMIT, }, + [HostsTableType.risk]: null, }, }, }; @@ -94,6 +96,7 @@ describe('Hosts redux store', () => { activePage: 0, limit: 10, }, + [HostsTableType.risk]: null, }); }); @@ -122,6 +125,7 @@ describe('Hosts redux store', () => { activePage: 0, limit: 10, }, + [HostsTableType.risk]: null, }); }); }); diff --git a/x-pack/plugins/security_solution/public/hosts/store/model.ts b/x-pack/plugins/security_solution/public/hosts/store/model.ts index ea168e965fa233..0a82d3961aa020 100644 --- a/x-pack/plugins/security_solution/public/hosts/store/model.ts +++ b/x-pack/plugins/security_solution/public/hosts/store/model.ts @@ -20,6 +20,7 @@ export enum HostsTableType { uncommonProcesses = 'uncommonProcesses', anomalies = 'anomalies', alerts = 'externalAlerts', + risk = 'hostRisk', } export interface BasicQueryPaginated { @@ -39,6 +40,7 @@ export interface Queries { [HostsTableType.uncommonProcesses]: BasicQueryPaginated; [HostsTableType.anomalies]: null | undefined; [HostsTableType.alerts]: BasicQueryPaginated; + [HostsTableType.risk]: null | undefined; } export interface GenericHostsModel { diff --git a/x-pack/plugins/security_solution/public/hosts/store/reducer.ts b/x-pack/plugins/security_solution/public/hosts/store/reducer.ts index eebf3ca1684a1d..171431144a746b 100644 --- a/x-pack/plugins/security_solution/public/hosts/store/reducer.ts +++ b/x-pack/plugins/security_solution/public/hosts/store/reducer.ts @@ -51,6 +51,7 @@ export const initialHostsState: HostsState = { activePage: DEFAULT_TABLE_ACTIVE_PAGE, limit: DEFAULT_TABLE_LIMIT, }, + [HostsTableType.risk]: null, }, }, details: { @@ -78,6 +79,7 @@ export const initialHostsState: HostsState = { activePage: DEFAULT_TABLE_ACTIVE_PAGE, limit: DEFAULT_TABLE_LIMIT, }, + [HostsTableType.risk]: null, }, }, }; diff --git a/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/flyout/index.tsx b/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/flyout/index.tsx index ec0a1308df2a47..9bffd2fc418715 100644 --- a/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/event_filters/view/components/flyout/index.tsx @@ -190,7 +190,7 @@ export const EventFiltersFlyout: React.FC = memo( {id ? ( ) : data ? ( ) : ( = ({ timerange }) => { - const hostRiskScore = useHostsRiskScore({ timerange }); + const hostRiskScore = useHostsRiskScore({ + timerange, + queryId: HostRiskScoreQueryId.OVERVIEW_RISKY_HOSTS, + }); switch (hostRiskScore?.isModuleEnabled) { case true: diff --git a/x-pack/plugins/security_solution/public/overview/components/overview_risky_host_links/risky_hosts_enabled_module.test.tsx b/x-pack/plugins/security_solution/public/overview/components/overview_risky_host_links/risky_hosts_enabled_module.test.tsx index 364b608c6086de..bc45faf1f05805 100644 --- a/x-pack/plugins/security_solution/public/overview/components/overview_risky_host_links/risky_hosts_enabled_module.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/overview_risky_host_links/risky_hosts_enabled_module.test.tsx @@ -57,6 +57,7 @@ describe('RiskyHostsEnabledModule', () => { isModuleEnabled: true, result: [ { + '@timestamp': '1641902481', host: { name: 'a', }, diff --git a/x-pack/plugins/security_solution/public/overview/components/overview_risky_host_links/risky_hosts_panel_view.tsx b/x-pack/plugins/security_solution/public/overview/components/overview_risky_host_links/risky_hosts_panel_view.tsx index 8a42cedc3be461..f508da6c1c9911 100644 --- a/x-pack/plugins/security_solution/public/overview/components/overview_risky_host_links/risky_hosts_panel_view.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/overview_risky_host_links/risky_hosts_panel_view.tsx @@ -14,8 +14,8 @@ import { LinkPanelViewProps } from '../link_panel/types'; import { Link } from '../link_panel/link'; import * as i18n from './translations'; import { VIEW_DASHBOARD } from '../overview_cti_links/translations'; -import { QUERY_ID as RiskyHostsQueryId } from '../../../common/containers/hosts_risk/use_hosts_risk_score'; import { NavigateToHost } from './navigate_to_host'; +import { HostRiskScoreQueryId } from '../../../common/containers/hosts_risk/types'; const columns: Array> = [ { @@ -94,7 +94,7 @@ export const RiskyHostsPanelView: React.FC = ({ dataTestSubj: 'risky-hosts-dashboard-links', defaultSortField: 'count', defaultSortOrder: 'desc', - inspectQueryId: isInspectEnabled ? RiskyHostsQueryId : undefined, + inspectQueryId: isInspectEnabled ? HostRiskScoreQueryId.OVERVIEW_RISKY_HOSTS : undefined, listItems, panelTitle: i18n.PANEL_TITLE, splitPanel: splitPanelElement, diff --git a/x-pack/plugins/security_solution/public/overview/components/sidebar/sidebar.tsx b/x-pack/plugins/security_solution/public/overview/components/sidebar/sidebar.tsx index b8701f3ef1639d..f8a0e2e7c83b97 100644 --- a/x-pack/plugins/security_solution/public/overview/components/sidebar/sidebar.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/sidebar/sidebar.tsx @@ -7,7 +7,6 @@ import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; import React, { useMemo } from 'react'; -import styled from 'styled-components'; import { ENABLE_NEWS_FEED_SETTING, NEWS_FEED_URL_SETTING } from '../../../../common/constants'; import { Filters as RecentTimelinesFilters } from '../recent_timelines/filters'; @@ -20,10 +19,6 @@ import * as i18n from '../../pages/translations'; import { RecentCases } from '../recent_cases'; import { useGetUserCasesPermissions } from '../../../common/lib/kibana'; -const SidebarFlexGroup = styled(EuiFlexGroup)` - width: 305px; -`; - const SidebarSpacerComponent = () => ( @@ -31,8 +26,6 @@ const SidebarSpacerComponent = () => ( ); SidebarSpacerComponent.displayName = 'SidebarSpacerComponent'; -const Spacer = React.memo(SidebarSpacerComponent); - export const Sidebar = React.memo<{ recentTimelinesFilterBy: RecentTimelinesFilterMode; setRecentTimelinesFilterBy: (filterBy: RecentTimelinesFilterMode) => void; @@ -51,15 +44,11 @@ export const Sidebar = React.memo<{ const hasCasesReadPermissions = useGetUserCasesPermissions()?.read; return ( - + {hasCasesReadPermissions && ( - <> - - - - - - + + + )} @@ -67,15 +56,13 @@ export const Sidebar = React.memo<{ - - - + ); }); diff --git a/x-pack/plugins/security_solution/public/overview/pages/overview.tsx b/x-pack/plugins/security_solution/public/overview/pages/overview.tsx index 1df49fed073589..8de31fa8ebe8aa 100644 --- a/x-pack/plugins/security_solution/public/overview/pages/overview.tsx +++ b/x-pack/plugins/security_solution/public/overview/pages/overview.tsx @@ -5,9 +5,8 @@ * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiShowFor } from '@elastic/eui'; import React, { useCallback, useState, useMemo } from 'react'; -import styled from 'styled-components'; import { AlertsByCategory } from '../components/alerts_by_category'; import { FiltersGlobal } from '../../common/components/filters_global'; @@ -37,14 +36,6 @@ import { RiskyHostLinks } from '../components/overview_risky_host_links'; import { useAlertsPrivileges } from '../../detections/containers/detection_engine/alerts/use_alerts_privileges'; import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; -const SidebarFlexItem = styled(EuiFlexItem)` - margin-right: 24px; -`; - -const StyledSecuritySolutionPageWrapper = styled(SecuritySolutionPageWrapper)` - overflow-x: auto; -`; - const OverviewComponent = () => { const getGlobalFiltersQuerySelector = useMemo( () => inputsSelectors.globalFiltersQuerySelector(), @@ -91,20 +82,22 @@ const OverviewComponent = () => { - + {!dismissMessage && !metadataIndexExists && canAccessFleet && ( <> )} - - - - - - - + + + + + + + + + {hasIndexRead && hasKibanaREAD && ( <> @@ -180,7 +173,7 @@ const OverviewComponent = () => { - + ) : ( diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/header/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/header/index.tsx index 9c5b2887d2a8e2..fba78be83fa369 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/header/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/flyout/header/index.tsx @@ -180,9 +180,9 @@ const FlyoutHeaderPanelComponent: React.FC = ({ timeline )} - + + i18n.translate('xpack.securitySolution.timeline.flyout.header.closeTimelineButtonLabel', { + defaultMessage: 'Close {isTimeline, select, true {timeline} false {template}}', + values: { + isTimeline, + }, + }); export const UNSAVED = i18n.translate('xpack.securitySolution.timeline.properties.unsavedLabel', { defaultMessage: 'Unsaved', diff --git a/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/footer.tsx b/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/footer.tsx index 9b988f054d1303..e43bbbadba7823 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/footer.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/footer.tsx @@ -60,7 +60,8 @@ export const EventDetailsFooterComponent = React.memo( const ruleIndex = useMemo( () => find({ category: 'signal', field: 'signal.rule.index' }, detailsData)?.values ?? - find({ category: 'kibana', field: 'kibana.alert.rule.index' }, detailsData)?.values, + find({ category: 'kibana', field: 'kibana.alert.rule.parameters.index' }, detailsData) + ?.values, [detailsData] ); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/index.test.tsx index 06835e78b03e13..b6e6aa40876ccf 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/actions/index.test.tsx @@ -12,6 +12,10 @@ import { TestProviders, mockTimelineModel, mockTimelineData } from '../../../../ import { Actions } from '.'; import { mockTimelines } from '../../../../../common/mock/mock_timelines_plugin'; import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; + +jest.mock('../../../../../detections/components/user_info', () => ({ + useUserData: jest.fn().mockReturnValue([{ canUserCRUD: true, hasIndexWrite: true }]), +})); jest.mock('../../../../../common/hooks/use_experimental_features', () => ({ useIsExperimentalFeatureEnabled: jest.fn().mockReturnValue(false), })); diff --git a/x-pack/plugins/security_solution/scripts/beat_docs/build.js b/x-pack/plugins/security_solution/scripts/beat_docs/build.js index 554581e26d30f4..0179349df76a1d 100644 --- a/x-pack/plugins/security_solution/scripts/beat_docs/build.js +++ b/x-pack/plugins/security_solution/scripts/beat_docs/build.js @@ -25,8 +25,8 @@ const tar = require('tar'); const zlib = require('zlib'); const OUTPUT_DIRECTORY = resolve('scripts', 'beat_docs'); -const OUTPUT_SERVER_DIRECTORY = resolve('server', 'utils', 'beat_schema'); -const BEATS_VERSION = '7.14.0'; +const OUTPUT_SERVER_DIRECTORY = resolve('../timelines', 'server', 'utils', 'beat_schema'); +const BEATS_VERSION = '8.0.0-rc1'; const beats = [ { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/__snapshots__/get_signals_template.test.ts.snap b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/__snapshots__/get_signals_template.test.ts.snap index 6e0712332157d2..e03e438650df91 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/__snapshots__/get_signals_template.test.ts.snap +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/__snapshots__/get_signals_template.test.ts.snap @@ -3,7 +3,7 @@ exports[`get_signals_template backwards compatibility mappings for version 45 should match snapshot 1`] = ` Object { "_meta": Object { - "aliases_version": 1, + "aliases_version": 2, "version": 45, }, "properties": Object { @@ -31,6 +31,14 @@ Object { "path": "signal.depth", "type": "alias", }, + "kibana.alert.group.id": Object { + "path": "signal.group.id", + "type": "alias", + }, + "kibana.alert.group.index": Object { + "path": "signal.group.index", + "type": "alias", + }, "kibana.alert.original_event.action": Object { "path": "signal.original_event.action", "type": "alias", @@ -159,18 +167,10 @@ Object { "path": "signal.rule.immutable", "type": "alias", }, - "kibana.alert.rule.index": Object { - "path": "signal.rule.index", - "type": "alias", - }, "kibana.alert.rule.interval": Object { "path": "signal.rule.interval", "type": "alias", }, - "kibana.alert.rule.language": Object { - "path": "signal.rule.language", - "type": "alias", - }, "kibana.alert.rule.license": Object { "path": "signal.rule.license", "type": "alias", @@ -187,10 +187,6 @@ Object { "path": "signal.rule.note", "type": "alias", }, - "kibana.alert.rule.query": Object { - "path": "signal.rule.query", - "type": "alias", - }, "kibana.alert.rule.references": Object { "path": "signal.rule.references", "type": "alias", @@ -203,10 +199,6 @@ Object { "path": "signal.rule.rule_name_override", "type": "alias", }, - "kibana.alert.rule.saved_id": Object { - "path": "signal.rule.saved_id", - "type": "alias", - }, "kibana.alert.rule.tags": Object { "path": "signal.rule.tags", "type": "alias", @@ -251,42 +243,6 @@ Object { "path": "signal.rule.threat.technique.subtechnique.reference", "type": "alias", }, - "kibana.alert.rule.threat_index": Object { - "path": "signal.rule.threat_index", - "type": "alias", - }, - "kibana.alert.rule.threat_indicator_path": Object { - "path": "signal.rule.threat_indicator_path", - "type": "alias", - }, - "kibana.alert.rule.threat_language": Object { - "path": "signal.rule.threat_language", - "type": "alias", - }, - "kibana.alert.rule.threat_mapping.entries.field": Object { - "path": "signal.rule.threat_mapping.entries.field", - "type": "alias", - }, - "kibana.alert.rule.threat_mapping.entries.type": Object { - "path": "signal.rule.threat_mapping.entries.type", - "type": "alias", - }, - "kibana.alert.rule.threat_mapping.entries.value": Object { - "path": "signal.rule.threat_mapping.entries.value", - "type": "alias", - }, - "kibana.alert.rule.threat_query": Object { - "path": "signal.rule.threat_query", - "type": "alias", - }, - "kibana.alert.rule.threshold.field": Object { - "path": "signal.rule.threshold.field", - "type": "alias", - }, - "kibana.alert.rule.threshold.value": Object { - "path": "signal.rule.threshold.value", - "type": "alias", - }, "kibana.alert.rule.timeline_id": Object { "path": "signal.rule.timeline_id", "type": "alias", @@ -295,6 +251,10 @@ Object { "path": "signal.rule.timeline_title", "type": "alias", }, + "kibana.alert.rule.timestamp_override": Object { + "path": "signal.rule.timestamp_override", + "type": "alias", + }, "kibana.alert.rule.to": Object { "path": "signal.rule.to", "type": "alias", @@ -519,6 +479,9 @@ Object { }, "type": "object", }, + "timestamp_override": Object { + "type": "keyword", + }, }, "type": "object", }, @@ -570,7 +533,7 @@ Object { exports[`get_signals_template backwards compatibility mappings for version 57 should match snapshot 1`] = ` Object { "_meta": Object { - "aliases_version": 1, + "aliases_version": 2, "version": 57, }, } @@ -589,7 +552,7 @@ Object { }, "mappings": Object { "_meta": Object { - "aliases_version": 1, + "aliases_version": 2, "version": 67, }, "dynamic": false, @@ -2291,6 +2254,14 @@ Object { "path": "signal.depth", "type": "alias", }, + "kibana.alert.group.id": Object { + "path": "signal.group.id", + "type": "alias", + }, + "kibana.alert.group.index": Object { + "path": "signal.group.index", + "type": "alias", + }, "kibana.alert.original_event.action": Object { "path": "signal.original_event.action", "type": "alias", @@ -2419,18 +2390,10 @@ Object { "path": "signal.rule.immutable", "type": "alias", }, - "kibana.alert.rule.index": Object { - "path": "signal.rule.index", - "type": "alias", - }, "kibana.alert.rule.interval": Object { "path": "signal.rule.interval", "type": "alias", }, - "kibana.alert.rule.language": Object { - "path": "signal.rule.language", - "type": "alias", - }, "kibana.alert.rule.license": Object { "path": "signal.rule.license", "type": "alias", @@ -2447,10 +2410,6 @@ Object { "path": "signal.rule.note", "type": "alias", }, - "kibana.alert.rule.query": Object { - "path": "signal.rule.query", - "type": "alias", - }, "kibana.alert.rule.references": Object { "path": "signal.rule.references", "type": "alias", @@ -2463,10 +2422,6 @@ Object { "path": "signal.rule.rule_name_override", "type": "alias", }, - "kibana.alert.rule.saved_id": Object { - "path": "signal.rule.saved_id", - "type": "alias", - }, "kibana.alert.rule.tags": Object { "path": "signal.rule.tags", "type": "alias", @@ -2511,42 +2466,6 @@ Object { "path": "signal.rule.threat.technique.subtechnique.reference", "type": "alias", }, - "kibana.alert.rule.threat_index": Object { - "path": "signal.rule.threat_index", - "type": "alias", - }, - "kibana.alert.rule.threat_indicator_path": Object { - "path": "signal.rule.threat_indicator_path", - "type": "alias", - }, - "kibana.alert.rule.threat_language": Object { - "path": "signal.rule.threat_language", - "type": "alias", - }, - "kibana.alert.rule.threat_mapping.entries.field": Object { - "path": "signal.rule.threat_mapping.entries.field", - "type": "alias", - }, - "kibana.alert.rule.threat_mapping.entries.type": Object { - "path": "signal.rule.threat_mapping.entries.type", - "type": "alias", - }, - "kibana.alert.rule.threat_mapping.entries.value": Object { - "path": "signal.rule.threat_mapping.entries.value", - "type": "alias", - }, - "kibana.alert.rule.threat_query": Object { - "path": "signal.rule.threat_query", - "type": "alias", - }, - "kibana.alert.rule.threshold.field": Object { - "path": "signal.rule.threshold.field", - "type": "alias", - }, - "kibana.alert.rule.threshold.value": Object { - "path": "signal.rule.threshold.value", - "type": "alias", - }, "kibana.alert.rule.timeline_id": Object { "path": "signal.rule.timeline_id", "type": "alias", @@ -2555,6 +2474,10 @@ Object { "path": "signal.rule.timeline_title", "type": "alias", }, + "kibana.alert.rule.timestamp_override": Object { + "path": "signal.rule.timestamp_override", + "type": "alias", + }, "kibana.alert.rule.to": Object { "path": "signal.rule.to", "type": "alias", diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/get_signals_template.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/get_signals_template.ts index d80b9123d0edd8..1f02fcde671844 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/get_signals_template.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/get_signals_template.ts @@ -47,7 +47,7 @@ export const SIGNALS_TEMPLATE_VERSION = 67; UI will call create_index_route and and go through the index update process. Increment this number if making changes to the field aliases we use to make signals forwards-compatible. */ -export const SIGNALS_FIELD_ALIASES_VERSION = 1; +export const SIGNALS_FIELD_ALIASES_VERSION = 2; /** @constant diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/signal_aad_mapping.json b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/signal_aad_mapping.json index 66768c86f05e47..f6b88a1968a5b0 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/signal_aad_mapping.json +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/signal_aad_mapping.json @@ -4,6 +4,8 @@ "signal.ancestors.index": "kibana.alert.ancestors.index", "signal.ancestors.type": "kibana.alert.ancestors.type", "signal.depth": "kibana.alert.depth", + "signal.group.id": "kibana.alert.group.id", + "signal.group.index": "kibana.alert.group.index", "signal.original_event.action": "kibana.alert.original_event.action", "signal.original_event.category": "kibana.alert.original_event.category", "signal.original_event.code": "kibana.alert.original_event.code", @@ -37,19 +39,15 @@ "signal.rule.from": "kibana.alert.rule.from", "signal.rule.id": "kibana.alert.rule.uuid", "signal.rule.immutable": "kibana.alert.rule.immutable", - "signal.rule.index": "kibana.alert.rule.index", "signal.rule.interval": "kibana.alert.rule.interval", - "signal.rule.language": "kibana.alert.rule.language", "signal.rule.license": "kibana.alert.rule.license", "signal.rule.max_signals": "kibana.alert.rule.max_signals", "signal.rule.name": "kibana.alert.rule.name", "signal.rule.note": "kibana.alert.rule.note", - "signal.rule.query": "kibana.alert.rule.query", "signal.rule.references": "kibana.alert.rule.references", "signal.rule.risk_score": "kibana.alert.risk_score", "signal.rule.rule_id": "kibana.alert.rule.rule_id", "signal.rule.rule_name_override": "kibana.alert.rule.rule_name_override", - "signal.rule.saved_id": "kibana.alert.rule.saved_id", "signal.rule.severity": "kibana.alert.severity", "signal.rule.tags": "kibana.alert.rule.tags", "signal.rule.threat.framework": "kibana.alert.rule.threat.framework", @@ -62,17 +60,9 @@ "signal.rule.threat.technique.subtechnique.id": "kibana.alert.rule.threat.technique.subtechnique.id", "signal.rule.threat.technique.subtechnique.name": "kibana.alert.rule.threat.technique.subtechnique.name", "signal.rule.threat.technique.subtechnique.reference": "kibana.alert.rule.threat.technique.subtechnique.reference", - "signal.rule.threat_index": "kibana.alert.rule.threat_index", - "signal.rule.threat_indicator_path": "kibana.alert.rule.threat_indicator_path", - "signal.rule.threat_language": "kibana.alert.rule.threat_language", - "signal.rule.threat_mapping.entries.field": "kibana.alert.rule.threat_mapping.entries.field", - "signal.rule.threat_mapping.entries.value": "kibana.alert.rule.threat_mapping.entries.value", - "signal.rule.threat_mapping.entries.type": "kibana.alert.rule.threat_mapping.entries.type", - "signal.rule.threat_query": "kibana.alert.rule.threat_query", - "signal.rule.threshold.field": "kibana.alert.rule.threshold.field", - "signal.rule.threshold.value": "kibana.alert.rule.threshold.value", "signal.rule.timeline_id": "kibana.alert.rule.timeline_id", "signal.rule.timeline_title": "kibana.alert.rule.timeline_title", + "signal.rule.timestamp_override": "kibana.alert.rule.timestamp_override", "signal.rule.to": "kibana.alert.rule.to", "signal.rule.type": "kibana.alert.rule.type", "signal.rule.updated_at": "kibana.alert.rule.updated_at", diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/signal_extra_fields.json b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/signal_extra_fields.json index 32c084f927d7b0..02dcc9ec84926e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/signal_extra_fields.json +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/signal_extra_fields.json @@ -168,6 +168,9 @@ "type": "float" } } + }, + "timestamp_override": { + "type": "keyword" } } }, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/utils.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/utils.test.ts index 8b4a9cf2502266..db04d8eded8692 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/utils.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/utils.test.ts @@ -26,7 +26,7 @@ import { import { getAlertMock } from '../__mocks__/request_responses'; import { INTERNAL_IDENTIFIER } from '../../../../../common/constants'; import { PartialFilter } from '../../types'; -import { BulkError } from '../utils'; +import { BulkError, createBulkErrorObject } from '../utils'; import { getOutputRuleAlertForRest } from '../__mocks__/utils'; import { PartialAlert } from '../../../../../../alerting/server'; import { createRulesAndExceptionsStreamFromNdJson } from '../../rules/create_rules_stream_from_ndjson'; @@ -46,9 +46,24 @@ import { LegacyRulesActionsSavedObject } from '../../rule_actions/legacy_get_rul // eslint-disable-next-line no-restricted-imports import { LegacyRuleAlertAction } from '../../rule_actions/legacy_types'; import { RuleExceptionsPromiseFromStreams } from './utils/import_rules_utils'; +import { partition } from 'lodash/fp'; type PromiseFromStreams = ImportRulesSchemaDecoded | Error; +const createMockImportRule = async (rule: ReturnType) => { + const ndJsonStream = new Readable({ + read() { + this.push(`${JSON.stringify(rule)}\n`); + this.push(null); + }, + }); + const [{ rules }] = await createPromiseFromStreams([ + ndJsonStream, + ...createRulesAndExceptionsStreamFromNdJson(1000), + ]); + return rules; +}; + describe.each([ ['Legacy', false], ['RAC', true], @@ -667,12 +682,10 @@ describe.each([ soClient.find.mockClear(); }); - test('returns original action if Elasticsearch query fails', async () => { - clients.core.savedObjects - .getClient() - .find.mockRejectedValueOnce(new Error('failed to query')); + test('returns error if Elasticsearch query fails', async () => { + soClient.find.mockRejectedValue(new Error('failed to query')); const result = await swapActionIds(mockAction, soClient); - expect(result).toEqual(mockAction); + expect((result as Error).message).toEqual('failed to query'); }); test('returns original action if Elasticsearch query returns no hits', async () => { @@ -781,9 +794,50 @@ describe.each([ ]); }); + test('returns import rules schemas + one migrated action + one error', async () => { + const rule: ReturnType = { + ...getCreateRulesSchemaMock('rule-1'), + actions: [mockAction, { ...mockAction, id: 'different-id' }], + }; + const rules = await createMockImportRule(rule); + soClient.find.mockImplementationOnce(async () => ({ + total: 0, + per_page: 0, + page: 1, + saved_objects: [ + { score: 0, id: 'new-post-8.0-id', type: 'action', attributes: {}, references: [] }, + ], + })); + + soClient.find.mockRejectedValueOnce(new Error('failed to query')); + + const res = await migrateLegacyActionsIds(rules, soClient); + expect(soClient.find.mock.calls).toHaveLength(2); + const [error, ruleRes] = partition( + (item): item is Error => item instanceof Error + )(res); + + expect(ruleRes[0]).toEqual({ + ...rules[0], + actions: [{ ...mockAction, id: 'new-post-8.0-id' }], + }); + expect(error[0]).toEqual( + new Error( + JSON.stringify( + createBulkErrorObject({ + ruleId: rule.rule_id, + statusCode: 409, + message: `${[new Error('failed to query')].map((e: Error) => e.message).join(',')}`, + }) + ) + ) + ); + }); + test('returns import rules schemas + migrated action resulting in error', async () => { const rule: ReturnType = { ...getCreateRulesSchemaMock('rule-1'), + // only passing in one action here actions: [mockAction], }; soClient.find.mockImplementationOnce(async () => ({ @@ -791,6 +845,7 @@ describe.each([ per_page: 0, page: 1, saved_objects: [ + // two actions are being returned, thus resulting in a conflict { score: 0, id: 'new-post-8.0-id', type: 'action', attributes: {}, references: [] }, { score: 0, id: 'new-post-8.0-id-2', type: 'action', attributes: {}, references: [] }, ], @@ -801,13 +856,14 @@ describe.each([ [rule], soClient ); - expect(res[0] instanceof Error).toBeTruthy(); - expect((res[0] as unknown as Error).message).toEqual( + expect(res[1] instanceof Error).toBeTruthy(); + expect((res[1] as unknown as Error).message).toEqual( JSON.stringify({ rule_id: 'rule-1', error: { status_code: 409, message: + // error message for when two or more action connectors are found for a single id 'Found two action connectors with originId or _id: some-7.x-id The upload cannot be completed unless the _id or the originId of the action connector is changed. See https://www.elastic.co/guide/en/kibana/current/sharing-saved-objects.html for more details', }, }) @@ -843,8 +899,9 @@ describe.each([ soClient ); expect(res[0]).toEqual({ ...rule, actions: [{ ...mockAction, id: 'new-post-8.0-id' }] }); - expect(res[1] instanceof Error).toBeTruthy(); - expect((res[1] as unknown as Error).message).toEqual( + expect(res[1]).toEqual({ ...rule, actions: [] }); + expect(res[2] instanceof Error).toBeTruthy(); + expect((res[2] as unknown as Error).message).toEqual( JSON.stringify({ rule_id: 'rule-1', error: { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/utils.ts index a52a2804d3c7e2..8819b068fd5d78 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/rules/utils.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { countBy } from 'lodash/fp'; +import { countBy, partition } from 'lodash/fp'; import uuid from 'uuid'; import { Action } from '@kbn/securitysolution-io-ts-alerting-types'; import { SavedObjectsClientContract } from 'kibana/server'; @@ -229,10 +229,10 @@ export const swapActionIds = async ( `Found two action connectors with originId or _id: ${action.id} The upload cannot be completed unless the _id or the originId of the action connector is changed. See https://www.elastic.co/guide/en/kibana/current/sharing-saved-objects.html for more details` ); } - } catch (exc) { return action; + } catch (exc) { + return exc; } - return action; }; /** @@ -271,7 +271,7 @@ export const migrateLegacyActionsIds = async ( ): Promise => { const isImportRule = (r: unknown): r is ImportRulesSchemaDecoded => !(r instanceof Error); - return pMap( + const toReturn = await pMap( rules, async (rule) => { if (isImportRule(rule)) { @@ -284,33 +284,32 @@ export const migrateLegacyActionsIds = async ( ); // were there any errors discovered while trying to migrate and swap the action connector ids? - const actionMigrationErrors = newActions.filter( - (action): action is Error => action instanceof Error - ); - - const newlyMigratedActions: Action[] = newActions.filter( - (action): action is Action => !(action instanceof Error) - ); + const [actionMigrationErrors, newlyMigratedActions] = partition( + (item): item is Error => item instanceof Error + )(newActions); if (actionMigrationErrors == null || actionMigrationErrors.length === 0) { return { ...rule, actions: newlyMigratedActions }; } - // return an Error object with the rule_id and the error messages - // for the actions associated with that rule. - return new Error( - JSON.stringify( - createBulkErrorObject({ - ruleId: rule.rule_id, - statusCode: 409, - message: `${actionMigrationErrors.map((error: Error) => error.message).join(',')}`, - }) - ) - ); + + return [ + { ...rule, actions: newlyMigratedActions }, + new Error( + JSON.stringify( + createBulkErrorObject({ + ruleId: rule.rule_id, + statusCode: 409, + message: `${actionMigrationErrors.map((error: Error) => error.message).join(',')}`, + }) + ) + ), + ]; } return rule; }, { concurrency: MAX_CONCURRENT_SEARCHES } ); + return toReturn.flat(); }; /** diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/query_signals_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/query_signals_route.ts index 1c3fb8cac4e4d5..def203f534ad3a 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/query_signals_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/query_signals_route.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { transformError } from '@kbn/securitysolution-es-utils'; import type { SecuritySolutionPluginRouter } from '../../../../types'; import { DETECTION_ENGINE_QUERY_SIGNALS_URL } from '../../../../../common/constants'; @@ -35,7 +36,7 @@ export const querySignalsRoute = ( }, async (context, request, response) => { // eslint-disable-next-line @typescript-eslint/naming-convention - const { query, aggs, _source, track_total_hits, size } = request.body; + const { query, aggs, _source, track_total_hits, size, runtime_mappings } = request.body; const siemResponse = buildSiemResponse(response); if ( query == null && @@ -61,6 +62,7 @@ export const querySignalsRoute = ( _source, track_total_hits, size, + runtime_mappings: runtime_mappings as MappingRuntimeFields, }, ignore_unavailable: true, }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/bulk_create_factory.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/bulk_create_factory.ts index 07b93f04e965f6..efe02f2ec6b7a1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/bulk_create_factory.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/bulk_create_factory.ts @@ -6,6 +6,7 @@ */ import { performance } from 'perf_hooks'; +import { isEmpty } from 'lodash'; import { Logger } from 'kibana/server'; import { BaseHit } from '../../../../../common/detection_engine/types'; @@ -44,7 +45,7 @@ export const bulkCreateFactory = const start = performance.now(); - const { createdAlerts } = await alertWithPersistence( + const { createdAlerts, errors } = await alertWithPersistence( wrappedDocs.map((doc) => ({ _id: doc._id, // `fields` should have already been merged into `doc._source` @@ -61,11 +62,24 @@ export const bulkCreateFactory = ) ); - return { - errors: [], - success: true, - bulkCreateDuration: makeFloatString(end - start), - createdItemsCount: createdAlerts.length, - createdItems: createdAlerts, - }; + if (!isEmpty(errors)) { + logger.debug( + buildRuleMessage(`[-] bulkResponse had errors with responses of: ${JSON.stringify(errors)}`) + ); + return { + errors: Object.keys(errors), + success: false, + bulkCreateDuration: makeFloatString(end - start), + createdItemsCount: createdAlerts.length, + createdItems: createdAlerts, + }; + } else { + return { + errors: [], + success: true, + bulkCreateDuration: makeFloatString(end - start), + createdItemsCount: createdAlerts.length, + createdItems: createdAlerts, + }; + } }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/build_alert.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/build_alert.test.ts index 2fc650f353cd78..a39c5f77bc2891 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/build_alert.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/utils/build_alert.test.ts @@ -7,6 +7,7 @@ import { ALERT_INSTANCE_ID, + ALERT_NAMESPACE, ALERT_REASON, ALERT_RISK_SCORE, ALERT_RULE_CONSUMER, @@ -514,4 +515,101 @@ describe('buildAlert', () => { ]; expect(ancestors).toEqual(expected); }); + + test('it builds an ancestor correctly if the parent is an alert', () => { + const docId = 'd5e8eb51-a6a0-456d-8a15-4b79bfec3d71'; + const sampleDoc = sampleDocNoSortIdWithTimestamp(docId); + const doc = { + ...sampleDoc, + _source: { + ...sampleDoc._source, + [TIMESTAMP]: new Date().toISOString(), + [EVENT_ACTION]: 'socket_opened', + [EVENT_KIND]: 'signal', + [EVENT_DATASET]: 'socket', + [EVENT_MODULE]: 'system', + [ALERT_UUID]: docId, + ...flattenWithPrefix(ALERT_NAMESPACE, { + depth: 1, + ancestors: [ + { + id: '730ddf9e-5a00-4f85-9ddf-5878ca511a87', + type: 'event', + index: 'myFakeSignalIndex', + depth: 0, + }, + ], + rule: { + uuid: '98c0bf9e-4d38-46f4-9a6a-8a820426256b', + }, + }), + }, + }; + const ancestors = buildAncestors(doc); + const expected: Ancestor[] = [ + { + id: '730ddf9e-5a00-4f85-9ddf-5878ca511a87', + type: 'event', + index: 'myFakeSignalIndex', + depth: 0, + }, + { + rule: '98c0bf9e-4d38-46f4-9a6a-8a820426256b', + id: 'd5e8eb51-a6a0-456d-8a15-4b79bfec3d71', + type: 'signal', + index: 'myFakeSignalIndex', + depth: 1, + }, + ]; + expect(ancestors).toEqual(expected); + }); + + test('it builds an ancestor correctly if the parent is a legacy alert', () => { + const docId = 'd5e8eb51-a6a0-456d-8a15-4b79bfec3d71'; + const sampleDoc = sampleDocNoSortIdWithTimestamp(docId); + const doc = { + ...sampleDoc, + _source: { + ...sampleDoc._source, + [TIMESTAMP]: new Date().toISOString(), + event: { + action: 'socket_opened', + dataset: 'socket', + kind: 'signal', + module: 'system', + }, + signal: { + depth: 1, + ancestors: [ + { + id: '730ddf9e-5a00-4f85-9ddf-5878ca511a87', + type: 'event', + index: 'myFakeSignalIndex', + depth: 0, + }, + ], + rule: { + id: '98c0bf9e-4d38-46f4-9a6a-8a820426256b', + }, + }, + }, + }; + const ancestors = buildAncestors(doc); + const expected: Ancestor[] = [ + { + id: '730ddf9e-5a00-4f85-9ddf-5878ca511a87', + type: 'event', + index: 'myFakeSignalIndex', + depth: 0, + }, + { + rule: '98c0bf9e-4d38-46f4-9a6a-8a820426256b', + id: 'd5e8eb51-a6a0-456d-8a15-4b79bfec3d71', + type: 'signal', + index: 'myFakeSignalIndex', + depth: 1, + }, + ]; + expect(ancestors).toEqual(expected); + }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/README.md b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/README.md index e0ada4aad08173..635839577fb2d7 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/README.md +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/README.md @@ -40,12 +40,14 @@ - templateTimelineId: Specify an unique uuid e.g.: `2c7e0663-5a91-0004-aa15-26bf756d2c40` - - templateTimelineVersion: just start from `1` + - templateTimelineVersion: start from `1`, bump it on update - timelineType: `template` - status: `immutable` + - indexNames: [] + 3. ```cd x-pack/plugins/security_solution/server/lib/detection_engine/scripts``` diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/index.ndjson b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/index.ndjson index 549f6733b0208e..84972a837a3e82 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/index.ndjson +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/index.ndjson @@ -11,4 +11,4 @@ {"savedObjectId":null,"version":null,"columns":[{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"@timestamp","searchable":null},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"kibana.alert.rule.description","searchable":null},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"event.action","searchable":null},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"process.name","searchable":null},{"indexes":null,"aggregatable":true,"name":null,"description":"The working directory of the process.","columnHeaderType":"not-filtered","id":"process.working_directory","category":"process","type":"string","searchable":null,"example":"/home/alice"},{"indexes":null,"aggregatable":true,"name":null,"description":"Array of process arguments, starting with the absolute path to\nthe executable.\n\nMay be filtered to protect sensitive information.","columnHeaderType":"not-filtered","id":"process.args","category":"process","type":"string","searchable":null,"example":"[\"/usr/bin/ssh\",\"-l\",\"user\",\"10.0.0.16\"]"},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"process.pid","searchable":null},{"indexes":null,"aggregatable":true,"name":null,"description":"Absolute path to the process executable.","columnHeaderType":"not-filtered","id":"process.parent.executable","category":"process","type":"string","searchable":null,"example":"/usr/bin/ssh"},{"indexes":null,"aggregatable":true,"name":null,"description":"Array of process arguments.\n\nMay be filtered to protect sensitive information.","columnHeaderType":"not-filtered","id":"process.parent.args","category":"process","type":"string","searchable":null,"example":"[\"ssh\",\"-l\",\"user\",\"10.0.0.16\"]"},{"indexes":null,"aggregatable":true,"name":null,"description":"Process id.","columnHeaderType":"not-filtered","id":"process.parent.pid","category":"process","type":"number","searchable":null,"example":"4242"},{"indexes":null,"aggregatable":true,"name":null,"description":"Short name or login of the user.","columnHeaderType":"not-filtered","id":"user.name","category":"user","type":"string","searchable":null,"example":"albert"},{"indexes":null,"aggregatable":true,"name":null,"description":"Name of the host.\n\nIt can contain what `hostname` returns on Unix systems, the fully qualified\ndomain name, or a name specified by the user. The sender decides which value\nto use.","columnHeaderType":"not-filtered","id":"host.name","category":"host","type":"string","searchable":null}],"dataProviders":[{"excluded":false,"and":[],"kqlQuery":"","name":"","queryMatch":{"displayValue":"endpoint","field":"agent.type","displayField":"agent.type","value":"endpoint","operator":":"},"id":"timeline-1-4685da24-35c1-43f3-892d-1f926dbf5568","type":"default","enabled":true}],"description":"","eventType":"all","filters":[],"kqlMode":"filter","kqlQuery":{"filterQuery":{"kuery":{"kind":"kuery","expression":""},"serializedQuery":""}},"title":"Generic Endpoint Timeline","timelineType":"template","templateTimelineVersion":2,"templateTimelineId":"db366523-f1c6-4c1f-8731-6ce5ed9e5717","dateRange":{"start":1588161020848,"end":1588162280848},"savedQueryId":null,"sort":{"columnId":"@timestamp","sortDirection":"desc"},"created":1594735857110,"createdBy":"Elastic","updated":1611609999115,"updatedBy":"Elastic","eventNotes":[],"globalNotes":[],"pinnedEventIds":[],"status":"immutable"} {"savedObjectId":null,"version":null,"columns":[{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"@timestamp","searchable":null},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"kibana.alert.rule.description","searchable":null},{"indexes":null,"aggregatable":true,"name":null,"description":"The action captured by the event.\n\nThis describes the information in the event. It is more specific than `event.category`.\nExamples are `group-add`, `process-started`, `file-created`. The value is\nnormally defined by the implementer.","columnHeaderType":"not-filtered","id":"event.action","category":"event","type":"string","searchable":null,"example":"user-password-change"},{"indexes":null,"aggregatable":true,"name":null,"description":"Array of process arguments, starting with the absolute path to\nthe executable.\n\nMay be filtered to protect sensitive information.","columnHeaderType":"not-filtered","id":"process.args","category":"process","type":"string","searchable":null,"example":"[\"/usr/bin/ssh\",\"-l\",\"user\",\"10.0.0.16\"]"},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"process.pid","searchable":null},{"indexes":null,"aggregatable":true,"name":null,"description":"IP address of the source (IPv4 or IPv6).","columnHeaderType":"not-filtered","id":"source.ip","category":"source","type":"ip","searchable":null},{"indexes":null,"aggregatable":true,"name":null,"description":"Port of the source.","columnHeaderType":"not-filtered","id":"source.port","category":"source","type":"number","searchable":null},{"indexes":null,"aggregatable":true,"name":null,"description":"IP address of the destination (IPv4 or IPv6).","columnHeaderType":"not-filtered","id":"destination.ip","category":"destination","type":"ip","searchable":null},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"destination.port","searchable":null},{"indexes":null,"aggregatable":true,"name":null,"description":"Short name or login of the user.","columnHeaderType":"not-filtered","id":"user.name","category":"user","type":"string","searchable":null,"example":"albert"},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"host.name","searchable":null}],"dataProviders":[{"and":[{"enabled":true,"excluded":false,"id":"timeline-1-e37e37c5-a6e7-4338-af30-47bfbc3c0e1e","kqlQuery":"","name":"{destination.ip}","queryMatch":{"displayField":"destination.ip","displayValue":"{destination.ip}","field":"destination.ip","operator":":","value":"{destination.ip}"},"type":"template"}],"enabled":true,"excluded":false,"id":"timeline-1-ec778f01-1802-40f0-9dfb-ed8de1f656cb","kqlQuery":"","name":"{source.ip}","queryMatch":{"displayField":"source.ip","displayValue":"{source.ip}","field":"source.ip","operator":":","value":"{source.ip}"},"type":"template"}],"description":"","eventType":"all","filters":[],"kqlMode":"filter","kqlQuery":{"filterQuery":{"kuery":{"kind":"kuery","expression":""},"serializedQuery":""}},"title":"Generic Network Timeline","timelineType":"template","templateTimelineVersion":2,"templateTimelineId":"91832785-286d-4ebe-b884-1a208d111a70","dateRange":{"start":1588255858373,"end":1588256218373},"savedQueryId":null,"sort":{"columnId":"@timestamp","sortDirection":"desc"},"created":1594735573866,"createdBy":"Elastic","updated":1611609960850,"updatedBy":"Elastic","eventNotes":[],"globalNotes":[],"pinnedEventIds":[],"status":"immutable"} {"savedObjectId":null,"version":null,"columns":[{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"@timestamp","searchable":null},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"kibana.alert.rule.description","searchable":null},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"event.action","searchable":null},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"process.name","searchable":null},{"indexes":null,"aggregatable":true,"name":null,"description":"The working directory of the process.","columnHeaderType":"not-filtered","id":"process.working_directory","category":"process","type":"string","searchable":null,"example":"/home/alice"},{"indexes":null,"aggregatable":true,"name":null,"description":"Array of process arguments, starting with the absolute path to\nthe executable.\n\nMay be filtered to protect sensitive information.","columnHeaderType":"not-filtered","id":"process.args","category":"process","type":"string","searchable":null,"example":"[\"/usr/bin/ssh\",\"-l\",\"user\",\"10.0.0.16\"]"},{"indexes":null,"name":null,"columnHeaderType":"not-filtered","id":"process.pid","searchable":null},{"indexes":null,"aggregatable":true,"name":null,"description":"Absolute path to the process executable.","columnHeaderType":"not-filtered","id":"process.parent.executable","category":"process","type":"string","searchable":null,"example":"/usr/bin/ssh"},{"indexes":null,"aggregatable":true,"name":null,"description":"Array of process arguments.\n\nMay be filtered to protect sensitive information.","columnHeaderType":"not-filtered","id":"process.parent.args","category":"process","type":"string","searchable":null,"example":"[\"ssh\",\"-l\",\"user\",\"10.0.0.16\"]"},{"indexes":null,"aggregatable":true,"name":null,"description":"Process id.","columnHeaderType":"not-filtered","id":"process.parent.pid","category":"process","type":"number","searchable":null,"example":"4242"},{"indexes":null,"aggregatable":true,"name":null,"description":"Short name or login of the user.","columnHeaderType":"not-filtered","id":"user.name","category":"user","type":"string","searchable":null,"example":"albert"},{"indexes":null,"aggregatable":true,"name":null,"description":"Name of the host.\n\nIt can contain what `hostname` returns on Unix systems, the fully qualified\ndomain name, or a name specified by the user. The sender decides which value\nto use.","columnHeaderType":"not-filtered","id":"host.name","category":"host","type":"string","searchable":null}],"dataProviders":[{"excluded":false,"and":[],"kqlQuery":"","name":"{process.name}","queryMatch":{"displayValue":null,"field":"process.name","displayField":null,"value":"{process.name}","operator":":"},"id":"timeline-1-8622010a-61fb-490d-b162-beac9c36a853","type":"template","enabled":true}],"description":"","eventType":"all","filters":[],"kqlMode":"filter","kqlQuery":{"filterQuery":{"kuery":{"kind":"kuery","expression":""},"serializedQuery":""}},"title":"Generic Process Timeline","timelineType":"template","templateTimelineVersion":2,"templateTimelineId":"76e52245-7519-4251-91ab-262fb1a1728c","dateRange":{"start":1588161020848,"end":1588162280848},"savedQueryId":null,"sort":{"columnId":"@timestamp","sortDirection":"desc"},"created":1594735629389,"createdBy":"Elastic","updated":1611609848602,"updatedBy":"Elastic","eventNotes":[],"globalNotes":[],"pinnedEventIds":[],"status":"immutable"} -{"savedObjectId":null,"version":null,"columns":[{"columnHeaderType":"not-filtered","id":"@timestamp"},{"columnHeaderType":"not-filtered","id":"kibana.alert.rule.description"},{"aggregatable":true,"description":"The action captured by the event.\n\nThis describes the information in the event. It is more specific than `event.category`.\nExamples are `group-add`, `process-started`, `file-created`. The value is\nnormally defined by the implementer.","columnHeaderType":"not-filtered","id":"event.action","category":"event","type":"string","example":"user-password-change"},{"aggregatable":true,"description":"Array of process arguments, starting with the absolute path to\nthe executable.\n\nMay be filtered to protect sensitive information.","columnHeaderType":"not-filtered","id":"process.args","category":"process","type":"string","example":"[\"/usr/bin/ssh\",\"-l\",\"user\",\"10.0.0.16\"]"},{"columnHeaderType":"not-filtered","id":"process.pid"},{"aggregatable":true,"description":"IP address of the source (IPv4 or IPv6).","columnHeaderType":"not-filtered","id":"source.ip","category":"source","type":"ip"},{"aggregatable":true,"description":"Port of the source.","columnHeaderType":"not-filtered","id":"source.port","category":"source","type":"number"},{"aggregatable":true,"description":"IP address of the destination (IPv4 or IPv6).","columnHeaderType":"not-filtered","id":"destination.ip","category":"destination","type":"ip"},{"columnHeaderType":"not-filtered","id":"destination.port"},{"aggregatable":true,"description":"Short name or login of the user.","columnHeaderType":"not-filtered","id":"user.name","category":"user","type":"string","example":"albert"},{"columnHeaderType":"not-filtered","id":"host.name"}],"dataProviders":[{"excluded":false,"and":[{"excluded":false,"kqlQuery":"","name":"{threat.enrichments.matched.type}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.type","displayField":null,"value":"{threat.enrichments.matched.type}","operator":":"},"id":"timeline-1-ae18ef4b-f690-4122-a24d-e13b6818fba8","type":"template","enabled":true},{"excluded":false,"kqlQuery":"","name":"{threat.enrichments.matched.field}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.field","displayField":null,"value":"{threat.enrichments.matched.field}","operator":":"},"id":"timeline-1-7b4cf27e-6788-4d8e-9188-7687f0eba0f2","type":"template","enabled":true}],"kqlQuery":"","name":"{threat.enrichments.matched.atomic}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.atomic","displayField":null,"value":"{threat.enrichments.matched.atomic}","operator":":"},"id":"timeline-1-7db7d278-a80a-4853-971a-904319c50777","type":"template","enabled":true}],"description":"This Timeline template is for alerts generated by Indicator Match detection rules.","eqlOptions":{"eventCategoryField":"event.category","tiebreakerField":"","timestampField":"@timestamp","query":"","size":100},"eventType":"alert","filters":[],"kqlMode":"filter","kqlQuery":{"filterQuery":{"kuery":{"kind":"kuery","expression":""},"serializedQuery":""}},"dataViewId": "security-solution","indexNames":[".siem-signals-default"],"title":"Generic Threat Match Timeline","timelineType":"template","templateTimelineVersion":2,"templateTimelineId":"495ad7a7-316e-4544-8a0f-9c098daee76e","dateRange":{"start":1588161020848,"end":1588162280848},"savedQueryId":null,"sort":[{"sortDirection":"desc","columnId":"@timestamp"}],"created":1616696609311,"createdBy":"elastic","updated":1616788372794,"updatedBy":"elastic","eventNotes":[],"globalNotes":[],"pinnedEventIds":[],"status":"immutable"} +{"savedObjectId":null,"version":null,"columns":[{"columnHeaderType":"not-filtered","id":"@timestamp"},{"columnHeaderType":"not-filtered","id":"kibana.alert.rule.description"},{"aggregatable":true,"description":"The action captured by the event.\n\nThis describes the information in the event. It is more specific than `event.category`.\nExamples are `group-add`, `process-started`, `file-created`. The value is\nnormally defined by the implementer.","columnHeaderType":"not-filtered","id":"event.action","category":"event","type":"string","example":"user-password-change"},{"aggregatable":true,"description":"Array of process arguments, starting with the absolute path to\nthe executable.\n\nMay be filtered to protect sensitive information.","columnHeaderType":"not-filtered","id":"process.args","category":"process","type":"string","example":"[\"/usr/bin/ssh\",\"-l\",\"user\",\"10.0.0.16\"]"},{"columnHeaderType":"not-filtered","id":"process.pid"},{"aggregatable":true,"description":"IP address of the source (IPv4 or IPv6).","columnHeaderType":"not-filtered","id":"source.ip","category":"source","type":"ip"},{"aggregatable":true,"description":"Port of the source.","columnHeaderType":"not-filtered","id":"source.port","category":"source","type":"number"},{"aggregatable":true,"description":"IP address of the destination (IPv4 or IPv6).","columnHeaderType":"not-filtered","id":"destination.ip","category":"destination","type":"ip"},{"columnHeaderType":"not-filtered","id":"destination.port"},{"aggregatable":true,"description":"Short name or login of the user.","columnHeaderType":"not-filtered","id":"user.name","category":"user","type":"string","example":"albert"},{"columnHeaderType":"not-filtered","id":"host.name"}],"dataProviders":[{"excluded":false,"and":[{"excluded":false,"kqlQuery":"","name":"{threat.enrichments.matched.type}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.type","displayField":null,"value":"{threat.enrichments.matched.type}","operator":":"},"id":"timeline-1-ae18ef4b-f690-4122-a24d-e13b6818fba8","type":"template","enabled":true},{"excluded":false,"kqlQuery":"","name":"{threat.enrichments.matched.field}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.field","displayField":null,"value":"{threat.enrichments.matched.field}","operator":":"},"id":"timeline-1-7b4cf27e-6788-4d8e-9188-7687f0eba0f2","type":"template","enabled":true}],"kqlQuery":"","name":"{threat.enrichments.matched.atomic}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.atomic","displayField":null,"value":"{threat.enrichments.matched.atomic}","operator":":"},"id":"timeline-1-7db7d278-a80a-4853-971a-904319c50777","type":"template","enabled":true}],"description":"This Timeline template is for alerts generated by Indicator Match detection rules.","eqlOptions":{"eventCategoryField":"event.category","tiebreakerField":"","timestampField":"@timestamp","query":"","size":100},"eventType":"alert","filters":[],"kqlMode":"filter","kqlQuery":{"filterQuery":{"kuery":{"kind":"kuery","expression":""},"serializedQuery":""}},"dataViewId": "security-solution","indexNames":[],"title":"Generic Threat Match Timeline","timelineType":"template","templateTimelineVersion":3,"templateTimelineId":"495ad7a7-316e-4544-8a0f-9c098daee76e","dateRange":{"start":1588161020848,"end":1588162280848},"savedQueryId":null,"sort":[{"sortDirection":"desc","columnId":"@timestamp"}],"created":1616696609311,"createdBy":"elastic","updated":1616788372794,"updatedBy":"elastic","eventNotes":[],"globalNotes":[],"pinnedEventIds":[],"status":"immutable"} diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/threat.json b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/threat.json index 588ead3db2c44b..64ebd134b6805e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/threat.json +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_timelines/threat.json @@ -1 +1 @@ -{"savedObjectId":null,"version":null,"columns":[{"columnHeaderType":"not-filtered","id":"@timestamp"},{"columnHeaderType":"not-filtered","id":"kibana.alert.rule.description"},{"aggregatable":true,"description":"The action captured by the event.\n\nThis describes the information in the event. It is more specific than `event.category`.\nExamples are `group-add`, `process-started`, `file-created`. The value is\nnormally defined by the implementer.","columnHeaderType":"not-filtered","id":"event.action","category":"event","type":"string","example":"user-password-change"},{"aggregatable":true,"description":"Array of process arguments, starting with the absolute path to\nthe executable.\n\nMay be filtered to protect sensitive information.","columnHeaderType":"not-filtered","id":"process.args","category":"process","type":"string","example":"[\"/usr/bin/ssh\",\"-l\",\"user\",\"10.0.0.16\"]"},{"columnHeaderType":"not-filtered","id":"process.pid"},{"aggregatable":true,"description":"IP address of the source (IPv4 or IPv6).","columnHeaderType":"not-filtered","id":"source.ip","category":"source","type":"ip"},{"aggregatable":true,"description":"Port of the source.","columnHeaderType":"not-filtered","id":"source.port","category":"source","type":"number"},{"aggregatable":true,"description":"IP address of the destination (IPv4 or IPv6).","columnHeaderType":"not-filtered","id":"destination.ip","category":"destination","type":"ip"},{"columnHeaderType":"not-filtered","id":"destination.port"},{"aggregatable":true,"description":"Short name or login of the user.","columnHeaderType":"not-filtered","id":"user.name","category":"user","type":"string","example":"albert"},{"columnHeaderType":"not-filtered","id":"host.name"}],"dataProviders":[{"excluded":false,"and":[{"excluded":false,"kqlQuery":"","name":"{threat.enrichments.matched.type}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.type","displayField":null,"value":"{threat.enrichments.matched.type}","operator":":"},"id":"timeline-1-ae18ef4b-f690-4122-a24d-e13b6818fba8","type":"template","enabled":true},{"excluded":false,"kqlQuery":"","name":"{threat.enrichments.matched.field}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.field","displayField":null,"value":"{threat.enrichments.matched.field}","operator":":"},"id":"timeline-1-7b4cf27e-6788-4d8e-9188-7687f0eba0f2","type":"template","enabled":true}],"kqlQuery":"","name":"{threat.enrichments.matched.atomic}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.atomic","displayField":null,"value":"{threat.enrichments.matched.atomic}","operator":":"},"id":"timeline-1-7db7d278-a80a-4853-971a-904319c50777","type":"template","enabled":true}],"description":"This Timeline template is for alerts generated by Indicator Match detection rules.","eqlOptions":{"eventCategoryField":"event.category","tiebreakerField":"","timestampField":"@timestamp","query":"","size":100},"eventType":"alert","filters":[],"kqlMode":"filter","kqlQuery":{"filterQuery":{"kuery":{"kind":"kuery","expression":""},"serializedQuery":""}},"dataViewId": "security-solution","indexNames":[".siem-signals-default"],"title":"Generic Threat Match Timeline","timelineType":"template","templateTimelineVersion":2,"templateTimelineId":"495ad7a7-316e-4544-8a0f-9c098daee76e","dateRange":{"start":1588161020848,"end":1588162280848},"savedQueryId":null,"sort":[{"sortDirection":"desc","columnId":"@timestamp"}],"created":1616696609311,"createdBy":"elastic","updated":1616788372794,"updatedBy":"elastic","eventNotes":[],"globalNotes":[],"pinnedEventIds":[],"status":"immutable"} +{"savedObjectId":null,"version":null,"columns":[{"columnHeaderType":"not-filtered","id":"@timestamp"},{"columnHeaderType":"not-filtered","id":"kibana.alert.rule.description"},{"aggregatable":true,"description":"The action captured by the event.\n\nThis describes the information in the event. It is more specific than `event.category`.\nExamples are `group-add`, `process-started`, `file-created`. The value is\nnormally defined by the implementer.","columnHeaderType":"not-filtered","id":"event.action","category":"event","type":"string","example":"user-password-change"},{"aggregatable":true,"description":"Array of process arguments, starting with the absolute path to\nthe executable.\n\nMay be filtered to protect sensitive information.","columnHeaderType":"not-filtered","id":"process.args","category":"process","type":"string","example":"[\"/usr/bin/ssh\",\"-l\",\"user\",\"10.0.0.16\"]"},{"columnHeaderType":"not-filtered","id":"process.pid"},{"aggregatable":true,"description":"IP address of the source (IPv4 or IPv6).","columnHeaderType":"not-filtered","id":"source.ip","category":"source","type":"ip"},{"aggregatable":true,"description":"Port of the source.","columnHeaderType":"not-filtered","id":"source.port","category":"source","type":"number"},{"aggregatable":true,"description":"IP address of the destination (IPv4 or IPv6).","columnHeaderType":"not-filtered","id":"destination.ip","category":"destination","type":"ip"},{"columnHeaderType":"not-filtered","id":"destination.port"},{"aggregatable":true,"description":"Short name or login of the user.","columnHeaderType":"not-filtered","id":"user.name","category":"user","type":"string","example":"albert"},{"columnHeaderType":"not-filtered","id":"host.name"}],"dataProviders":[{"excluded":false,"and":[{"excluded":false,"kqlQuery":"","name":"{threat.enrichments.matched.type}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.type","displayField":null,"value":"{threat.enrichments.matched.type}","operator":":"},"id":"timeline-1-ae18ef4b-f690-4122-a24d-e13b6818fba8","type":"template","enabled":true},{"excluded":false,"kqlQuery":"","name":"{threat.enrichments.matched.field}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.field","displayField":null,"value":"{threat.enrichments.matched.field}","operator":":"},"id":"timeline-1-7b4cf27e-6788-4d8e-9188-7687f0eba0f2","type":"template","enabled":true}],"kqlQuery":"","name":"{threat.enrichments.matched.atomic}","queryMatch":{"displayValue":null,"field":"threat.enrichments.matched.atomic","displayField":null,"value":"{threat.enrichments.matched.atomic}","operator":":"},"id":"timeline-1-7db7d278-a80a-4853-971a-904319c50777","type":"template","enabled":true}],"description":"This Timeline template is for alerts generated by Indicator Match detection rules.","eqlOptions":{"eventCategoryField":"event.category","tiebreakerField":"","timestampField":"@timestamp","query":"","size":100},"eventType":"alert","filters":[],"kqlMode":"filter","kqlQuery":{"filterQuery":{"kuery":{"kind":"kuery","expression":""},"serializedQuery":""}},"dataViewId": "security-solution","indexNames":[],"title":"Generic Threat Match Timeline","timelineType":"template","templateTimelineVersion":3,"templateTimelineId":"495ad7a7-316e-4544-8a0f-9c098daee76e","dateRange":{"start":1588161020848,"end":1588162280848},"savedQueryId":null,"sort":[{"sortDirection":"desc","columnId":"@timestamp"}],"created":1616696609311,"createdBy":"elastic","updated":1616788372794,"updatedBy":"elastic","eventNotes":[],"globalNotes":[],"pinnedEventIds":[],"status":"immutable"} diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/legacy_notifications/one_action.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/legacy_notifications/one_action.json index bf980e370e3a38..cf03a90dfe72b7 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/legacy_notifications/one_action.json +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/legacy_notifications/one_action.json @@ -3,7 +3,7 @@ "interval": "1m", "actions": [ { - "id": "1fa31c30-3046-11ec-8971-1f3f7bae65af", + "id": "0cae9900-6e54-11ec-a124-bfe603780ab8", "group": "default", "params": { "message": "Hourly\nRule {{context.rule.name}} generated {{state.signals_count}} alerts" diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/__mocks__/es_results.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/__mocks__/es_results.ts index 5bf62a41ec1407..6558c48a6af5d1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/__mocks__/es_results.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/__mocks__/es_results.ts @@ -14,6 +14,7 @@ import type { SignalHit, WrappedSignalHit, AlertAttributes, + AlertSourceHit, } from '../types'; import { SavedObject } from '../../../../../../../../src/core/server'; import { loggingSystemMock } from '../../../../../../../../src/core/server/mocks'; @@ -25,6 +26,15 @@ import { RulesSchema } from '../../../../../common/detection_engine/schemas/resp import { RuleParams } from '../../schemas/rule_schemas'; import { getThreatMock } from '../../../../../common/detection_engine/schemas/types/threat.mock'; import { RuleExecutionStatus } from '../../../../../common/detection_engine/schemas/common/schemas'; +import { + ALERT_REASON, + ALERT_RULE_PARAMETERS, + ALERT_RULE_UUID, + ALERT_UUID, + ALERT_WORKFLOW_STATUS, + EVENT_KIND, +} from '@kbn/rule-data-utils'; +import { ALERT_ANCESTORS } from '../../../../../common/field_maps/field_names'; export const sampleRuleSO = (params: T): SavedObject> => { return { @@ -167,6 +177,122 @@ export const sampleDocNoSortId = ( sort: [], }); +export const sampleAlertDocNoSortId = ( + someUuid: string = sampleIdGuid, + ip?: string +): SignalSourceHit & { _source: Required['_source'] } => ({ + ...sampleDocNoSortId(someUuid, ip), + _source: { + event: { + kind: 'signal', + }, + signal: { + ancestors: [ + { + id: 'd5e8eb51-a6a0-456d-8a15-4b79bfec3d71', + type: 'event', + index: 'myFakeSignalIndex', + depth: 0, + }, + ], + reason: 'reasonable reason', + rule: { + id: '2e051244-b3c6-4779-a241-e1b4f0beceb9', + description: 'Descriptive description', + }, + status: 'open', + }, + }, + fields: {}, +}); + +export const sampleAlertDocAADNoSortId = ( + someUuid: string = sampleIdGuid, + ip?: string +): AlertSourceHit & { _source: Required['_source'] } => ({ + _index: 'myFakeSignalIndex', + _score: 100, + _version: 1, + _id: someUuid, + _source: { + someKey: 'someValue', + '@timestamp': '2020-04-20T21:27:45+0000', + source: { + ip: ip ?? '127.0.0.1', + }, + [EVENT_KIND]: 'signal', + [ALERT_UUID]: someUuid, + [ALERT_REASON]: 'reasonable reason', + [ALERT_WORKFLOW_STATUS]: 'open', + [ALERT_ANCESTORS]: [ + { + id: 'd5e8eb51-a6a0-456d-8a15-4b79bfec3d71', + type: 'event', + index: 'myFakeSignalIndex', + depth: 0, + }, + ], + [ALERT_RULE_UUID]: '2e051244-b3c6-4779-a241-e1b4f0beceb9', + [ALERT_RULE_PARAMETERS]: { + description: 'Descriptive description', + meta: { someMeta: 'someField' }, + timeline_id: 'some-timeline-id', + timeline_title: 'some-timeline-title', + risk_score: 50, + severity: 'high', + note: 'Noteworthy notes', + license: 'Elastic License', + author: ['Elastic'], + false_positives: [], + from: 'now-6m', + rule_id: 'rule-1', + max_signals: 10000, + risk_score_mapping: [], + severity_mapping: [], + to: 'now', + references: ['http://example.com', 'https://example.com'], + version: 1, + immutable: false, + namespace: 'default', + output_index: '', + building_block_type: undefined, + exceptions_list: [], + rule_name_override: undefined, + timestamp_override: undefined, + threat: [ + { + framework: 'MITRE ATT&CK', + tactic: { + id: 'TA0000', + name: 'test tactic', + reference: 'https://attack.mitre.org/tactics/TA0000/', + }, + technique: [ + { + id: 'T0000', + name: 'test technique', + reference: 'https://attack.mitre.org/techniques/T0000/', + subtechnique: [ + { + id: 'T0000.000', + name: 'test subtechnique', + reference: 'https://attack.mitre.org/techniques/T0000/000/', + }, + ], + }, + ], + }, + ], + }, + }, + fields: { + someKey: ['someValue'], + '@timestamp': ['2020-04-20T21:27:45+0000'], + 'source.ip': [ip ?? '127.0.0.1'], + }, + sort: [], +}); + export const sampleDocNoSortIdWithTimestamp = ( someUuid: string = sampleIdGuid, ip?: string @@ -183,6 +309,38 @@ export const sampleDocNoSortIdWithTimestamp = ( }; }; +export const sampleAlertDocNoSortIdWithTimestamp = ( + someUuid: string = sampleIdGuid, + ip?: string +): SignalSourceHit & { + _source: Required['_source'] & { '@timestamp': string }; +} => { + const doc = sampleAlertDocNoSortId(someUuid, ip); + return { + ...doc, + _source: { + ...doc._source, + '@timestamp': new Date().toISOString(), + }, + }; +}; + +export const sampleAlertDocAADNoSortIdWithTimestamp = ( + someUuid: string = sampleIdGuid, + ip?: string +): AlertSourceHit & { + _source: Required['_source'] & { '@timestamp': string }; +} => { + const doc = sampleAlertDocAADNoSortId(someUuid, ip); + return { + ...doc, + _source: { + ...doc._source, + '@timestamp': new Date().toISOString(), + }, + }; +}; + export const sampleDocSeverity = (severity?: unknown, fieldName?: string): SignalSourceHit => { const doc = { _index: 'myFakeSignalIndex', diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts index da0c2e7819c181..1af6e62d30ff7e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts @@ -115,12 +115,16 @@ export interface SignalSource { }; rule: { id: string; + description?: string; false_positives?: string[]; immutable?: boolean; }; /** signal.depth was introduced in 7.10 and pre-7.10 signals do not have it. */ depth?: number; original_time?: string; + /** signal.reason was introduced in 7.15 and pre-7.15 signals do not have it. */ + reason?: string; + status?: string; threshold_result?: ThresholdResult; }; kibana?: SearchTypes; @@ -180,6 +184,7 @@ export type WrappedEventHit = BaseHit; export type AlertSearchResponse = estypes.SearchResponse; export type SignalSearchResponse = estypes.SearchResponse; export type SignalSourceHit = estypes.SearchHit; +export type AlertSourceHit = estypes.SearchHit; export type WrappedSignalHit = BaseHit; export type BaseSignalHit = estypes.SearchHit; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/utils.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/utils.test.ts index 6842cc5bda2304..b59922fbd7c9c1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/utils.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/utils.test.ts @@ -8,7 +8,7 @@ import moment from 'moment'; import sinon from 'sinon'; import { TransportResult } from '@elastic/elasticsearch'; -import { ALERT_UUID } from '@kbn/rule-data-utils'; +import { ALERT_REASON, ALERT_RULE_PARAMETERS, ALERT_UUID } from '@kbn/rule-data-utils'; import { alertsMock, AlertServicesMock } from '../../../../../alerting/server/mocks'; import { listMock } from '../../../../../lists/server/mocks'; @@ -43,6 +43,7 @@ import { calculateTotal, getTotalHitsValue, isRACAlert, + getField, } from './utils'; import { BulkResponseErrorAggregation, SearchAfterAndBulkCreateReturnType } from './types'; import { @@ -57,6 +58,8 @@ import { sampleDocSearchResultsNoSortIdNoHits, sampleDocSearchResultsNoSortId, sampleDocNoSortId, + sampleAlertDocNoSortIdWithTimestamp, + sampleAlertDocAADNoSortIdWithTimestamp, } from './__mocks__/es_results'; import { ShardError } from '../../types'; import { ruleExecutionLogClientMock } from '../rule_execution_log/__mocks__/rule_execution_log_client'; @@ -1570,4 +1573,66 @@ describe('utils', () => { expect(isRACAlert({ 'kibana.alert.uuid': null })).toEqual(false); }); }); + + describe('getField', () => { + test('gets legacy field when legacy field name is passed in', () => { + const doc = sampleAlertDocNoSortIdWithTimestamp(); + const value = getField(doc, 'signal.reason'); + expect(value).toEqual('reasonable reason'); + }); + + test('gets AAD field when AAD field name is passed in', () => { + const doc = sampleAlertDocAADNoSortIdWithTimestamp(); + const value = getField(doc, ALERT_REASON); + expect(value).toEqual('reasonable reason'); + }); + + test('gets legacy field when AAD field name is passed in', () => { + const doc = sampleAlertDocNoSortIdWithTimestamp(); + const value = getField(doc, ALERT_REASON); + expect(value).toEqual('reasonable reason'); + }); + + test('gets AAD field when legacy field name is passed in', () => { + const doc = sampleAlertDocAADNoSortIdWithTimestamp(); + const value = getField(doc, 'signal.reason'); + expect(value).toEqual('reasonable reason'); + }); + + test('returns `undefined` when AAD field name does not exist', () => { + const doc = sampleAlertDocNoSortIdWithTimestamp(); + const value = getField(doc, 'kibana.alert.does_not_exist'); + expect(value).toEqual(undefined); + }); + + test('returns `undefined` when legacy field name does not exist', () => { + const doc = sampleAlertDocAADNoSortIdWithTimestamp(); + const value = getField(doc, 'signal.does_not_exist'); + expect(value).toEqual(undefined); + }); + + test('returns legacy rule param when AAD rule param is passed in', () => { + const doc = sampleAlertDocNoSortIdWithTimestamp(); + const value = getField(doc, `${ALERT_RULE_PARAMETERS}.description`); + expect(value).toEqual('Descriptive description'); + }); + + test('returns AAD rule param when legacy rule param is passed in', () => { + const doc = sampleAlertDocAADNoSortIdWithTimestamp(); + const value = getField(doc, 'signal.rule.description'); + expect(value).toEqual('Descriptive description'); + }); + + test('gets legacy rule param when legacy rule param is passed in', () => { + const doc = sampleAlertDocNoSortIdWithTimestamp(); + const value = getField(doc, 'signal.rule.description'); + expect(value).toEqual('Descriptive description'); + }); + + test('gets AAD rule param when AAD rule param is passed in', () => { + const doc = sampleAlertDocAADNoSortIdWithTimestamp(); + const value = getField(doc, `${ALERT_RULE_PARAMETERS}.description`); + expect(value).toEqual('Descriptive description'); + }); + }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/utils.ts index 4efe356525c1e5..de2e8975788807 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/utils.ts @@ -5,14 +5,14 @@ * 2.0. */ import { createHash } from 'crypto'; -import { chunk, get, isEmpty, partition } from 'lodash'; +import { chunk, get, invert, isEmpty, partition } from 'lodash'; import moment from 'moment'; import uuidv5 from 'uuid/v5'; import dateMath from '@elastic/datemath'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { TransportResult } from '@elastic/elasticsearch'; -import { ALERT_UUID, ALERT_RULE_UUID } from '@kbn/rule-data-utils'; +import { ALERT_UUID, ALERT_RULE_UUID, ALERT_RULE_PARAMETERS } from '@kbn/rule-data-utils'; import type { ListArray, ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; import { MAX_EXCEPTION_LIST_SIZE } from '@kbn/securitysolution-list-constants'; import { hasLargeValueList } from '@kbn/securitysolution-list-utils'; @@ -997,14 +997,49 @@ export const isRACAlert = (event: unknown): event is RACAlert => { export const racFieldMappings: Record = { 'signal.rule.id': ALERT_RULE_UUID, + 'signal.rule.description': `${ALERT_RULE_PARAMETERS}.description`, + 'signal.rule.filters': `${ALERT_RULE_PARAMETERS}.filters`, + 'signal.rule.language': `${ALERT_RULE_PARAMETERS}.language`, + 'signal.rule.query': `${ALERT_RULE_PARAMETERS}.query`, + 'signal.rule.risk_score': `${ALERT_RULE_PARAMETERS}.riskScore`, + 'signal.rule.severity': `${ALERT_RULE_PARAMETERS}.severity`, + 'signal.rule.building_block_type': `${ALERT_RULE_PARAMETERS}.buildingBlockType`, + 'signal.rule.namespace': `${ALERT_RULE_PARAMETERS}.namespace`, + 'signal.rule.note': `${ALERT_RULE_PARAMETERS}.note`, + 'signal.rule.license': `${ALERT_RULE_PARAMETERS}.license`, + 'signal.rule.output_index': `${ALERT_RULE_PARAMETERS}.outputIndex`, + 'signal.rule.timeline_id': `${ALERT_RULE_PARAMETERS}.timelineId`, + 'signal.rule.timeline_title': `${ALERT_RULE_PARAMETERS}.timelineTitle`, + 'signal.rule.meta': `${ALERT_RULE_PARAMETERS}.meta`, + 'signal.rule.rule_name_override': `${ALERT_RULE_PARAMETERS}.ruleNameOverride`, + 'signal.rule.timestamp_override': `${ALERT_RULE_PARAMETERS}.timestampOverride`, + 'signal.rule.author': `${ALERT_RULE_PARAMETERS}.author`, + 'signal.rule.false_positives': `${ALERT_RULE_PARAMETERS}.falsePositives`, + 'signal.rule.from': `${ALERT_RULE_PARAMETERS}.from`, + 'signal.rule.rule_id': `${ALERT_RULE_PARAMETERS}.ruleId`, + 'signal.rule.max_signals': `${ALERT_RULE_PARAMETERS}.maxSignals`, + 'signal.rule.risk_score_mapping': `${ALERT_RULE_PARAMETERS}.riskScoreMapping`, + 'signal.rule.severity_mapping': `${ALERT_RULE_PARAMETERS}.severityMapping`, + 'signal.rule.threat': `${ALERT_RULE_PARAMETERS}.threat`, + 'signal.rule.to': `${ALERT_RULE_PARAMETERS}.to`, + 'signal.rule.references': `${ALERT_RULE_PARAMETERS}.references`, + 'signal.rule.version': `${ALERT_RULE_PARAMETERS}.version`, + 'signal.rule.exceptions_list': `${ALERT_RULE_PARAMETERS}.exceptionsList`, + 'signal.rule.immutable': `${ALERT_RULE_PARAMETERS}.immutable`, }; export const getField = (event: SimpleHit, field: string): T | undefined => { if (isWrappedRACAlert(event)) { const mappedField = racFieldMappings[field] ?? field.replace('signal', 'kibana.alert'); + const parts = mappedField.split('.'); + if (mappedField.includes(ALERT_RULE_PARAMETERS) && parts[parts.length - 1] !== 'parameters') { + const params = get(event._source, ALERT_RULE_PARAMETERS); + return get(params, parts[parts.length - 1]); + } return get(event._source, mappedField) as T; } else if (isWrappedSignalHit(event)) { - return get(event._source, field) as T; + const mappedField = invert(racFieldMappings)[field] ?? field.replace('kibana.alert', 'signal'); + return get(event._source, mappedField) as T; } else if (isWrappedEventHit(event)) { return get(event._source, field) as T; } diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/helpers.test.ts b/x-pack/plugins/security_solution/server/lib/telemetry/helpers.test.ts index cacb34dc8fa70a..6f865aa19b7814 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/helpers.test.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/helpers.test.ts @@ -14,6 +14,7 @@ import { LIST_TRUSTED_APPLICATION, } from './constants'; import { + extractEndpointPolicyConfig, getPreviousDiagTaskTimestamp, getPreviousDailyTaskTimestamp, batchTelemetryRecords, @@ -21,6 +22,7 @@ import { templateExceptionList, } from './helpers'; import type { ESClusterInfo, ESLicense, ExceptionListItem } from './types'; +import { PolicyData } from '../../../common/endpoint/types'; describe('test diagnostic telemetry scheduled task timing helper', () => { test('test -5 mins is returned when there is no previous task run', async () => { @@ -266,3 +268,39 @@ describe('list telemetry schema', () => { expect(templatedItems[0]?.trusted_application).toBeUndefined(); }); }); + +describe('test endpoint policy data config extraction', () => { + const stubPolicyData = { + id: '872de8c5-85cf-4e1b-a504-9fd39b38570c', + version: 'WzU4MjkwLDFd', + name: 'Test Policy Data', + namespace: 'default', + description: '', + package: { + name: 'endpoint', + title: 'Endpoint Security', + version: '1.4.1', + }, + enabled: true, + policy_id: '499b5aa7-d214-5b5d-838b-3cd76469844e', + output_id: '', + inputs: [ + { + type: 'endpoint', + enabled: true, + streams: [], + config: null, + }, + ], + revision: 1, + created_at: '2022-01-18T14:52:17.385Z', + created_by: 'elastic', + updated_at: '2022-01-18T14:52:17.385Z', + updated_by: 'elastic', + } as unknown as PolicyData; + + test('can succeed when policy config is null or empty', async () => { + const endpointPolicyConfig = extractEndpointPolicyConfig(stubPolicyData); + expect(endpointPolicyConfig).toBeNull(); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/helpers.ts b/x-pack/plugins/security_solution/server/lib/telemetry/helpers.ts index 92ea33a7b07eda..d2dce77866d06d 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/helpers.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/helpers.ts @@ -9,6 +9,7 @@ import moment from 'moment'; import type { ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; import { PackagePolicy } from '../../../../fleet/common/types/models/package_policy'; import { copyAllowlistedFields, exceptionListEventFields } from './filters'; +import { PolicyData } from '../../../common/endpoint/types'; import type { ExceptionListItem, ESClusterInfo, @@ -216,6 +217,14 @@ export const templateExceptionList = ( * @param label_list the list of labels to create standardized UsageCounter from * @returns a string label for usage in the UsageCounter */ -export function createUsageCounterLabel(labelList: string[]): string { - return labelList.join('-'); -} +export const createUsageCounterLabel = (labelList: string[]): string => labelList.join('-'); + +/** + * Resiliantly handles an edge case where the endpoint config details are not present + * + * @returns the endpoint policy configuration + */ +export const extractEndpointPolicyConfig = (policyData: PolicyData | null) => { + const epPolicyConfig = policyData?.inputs[0]?.config?.policy; + return epPolicyConfig ? epPolicyConfig : null; +}; diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/tasks/endpoint.ts b/x-pack/plugins/security_solution/server/lib/telemetry/tasks/endpoint.ts index 78f2889ac1d589..000182a3d7a9a9 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/tasks/endpoint.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/tasks/endpoint.ts @@ -18,6 +18,7 @@ import { TelemetryReceiver } from '../receiver'; import { TaskExecutionPeriod } from '../task'; import { batchTelemetryRecords, + extractEndpointPolicyConfig, getPreviousDailyTaskTimestamp, isPackagePolicyList, } from '../helpers'; @@ -145,11 +146,11 @@ export function createTelemetryEndpointTaskConfig(maxTelemetryBatch: number) { packagePolicies .map((pPolicy) => pPolicy as PolicyData) .forEach((pPolicy) => { - if (pPolicy.inputs[0].config !== undefined) { + if (pPolicy.inputs[0]?.config !== undefined && pPolicy.inputs[0]?.config !== null) { pPolicy.inputs.forEach((input) => { if ( input.type === FLEET_ENDPOINT_PACKAGE && - input.config !== undefined && + input?.config !== undefined && policyInfo !== undefined ) { endpointPolicyCache.set(policyInfo, pPolicy); @@ -212,6 +213,7 @@ export function createTelemetryEndpointTaskConfig(maxTelemetryBatch: number) { } const { cpu, memory, uptime } = endpoint.endpoint_metrics.Endpoint.metrics; + const endpointPolicyDetail = extractEndpointPolicyConfig(policyConfig); return { '@timestamp': taskExecutionPeriod.current, @@ -229,7 +231,7 @@ export function createTelemetryEndpointTaskConfig(maxTelemetryBatch: number) { endpoint_meta: { os: endpoint.endpoint_metrics.host.os, }, - policy_config: policyConfig !== null ? policyConfig?.inputs[0].config.policy : {}, + policy_config: endpointPolicyDetail !== null ? endpointPolicyDetail : {}, policy_response: failedPolicy !== null && failedPolicy !== undefined ? { diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/kpi/risky_hosts/query.hosts_kpi_risky_hosts.dsl.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/kpi/risky_hosts/query.hosts_kpi_risky_hosts.dsl.ts index 201d73c4ebb185..7c00b7c0f8193b 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/kpi/risky_hosts/query.hosts_kpi_risky_hosts.dsl.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/kpi/risky_hosts/query.hosts_kpi_risky_hosts.dsl.ts @@ -6,15 +6,12 @@ */ import type { HostsKpiRiskyHostsRequestOptions } from '../../../../../../../common/search_strategy/security_solution/hosts/kpi/risky_hosts'; -import { createQueryFilterClauses } from '../../../../../../utils/build_query'; export const buildHostsKpiRiskyHostsQuery = ({ - filterQuery, timerange: { from, to }, defaultIndex, }: HostsKpiRiskyHostsRequestOptions) => { const filter = [ - ...createQueryFilterClauses(filterQuery), { range: { '@timestamp': { diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/risk_score/query.hosts_risk.dsl.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/risk_score/query.hosts_risk.dsl.ts index 182ad7892204f8..dc3d1e4b5d587c 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/risk_score/query.hosts_risk.dsl.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts/risk_score/query.hosts_risk.dsl.ts @@ -5,12 +5,16 @@ * 2.0. */ -import { HostsRiskScoreRequestOptions } from '../../../../../../common/search_strategy'; +import { Direction, HostsRiskScoreRequestOptions } from '../../../../../../common/search_strategy'; + +const QUERY_SIZE = 10; export const buildHostsRiskScoreQuery = ({ timerange, hostNames, defaultIndex, + limit = QUERY_SIZE, + sortOrder = Direction.desc, }: HostsRiskScoreRequestOptions) => { const filter = []; @@ -35,12 +39,20 @@ export const buildHostsRiskScoreQuery = ({ allow_no_indices: false, ignore_unavailable: true, track_total_hits: false, + size: limit, body: { query: { bool: { filter, }, }, + sort: [ + { + '@timestamp': { + order: sortOrder, + }, + }, + ], }, }; diff --git a/x-pack/plugins/security_solution/server/usage/collector.ts b/x-pack/plugins/security_solution/server/usage/collector.ts index d091c2a6e5e8eb..4530dac725c7b1 100644 --- a/x-pack/plugins/security_solution/server/usage/collector.ts +++ b/x-pack/plugins/security_solution/server/usage/collector.ts @@ -10,6 +10,8 @@ import { CollectorFetchContext } from '../../../../../src/plugins/usage_collecti import { CollectorDependencies } from './types'; import { fetchDetectionsMetrics } from './detections'; import { SAVED_OBJECT_TYPES } from '../../../cases/common/constants'; +// eslint-disable-next-line no-restricted-imports +import { legacyRuleActionsSavedObjectType } from '../lib/detection_engine/rule_actions/legacy_saved_object_mappings'; export type RegisterCollector = (deps: CollectorDependencies) => void; export interface UsageData { @@ -19,7 +21,11 @@ export interface UsageData { export async function getInternalSavedObjectsClient(core: CoreSetup) { return core.getStartServices().then(async ([coreStart]) => { // note: we include the "cases" and "alert" hidden types here otherwise we would not be able to query them. If at some point cases and alert is not considered a hidden type this can be removed - return coreStart.savedObjects.createInternalRepository(['alert', ...SAVED_OBJECT_TYPES]); + return coreStart.savedObjects.createInternalRepository([ + 'alert', + legacyRuleActionsSavedObjectType, + ...SAVED_OBJECT_TYPES, + ]); }); } @@ -51,6 +57,22 @@ export const registerCollector: RegisterCollector = ({ type: 'long', _meta: { description: 'Number of cases attached to query detection rule alerts' }, }, + legacy_notifications_enabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications enabled' }, + }, + legacy_notifications_disabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications disabled' }, + }, + notifications_enabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, + notifications_disabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, }, threshold: { enabled: { @@ -71,6 +93,22 @@ export const registerCollector: RegisterCollector = ({ description: 'Number of cases attached to threshold detection rule alerts', }, }, + legacy_notifications_enabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications enabled' }, + }, + legacy_notifications_disabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications disabled' }, + }, + notifications_enabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, + notifications_disabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, }, eql: { enabled: { type: 'long', _meta: { description: 'Number of eql rules enabled' } }, @@ -83,6 +121,22 @@ export const registerCollector: RegisterCollector = ({ type: 'long', _meta: { description: 'Number of cases attached to eql detection rule alerts' }, }, + legacy_notifications_enabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications enabled' }, + }, + legacy_notifications_disabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications disabled' }, + }, + notifications_enabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, + notifications_disabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, }, machine_learning: { enabled: { @@ -103,6 +157,22 @@ export const registerCollector: RegisterCollector = ({ description: 'Number of cases attached to machine_learning detection rule alerts', }, }, + legacy_notifications_enabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications enabled' }, + }, + legacy_notifications_disabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications disabled' }, + }, + notifications_enabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, + notifications_disabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, }, threat_match: { enabled: { @@ -123,11 +193,21 @@ export const registerCollector: RegisterCollector = ({ description: 'Number of cases attached to threat_match detection rule alerts', }, }, - }, - legacy_notifications: { - total: { + legacy_notifications_enabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications enabled' }, + }, + legacy_notifications_disabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications disabled' }, + }, + notifications_enabled: { type: 'long', - _meta: { description: 'Number of legacy notifications still in use' }, + _meta: { description: 'Number of notifications enabled' }, + }, + notifications_disabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, }, }, elastic_total: { @@ -144,6 +224,22 @@ export const registerCollector: RegisterCollector = ({ type: 'long', _meta: { description: 'Number of cases attached to elastic detection rule alerts' }, }, + legacy_notifications_enabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications enabled' }, + }, + legacy_notifications_disabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications disabled' }, + }, + notifications_enabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, + notifications_disabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, }, custom_total: { enabled: { type: 'long', _meta: { description: 'Number of custom rules enabled' } }, @@ -156,6 +252,22 @@ export const registerCollector: RegisterCollector = ({ type: 'long', _meta: { description: 'Number of cases attached to custom detection rule alerts' }, }, + legacy_notifications_enabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications enabled' }, + }, + legacy_notifications_disabled: { + type: 'long', + _meta: { description: 'Number of legacy notifications disabled' }, + }, + notifications_enabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, + notifications_disabled: { + type: 'long', + _meta: { description: 'Number of notifications enabled' }, + }, }, }, detection_rule_detail: { @@ -198,6 +310,14 @@ export const registerCollector: RegisterCollector = ({ type: 'long', _meta: { description: 'The number of total cases generated by a rule' }, }, + has_legacy_notification: { + type: 'boolean', + _meta: { description: 'True if this rule has a legacy notification' }, + }, + has_notification: { + type: 'boolean', + _meta: { description: 'True if this rule has a notification' }, + }, }, }, }, diff --git a/x-pack/plugins/security_solution/server/usage/detections/detection_rule_helpers.test.ts b/x-pack/plugins/security_solution/server/usage/detections/detection_rule_helpers.test.ts index 3c35296bafb46c..c19e7b18f9e72c 100644 --- a/x-pack/plugins/security_solution/server/usage/detections/detection_rule_helpers.test.ts +++ b/x-pack/plugins/security_solution/server/usage/detections/detection_rule_helpers.test.ts @@ -8,13 +8,25 @@ import { initialDetectionRulesUsage, updateDetectionRuleUsage } from './detection_rule_helpers'; import { DetectionRuleMetric, DetectionRulesTypeUsage } from './types'; -const createStubRule = ( - ruleType: string, - enabled: boolean, - elasticRule: boolean, - alertCount: number, - caseCount: number -): DetectionRuleMetric => ({ +interface StubRuleOptions { + ruleType: string; + enabled: boolean; + elasticRule: boolean; + alertCount: number; + caseCount: number; + hasLegacyNotification: boolean; + hasNotification: boolean; +} + +const createStubRule = ({ + ruleType, + enabled, + elasticRule, + alertCount, + caseCount, + hasLegacyNotification, + hasNotification, +}: StubRuleOptions): DetectionRuleMetric => ({ rule_name: 'rule-name', rule_id: 'id-123', rule_type: ruleType, @@ -25,12 +37,22 @@ const createStubRule = ( updated_on: '2022-01-06T20:02:45.306Z', alert_count_daily: alertCount, cases_count_total: caseCount, + has_legacy_notification: hasLegacyNotification, + has_notification: hasNotification, }); describe('Detections Usage and Metrics', () => { describe('Update metrics with rule information', () => { it('Should update elastic and eql rule metric total', async () => { - const stubRule = createStubRule('eql', true, true, 1, 1); + const stubRule = createStubRule({ + ruleType: 'eql', + enabled: true, + elasticRule: true, + alertCount: 1, + caseCount: 1, + hasLegacyNotification: false, + hasNotification: false, + }); const usage = updateDetectionRuleUsage(stubRule, initialDetectionRulesUsage); expect(usage).toEqual({ @@ -40,22 +62,70 @@ describe('Detections Usage and Metrics', () => { cases: 1, disabled: 0, enabled: 1, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, eql: { alerts: 1, cases: 1, disabled: 0, enabled: 1, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, }); }); it('Should update based on multiple metrics', async () => { - const stubEqlRule = createStubRule('eql', true, true, 1, 1); - const stubQueryRuleOne = createStubRule('query', true, true, 5, 2); - const stubQueryRuleTwo = createStubRule('query', true, false, 5, 2); - const stubMachineLearningOne = createStubRule('machine_learning', false, false, 0, 10); - const stubMachineLearningTwo = createStubRule('machine_learning', true, true, 22, 44); + const stubEqlRule = createStubRule({ + ruleType: 'eql', + enabled: true, + elasticRule: true, + alertCount: 1, + caseCount: 1, + hasLegacyNotification: false, + hasNotification: false, + }); + const stubQueryRuleOne = createStubRule({ + ruleType: 'query', + enabled: true, + elasticRule: true, + alertCount: 5, + caseCount: 2, + hasLegacyNotification: false, + hasNotification: false, + }); + const stubQueryRuleTwo = createStubRule({ + ruleType: 'query', + enabled: true, + elasticRule: false, + alertCount: 5, + caseCount: 2, + hasLegacyNotification: false, + hasNotification: false, + }); + const stubMachineLearningOne = createStubRule({ + ruleType: 'machine_learning', + enabled: false, + elasticRule: false, + alertCount: 0, + caseCount: 10, + hasLegacyNotification: false, + hasNotification: false, + }); + const stubMachineLearningTwo = createStubRule({ + ruleType: 'machine_learning', + enabled: true, + elasticRule: true, + alertCount: 22, + caseCount: 44, + hasLegacyNotification: false, + hasNotification: false, + }); let usage = updateDetectionRuleUsage(stubEqlRule, initialDetectionRulesUsage); usage = updateDetectionRuleUsage(stubQueryRuleOne, usage); @@ -70,32 +140,152 @@ describe('Detections Usage and Metrics', () => { cases: 12, disabled: 1, enabled: 1, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, elastic_total: { alerts: 28, cases: 47, disabled: 0, enabled: 3, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, eql: { alerts: 1, cases: 1, disabled: 0, enabled: 1, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, machine_learning: { alerts: 22, cases: 54, disabled: 1, enabled: 1, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, query: { alerts: 10, cases: 4, disabled: 0, enabled: 2, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, }); }); + + describe('table tests of "ruleType", "enabled", "elasticRule", and "legacyNotification"', () => { + test.each` + ruleType | enabled | hasLegacyNotification | hasNotification | expectedLegacyNotificationsEnabled | expectedLegacyNotificationsDisabled | expectedNotificationsEnabled | expectedNotificationsDisabled + ${'eql'} | ${true} | ${true} | ${false} | ${1} | ${0} | ${0} | ${0} + ${'eql'} | ${true} | ${false} | ${true} | ${0} | ${0} | ${1} | ${0} + ${'eql'} | ${false} | ${false} | ${true} | ${0} | ${0} | ${0} | ${1} + ${'eql'} | ${true} | ${false} | ${true} | ${0} | ${0} | ${1} | ${0} + ${'eql'} | ${false} | ${true} | ${false} | ${0} | ${1} | ${0} | ${0} + ${'eql'} | ${false} | ${false} | ${false} | ${0} | ${0} | ${0} | ${0} + ${'query'} | ${true} | ${true} | ${false} | ${1} | ${0} | ${0} | ${0} + ${'query'} | ${true} | ${false} | ${true} | ${0} | ${0} | ${1} | ${0} + ${'query'} | ${false} | ${false} | ${true} | ${0} | ${0} | ${0} | ${1} + ${'query'} | ${true} | ${false} | ${true} | ${0} | ${0} | ${1} | ${0} + ${'query'} | ${false} | ${true} | ${false} | ${0} | ${1} | ${0} | ${0} + ${'query'} | ${false} | ${false} | ${false} | ${0} | ${0} | ${0} | ${0} + ${'threshold'} | ${true} | ${true} | ${false} | ${1} | ${0} | ${0} | ${0} + ${'threshold'} | ${true} | ${false} | ${true} | ${0} | ${0} | ${1} | ${0} + ${'threshold'} | ${false} | ${false} | ${true} | ${0} | ${0} | ${0} | ${1} + ${'threshold'} | ${true} | ${false} | ${true} | ${0} | ${0} | ${1} | ${0} + ${'threshold'} | ${false} | ${true} | ${false} | ${0} | ${1} | ${0} | ${0} + ${'threshold'} | ${false} | ${false} | ${false} | ${0} | ${0} | ${0} | ${0} + ${'machine_learning'} | ${true} | ${true} | ${false} | ${1} | ${0} | ${0} | ${0} + ${'machine_learning'} | ${true} | ${false} | ${true} | ${0} | ${0} | ${1} | ${0} + ${'machine_learning'} | ${false} | ${false} | ${true} | ${0} | ${0} | ${0} | ${1} + ${'machine_learning'} | ${true} | ${false} | ${true} | ${0} | ${0} | ${1} | ${0} + ${'machine_learning'} | ${false} | ${true} | ${false} | ${0} | ${1} | ${0} | ${0} + ${'machine_learning'} | ${false} | ${false} | ${false} | ${0} | ${0} | ${0} | ${0} + ${'threat_match'} | ${true} | ${true} | ${false} | ${1} | ${0} | ${0} | ${0} + ${'threat_match'} | ${true} | ${false} | ${true} | ${0} | ${0} | ${1} | ${0} + ${'threat_match'} | ${false} | ${false} | ${true} | ${0} | ${0} | ${0} | ${1} + ${'threat_match'} | ${true} | ${false} | ${true} | ${0} | ${0} | ${1} | ${0} + ${'threat_match'} | ${false} | ${true} | ${false} | ${0} | ${1} | ${0} | ${0} + ${'threat_match'} | ${false} | ${false} | ${false} | ${0} | ${0} | ${0} | ${0} + `( + 'expect { "ruleType": $ruleType, "enabled": $enabled, "hasLegacyNotification": $hasLegacyNotification, "hasNotification": $hasNotification } to equal { legacy_notifications_enabled: $expectedLegacyNotificationsEnabled, legacy_notifications_disabled: $expectedLegacyNotificationsDisabled, notifications_enabled: $expectedNotificationsEnabled, notifications_disabled, $expectedNotificationsDisabled }', + ({ + ruleType, + enabled, + hasLegacyNotification, + hasNotification, + expectedLegacyNotificationsEnabled, + expectedLegacyNotificationsDisabled, + expectedNotificationsEnabled, + expectedNotificationsDisabled, + }) => { + const rule1 = createStubRule({ + ruleType, + enabled, + elasticRule: false, + hasLegacyNotification, + hasNotification, + alertCount: 0, + caseCount: 0, + }); + const usage = updateDetectionRuleUsage(rule1, initialDetectionRulesUsage) as ReturnType< + typeof updateDetectionRuleUsage + > & { [key: string]: unknown }; + expect(usage[ruleType]).toEqual( + expect.objectContaining({ + legacy_notifications_enabled: expectedLegacyNotificationsEnabled, + legacy_notifications_disabled: expectedLegacyNotificationsDisabled, + notifications_enabled: expectedNotificationsEnabled, + notifications_disabled: expectedNotificationsDisabled, + }) + ); + + // extra test where we add everything by 1 to ensure that the addition happens with the correct rule type + const rule2 = createStubRule({ + ruleType, + enabled, + elasticRule: false, + hasLegacyNotification, + hasNotification, + alertCount: 0, + caseCount: 0, + }); + const usageAddedByOne = updateDetectionRuleUsage(rule2, usage) as ReturnType< + typeof updateDetectionRuleUsage + > & { [key: string]: unknown }; + + expect(usageAddedByOne[ruleType]).toEqual( + expect.objectContaining({ + legacy_notifications_enabled: + expectedLegacyNotificationsEnabled !== 0 + ? expectedLegacyNotificationsEnabled + 1 + : 0, + legacy_notifications_disabled: + expectedLegacyNotificationsDisabled !== 0 + ? expectedLegacyNotificationsDisabled + 1 + : 0, + notifications_enabled: + expectedNotificationsEnabled !== 0 ? expectedNotificationsEnabled + 1 : 0, + notifications_disabled: + expectedNotificationsDisabled !== 0 ? expectedNotificationsDisabled + 1 : 0, + }) + ); + } + ); + }); }); }); diff --git a/x-pack/plugins/security_solution/server/usage/detections/detection_rule_helpers.ts b/x-pack/plugins/security_solution/server/usage/detections/detection_rule_helpers.ts index 87e484ae2b3d40..8163a736696745 100644 --- a/x-pack/plugins/security_solution/server/usage/detections/detection_rule_helpers.ts +++ b/x-pack/plugins/security_solution/server/usage/detections/detection_rule_helpers.ts @@ -15,7 +15,6 @@ import { SAVED_QUERY_RULE_TYPE_ID, } from '@kbn/securitysolution-rules'; import { ALERT_RULE_UUID } from '@kbn/rule-data-utils'; -import { LEGACY_NOTIFICATIONS_ID } from '../../../common/constants'; import { CASE_COMMENT_SAVED_OBJECT } from '../../../../cases/common/constants'; import { ElasticsearchClient, SavedObjectsClientContract } from '../../../../../../src/core/server'; @@ -30,6 +29,10 @@ import type { RuleSearchResult, DetectionMetrics, } from './types'; +// eslint-disable-next-line no-restricted-imports +import { legacyRuleActionsSavedObjectType } from '../../lib/detection_engine/rule_actions/legacy_saved_object_mappings'; +// eslint-disable-next-line no-restricted-imports +import { LegacyIRuleActionsAttributesSavedObjectAttributes } from '../../lib/detection_engine/rule_actions/legacy_types'; /** * Initial detection metrics initialized. @@ -63,45 +66,70 @@ export const initialDetectionRulesUsage: DetectionRulesTypeUsage = { disabled: 0, alerts: 0, cases: 0, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, threshold: { enabled: 0, disabled: 0, alerts: 0, cases: 0, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, eql: { enabled: 0, disabled: 0, alerts: 0, cases: 0, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, machine_learning: { enabled: 0, disabled: 0, alerts: 0, cases: 0, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, threat_match: { enabled: 0, disabled: 0, alerts: 0, cases: 0, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, elastic_total: { enabled: 0, disabled: 0, alerts: 0, cases: 0, - }, - legacy_notifications: { - total: 0, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, custom_total: { enabled: 0, disabled: 0, alerts: 0, cases: 0, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, }; @@ -112,6 +140,16 @@ export const updateDetectionRuleUsage = ( ): DetectionRulesTypeUsage => { let updatedUsage = usage; + const legacyNotificationEnabled = + detectionRuleMetric.has_legacy_notification && detectionRuleMetric.enabled; + + const legacyNotificationDisabled = + detectionRuleMetric.has_legacy_notification && !detectionRuleMetric.enabled; + + const notificationEnabled = detectionRuleMetric.has_notification && detectionRuleMetric.enabled; + + const notificationDisabled = detectionRuleMetric.has_notification && !detectionRuleMetric.enabled; + if (detectionRuleMetric.rule_type === 'query') { updatedUsage = { ...usage, @@ -121,6 +159,18 @@ export const updateDetectionRuleUsage = ( disabled: !detectionRuleMetric.enabled ? usage.query.disabled + 1 : usage.query.disabled, alerts: usage.query.alerts + detectionRuleMetric.alert_count_daily, cases: usage.query.cases + detectionRuleMetric.cases_count_total, + legacy_notifications_enabled: legacyNotificationEnabled + ? usage.query.legacy_notifications_enabled + 1 + : usage.query.legacy_notifications_enabled, + legacy_notifications_disabled: legacyNotificationDisabled + ? usage.query.legacy_notifications_disabled + 1 + : usage.query.legacy_notifications_disabled, + notifications_enabled: notificationEnabled + ? usage.query.notifications_enabled + 1 + : usage.query.notifications_enabled, + notifications_disabled: notificationDisabled + ? usage.query.notifications_disabled + 1 + : usage.query.notifications_disabled, }, }; } else if (detectionRuleMetric.rule_type === 'threshold') { @@ -136,6 +186,18 @@ export const updateDetectionRuleUsage = ( : usage.threshold.disabled, alerts: usage.threshold.alerts + detectionRuleMetric.alert_count_daily, cases: usage.threshold.cases + detectionRuleMetric.cases_count_total, + legacy_notifications_enabled: legacyNotificationEnabled + ? usage.threshold.legacy_notifications_enabled + 1 + : usage.threshold.legacy_notifications_enabled, + legacy_notifications_disabled: legacyNotificationDisabled + ? usage.threshold.legacy_notifications_disabled + 1 + : usage.threshold.legacy_notifications_disabled, + notifications_enabled: notificationEnabled + ? usage.threshold.notifications_enabled + 1 + : usage.threshold.notifications_enabled, + notifications_disabled: notificationDisabled + ? usage.threshold.notifications_disabled + 1 + : usage.threshold.notifications_disabled, }, }; } else if (detectionRuleMetric.rule_type === 'eql') { @@ -147,6 +209,18 @@ export const updateDetectionRuleUsage = ( disabled: !detectionRuleMetric.enabled ? usage.eql.disabled + 1 : usage.eql.disabled, alerts: usage.eql.alerts + detectionRuleMetric.alert_count_daily, cases: usage.eql.cases + detectionRuleMetric.cases_count_total, + legacy_notifications_enabled: legacyNotificationEnabled + ? usage.eql.legacy_notifications_enabled + 1 + : usage.eql.legacy_notifications_enabled, + legacy_notifications_disabled: legacyNotificationDisabled + ? usage.eql.legacy_notifications_disabled + 1 + : usage.eql.legacy_notifications_disabled, + notifications_enabled: notificationEnabled + ? usage.eql.notifications_enabled + 1 + : usage.eql.notifications_enabled, + notifications_disabled: notificationDisabled + ? usage.eql.notifications_disabled + 1 + : usage.eql.notifications_disabled, }, }; } else if (detectionRuleMetric.rule_type === 'machine_learning') { @@ -162,6 +236,18 @@ export const updateDetectionRuleUsage = ( : usage.machine_learning.disabled, alerts: usage.machine_learning.alerts + detectionRuleMetric.alert_count_daily, cases: usage.machine_learning.cases + detectionRuleMetric.cases_count_total, + legacy_notifications_enabled: legacyNotificationEnabled + ? usage.machine_learning.legacy_notifications_enabled + 1 + : usage.machine_learning.legacy_notifications_enabled, + legacy_notifications_disabled: legacyNotificationDisabled + ? usage.machine_learning.legacy_notifications_disabled + 1 + : usage.machine_learning.legacy_notifications_disabled, + notifications_enabled: notificationEnabled + ? usage.machine_learning.notifications_enabled + 1 + : usage.machine_learning.notifications_enabled, + notifications_disabled: notificationDisabled + ? usage.machine_learning.notifications_disabled + 1 + : usage.machine_learning.notifications_disabled, }, }; } else if (detectionRuleMetric.rule_type === 'threat_match') { @@ -177,6 +263,18 @@ export const updateDetectionRuleUsage = ( : usage.threat_match.disabled, alerts: usage.threat_match.alerts + detectionRuleMetric.alert_count_daily, cases: usage.threat_match.cases + detectionRuleMetric.cases_count_total, + legacy_notifications_enabled: legacyNotificationEnabled + ? usage.threat_match.legacy_notifications_enabled + 1 + : usage.threat_match.legacy_notifications_enabled, + legacy_notifications_disabled: legacyNotificationDisabled + ? usage.threat_match.legacy_notifications_disabled + 1 + : usage.threat_match.legacy_notifications_disabled, + notifications_enabled: notificationEnabled + ? usage.threat_match.notifications_enabled + 1 + : usage.threat_match.notifications_enabled, + notifications_disabled: notificationDisabled + ? usage.threat_match.notifications_disabled + 1 + : usage.threat_match.notifications_disabled, }, }; } @@ -194,6 +292,18 @@ export const updateDetectionRuleUsage = ( : updatedUsage.elastic_total.disabled, alerts: updatedUsage.elastic_total.alerts + detectionRuleMetric.alert_count_daily, cases: updatedUsage.elastic_total.cases + detectionRuleMetric.cases_count_total, + legacy_notifications_enabled: legacyNotificationEnabled + ? updatedUsage.elastic_total.legacy_notifications_enabled + 1 + : updatedUsage.elastic_total.legacy_notifications_enabled, + legacy_notifications_disabled: legacyNotificationDisabled + ? updatedUsage.elastic_total.legacy_notifications_disabled + 1 + : updatedUsage.elastic_total.legacy_notifications_disabled, + notifications_enabled: notificationEnabled + ? updatedUsage.elastic_total.notifications_enabled + 1 + : updatedUsage.elastic_total.notifications_enabled, + notifications_disabled: notificationDisabled + ? updatedUsage.elastic_total.notifications_disabled + 1 + : updatedUsage.elastic_total.notifications_disabled, }, }; } else { @@ -209,6 +319,18 @@ export const updateDetectionRuleUsage = ( : updatedUsage.custom_total.disabled, alerts: updatedUsage.custom_total.alerts + detectionRuleMetric.alert_count_daily, cases: updatedUsage.custom_total.cases + detectionRuleMetric.cases_count_total, + legacy_notifications_enabled: legacyNotificationEnabled + ? updatedUsage.custom_total.legacy_notifications_enabled + 1 + : updatedUsage.custom_total.legacy_notifications_enabled, + legacy_notifications_disabled: legacyNotificationDisabled + ? updatedUsage.custom_total.legacy_notifications_disabled + 1 + : updatedUsage.custom_total.legacy_notifications_disabled, + notifications_enabled: notificationEnabled + ? updatedUsage.custom_total.notifications_enabled + 1 + : updatedUsage.custom_total.notifications_enabled, + notifications_disabled: notificationDisabled + ? updatedUsage.custom_total.notifications_disabled + 1 + : updatedUsage.custom_total.notifications_disabled, }, }; } @@ -287,18 +409,28 @@ export const getDetectionRuleMetrics = async ( filter: `${CASE_COMMENT_SAVED_OBJECT}.attributes.type: alert`, }); - // We get just 1 per a single page so we can get the total count to add to the rulesUsage. // Once we are confident all rules relying on side-car actions SO's have been migrated to SO references we should remove this function. - const legacyNotificationsCount = ( - await savedObjectClient.find({ - type: 'alert', + const legacyRuleActions = + await savedObjectClient.find({ + type: legacyRuleActionsSavedObjectType, page: 1, + perPage: MAX_RESULTS_WINDOW, namespaces: ['*'], - perPage: 1, - filter: `alert.attributes.alertTypeId: ${LEGACY_NOTIFICATIONS_ID}`, - }) - ).total; - rulesUsage = { ...rulesUsage, legacy_notifications: { total: legacyNotificationsCount } }; + }); + + const legacyNotificationRuleIds = legacyRuleActions.saved_objects.reduce( + (cache, legacyNotificationsObject) => { + const ruleRef = legacyNotificationsObject.references.find( + (reference) => reference.name === 'alert_0' && reference.type === 'alert' + ); + if (ruleRef != null) { + const enabled = legacyNotificationsObject.attributes.ruleThrottle !== 'no_actions'; + cache.set(ruleRef.id, { enabled }); + } + return cache; + }, + new Map() + ); const casesCache = cases.saved_objects.reduce((cache, { attributes: casesObject }) => { const ruleId = casesObject.rule.id; @@ -320,6 +452,17 @@ export const getDetectionRuleMetrics = async ( const ruleObjects = ruleResults.hits.hits.map((hit) => { const ruleId = hit._id.split(':')[1]; const isElastic = isElasticRule(hit._source?.alert.tags); + + // Even if the legacy notification is set to "no_actions" we still count the rule as having a legacy notification that is not migrated yet. + const hasLegacyNotification = legacyNotificationRuleIds.get(ruleId) != null; + + // We only count a rule as having a notification and being "enabled" if it is _not_ set to "no_actions"/"muteAll" and it has at least one action within its array. + const hasNotification = + !hasLegacyNotification && + hit._source?.alert.actions != null && + hit._source?.alert.actions.length > 0 && + hit._source?.alert.muteAll !== true; + return { rule_name: hit._source?.alert.name, rule_id: hit._source?.alert.params.ruleId, @@ -331,6 +474,8 @@ export const getDetectionRuleMetrics = async ( updated_on: hit._source?.alert.updatedAt, alert_count_daily: alertsCache.get(ruleId) || 0, cases_count_total: casesCache.get(ruleId) || 0, + has_legacy_notification: hasLegacyNotification, + has_notification: hasNotification, } as DetectionRuleMetric; }); diff --git a/x-pack/plugins/security_solution/server/usage/detections/detections.test.ts b/x-pack/plugins/security_solution/server/usage/detections/detections.test.ts index 7793552510c759..d08f915e4428f5 100644 --- a/x-pack/plugins/security_solution/server/usage/detections/detections.test.ts +++ b/x-pack/plugins/security_solution/server/usage/detections/detections.test.ts @@ -70,6 +70,8 @@ describe('Detections Usage and Metrics', () => { rule_type: 'query', rule_version: 4, updated_on: '2021-03-23T17:15:59.634Z', + has_legacy_notification: false, + has_notification: false, }, ], detection_rule_usage: { @@ -79,15 +81,20 @@ describe('Detections Usage and Metrics', () => { disabled: 1, alerts: 3400, cases: 1, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, elastic_total: { alerts: 3400, cases: 1, disabled: 1, enabled: 0, - }, - legacy_notifications: { - total: 4, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, }, }, @@ -118,15 +125,20 @@ describe('Detections Usage and Metrics', () => { cases: 1, disabled: 1, enabled: 0, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, query: { alerts: 800, cases: 1, disabled: 1, enabled: 0, - }, - legacy_notifications: { - total: 4, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, }, }, @@ -144,7 +156,7 @@ describe('Detections Usage and Metrics', () => { savedObjectsClient.find.mockResolvedValue(getMockAlertCasesResponse()); const result = await fetchDetectionsMetrics('', '', esClientMock, savedObjectsClient, mlMock); - expect(result).toEqual({ + expect(result).toEqual({ ...getInitialDetectionMetrics(), detection_rules: { detection_rule_detail: [ @@ -159,6 +171,8 @@ describe('Detections Usage and Metrics', () => { rule_type: 'query', rule_version: 4, updated_on: '2021-03-23T17:15:59.634Z', + has_legacy_notification: false, + has_notification: false, }, ], detection_rule_usage: { @@ -168,15 +182,20 @@ describe('Detections Usage and Metrics', () => { cases: 1, disabled: 1, enabled: 0, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, query: { alerts: 0, cases: 1, disabled: 1, enabled: 0, - }, - legacy_notifications: { - total: 4, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, }, }, }, diff --git a/x-pack/plugins/security_solution/server/usage/detections/types.ts b/x-pack/plugins/security_solution/server/usage/detections/types.ts index ed0e8a4e5e99f2..b2a9cf7af48613 100644 --- a/x-pack/plugins/security_solution/server/usage/detections/types.ts +++ b/x-pack/plugins/security_solution/server/usage/detections/types.ts @@ -30,7 +30,9 @@ export interface RuleSearchResult { tags: string[]; createdAt: string; updatedAt: string; + muteAll: boolean | undefined | null; params: DetectionRuleParms; + actions: unknown[]; }; } @@ -55,8 +57,11 @@ interface FeatureTypeUsage { disabled: number; alerts: number; cases: number; + legacy_notifications_enabled: number; + legacy_notifications_disabled: number; + notifications_enabled: number; + notifications_disabled: number; } - export interface DetectionRulesTypeUsage { query: FeatureTypeUsage; threshold: FeatureTypeUsage; @@ -65,7 +70,6 @@ export interface DetectionRulesTypeUsage { threat_match: FeatureTypeUsage; elastic_total: FeatureTypeUsage; custom_total: FeatureTypeUsage; - legacy_notifications: LegacyNotifications; } export interface MlJobsUsage { @@ -129,6 +133,8 @@ export interface DetectionRuleMetric { updated_on: string; alert_count_daily: number; cases_count_total: number; + has_legacy_notification: boolean; + has_notification: boolean; } export interface AlertsAggregationResponse { @@ -162,11 +168,3 @@ export interface DetectionRuleAdoption { detection_rule_detail: DetectionRuleMetric[]; detection_rule_usage: DetectionRulesTypeUsage; } - -/** - * The legacy notifications that are still in use. - * @deprecated Once we are confident all rules relying on side-car actions SO's have been migrated to SO references we should remove this function - */ -export interface LegacyNotifications { - total: number; -} diff --git a/x-pack/plugins/security_solution/server/utils/beat_schema/fields.ts b/x-pack/plugins/security_solution/server/utils/beat_schema/fields.ts deleted file mode 100644 index b2f01d9ddb3660..00000000000000 --- a/x-pack/plugins/security_solution/server/utils/beat_schema/fields.ts +++ /dev/null @@ -1,44070 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { BeatFields } from '../../../common/search_strategy/index_fields'; - -/* eslint-disable @typescript-eslint/naming-convention */ -export const fieldsBeat: BeatFields = { - _id: { - category: 'base', - description: 'Each document has an _id that uniquely identifies it', - example: 'Y-6TfmcB0WOhS6qyMv3s', - name: '_id', - type: 'keyword', - }, - _index: { - category: 'base', - description: - 'An index is like a ‘database’ in a relational database. It has a mapping which defines multiple types. An index is a logical namespace which maps to one or more primary shards and can have zero or more replica shards.', - example: 'auditbeat-8.0.0-2019.02.19-000001', - name: '_index', - type: 'keyword', - }, - '@timestamp': { - category: 'base', - description: - 'Date/time when the event originated. This is the date/time extracted from the event, typically representing when the event was generated by the source. If the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline. Required field for all events.', - example: '2016-05-23T08:05:34.853Z', - name: '@timestamp', - type: 'date', - }, - labels: { - category: 'base', - description: - 'Custom key/value pairs. Can be used to add meta information to events. Should not contain nested objects. All values are stored as keyword. Example: `docker` and `k8s` labels.', - example: '{"application": "foo-bar", "env": "production"}', - name: 'labels', - type: 'object', - }, - message: { - category: 'base', - description: - 'For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message.', - example: 'Hello World', - name: 'message', - type: 'text', - }, - tags: { - category: 'base', - description: 'List of keywords used to tag each event.', - example: '["production", "env2"]', - name: 'tags', - type: 'keyword', - }, - 'agent.build.original': { - category: 'agent', - description: - 'Extended build information for the agent. This field is intended to contain any build information that a data source may provide, no specific formatting is required.', - example: - 'metricbeat version 7.6.0 (amd64), libbeat 7.6.0 [6a23e8f8f30f5001ba344e4e54d8d9cb82cb107c built 2020-02-05 23:10:10 +0000 UTC]', - name: 'agent.build.original', - type: 'keyword', - }, - 'agent.ephemeral_id': { - category: 'agent', - description: - 'Ephemeral identifier of this agent (if one exists). This id normally changes across restarts, but `agent.id` does not.', - example: '8a4f500f', - name: 'agent.ephemeral_id', - type: 'keyword', - }, - 'agent.id': { - category: 'agent', - description: - 'Unique identifier of this agent (if one exists). Example: For Beats this would be beat.id.', - example: '8a4f500d', - name: 'agent.id', - type: 'keyword', - }, - 'agent.name': { - category: 'agent', - description: - 'Custom name of the agent. This is a name that can be given to an agent. This can be helpful if for example two Filebeat instances are running on the same host but a human readable separation is needed on which Filebeat instance data is coming from. If no name is given, the name is often left empty.', - example: 'foo', - name: 'agent.name', - type: 'keyword', - }, - 'agent.type': { - category: 'agent', - description: - 'Type of the agent. The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', - example: 'filebeat', - name: 'agent.type', - type: 'keyword', - }, - 'agent.version': { - category: 'agent', - description: 'Version of the agent.', - example: '6.0.0-rc2', - name: 'agent.version', - type: 'keyword', - }, - 'as.number': { - category: 'as', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'as.number', - type: 'long', - }, - 'as.organization.name': { - category: 'as', - description: 'Organization name.', - example: 'Google LLC', - name: 'as.organization.name', - type: 'keyword', - }, - 'client.address': { - category: 'client', - description: - 'Some event client addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.', - name: 'client.address', - type: 'keyword', - }, - 'client.as.number': { - category: 'client', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'client.as.number', - type: 'long', - }, - 'client.as.organization.name': { - category: 'client', - description: 'Organization name.', - example: 'Google LLC', - name: 'client.as.organization.name', - type: 'keyword', - }, - 'client.bytes': { - category: 'client', - description: 'Bytes sent from the client to the server.', - example: 184, - name: 'client.bytes', - type: 'long', - format: 'bytes', - }, - 'client.domain': { - category: 'client', - description: 'Client domain.', - name: 'client.domain', - type: 'keyword', - }, - 'client.geo.city_name': { - category: 'client', - description: 'City name.', - example: 'Montreal', - name: 'client.geo.city_name', - type: 'keyword', - }, - 'client.geo.continent_code': { - category: 'client', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'client.geo.continent_code', - type: 'keyword', - }, - 'client.geo.continent_name': { - category: 'client', - description: 'Name of the continent.', - example: 'North America', - name: 'client.geo.continent_name', - type: 'keyword', - }, - 'client.geo.country_iso_code': { - category: 'client', - description: 'Country ISO code.', - example: 'CA', - name: 'client.geo.country_iso_code', - type: 'keyword', - }, - 'client.geo.country_name': { - category: 'client', - description: 'Country name.', - example: 'Canada', - name: 'client.geo.country_name', - type: 'keyword', - }, - 'client.geo.location': { - category: 'client', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'client.geo.location', - type: 'geo_point', - }, - 'client.geo.name': { - category: 'client', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'client.geo.name', - type: 'keyword', - }, - 'client.geo.postal_code': { - category: 'client', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'client.geo.postal_code', - type: 'keyword', - }, - 'client.geo.region_iso_code': { - category: 'client', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'client.geo.region_iso_code', - type: 'keyword', - }, - 'client.geo.region_name': { - category: 'client', - description: 'Region name.', - example: 'Quebec', - name: 'client.geo.region_name', - type: 'keyword', - }, - 'client.geo.timezone': { - category: 'client', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'client.geo.timezone', - type: 'keyword', - }, - 'client.ip': { - category: 'client', - description: 'IP address of the client (IPv4 or IPv6).', - name: 'client.ip', - type: 'ip', - }, - 'client.mac': { - category: 'client', - description: - 'MAC address of the client. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '00-00-5E-00-53-23', - name: 'client.mac', - type: 'keyword', - }, - 'client.nat.ip': { - category: 'client', - description: - 'Translated IP of source based NAT sessions (e.g. internal client to internet). Typically connections traversing load balancers, firewalls, or routers.', - name: 'client.nat.ip', - type: 'ip', - }, - 'client.nat.port': { - category: 'client', - description: - 'Translated port of source based NAT sessions (e.g. internal client to internet). Typically connections traversing load balancers, firewalls, or routers.', - name: 'client.nat.port', - type: 'long', - format: 'string', - }, - 'client.packets': { - category: 'client', - description: 'Packets sent from the client to the server.', - example: 12, - name: 'client.packets', - type: 'long', - }, - 'client.port': { - category: 'client', - description: 'Port of the client.', - name: 'client.port', - type: 'long', - format: 'string', - }, - 'client.registered_domain': { - category: 'client', - description: - 'The highest registered client domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'client.registered_domain', - type: 'keyword', - }, - 'client.subdomain': { - category: 'client', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'client.subdomain', - type: 'keyword', - }, - 'client.top_level_domain': { - category: 'client', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'client.top_level_domain', - type: 'keyword', - }, - 'client.user.domain': { - category: 'client', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'client.user.domain', - type: 'keyword', - }, - 'client.user.email': { - category: 'client', - description: 'User email address.', - name: 'client.user.email', - type: 'keyword', - }, - 'client.user.full_name': { - category: 'client', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'client.user.full_name', - type: 'keyword', - }, - 'client.user.group.domain': { - category: 'client', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'client.user.group.domain', - type: 'keyword', - }, - 'client.user.group.id': { - category: 'client', - description: 'Unique identifier for the group on the system/platform.', - name: 'client.user.group.id', - type: 'keyword', - }, - 'client.user.group.name': { - category: 'client', - description: 'Name of the group.', - name: 'client.user.group.name', - type: 'keyword', - }, - 'client.user.hash': { - category: 'client', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'client.user.hash', - type: 'keyword', - }, - 'client.user.id': { - category: 'client', - description: 'Unique identifier of the user.', - name: 'client.user.id', - type: 'keyword', - }, - 'client.user.name': { - category: 'client', - description: 'Short name or login of the user.', - example: 'albert', - name: 'client.user.name', - type: 'keyword', - }, - 'client.user.roles': { - category: 'client', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'client.user.roles', - type: 'keyword', - }, - 'cloud.account.id': { - category: 'cloud', - description: - 'The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.', - example: 666777888999, - name: 'cloud.account.id', - type: 'keyword', - }, - 'cloud.account.name': { - category: 'cloud', - description: - 'The cloud account name or alias used to identify different entities in a multi-tenant environment. Examples: AWS account name, Google Cloud ORG display name.', - example: 'elastic-dev', - name: 'cloud.account.name', - type: 'keyword', - }, - 'cloud.availability_zone': { - category: 'cloud', - description: 'Availability zone in which this host is running.', - example: 'us-east-1c', - name: 'cloud.availability_zone', - type: 'keyword', - }, - 'cloud.instance.id': { - category: 'cloud', - description: 'Instance ID of the host machine.', - example: 'i-1234567890abcdef0', - name: 'cloud.instance.id', - type: 'keyword', - }, - 'cloud.instance.name': { - category: 'cloud', - description: 'Instance name of the host machine.', - name: 'cloud.instance.name', - type: 'keyword', - }, - 'cloud.machine.type': { - category: 'cloud', - description: 'Machine type of the host machine.', - example: 't2.medium', - name: 'cloud.machine.type', - type: 'keyword', - }, - 'cloud.project.id': { - category: 'cloud', - description: - 'The cloud project identifier. Examples: Google Cloud Project id, Azure Project id.', - example: 'my-project', - name: 'cloud.project.id', - type: 'keyword', - }, - 'cloud.project.name': { - category: 'cloud', - description: 'The cloud project name. Examples: Google Cloud Project name, Azure Project name.', - example: 'my project', - name: 'cloud.project.name', - type: 'keyword', - }, - 'cloud.provider': { - category: 'cloud', - description: 'Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.', - example: 'aws', - name: 'cloud.provider', - type: 'keyword', - }, - 'cloud.region': { - category: 'cloud', - description: 'Region in which this host is running.', - example: 'us-east-1', - name: 'cloud.region', - type: 'keyword', - }, - 'cloud.service.name': { - category: 'cloud', - description: - 'The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda.', - example: 'lambda', - name: 'cloud.service.name', - type: 'keyword', - }, - 'code_signature.exists': { - category: 'code_signature', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'code_signature.exists', - type: 'boolean', - }, - 'code_signature.signing_id': { - category: 'code_signature', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'code_signature.signing_id', - type: 'keyword', - }, - 'code_signature.status': { - category: 'code_signature', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'code_signature.status', - type: 'keyword', - }, - 'code_signature.subject_name': { - category: 'code_signature', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'code_signature.subject_name', - type: 'keyword', - }, - 'code_signature.team_id': { - category: 'code_signature', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'code_signature.team_id', - type: 'keyword', - }, - 'code_signature.trusted': { - category: 'code_signature', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'code_signature.trusted', - type: 'boolean', - }, - 'code_signature.valid': { - category: 'code_signature', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'code_signature.valid', - type: 'boolean', - }, - 'container.id': { - category: 'container', - description: 'Unique container id.', - name: 'container.id', - type: 'keyword', - }, - 'container.image.name': { - category: 'container', - description: 'Name of the image the container was built on.', - name: 'container.image.name', - type: 'keyword', - }, - 'container.image.tag': { - category: 'container', - description: 'Container image tags.', - name: 'container.image.tag', - type: 'keyword', - }, - 'container.labels': { - category: 'container', - description: 'Image labels.', - name: 'container.labels', - type: 'object', - }, - 'container.name': { - category: 'container', - description: 'Container name.', - name: 'container.name', - type: 'keyword', - }, - 'container.runtime': { - category: 'container', - description: 'Runtime managing this container.', - example: 'docker', - name: 'container.runtime', - type: 'keyword', - }, - 'data_stream.dataset': { - category: 'data_stream', - description: - 'The field can contain anything that makes sense to signify the source of the data. Examples include `nginx.access`, `prometheus`, `endpoint` etc. For data streams that otherwise fit, but that do not have dataset set we use the value "generic" for the dataset value. `event.dataset` should have the same value as `data_stream.dataset`. Beyond the Elasticsearch data stream naming criteria noted above, the `dataset` value has additional restrictions: * Must not contain `-` * No longer than 100 characters', - example: 'nginx.access', - name: 'data_stream.dataset', - type: 'constant_keyword', - }, - 'data_stream.namespace': { - category: 'data_stream', - description: - 'A user defined namespace. Namespaces are useful to allow grouping of data. Many users already organize their indices this way, and the data stream naming scheme now provides this best practice as a default. Many users will populate this field with `default`. If no value is used, it falls back to `default`. Beyond the Elasticsearch index naming criteria noted above, `namespace` value has the additional restrictions: * Must not contain `-` * No longer than 100 characters', - example: 'production', - name: 'data_stream.namespace', - type: 'constant_keyword', - }, - 'data_stream.type': { - category: 'data_stream', - description: - 'An overarching type for the data stream. Currently allowed values are "logs" and "metrics". We expect to also add "traces" and "synthetics" in the near future.', - example: 'logs', - name: 'data_stream.type', - type: 'constant_keyword', - }, - 'destination.address': { - category: 'destination', - description: - 'Some event destination addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.', - name: 'destination.address', - type: 'keyword', - }, - 'destination.as.number': { - category: 'destination', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'destination.as.number', - type: 'long', - }, - 'destination.as.organization.name': { - category: 'destination', - description: 'Organization name.', - example: 'Google LLC', - name: 'destination.as.organization.name', - type: 'keyword', - }, - 'destination.bytes': { - category: 'destination', - description: 'Bytes sent from the destination to the source.', - example: 184, - name: 'destination.bytes', - type: 'long', - format: 'bytes', - }, - 'destination.domain': { - category: 'destination', - description: 'Destination domain.', - name: 'destination.domain', - type: 'keyword', - }, - 'destination.geo.city_name': { - category: 'destination', - description: 'City name.', - example: 'Montreal', - name: 'destination.geo.city_name', - type: 'keyword', - }, - 'destination.geo.continent_code': { - category: 'destination', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'destination.geo.continent_code', - type: 'keyword', - }, - 'destination.geo.continent_name': { - category: 'destination', - description: 'Name of the continent.', - example: 'North America', - name: 'destination.geo.continent_name', - type: 'keyword', - }, - 'destination.geo.country_iso_code': { - category: 'destination', - description: 'Country ISO code.', - example: 'CA', - name: 'destination.geo.country_iso_code', - type: 'keyword', - }, - 'destination.geo.country_name': { - category: 'destination', - description: 'Country name.', - example: 'Canada', - name: 'destination.geo.country_name', - type: 'keyword', - }, - 'destination.geo.location': { - category: 'destination', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'destination.geo.location', - type: 'geo_point', - }, - 'destination.geo.name': { - category: 'destination', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'destination.geo.name', - type: 'keyword', - }, - 'destination.geo.postal_code': { - category: 'destination', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'destination.geo.postal_code', - type: 'keyword', - }, - 'destination.geo.region_iso_code': { - category: 'destination', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'destination.geo.region_iso_code', - type: 'keyword', - }, - 'destination.geo.region_name': { - category: 'destination', - description: 'Region name.', - example: 'Quebec', - name: 'destination.geo.region_name', - type: 'keyword', - }, - 'destination.geo.timezone': { - category: 'destination', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'destination.geo.timezone', - type: 'keyword', - }, - 'destination.ip': { - category: 'destination', - description: 'IP address of the destination (IPv4 or IPv6).', - name: 'destination.ip', - type: 'ip', - }, - 'destination.mac': { - category: 'destination', - description: - 'MAC address of the destination. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '00-00-5E-00-53-23', - name: 'destination.mac', - type: 'keyword', - }, - 'destination.nat.ip': { - category: 'destination', - description: - 'Translated ip of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers.', - name: 'destination.nat.ip', - type: 'ip', - }, - 'destination.nat.port': { - category: 'destination', - description: - 'Port the source session is translated to by NAT Device. Typically used with load balancers, firewalls, or routers.', - name: 'destination.nat.port', - type: 'long', - format: 'string', - }, - 'destination.packets': { - category: 'destination', - description: 'Packets sent from the destination to the source.', - example: 12, - name: 'destination.packets', - type: 'long', - }, - 'destination.port': { - category: 'destination', - description: 'Port of the destination.', - name: 'destination.port', - type: 'long', - format: 'string', - }, - 'destination.registered_domain': { - category: 'destination', - description: - 'The highest registered destination domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'destination.registered_domain', - type: 'keyword', - }, - 'destination.subdomain': { - category: 'destination', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'destination.subdomain', - type: 'keyword', - }, - 'destination.top_level_domain': { - category: 'destination', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'destination.top_level_domain', - type: 'keyword', - }, - 'destination.user.domain': { - category: 'destination', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'destination.user.domain', - type: 'keyword', - }, - 'destination.user.email': { - category: 'destination', - description: 'User email address.', - name: 'destination.user.email', - type: 'keyword', - }, - 'destination.user.full_name': { - category: 'destination', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'destination.user.full_name', - type: 'keyword', - }, - 'destination.user.group.domain': { - category: 'destination', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'destination.user.group.domain', - type: 'keyword', - }, - 'destination.user.group.id': { - category: 'destination', - description: 'Unique identifier for the group on the system/platform.', - name: 'destination.user.group.id', - type: 'keyword', - }, - 'destination.user.group.name': { - category: 'destination', - description: 'Name of the group.', - name: 'destination.user.group.name', - type: 'keyword', - }, - 'destination.user.hash': { - category: 'destination', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'destination.user.hash', - type: 'keyword', - }, - 'destination.user.id': { - category: 'destination', - description: 'Unique identifier of the user.', - name: 'destination.user.id', - type: 'keyword', - }, - 'destination.user.name': { - category: 'destination', - description: 'Short name or login of the user.', - example: 'albert', - name: 'destination.user.name', - type: 'keyword', - }, - 'destination.user.roles': { - category: 'destination', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'destination.user.roles', - type: 'keyword', - }, - 'dll.code_signature.exists': { - category: 'dll', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'dll.code_signature.exists', - type: 'boolean', - }, - 'dll.code_signature.signing_id': { - category: 'dll', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'dll.code_signature.signing_id', - type: 'keyword', - }, - 'dll.code_signature.status': { - category: 'dll', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'dll.code_signature.status', - type: 'keyword', - }, - 'dll.code_signature.subject_name': { - category: 'dll', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'dll.code_signature.subject_name', - type: 'keyword', - }, - 'dll.code_signature.team_id': { - category: 'dll', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'dll.code_signature.team_id', - type: 'keyword', - }, - 'dll.code_signature.trusted': { - category: 'dll', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'dll.code_signature.trusted', - type: 'boolean', - }, - 'dll.code_signature.valid': { - category: 'dll', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'dll.code_signature.valid', - type: 'boolean', - }, - 'dll.hash.md5': { - category: 'dll', - description: 'MD5 hash.', - name: 'dll.hash.md5', - type: 'keyword', - }, - 'dll.hash.sha1': { - category: 'dll', - description: 'SHA1 hash.', - name: 'dll.hash.sha1', - type: 'keyword', - }, - 'dll.hash.sha256': { - category: 'dll', - description: 'SHA256 hash.', - name: 'dll.hash.sha256', - type: 'keyword', - }, - 'dll.hash.sha512': { - category: 'dll', - description: 'SHA512 hash.', - name: 'dll.hash.sha512', - type: 'keyword', - }, - 'dll.hash.ssdeep': { - category: 'dll', - description: 'SSDEEP hash.', - name: 'dll.hash.ssdeep', - type: 'keyword', - }, - 'dll.name': { - category: 'dll', - description: 'Name of the library. This generally maps to the name of the file on disk.', - example: 'kernel32.dll', - name: 'dll.name', - type: 'keyword', - }, - 'dll.path': { - category: 'dll', - description: 'Full file path of the library.', - example: 'C:\\Windows\\System32\\kernel32.dll', - name: 'dll.path', - type: 'keyword', - }, - 'dll.pe.architecture': { - category: 'dll', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'dll.pe.architecture', - type: 'keyword', - }, - 'dll.pe.company': { - category: 'dll', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'dll.pe.company', - type: 'keyword', - }, - 'dll.pe.description': { - category: 'dll', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'dll.pe.description', - type: 'keyword', - }, - 'dll.pe.file_version': { - category: 'dll', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'dll.pe.file_version', - type: 'keyword', - }, - 'dll.pe.imphash': { - category: 'dll', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'dll.pe.imphash', - type: 'keyword', - }, - 'dll.pe.original_file_name': { - category: 'dll', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'dll.pe.original_file_name', - type: 'keyword', - }, - 'dll.pe.product': { - category: 'dll', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'dll.pe.product', - type: 'keyword', - }, - 'dns.answers': { - category: 'dns', - description: - 'An array containing an object for each answer section returned by the server. The main keys that should be present in these objects are defined by ECS. Records that have more information may contain more keys than what ECS defines. Not all DNS data sources give all details about DNS answers. At minimum, answer objects must contain the `data` key. If more information is available, map as much of it to ECS as possible, and add any additional fields to the answer objects as custom fields.', - name: 'dns.answers', - type: 'object', - }, - 'dns.answers.class': { - category: 'dns', - description: 'The class of DNS data contained in this resource record.', - example: 'IN', - name: 'dns.answers.class', - type: 'keyword', - }, - 'dns.answers.data': { - category: 'dns', - description: - 'The data describing the resource. The meaning of this data depends on the type and class of the resource record.', - example: '10.10.10.10', - name: 'dns.answers.data', - type: 'keyword', - }, - 'dns.answers.name': { - category: 'dns', - description: - "The domain name to which this resource record pertains. If a chain of CNAME is being resolved, each answer's `name` should be the one that corresponds with the answer's `data`. It should not simply be the original `question.name` repeated.", - example: 'www.example.com', - name: 'dns.answers.name', - type: 'keyword', - }, - 'dns.answers.ttl': { - category: 'dns', - description: - 'The time interval in seconds that this resource record may be cached before it should be discarded. Zero values mean that the data should not be cached.', - example: 180, - name: 'dns.answers.ttl', - type: 'long', - }, - 'dns.answers.type': { - category: 'dns', - description: 'The type of data contained in this resource record.', - example: 'CNAME', - name: 'dns.answers.type', - type: 'keyword', - }, - 'dns.header_flags': { - category: 'dns', - description: - 'Array of 2 letter DNS header flags. Expected values are: AA, TC, RD, RA, AD, CD, DO.', - example: '["RD", "RA"]', - name: 'dns.header_flags', - type: 'keyword', - }, - 'dns.id': { - category: 'dns', - description: - 'The DNS packet identifier assigned by the program that generated the query. The identifier is copied to the response.', - example: 62111, - name: 'dns.id', - type: 'keyword', - }, - 'dns.op_code': { - category: 'dns', - description: - 'The DNS operation code that specifies the kind of query in the message. This value is set by the originator of a query and copied into the response.', - example: 'QUERY', - name: 'dns.op_code', - type: 'keyword', - }, - 'dns.question.class': { - category: 'dns', - description: 'The class of records being queried.', - example: 'IN', - name: 'dns.question.class', - type: 'keyword', - }, - 'dns.question.name': { - category: 'dns', - description: - 'The name being queried. If the name field contains non-printable characters (below 32 or above 126), those characters should be represented as escaped base 10 integers (\\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, and line feeds should be converted to \\t, \\r, and \\n respectively.', - example: 'www.example.com', - name: 'dns.question.name', - type: 'keyword', - }, - 'dns.question.registered_domain': { - category: 'dns', - description: - 'The highest registered domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'dns.question.registered_domain', - type: 'keyword', - }, - 'dns.question.subdomain': { - category: 'dns', - description: - 'The subdomain is all of the labels under the registered_domain. If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'www', - name: 'dns.question.subdomain', - type: 'keyword', - }, - 'dns.question.top_level_domain': { - category: 'dns', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'dns.question.top_level_domain', - type: 'keyword', - }, - 'dns.question.type': { - category: 'dns', - description: 'The type of record being queried.', - example: 'AAAA', - name: 'dns.question.type', - type: 'keyword', - }, - 'dns.resolved_ip': { - category: 'dns', - description: - 'Array containing all IPs seen in `answers.data`. The `answers` array can be difficult to use, because of the variety of data formats it can contain. Extracting all IP addresses seen in there to `dns.resolved_ip` makes it possible to index them as IP addresses, and makes them easier to visualize and query for.', - example: '["10.10.10.10", "10.10.10.11"]', - name: 'dns.resolved_ip', - type: 'ip', - }, - 'dns.response_code': { - category: 'dns', - description: 'The DNS response code.', - example: 'NOERROR', - name: 'dns.response_code', - type: 'keyword', - }, - 'dns.type': { - category: 'dns', - description: - 'The type of DNS event captured, query or answer. If your source of DNS events only gives you DNS queries, you should only create dns events of type `dns.type:query`. If your source of DNS events gives you answers as well, you should create one event per query (optionally as soon as the query is seen). And a second event containing all query details as well as an array of answers.', - example: 'answer', - name: 'dns.type', - type: 'keyword', - }, - 'ecs.version': { - category: 'ecs', - description: - 'ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events.', - example: '1.0.0', - name: 'ecs.version', - type: 'keyword', - }, - 'error.code': { - category: 'error', - description: 'Error code describing the error.', - name: 'error.code', - type: 'keyword', - }, - 'error.id': { - category: 'error', - description: 'Unique identifier for the error.', - name: 'error.id', - type: 'keyword', - }, - 'error.message': { - category: 'error', - description: 'Error message.', - name: 'error.message', - type: 'text', - }, - 'error.stack_trace': { - category: 'error', - description: 'The stack trace of this error in plain text.', - name: 'error.stack_trace', - type: 'keyword', - }, - 'error.type': { - category: 'error', - description: 'The type of the error, for example the class name of the exception.', - example: 'java.lang.NullPointerException', - name: 'error.type', - type: 'keyword', - }, - 'event.action': { - category: 'event', - description: - 'The action captured by the event. This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer.', - example: 'user-password-change', - name: 'event.action', - type: 'keyword', - }, - 'event.category': { - category: 'event', - description: - 'This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. `event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. This field is an array. This will allow proper categorization of some events that fall in multiple categories.', - example: 'authentication', - name: 'event.category', - type: 'keyword', - }, - 'event.code': { - category: 'event', - description: - 'Identification code for this event, if one exists. Some event sources use event codes to identify messages unambiguously, regardless of message language or wording adjustments over time. An example of this is the Windows Event ID.', - example: 4648, - name: 'event.code', - type: 'keyword', - }, - 'event.created': { - category: 'event', - description: - "event.created contains the date/time when the event was first read by an agent, or by your pipeline. This field is distinct from @timestamp in that @timestamp typically contain the time extracted from the original event. In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. In case the two timestamps are identical, @timestamp should be used.", - example: '2016-05-23T08:05:34.857Z', - name: 'event.created', - type: 'date', - }, - 'event.dataset': { - category: 'event', - description: - "Name of the dataset. If an event source publishes more than one type of log or events (e.g. access log, error log), the dataset is used to specify which one the event comes from. It's recommended but not required to start the dataset name with the module name, followed by a dot, then the dataset name.", - example: 'apache.access', - name: 'event.dataset', - type: 'keyword', - }, - 'event.duration': { - category: 'event', - description: - 'Duration of the event in nanoseconds. If event.start and event.end are known this value should be the difference between the end and start time.', - name: 'event.duration', - type: 'long', - format: 'duration', - }, - 'event.end': { - category: 'event', - description: - 'event.end contains the date when the event ended or when the activity was last observed.', - name: 'event.end', - type: 'date', - }, - 'event.hash': { - category: 'event', - description: - 'Hash (perhaps logstash fingerprint) of raw field to be able to demonstrate log integrity.', - example: '123456789012345678901234567890ABCD', - name: 'event.hash', - type: 'keyword', - }, - 'event.id': { - category: 'event', - description: 'Unique ID to describe the event.', - example: '8a4f500d', - name: 'event.id', - type: 'keyword', - }, - 'event.ingested': { - category: 'event', - description: - "Timestamp when an event arrived in the central data store. This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`.", - example: '2016-05-23T08:05:35.101Z', - name: 'event.ingested', - type: 'date', - }, - 'event.kind': { - category: 'event', - description: - 'This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. `event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data coming in at a regular interval or not.', - example: 'alert', - name: 'event.kind', - type: 'keyword', - }, - 'event.module': { - category: 'event', - description: - 'Name of the module this data is coming from. If your monitoring agent supports the concept of modules or plugins to process events of a given source (e.g. Apache logs), `event.module` should contain the name of this module.', - example: 'apache', - name: 'event.module', - type: 'keyword', - }, - 'event.original': { - category: 'event', - description: - 'Raw text message of entire event. Used to demonstrate log integrity. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, consider using the wildcard data type.', - example: - 'Sep 19 08:26:10 host CEF:0|Security| threatmanager|1.0|100| worm successfully stopped|10|src=10.0.0.1 dst=2.1.2.2spt=1232', - name: 'event.original', - type: 'keyword', - }, - 'event.outcome': { - category: 'event', - description: - 'This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. `event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense.', - example: 'success', - name: 'event.outcome', - type: 'keyword', - }, - 'event.provider': { - category: 'event', - description: - 'Source of the event. Event transports such as Syslog or the Windows Event Log typically mention the source of an event. It can be the name of the software that generated the event (e.g. Sysmon, httpd), or of a subsystem of the operating system (kernel, Microsoft-Windows-Security-Auditing).', - example: 'kernel', - name: 'event.provider', - type: 'keyword', - }, - 'event.reason': { - category: 'event', - description: - 'Reason why this event happened, according to the source. This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`).', - example: 'Terminated an unexpected process', - name: 'event.reason', - type: 'keyword', - }, - 'event.reference': { - category: 'event', - description: - 'Reference URL linking to additional information about this event. This URL links to a static definition of this event. Alert events, indicated by `event.kind:alert`, are a common use case for this field.', - example: 'https://system.example.com/event/#0001234', - name: 'event.reference', - type: 'keyword', - }, - 'event.risk_score': { - category: 'event', - description: - "Risk score or priority of the event (e.g. security solutions). Use your system's original value here.", - name: 'event.risk_score', - type: 'float', - }, - 'event.risk_score_norm': { - category: 'event', - description: - 'Normalized risk score or priority of the event, on a scale of 0 to 100. This is mainly useful if you use more than one system that assigns risk scores, and you want to see a normalized value across all systems.', - name: 'event.risk_score_norm', - type: 'float', - }, - 'event.sequence': { - category: 'event', - description: - 'Sequence number of the event. The sequence number is a value published by some event sources, to make the exact ordering of events unambiguous, regardless of the timestamp precision.', - name: 'event.sequence', - type: 'long', - format: 'string', - }, - 'event.severity': { - category: 'event', - description: - "The numeric severity of the event according to your event source. What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`.", - example: 7, - name: 'event.severity', - type: 'long', - format: 'string', - }, - 'event.start': { - category: 'event', - description: - 'event.start contains the date when the event started or when the activity was first observed.', - name: 'event.start', - type: 'date', - }, - 'event.timezone': { - category: 'event', - description: - 'This field should be populated when the event\'s timestamp does not include timezone information already (e.g. default Syslog timestamps). It\'s optional otherwise. Acceptable timezone formats are: a canonical ID (e.g. "Europe/Amsterdam"), abbreviated (e.g. "EST") or an HH:mm differential (e.g. "-05:00").', - name: 'event.timezone', - type: 'keyword', - }, - 'event.type': { - category: 'event', - description: - 'This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. `event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. This field is an array. This will allow proper categorization of some events that fall in multiple event types.', - name: 'event.type', - type: 'keyword', - }, - 'event.url': { - category: 'event', - description: - 'URL linking to an external system to continue investigation of this event. This URL links to another system where in-depth investigation of the specific occurrence of this event can take place. Alert events, indicated by `event.kind:alert`, are a common use case for this field.', - example: 'https://mysystem.example.com/alert/5271dedb-f5b0-4218-87f0-4ac4870a38fe', - name: 'event.url', - type: 'keyword', - }, - 'file.accessed': { - category: 'file', - description: - 'Last time the file was accessed. Note that not all filesystems keep track of access time.', - name: 'file.accessed', - type: 'date', - }, - 'file.attributes': { - category: 'file', - description: - "Array of file attributes. Attributes names will vary by platform. Here's a non-exhaustive list of values that are expected in this field: archive, compressed, directory, encrypted, execute, hidden, read, readonly, system, write.", - example: '["readonly", "system"]', - name: 'file.attributes', - type: 'keyword', - }, - 'file.code_signature.exists': { - category: 'file', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'file.code_signature.exists', - type: 'boolean', - }, - 'file.code_signature.signing_id': { - category: 'file', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'file.code_signature.signing_id', - type: 'keyword', - }, - 'file.code_signature.status': { - category: 'file', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'file.code_signature.status', - type: 'keyword', - }, - 'file.code_signature.subject_name': { - category: 'file', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'file.code_signature.subject_name', - type: 'keyword', - }, - 'file.code_signature.team_id': { - category: 'file', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'file.code_signature.team_id', - type: 'keyword', - }, - 'file.code_signature.trusted': { - category: 'file', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'file.code_signature.trusted', - type: 'boolean', - }, - 'file.code_signature.valid': { - category: 'file', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'file.code_signature.valid', - type: 'boolean', - }, - 'file.created': { - category: 'file', - description: 'File creation time. Note that not all filesystems store the creation time.', - name: 'file.created', - type: 'date', - }, - 'file.ctime': { - category: 'file', - description: - 'Last time the file attributes or metadata changed. Note that changes to the file content will update `mtime`. This implies `ctime` will be adjusted at the same time, since `mtime` is an attribute of the file.', - name: 'file.ctime', - type: 'date', - }, - 'file.device': { - category: 'file', - description: 'Device that is the source of the file.', - example: 'sda', - name: 'file.device', - type: 'keyword', - }, - 'file.directory': { - category: 'file', - description: - 'Directory where the file is located. It should include the drive letter, when appropriate.', - example: '/home/alice', - name: 'file.directory', - type: 'keyword', - }, - 'file.drive_letter': { - category: 'file', - description: - 'Drive letter where the file is located. This field is only relevant on Windows. The value should be uppercase, and not include the colon.', - example: 'C', - name: 'file.drive_letter', - type: 'keyword', - }, - 'file.extension': { - category: 'file', - description: - 'File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', - example: 'png', - name: 'file.extension', - type: 'keyword', - }, - 'file.gid': { - category: 'file', - description: 'Primary group ID (GID) of the file.', - example: '1001', - name: 'file.gid', - type: 'keyword', - }, - 'file.group': { - category: 'file', - description: 'Primary group name of the file.', - example: 'alice', - name: 'file.group', - type: 'keyword', - }, - 'file.hash.md5': { - category: 'file', - description: 'MD5 hash.', - name: 'file.hash.md5', - type: 'keyword', - }, - 'file.hash.sha1': { - category: 'file', - description: 'SHA1 hash.', - name: 'file.hash.sha1', - type: 'keyword', - }, - 'file.hash.sha256': { - category: 'file', - description: 'SHA256 hash.', - name: 'file.hash.sha256', - type: 'keyword', - }, - 'file.hash.sha512': { - category: 'file', - description: 'SHA512 hash.', - name: 'file.hash.sha512', - type: 'keyword', - }, - 'file.hash.ssdeep': { - category: 'file', - description: 'SSDEEP hash.', - name: 'file.hash.ssdeep', - type: 'keyword', - }, - 'file.inode': { - category: 'file', - description: 'Inode representing the file in the filesystem.', - example: '256383', - name: 'file.inode', - type: 'keyword', - }, - 'file.mime_type': { - category: 'file', - description: - 'MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used.', - name: 'file.mime_type', - type: 'keyword', - }, - 'file.mode': { - category: 'file', - description: 'Mode of the file in octal representation.', - example: '0640', - name: 'file.mode', - type: 'keyword', - }, - 'file.mtime': { - category: 'file', - description: 'Last time the file content was modified.', - name: 'file.mtime', - type: 'date', - }, - 'file.name': { - category: 'file', - description: 'Name of the file including the extension, without the directory.', - example: 'example.png', - name: 'file.name', - type: 'keyword', - }, - 'file.owner': { - category: 'file', - description: "File owner's username.", - example: 'alice', - name: 'file.owner', - type: 'keyword', - }, - 'file.path': { - category: 'file', - description: - 'Full path to the file, including the file name. It should include the drive letter, when appropriate.', - example: '/home/alice/example.png', - name: 'file.path', - type: 'keyword', - }, - 'file.pe.architecture': { - category: 'file', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'file.pe.architecture', - type: 'keyword', - }, - 'file.pe.company': { - category: 'file', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'file.pe.company', - type: 'keyword', - }, - 'file.pe.description': { - category: 'file', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'file.pe.description', - type: 'keyword', - }, - 'file.pe.file_version': { - category: 'file', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'file.pe.file_version', - type: 'keyword', - }, - 'file.pe.imphash': { - category: 'file', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'file.pe.imphash', - type: 'keyword', - }, - 'file.pe.original_file_name': { - category: 'file', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'file.pe.original_file_name', - type: 'keyword', - }, - 'file.pe.product': { - category: 'file', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'file.pe.product', - type: 'keyword', - }, - 'file.size': { - category: 'file', - description: 'File size in bytes. Only relevant when `file.type` is "file".', - example: 16384, - name: 'file.size', - type: 'long', - }, - 'file.target_path': { - category: 'file', - description: 'Target path for symlinks.', - name: 'file.target_path', - type: 'keyword', - }, - 'file.type': { - category: 'file', - description: 'File type (file, dir, or symlink).', - example: 'file', - name: 'file.type', - type: 'keyword', - }, - 'file.uid': { - category: 'file', - description: 'The user ID (UID) or security identifier (SID) of the file owner.', - example: '1001', - name: 'file.uid', - type: 'keyword', - }, - 'file.x509.alternative_names': { - category: 'file', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'file.x509.alternative_names', - type: 'keyword', - }, - 'file.x509.issuer.common_name': { - category: 'file', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'file.x509.issuer.common_name', - type: 'keyword', - }, - 'file.x509.issuer.country': { - category: 'file', - description: 'List of country (C) codes', - example: 'US', - name: 'file.x509.issuer.country', - type: 'keyword', - }, - 'file.x509.issuer.distinguished_name': { - category: 'file', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'file.x509.issuer.distinguished_name', - type: 'keyword', - }, - 'file.x509.issuer.locality': { - category: 'file', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'file.x509.issuer.locality', - type: 'keyword', - }, - 'file.x509.issuer.organization': { - category: 'file', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'file.x509.issuer.organization', - type: 'keyword', - }, - 'file.x509.issuer.organizational_unit': { - category: 'file', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'file.x509.issuer.organizational_unit', - type: 'keyword', - }, - 'file.x509.issuer.state_or_province': { - category: 'file', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'file.x509.issuer.state_or_province', - type: 'keyword', - }, - 'file.x509.not_after': { - category: 'file', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'file.x509.not_after', - type: 'date', - }, - 'file.x509.not_before': { - category: 'file', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'file.x509.not_before', - type: 'date', - }, - 'file.x509.public_key_algorithm': { - category: 'file', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'file.x509.public_key_algorithm', - type: 'keyword', - }, - 'file.x509.public_key_curve': { - category: 'file', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'file.x509.public_key_curve', - type: 'keyword', - }, - 'file.x509.public_key_exponent': { - category: 'file', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'file.x509.public_key_exponent', - type: 'long', - }, - 'file.x509.public_key_size': { - category: 'file', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'file.x509.public_key_size', - type: 'long', - }, - 'file.x509.serial_number': { - category: 'file', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'file.x509.serial_number', - type: 'keyword', - }, - 'file.x509.signature_algorithm': { - category: 'file', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'file.x509.signature_algorithm', - type: 'keyword', - }, - 'file.x509.subject.common_name': { - category: 'file', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'file.x509.subject.common_name', - type: 'keyword', - }, - 'file.x509.subject.country': { - category: 'file', - description: 'List of country (C) code', - example: 'US', - name: 'file.x509.subject.country', - type: 'keyword', - }, - 'file.x509.subject.distinguished_name': { - category: 'file', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'file.x509.subject.distinguished_name', - type: 'keyword', - }, - 'file.x509.subject.locality': { - category: 'file', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'file.x509.subject.locality', - type: 'keyword', - }, - 'file.x509.subject.organization': { - category: 'file', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'file.x509.subject.organization', - type: 'keyword', - }, - 'file.x509.subject.organizational_unit': { - category: 'file', - description: 'List of organizational units (OU) of subject.', - name: 'file.x509.subject.organizational_unit', - type: 'keyword', - }, - 'file.x509.subject.state_or_province': { - category: 'file', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'file.x509.subject.state_or_province', - type: 'keyword', - }, - 'file.x509.version_number': { - category: 'file', - description: 'Version of x509 format.', - example: 3, - name: 'file.x509.version_number', - type: 'keyword', - }, - 'geo.city_name': { - category: 'geo', - description: 'City name.', - example: 'Montreal', - name: 'geo.city_name', - type: 'keyword', - }, - 'geo.continent_code': { - category: 'geo', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'geo.continent_code', - type: 'keyword', - }, - 'geo.continent_name': { - category: 'geo', - description: 'Name of the continent.', - example: 'North America', - name: 'geo.continent_name', - type: 'keyword', - }, - 'geo.country_iso_code': { - category: 'geo', - description: 'Country ISO code.', - example: 'CA', - name: 'geo.country_iso_code', - type: 'keyword', - }, - 'geo.country_name': { - category: 'geo', - description: 'Country name.', - example: 'Canada', - name: 'geo.country_name', - type: 'keyword', - }, - 'geo.location': { - category: 'geo', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'geo.location', - type: 'geo_point', - }, - 'geo.name': { - category: 'geo', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'geo.name', - type: 'keyword', - }, - 'geo.postal_code': { - category: 'geo', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'geo.postal_code', - type: 'keyword', - }, - 'geo.region_iso_code': { - category: 'geo', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'geo.region_iso_code', - type: 'keyword', - }, - 'geo.region_name': { - category: 'geo', - description: 'Region name.', - example: 'Quebec', - name: 'geo.region_name', - type: 'keyword', - }, - 'geo.timezone': { - category: 'geo', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'geo.timezone', - type: 'keyword', - }, - 'group.domain': { - category: 'group', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'group.domain', - type: 'keyword', - }, - 'group.id': { - category: 'group', - description: 'Unique identifier for the group on the system/platform.', - name: 'group.id', - type: 'keyword', - }, - 'group.name': { - category: 'group', - description: 'Name of the group.', - name: 'group.name', - type: 'keyword', - }, - 'hash.md5': { - category: 'hash', - description: 'MD5 hash.', - name: 'hash.md5', - type: 'keyword', - }, - 'hash.sha1': { - category: 'hash', - description: 'SHA1 hash.', - name: 'hash.sha1', - type: 'keyword', - }, - 'hash.sha256': { - category: 'hash', - description: 'SHA256 hash.', - name: 'hash.sha256', - type: 'keyword', - }, - 'hash.sha512': { - category: 'hash', - description: 'SHA512 hash.', - name: 'hash.sha512', - type: 'keyword', - }, - 'hash.ssdeep': { - category: 'hash', - description: 'SSDEEP hash.', - name: 'hash.ssdeep', - type: 'keyword', - }, - 'host.architecture': { - category: 'host', - description: 'Operating system architecture.', - example: 'x86_64', - name: 'host.architecture', - type: 'keyword', - }, - 'host.cpu.usage': { - category: 'host', - description: - 'Percent CPU used which is normalized by the number of CPU cores and it ranges from 0 to 1. Scaling factor: 1000. For example: For a two core host, this value should be the average of the two cores, between 0 and 1.', - name: 'host.cpu.usage', - type: 'scaled_float', - }, - 'host.disk.read.bytes': { - category: 'host', - description: - 'The total number of bytes (gauge) read successfully (aggregated from all disks) since the last metric collection.', - name: 'host.disk.read.bytes', - type: 'long', - }, - 'host.disk.write.bytes': { - category: 'host', - description: - 'The total number of bytes (gauge) written successfully (aggregated from all disks) since the last metric collection.', - name: 'host.disk.write.bytes', - type: 'long', - }, - 'host.domain': { - category: 'host', - description: - "Name of the domain of which the host is a member. For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider.", - example: 'CONTOSO', - name: 'host.domain', - type: 'keyword', - }, - 'host.geo.city_name': { - category: 'host', - description: 'City name.', - example: 'Montreal', - name: 'host.geo.city_name', - type: 'keyword', - }, - 'host.geo.continent_code': { - category: 'host', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'host.geo.continent_code', - type: 'keyword', - }, - 'host.geo.continent_name': { - category: 'host', - description: 'Name of the continent.', - example: 'North America', - name: 'host.geo.continent_name', - type: 'keyword', - }, - 'host.geo.country_iso_code': { - category: 'host', - description: 'Country ISO code.', - example: 'CA', - name: 'host.geo.country_iso_code', - type: 'keyword', - }, - 'host.geo.country_name': { - category: 'host', - description: 'Country name.', - example: 'Canada', - name: 'host.geo.country_name', - type: 'keyword', - }, - 'host.geo.location': { - category: 'host', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'host.geo.location', - type: 'geo_point', - }, - 'host.geo.name': { - category: 'host', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'host.geo.name', - type: 'keyword', - }, - 'host.geo.postal_code': { - category: 'host', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'host.geo.postal_code', - type: 'keyword', - }, - 'host.geo.region_iso_code': { - category: 'host', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'host.geo.region_iso_code', - type: 'keyword', - }, - 'host.geo.region_name': { - category: 'host', - description: 'Region name.', - example: 'Quebec', - name: 'host.geo.region_name', - type: 'keyword', - }, - 'host.geo.timezone': { - category: 'host', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'host.geo.timezone', - type: 'keyword', - }, - 'host.hostname': { - category: 'host', - description: - 'Hostname of the host. It normally contains what the `hostname` command returns on the host machine.', - name: 'host.hostname', - type: 'keyword', - }, - 'host.id': { - category: 'host', - description: - 'Unique host id. As hostname is not always unique, use values that are meaningful in your environment. Example: The current usage of `beat.name`.', - name: 'host.id', - type: 'keyword', - }, - 'host.ip': { - category: 'host', - description: 'Host ip addresses.', - name: 'host.ip', - type: 'ip', - }, - 'host.mac': { - category: 'host', - description: - 'Host MAC addresses. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '["00-00-5E-00-53-23", "00-00-5E-00-53-24"]', - name: 'host.mac', - type: 'keyword', - }, - 'host.name': { - category: 'host', - description: - 'Name of the host. It can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.', - name: 'host.name', - type: 'keyword', - }, - 'host.network.egress.bytes': { - category: 'host', - description: - 'The number of bytes (gauge) sent out on all network interfaces by the host since the last metric collection.', - name: 'host.network.egress.bytes', - type: 'long', - }, - 'host.network.egress.packets': { - category: 'host', - description: - 'The number of packets (gauge) sent out on all network interfaces by the host since the last metric collection.', - name: 'host.network.egress.packets', - type: 'long', - }, - 'host.network.ingress.bytes': { - category: 'host', - description: - 'The number of bytes received (gauge) on all network interfaces by the host since the last metric collection.', - name: 'host.network.ingress.bytes', - type: 'long', - }, - 'host.network.ingress.packets': { - category: 'host', - description: - 'The number of packets (gauge) received on all network interfaces by the host since the last metric collection.', - name: 'host.network.ingress.packets', - type: 'long', - }, - 'host.os.family': { - category: 'host', - description: 'OS family (such as redhat, debian, freebsd, windows).', - example: 'debian', - name: 'host.os.family', - type: 'keyword', - }, - 'host.os.full': { - category: 'host', - description: 'Operating system name, including the version or code name.', - example: 'Mac OS Mojave', - name: 'host.os.full', - type: 'keyword', - }, - 'host.os.kernel': { - category: 'host', - description: 'Operating system kernel version as a raw string.', - example: '4.4.0-112-generic', - name: 'host.os.kernel', - type: 'keyword', - }, - 'host.os.name': { - category: 'host', - description: 'Operating system name, without the version.', - example: 'Mac OS X', - name: 'host.os.name', - type: 'keyword', - }, - 'host.os.platform': { - category: 'host', - description: 'Operating system platform (such centos, ubuntu, windows).', - example: 'darwin', - name: 'host.os.platform', - type: 'keyword', - }, - 'host.os.type': { - category: 'host', - description: - "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", - example: 'macos', - name: 'host.os.type', - type: 'keyword', - }, - 'host.os.version': { - category: 'host', - description: 'Operating system version as a raw string.', - example: '10.14.1', - name: 'host.os.version', - type: 'keyword', - }, - 'host.type': { - category: 'host', - description: - 'Type of host. For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment.', - name: 'host.type', - type: 'keyword', - }, - 'host.uptime': { - category: 'host', - description: 'Seconds the host has been up.', - example: 1325, - name: 'host.uptime', - type: 'long', - }, - 'host.user.domain': { - category: 'host', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'host.user.domain', - type: 'keyword', - }, - 'host.user.email': { - category: 'host', - description: 'User email address.', - name: 'host.user.email', - type: 'keyword', - }, - 'host.user.full_name': { - category: 'host', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'host.user.full_name', - type: 'keyword', - }, - 'host.user.group.domain': { - category: 'host', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'host.user.group.domain', - type: 'keyword', - }, - 'host.user.group.id': { - category: 'host', - description: 'Unique identifier for the group on the system/platform.', - name: 'host.user.group.id', - type: 'keyword', - }, - 'host.user.group.name': { - category: 'host', - description: 'Name of the group.', - name: 'host.user.group.name', - type: 'keyword', - }, - 'host.user.hash': { - category: 'host', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'host.user.hash', - type: 'keyword', - }, - 'host.user.id': { - category: 'host', - description: 'Unique identifier of the user.', - name: 'host.user.id', - type: 'keyword', - }, - 'host.user.name': { - category: 'host', - description: 'Short name or login of the user.', - example: 'albert', - name: 'host.user.name', - type: 'keyword', - }, - 'host.user.roles': { - category: 'host', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'host.user.roles', - type: 'keyword', - }, - 'http.request.body.bytes': { - category: 'http', - description: 'Size in bytes of the request body.', - example: 887, - name: 'http.request.body.bytes', - type: 'long', - format: 'bytes', - }, - 'http.request.body.content': { - category: 'http', - description: 'The full HTTP request body.', - example: 'Hello world', - name: 'http.request.body.content', - type: 'keyword', - }, - 'http.request.bytes': { - category: 'http', - description: 'Total size in bytes of the request (body and headers).', - example: 1437, - name: 'http.request.bytes', - type: 'long', - format: 'bytes', - }, - 'http.request.id': { - category: 'http', - description: - 'A unique identifier for each HTTP request to correlate logs between clients and servers in transactions. The id may be contained in a non-standard HTTP header, such as `X-Request-ID` or `X-Correlation-ID`.', - example: '123e4567-e89b-12d3-a456-426614174000', - name: 'http.request.id', - type: 'keyword', - }, - 'http.request.method': { - category: 'http', - description: - 'HTTP request method. Prior to ECS 1.6.0 the following guidance was provided: "The field value must be normalized to lowercase for querying." As of ECS 1.6.0, the guidance is deprecated because the original case of the method may be useful in anomaly detection. Original case will be mandated in ECS 2.0.0', - example: 'GET, POST, PUT, PoST', - name: 'http.request.method', - type: 'keyword', - }, - 'http.request.mime_type': { - category: 'http', - description: - "Mime type of the body of the request. This value must only be populated based on the content of the request body, not on the `Content-Type` header. Comparing the mime type of a request with the request's Content-Type header can be helpful in detecting threats or misconfigured clients.", - example: 'image/gif', - name: 'http.request.mime_type', - type: 'keyword', - }, - 'http.request.referrer': { - category: 'http', - description: 'Referrer for this HTTP request.', - example: 'https://blog.example.com/', - name: 'http.request.referrer', - type: 'keyword', - }, - 'http.response.body.bytes': { - category: 'http', - description: 'Size in bytes of the response body.', - example: 887, - name: 'http.response.body.bytes', - type: 'long', - format: 'bytes', - }, - 'http.response.body.content': { - category: 'http', - description: 'The full HTTP response body.', - example: 'Hello world', - name: 'http.response.body.content', - type: 'keyword', - }, - 'http.response.bytes': { - category: 'http', - description: 'Total size in bytes of the response (body and headers).', - example: 1437, - name: 'http.response.bytes', - type: 'long', - format: 'bytes', - }, - 'http.response.mime_type': { - category: 'http', - description: - "Mime type of the body of the response. This value must only be populated based on the content of the response body, not on the `Content-Type` header. Comparing the mime type of a response with the response's Content-Type header can be helpful in detecting misconfigured servers.", - example: 'image/gif', - name: 'http.response.mime_type', - type: 'keyword', - }, - 'http.response.status_code': { - category: 'http', - description: 'HTTP response status code.', - example: 404, - name: 'http.response.status_code', - type: 'long', - format: 'string', - }, - 'http.version': { - category: 'http', - description: 'HTTP version.', - example: 1.1, - name: 'http.version', - type: 'keyword', - }, - 'interface.alias': { - category: 'interface', - description: - 'Interface alias as reported by the system, typically used in firewall implementations for e.g. inside, outside, or dmz logical interface naming.', - example: 'outside', - name: 'interface.alias', - type: 'keyword', - }, - 'interface.id': { - category: 'interface', - description: 'Interface ID as reported by an observer (typically SNMP interface ID).', - example: 10, - name: 'interface.id', - type: 'keyword', - }, - 'interface.name': { - category: 'interface', - description: 'Interface name as reported by the system.', - example: 'eth0', - name: 'interface.name', - type: 'keyword', - }, - 'log.file.path': { - category: 'log', - description: - "Full path to the log file this event came from, including the file name. It should include the drive letter, when appropriate. If the event wasn't read from a log file, do not populate this field.", - example: '/var/log/fun-times.log', - name: 'log.file.path', - type: 'keyword', - }, - 'log.level': { - category: 'log', - description: - "Original log level of the log event. If the source of the event provides a log level or textual severity, this is the one that goes in `log.level`. If your source doesn't specify one, you may put your event transport's severity here (e.g. Syslog severity). Some examples are `warn`, `err`, `i`, `informational`.", - example: 'error', - name: 'log.level', - type: 'keyword', - }, - 'log.logger': { - category: 'log', - description: - 'The name of the logger inside an application. This is usually the name of the class which initialized the logger, or can be a custom name.', - example: 'org.elasticsearch.bootstrap.Bootstrap', - name: 'log.logger', - type: 'keyword', - }, - 'log.origin.file.line': { - category: 'log', - description: - 'The line number of the file containing the source code which originated the log event.', - example: 42, - name: 'log.origin.file.line', - type: 'integer', - }, - 'log.origin.file.name': { - category: 'log', - description: - 'The name of the file containing the source code which originated the log event. Note that this field is not meant to capture the log file. The correct field to capture the log file is `log.file.path`.', - example: 'Bootstrap.java', - name: 'log.origin.file.name', - type: 'keyword', - }, - 'log.origin.function': { - category: 'log', - description: 'The name of the function or method which originated the log event.', - example: 'init', - name: 'log.origin.function', - type: 'keyword', - }, - 'log.original': { - category: 'log', - description: - "This is the original log message and contains the full log message before splitting it up in multiple parts. In contrast to the `message` field which can contain an extracted part of the log message, this field contains the original, full log message. It can have already some modifications applied like encoding or new lines removed to clean up the log message. This field is not indexed and doc_values are disabled so it can't be queried but the value can be retrieved from `_source`.", - example: 'Sep 19 08:26:10 localhost My log', - name: 'log.original', - type: 'keyword', - }, - 'log.syslog': { - category: 'log', - description: - 'The Syslog metadata of the event, if the event was transmitted via Syslog. Please see RFCs 5424 or 3164.', - name: 'log.syslog', - type: 'object', - }, - 'log.syslog.facility.code': { - category: 'log', - description: - 'The Syslog numeric facility of the log event, if available. According to RFCs 5424 and 3164, this value should be an integer between 0 and 23.', - example: 23, - name: 'log.syslog.facility.code', - type: 'long', - format: 'string', - }, - 'log.syslog.facility.name': { - category: 'log', - description: 'The Syslog text-based facility of the log event, if available.', - example: 'local7', - name: 'log.syslog.facility.name', - type: 'keyword', - }, - 'log.syslog.priority': { - category: 'log', - description: - 'Syslog numeric priority of the event, if available. According to RFCs 5424 and 3164, the priority is 8 * facility + severity. This number is therefore expected to contain a value between 0 and 191.', - example: 135, - name: 'log.syslog.priority', - type: 'long', - format: 'string', - }, - 'log.syslog.severity.code': { - category: 'log', - description: - "The Syslog numeric severity of the log event, if available. If the event source publishing via Syslog provides a different numeric severity value (e.g. firewall, IDS), your source's numeric severity should go to `event.severity`. If the event source does not specify a distinct severity, you can optionally copy the Syslog severity to `event.severity`.", - example: 3, - name: 'log.syslog.severity.code', - type: 'long', - }, - 'log.syslog.severity.name': { - category: 'log', - description: - "The Syslog numeric severity of the log event, if available. If the event source publishing via Syslog provides a different severity value (e.g. firewall, IDS), your source's text severity should go to `log.level`. If the event source does not specify a distinct severity, you can optionally copy the Syslog severity to `log.level`.", - example: 'Error', - name: 'log.syslog.severity.name', - type: 'keyword', - }, - 'network.application': { - category: 'network', - description: - 'A name given to an application level protocol. This can be arbitrarily assigned for things like microservices, but also apply to things like skype, icq, facebook, twitter. This would be used in situations where the vendor or service can be decoded such as from the source/dest IP owners, ports, or wire format. The field value must be normalized to lowercase for querying. See the documentation section "Implementing ECS".', - example: 'aim', - name: 'network.application', - type: 'keyword', - }, - 'network.bytes': { - category: 'network', - description: - 'Total bytes transferred in both directions. If `source.bytes` and `destination.bytes` are known, `network.bytes` is their sum.', - example: 368, - name: 'network.bytes', - type: 'long', - format: 'bytes', - }, - 'network.community_id': { - category: 'network', - description: - 'A hash of source and destination IPs and ports, as well as the protocol used in a communication. This is a tool-agnostic standard to identify flows. Learn more at https://github.com/corelight/community-id-spec.', - example: '1:hO+sN4H+MG5MY/8hIrXPqc4ZQz0=', - name: 'network.community_id', - type: 'keyword', - }, - 'network.direction': { - category: 'network', - description: - 'Direction of the network traffic. Recommended values are: * ingress * egress * inbound * outbound * internal * external * unknown When mapping events from a host-based monitoring context, populate this field from the host\'s point of view, using the values "ingress" or "egress". When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values "inbound", "outbound", "internal" or "external". Note that "internal" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that "external" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers.', - example: 'inbound', - name: 'network.direction', - type: 'keyword', - }, - 'network.forwarded_ip': { - category: 'network', - description: 'Host IP address when the source IP address is the proxy.', - example: '192.1.1.2', - name: 'network.forwarded_ip', - type: 'ip', - }, - 'network.iana_number': { - category: 'network', - description: - 'IANA Protocol Number (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Standardized list of protocols. This aligns well with NetFlow and sFlow related logs which use the IANA Protocol Number.', - example: 6, - name: 'network.iana_number', - type: 'keyword', - }, - 'network.inner': { - category: 'network', - description: - 'Network.inner fields are added in addition to network.vlan fields to describe the innermost VLAN when q-in-q VLAN tagging is present. Allowed fields include vlan.id and vlan.name. Inner vlan fields are typically used when sending traffic with multiple 802.1q encapsulations to a network sensor (e.g. Zeek, Wireshark.)', - name: 'network.inner', - type: 'object', - }, - 'network.inner.vlan.id': { - category: 'network', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'network.inner.vlan.id', - type: 'keyword', - }, - 'network.inner.vlan.name': { - category: 'network', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'network.inner.vlan.name', - type: 'keyword', - }, - 'network.name': { - category: 'network', - description: 'Name given by operators to sections of their network.', - example: 'Guest Wifi', - name: 'network.name', - type: 'keyword', - }, - 'network.packets': { - category: 'network', - description: - 'Total packets transferred in both directions. If `source.packets` and `destination.packets` are known, `network.packets` is their sum.', - example: 24, - name: 'network.packets', - type: 'long', - }, - 'network.protocol': { - category: 'network', - description: - 'L7 Network protocol name. ex. http, lumberjack, transport protocol. The field value must be normalized to lowercase for querying. See the documentation section "Implementing ECS".', - example: 'http', - name: 'network.protocol', - type: 'keyword', - }, - 'network.transport': { - category: 'network', - description: - 'Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) The field value must be normalized to lowercase for querying. See the documentation section "Implementing ECS".', - example: 'tcp', - name: 'network.transport', - type: 'keyword', - }, - 'network.type': { - category: 'network', - description: - 'In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc The field value must be normalized to lowercase for querying. See the documentation section "Implementing ECS".', - example: 'ipv4', - name: 'network.type', - type: 'keyword', - }, - 'network.vlan.id': { - category: 'network', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'network.vlan.id', - type: 'keyword', - }, - 'network.vlan.name': { - category: 'network', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'network.vlan.name', - type: 'keyword', - }, - 'observer.egress': { - category: 'observer', - description: - 'Observer.egress holds information like interface number and name, vlan, and zone information to classify egress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic.', - name: 'observer.egress', - type: 'object', - }, - 'observer.egress.interface.alias': { - category: 'observer', - description: - 'Interface alias as reported by the system, typically used in firewall implementations for e.g. inside, outside, or dmz logical interface naming.', - example: 'outside', - name: 'observer.egress.interface.alias', - type: 'keyword', - }, - 'observer.egress.interface.id': { - category: 'observer', - description: 'Interface ID as reported by an observer (typically SNMP interface ID).', - example: 10, - name: 'observer.egress.interface.id', - type: 'keyword', - }, - 'observer.egress.interface.name': { - category: 'observer', - description: 'Interface name as reported by the system.', - example: 'eth0', - name: 'observer.egress.interface.name', - type: 'keyword', - }, - 'observer.egress.vlan.id': { - category: 'observer', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'observer.egress.vlan.id', - type: 'keyword', - }, - 'observer.egress.vlan.name': { - category: 'observer', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'observer.egress.vlan.name', - type: 'keyword', - }, - 'observer.egress.zone': { - category: 'observer', - description: - 'Network zone of outbound traffic as reported by the observer to categorize the destination area of egress traffic, e.g. Internal, External, DMZ, HR, Legal, etc.', - example: 'Public_Internet', - name: 'observer.egress.zone', - type: 'keyword', - }, - 'observer.geo.city_name': { - category: 'observer', - description: 'City name.', - example: 'Montreal', - name: 'observer.geo.city_name', - type: 'keyword', - }, - 'observer.geo.continent_code': { - category: 'observer', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'observer.geo.continent_code', - type: 'keyword', - }, - 'observer.geo.continent_name': { - category: 'observer', - description: 'Name of the continent.', - example: 'North America', - name: 'observer.geo.continent_name', - type: 'keyword', - }, - 'observer.geo.country_iso_code': { - category: 'observer', - description: 'Country ISO code.', - example: 'CA', - name: 'observer.geo.country_iso_code', - type: 'keyword', - }, - 'observer.geo.country_name': { - category: 'observer', - description: 'Country name.', - example: 'Canada', - name: 'observer.geo.country_name', - type: 'keyword', - }, - 'observer.geo.location': { - category: 'observer', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'observer.geo.location', - type: 'geo_point', - }, - 'observer.geo.name': { - category: 'observer', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'observer.geo.name', - type: 'keyword', - }, - 'observer.geo.postal_code': { - category: 'observer', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'observer.geo.postal_code', - type: 'keyword', - }, - 'observer.geo.region_iso_code': { - category: 'observer', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'observer.geo.region_iso_code', - type: 'keyword', - }, - 'observer.geo.region_name': { - category: 'observer', - description: 'Region name.', - example: 'Quebec', - name: 'observer.geo.region_name', - type: 'keyword', - }, - 'observer.geo.timezone': { - category: 'observer', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'observer.geo.timezone', - type: 'keyword', - }, - 'observer.hostname': { - category: 'observer', - description: 'Hostname of the observer.', - name: 'observer.hostname', - type: 'keyword', - }, - 'observer.ingress': { - category: 'observer', - description: - 'Observer.ingress holds information like interface number and name, vlan, and zone information to classify ingress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic.', - name: 'observer.ingress', - type: 'object', - }, - 'observer.ingress.interface.alias': { - category: 'observer', - description: - 'Interface alias as reported by the system, typically used in firewall implementations for e.g. inside, outside, or dmz logical interface naming.', - example: 'outside', - name: 'observer.ingress.interface.alias', - type: 'keyword', - }, - 'observer.ingress.interface.id': { - category: 'observer', - description: 'Interface ID as reported by an observer (typically SNMP interface ID).', - example: 10, - name: 'observer.ingress.interface.id', - type: 'keyword', - }, - 'observer.ingress.interface.name': { - category: 'observer', - description: 'Interface name as reported by the system.', - example: 'eth0', - name: 'observer.ingress.interface.name', - type: 'keyword', - }, - 'observer.ingress.vlan.id': { - category: 'observer', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'observer.ingress.vlan.id', - type: 'keyword', - }, - 'observer.ingress.vlan.name': { - category: 'observer', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'observer.ingress.vlan.name', - type: 'keyword', - }, - 'observer.ingress.zone': { - category: 'observer', - description: - 'Network zone of incoming traffic as reported by the observer to categorize the source area of ingress traffic. e.g. internal, External, DMZ, HR, Legal, etc.', - example: 'DMZ', - name: 'observer.ingress.zone', - type: 'keyword', - }, - 'observer.ip': { - category: 'observer', - description: 'IP addresses of the observer.', - name: 'observer.ip', - type: 'ip', - }, - 'observer.mac': { - category: 'observer', - description: - 'MAC addresses of the observer. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '["00-00-5E-00-53-23", "00-00-5E-00-53-24"]', - name: 'observer.mac', - type: 'keyword', - }, - 'observer.name': { - category: 'observer', - description: - 'Custom name of the observer. This is a name that can be given to an observer. This can be helpful for example if multiple firewalls of the same model are used in an organization. If no custom name is needed, the field can be left empty.', - example: '1_proxySG', - name: 'observer.name', - type: 'keyword', - }, - 'observer.os.family': { - category: 'observer', - description: 'OS family (such as redhat, debian, freebsd, windows).', - example: 'debian', - name: 'observer.os.family', - type: 'keyword', - }, - 'observer.os.full': { - category: 'observer', - description: 'Operating system name, including the version or code name.', - example: 'Mac OS Mojave', - name: 'observer.os.full', - type: 'keyword', - }, - 'observer.os.kernel': { - category: 'observer', - description: 'Operating system kernel version as a raw string.', - example: '4.4.0-112-generic', - name: 'observer.os.kernel', - type: 'keyword', - }, - 'observer.os.name': { - category: 'observer', - description: 'Operating system name, without the version.', - example: 'Mac OS X', - name: 'observer.os.name', - type: 'keyword', - }, - 'observer.os.platform': { - category: 'observer', - description: 'Operating system platform (such centos, ubuntu, windows).', - example: 'darwin', - name: 'observer.os.platform', - type: 'keyword', - }, - 'observer.os.type': { - category: 'observer', - description: - "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", - example: 'macos', - name: 'observer.os.type', - type: 'keyword', - }, - 'observer.os.version': { - category: 'observer', - description: 'Operating system version as a raw string.', - example: '10.14.1', - name: 'observer.os.version', - type: 'keyword', - }, - 'observer.product': { - category: 'observer', - description: 'The product name of the observer.', - example: 's200', - name: 'observer.product', - type: 'keyword', - }, - 'observer.serial_number': { - category: 'observer', - description: 'Observer serial number.', - name: 'observer.serial_number', - type: 'keyword', - }, - 'observer.type': { - category: 'observer', - description: - 'The type of the observer the data is coming from. There is no predefined list of observer types. Some examples are `forwarder`, `firewall`, `ids`, `ips`, `proxy`, `poller`, `sensor`, `APM server`.', - example: 'firewall', - name: 'observer.type', - type: 'keyword', - }, - 'observer.vendor': { - category: 'observer', - description: 'Vendor name of the observer.', - example: 'Symantec', - name: 'observer.vendor', - type: 'keyword', - }, - 'observer.version': { - category: 'observer', - description: 'Observer version.', - name: 'observer.version', - type: 'keyword', - }, - 'orchestrator.api_version': { - category: 'orchestrator', - description: 'API version being used to carry out the action', - example: 'v1beta1', - name: 'orchestrator.api_version', - type: 'keyword', - }, - 'orchestrator.cluster.name': { - category: 'orchestrator', - description: 'Name of the cluster.', - name: 'orchestrator.cluster.name', - type: 'keyword', - }, - 'orchestrator.cluster.url': { - category: 'orchestrator', - description: 'URL of the API used to manage the cluster.', - name: 'orchestrator.cluster.url', - type: 'keyword', - }, - 'orchestrator.cluster.version': { - category: 'orchestrator', - description: 'The version of the cluster.', - name: 'orchestrator.cluster.version', - type: 'keyword', - }, - 'orchestrator.namespace': { - category: 'orchestrator', - description: 'Namespace in which the action is taking place.', - example: 'kube-system', - name: 'orchestrator.namespace', - type: 'keyword', - }, - 'orchestrator.organization': { - category: 'orchestrator', - description: 'Organization affected by the event (for multi-tenant orchestrator setups).', - example: 'elastic', - name: 'orchestrator.organization', - type: 'keyword', - }, - 'orchestrator.resource.name': { - category: 'orchestrator', - description: 'Name of the resource being acted upon.', - example: 'test-pod-cdcws', - name: 'orchestrator.resource.name', - type: 'keyword', - }, - 'orchestrator.resource.type': { - category: 'orchestrator', - description: 'Type of resource being acted upon.', - example: 'service', - name: 'orchestrator.resource.type', - type: 'keyword', - }, - 'orchestrator.type': { - category: 'orchestrator', - description: 'Orchestrator cluster type (e.g. kubernetes, nomad or cloudfoundry).', - example: 'kubernetes', - name: 'orchestrator.type', - type: 'keyword', - }, - 'organization.id': { - category: 'organization', - description: 'Unique identifier for the organization.', - name: 'organization.id', - type: 'keyword', - }, - 'organization.name': { - category: 'organization', - description: 'Organization name.', - name: 'organization.name', - type: 'keyword', - }, - 'os.family': { - category: 'os', - description: 'OS family (such as redhat, debian, freebsd, windows).', - example: 'debian', - name: 'os.family', - type: 'keyword', - }, - 'os.full': { - category: 'os', - description: 'Operating system name, including the version or code name.', - example: 'Mac OS Mojave', - name: 'os.full', - type: 'keyword', - }, - 'os.kernel': { - category: 'os', - description: 'Operating system kernel version as a raw string.', - example: '4.4.0-112-generic', - name: 'os.kernel', - type: 'keyword', - }, - 'os.name': { - category: 'os', - description: 'Operating system name, without the version.', - example: 'Mac OS X', - name: 'os.name', - type: 'keyword', - }, - 'os.platform': { - category: 'os', - description: 'Operating system platform (such centos, ubuntu, windows).', - example: 'darwin', - name: 'os.platform', - type: 'keyword', - }, - 'os.type': { - category: 'os', - description: - "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", - example: 'macos', - name: 'os.type', - type: 'keyword', - }, - 'os.version': { - category: 'os', - description: 'Operating system version as a raw string.', - example: '10.14.1', - name: 'os.version', - type: 'keyword', - }, - 'package.architecture': { - category: 'package', - description: 'Package architecture.', - example: 'x86_64', - name: 'package.architecture', - type: 'keyword', - }, - 'package.build_version': { - category: 'package', - description: - 'Additional information about the build version of the installed package. For example use the commit SHA of a non-released package.', - example: '36f4f7e89dd61b0988b12ee000b98966867710cd', - name: 'package.build_version', - type: 'keyword', - }, - 'package.checksum': { - category: 'package', - description: 'Checksum of the installed package for verification.', - example: '68b329da9893e34099c7d8ad5cb9c940', - name: 'package.checksum', - type: 'keyword', - }, - 'package.description': { - category: 'package', - description: 'Description of the package.', - example: 'Open source programming language to build simple/reliable/efficient software.', - name: 'package.description', - type: 'keyword', - }, - 'package.install_scope': { - category: 'package', - description: 'Indicating how the package was installed, e.g. user-local, global.', - example: 'global', - name: 'package.install_scope', - type: 'keyword', - }, - 'package.installed': { - category: 'package', - description: 'Time when package was installed.', - name: 'package.installed', - type: 'date', - }, - 'package.license': { - category: 'package', - description: - 'License under which the package was released. Use a short name, e.g. the license identifier from SPDX License List where possible (https://spdx.org/licenses/).', - example: 'Apache License 2.0', - name: 'package.license', - type: 'keyword', - }, - 'package.name': { - category: 'package', - description: 'Package name', - example: 'go', - name: 'package.name', - type: 'keyword', - }, - 'package.path': { - category: 'package', - description: 'Path where the package is installed.', - example: '/usr/local/Cellar/go/1.12.9/', - name: 'package.path', - type: 'keyword', - }, - 'package.reference': { - category: 'package', - description: 'Home page or reference URL of the software in this package, if available.', - example: 'https://golang.org', - name: 'package.reference', - type: 'keyword', - }, - 'package.size': { - category: 'package', - description: 'Package size in bytes.', - example: 62231, - name: 'package.size', - type: 'long', - format: 'string', - }, - 'package.type': { - category: 'package', - description: - 'Type of package. This should contain the package file type, rather than the package manager name. Examples: rpm, dpkg, brew, npm, gem, nupkg, jar.', - example: 'rpm', - name: 'package.type', - type: 'keyword', - }, - 'package.version': { - category: 'package', - description: 'Package version', - example: '1.12.9', - name: 'package.version', - type: 'keyword', - }, - 'pe.architecture': { - category: 'pe', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'pe.architecture', - type: 'keyword', - }, - 'pe.company': { - category: 'pe', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'pe.company', - type: 'keyword', - }, - 'pe.description': { - category: 'pe', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'pe.description', - type: 'keyword', - }, - 'pe.file_version': { - category: 'pe', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'pe.file_version', - type: 'keyword', - }, - 'pe.imphash': { - category: 'pe', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'pe.imphash', - type: 'keyword', - }, - 'pe.original_file_name': { - category: 'pe', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'pe.original_file_name', - type: 'keyword', - }, - 'pe.product': { - category: 'pe', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'pe.product', - type: 'keyword', - }, - 'process.args': { - category: 'process', - description: - 'Array of process arguments, starting with the absolute path to the executable. May be filtered to protect sensitive information.', - example: '["/usr/bin/ssh", "-l", "user", "10.0.0.16"]', - name: 'process.args', - type: 'keyword', - }, - 'process.args_count': { - category: 'process', - description: - 'Length of the process.args array. This field can be useful for querying or performing bucket analysis on how many arguments were provided to start a process. More arguments may be an indication of suspicious activity.', - example: 4, - name: 'process.args_count', - type: 'long', - }, - 'process.code_signature.exists': { - category: 'process', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'process.code_signature.exists', - type: 'boolean', - }, - 'process.code_signature.signing_id': { - category: 'process', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'process.code_signature.signing_id', - type: 'keyword', - }, - 'process.code_signature.status': { - category: 'process', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'process.code_signature.status', - type: 'keyword', - }, - 'process.code_signature.subject_name': { - category: 'process', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'process.code_signature.subject_name', - type: 'keyword', - }, - 'process.code_signature.team_id': { - category: 'process', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'process.code_signature.team_id', - type: 'keyword', - }, - 'process.code_signature.trusted': { - category: 'process', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'process.code_signature.trusted', - type: 'boolean', - }, - 'process.code_signature.valid': { - category: 'process', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'process.code_signature.valid', - type: 'boolean', - }, - 'process.command_line': { - category: 'process', - description: - 'Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information.', - example: '/usr/bin/ssh -l user 10.0.0.16', - name: 'process.command_line', - type: 'keyword', - }, - 'process.entity_id': { - category: 'process', - description: - 'Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts.', - example: 'c2c455d9f99375d', - name: 'process.entity_id', - type: 'keyword', - }, - 'process.executable': { - category: 'process', - description: 'Absolute path to the process executable.', - example: '/usr/bin/ssh', - name: 'process.executable', - type: 'keyword', - }, - 'process.exit_code': { - category: 'process', - description: - 'The exit code of the process, if this is a termination event. The field should be absent if there is no exit code for the event (e.g. process start).', - example: 137, - name: 'process.exit_code', - type: 'long', - }, - 'process.hash.md5': { - category: 'process', - description: 'MD5 hash.', - name: 'process.hash.md5', - type: 'keyword', - }, - 'process.hash.sha1': { - category: 'process', - description: 'SHA1 hash.', - name: 'process.hash.sha1', - type: 'keyword', - }, - 'process.hash.sha256': { - category: 'process', - description: 'SHA256 hash.', - name: 'process.hash.sha256', - type: 'keyword', - }, - 'process.hash.sha512': { - category: 'process', - description: 'SHA512 hash.', - name: 'process.hash.sha512', - type: 'keyword', - }, - 'process.hash.ssdeep': { - category: 'process', - description: 'SSDEEP hash.', - name: 'process.hash.ssdeep', - type: 'keyword', - }, - 'process.name': { - category: 'process', - description: 'Process name. Sometimes called program name or similar.', - example: 'ssh', - name: 'process.name', - type: 'keyword', - }, - 'process.parent.args': { - category: 'process', - description: - 'Array of process arguments, starting with the absolute path to the executable. May be filtered to protect sensitive information.', - example: '["/usr/bin/ssh", "-l", "user", "10.0.0.16"]', - name: 'process.parent.args', - type: 'keyword', - }, - 'process.parent.args_count': { - category: 'process', - description: - 'Length of the process.args array. This field can be useful for querying or performing bucket analysis on how many arguments were provided to start a process. More arguments may be an indication of suspicious activity.', - example: 4, - name: 'process.parent.args_count', - type: 'long', - }, - 'process.parent.code_signature.exists': { - category: 'process', - description: 'Boolean to capture if a signature is present.', - example: 'true', - name: 'process.parent.code_signature.exists', - type: 'boolean', - }, - 'process.parent.code_signature.signing_id': { - category: 'process', - description: - 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', - example: 'com.apple.xpc.proxy', - name: 'process.parent.code_signature.signing_id', - type: 'keyword', - }, - 'process.parent.code_signature.status': { - category: 'process', - description: - 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', - example: 'ERROR_UNTRUSTED_ROOT', - name: 'process.parent.code_signature.status', - type: 'keyword', - }, - 'process.parent.code_signature.subject_name': { - category: 'process', - description: 'Subject name of the code signer', - example: 'Microsoft Corporation', - name: 'process.parent.code_signature.subject_name', - type: 'keyword', - }, - 'process.parent.code_signature.team_id': { - category: 'process', - description: - 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', - example: 'EQHXZ8M8AV', - name: 'process.parent.code_signature.team_id', - type: 'keyword', - }, - 'process.parent.code_signature.trusted': { - category: 'process', - description: - 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', - example: 'true', - name: 'process.parent.code_signature.trusted', - type: 'boolean', - }, - 'process.parent.code_signature.valid': { - category: 'process', - description: - 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', - example: 'true', - name: 'process.parent.code_signature.valid', - type: 'boolean', - }, - 'process.parent.command_line': { - category: 'process', - description: - 'Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information.', - example: '/usr/bin/ssh -l user 10.0.0.16', - name: 'process.parent.command_line', - type: 'keyword', - }, - 'process.parent.entity_id': { - category: 'process', - description: - 'Unique identifier for the process. The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts.', - example: 'c2c455d9f99375d', - name: 'process.parent.entity_id', - type: 'keyword', - }, - 'process.parent.executable': { - category: 'process', - description: 'Absolute path to the process executable.', - example: '/usr/bin/ssh', - name: 'process.parent.executable', - type: 'keyword', - }, - 'process.parent.exit_code': { - category: 'process', - description: - 'The exit code of the process, if this is a termination event. The field should be absent if there is no exit code for the event (e.g. process start).', - example: 137, - name: 'process.parent.exit_code', - type: 'long', - }, - 'process.parent.hash.md5': { - category: 'process', - description: 'MD5 hash.', - name: 'process.parent.hash.md5', - type: 'keyword', - }, - 'process.parent.hash.sha1': { - category: 'process', - description: 'SHA1 hash.', - name: 'process.parent.hash.sha1', - type: 'keyword', - }, - 'process.parent.hash.sha256': { - category: 'process', - description: 'SHA256 hash.', - name: 'process.parent.hash.sha256', - type: 'keyword', - }, - 'process.parent.hash.sha512': { - category: 'process', - description: 'SHA512 hash.', - name: 'process.parent.hash.sha512', - type: 'keyword', - }, - 'process.parent.hash.ssdeep': { - category: 'process', - description: 'SSDEEP hash.', - name: 'process.parent.hash.ssdeep', - type: 'keyword', - }, - 'process.parent.name': { - category: 'process', - description: 'Process name. Sometimes called program name or similar.', - example: 'ssh', - name: 'process.parent.name', - type: 'keyword', - }, - 'process.parent.pe.architecture': { - category: 'process', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'process.parent.pe.architecture', - type: 'keyword', - }, - 'process.parent.pe.company': { - category: 'process', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'process.parent.pe.company', - type: 'keyword', - }, - 'process.parent.pe.description': { - category: 'process', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'process.parent.pe.description', - type: 'keyword', - }, - 'process.parent.pe.file_version': { - category: 'process', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'process.parent.pe.file_version', - type: 'keyword', - }, - 'process.parent.pe.imphash': { - category: 'process', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'process.parent.pe.imphash', - type: 'keyword', - }, - 'process.parent.pe.original_file_name': { - category: 'process', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'process.parent.pe.original_file_name', - type: 'keyword', - }, - 'process.parent.pe.product': { - category: 'process', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'process.parent.pe.product', - type: 'keyword', - }, - 'process.parent.pgid': { - category: 'process', - description: 'Identifier of the group of processes the process belongs to.', - name: 'process.parent.pgid', - type: 'long', - format: 'string', - }, - 'process.parent.pid': { - category: 'process', - description: 'Process id.', - example: 4242, - name: 'process.parent.pid', - type: 'long', - format: 'string', - }, - 'process.parent.ppid': { - category: 'process', - description: "Parent process' pid.", - example: 4241, - name: 'process.parent.ppid', - type: 'long', - format: 'string', - }, - 'process.parent.start': { - category: 'process', - description: 'The time the process started.', - example: '2016-05-23T08:05:34.853Z', - name: 'process.parent.start', - type: 'date', - }, - 'process.parent.thread.id': { - category: 'process', - description: 'Thread ID.', - example: 4242, - name: 'process.parent.thread.id', - type: 'long', - format: 'string', - }, - 'process.parent.thread.name': { - category: 'process', - description: 'Thread name.', - example: 'thread-0', - name: 'process.parent.thread.name', - type: 'keyword', - }, - 'process.parent.title': { - category: 'process', - description: - 'Process title. The proctitle, some times the same as process name. Can also be different: for example a browser setting its title to the web page currently opened.', - name: 'process.parent.title', - type: 'keyword', - }, - 'process.parent.uptime': { - category: 'process', - description: 'Seconds the process has been up.', - example: 1325, - name: 'process.parent.uptime', - type: 'long', - }, - 'process.parent.working_directory': { - category: 'process', - description: 'The working directory of the process.', - example: '/home/alice', - name: 'process.parent.working_directory', - type: 'keyword', - }, - 'process.pe.architecture': { - category: 'process', - description: 'CPU architecture target for the file.', - example: 'x64', - name: 'process.pe.architecture', - type: 'keyword', - }, - 'process.pe.company': { - category: 'process', - description: 'Internal company name of the file, provided at compile-time.', - example: 'Microsoft Corporation', - name: 'process.pe.company', - type: 'keyword', - }, - 'process.pe.description': { - category: 'process', - description: 'Internal description of the file, provided at compile-time.', - example: 'Paint', - name: 'process.pe.description', - type: 'keyword', - }, - 'process.pe.file_version': { - category: 'process', - description: 'Internal version of the file, provided at compile-time.', - example: '6.3.9600.17415', - name: 'process.pe.file_version', - type: 'keyword', - }, - 'process.pe.imphash': { - category: 'process', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'process.pe.imphash', - type: 'keyword', - }, - 'process.pe.original_file_name': { - category: 'process', - description: 'Internal name of the file, provided at compile-time.', - example: 'MSPAINT.EXE', - name: 'process.pe.original_file_name', - type: 'keyword', - }, - 'process.pe.product': { - category: 'process', - description: 'Internal product name of the file, provided at compile-time.', - example: 'Microsoft® Windows® Operating System', - name: 'process.pe.product', - type: 'keyword', - }, - 'process.pgid': { - category: 'process', - description: 'Identifier of the group of processes the process belongs to.', - name: 'process.pgid', - type: 'long', - format: 'string', - }, - 'process.pid': { - category: 'process', - description: 'Process id.', - example: 4242, - name: 'process.pid', - type: 'long', - format: 'string', - }, - 'process.ppid': { - category: 'process', - description: "Parent process' pid.", - example: 4241, - name: 'process.ppid', - type: 'long', - format: 'string', - }, - 'process.start': { - category: 'process', - description: 'The time the process started.', - example: '2016-05-23T08:05:34.853Z', - name: 'process.start', - type: 'date', - }, - 'process.thread.id': { - category: 'process', - description: 'Thread ID.', - example: 4242, - name: 'process.thread.id', - type: 'long', - format: 'string', - }, - 'process.thread.name': { - category: 'process', - description: 'Thread name.', - example: 'thread-0', - name: 'process.thread.name', - type: 'keyword', - }, - 'process.title': { - category: 'process', - description: - 'Process title. The proctitle, some times the same as process name. Can also be different: for example a browser setting its title to the web page currently opened.', - name: 'process.title', - type: 'keyword', - }, - 'process.uptime': { - category: 'process', - description: 'Seconds the process has been up.', - example: 1325, - name: 'process.uptime', - type: 'long', - }, - 'process.working_directory': { - category: 'process', - description: 'The working directory of the process.', - example: '/home/alice', - name: 'process.working_directory', - type: 'keyword', - }, - 'registry.data.bytes': { - category: 'registry', - description: - 'Original bytes written with base64 encoding. For Windows registry operations, such as SetValueEx and RegQueryValueEx, this corresponds to the data pointed by `lp_data`. This is optional but provides better recoverability and should be populated for REG_BINARY encoded values.', - example: 'ZQBuAC0AVQBTAAAAZQBuAAAAAAA=', - name: 'registry.data.bytes', - type: 'keyword', - }, - 'registry.data.strings': { - category: 'registry', - description: - 'Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `"1"`).', - example: '["C:\\rta\\red_ttp\\bin\\myapp.exe"]', - name: 'registry.data.strings', - type: 'keyword', - }, - 'registry.data.type': { - category: 'registry', - description: 'Standard registry type for encoding contents', - example: 'REG_SZ', - name: 'registry.data.type', - type: 'keyword', - }, - 'registry.hive': { - category: 'registry', - description: 'Abbreviated name for the hive.', - example: 'HKLM', - name: 'registry.hive', - type: 'keyword', - }, - 'registry.key': { - category: 'registry', - description: 'Hive-relative path of keys.', - example: - 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe', - name: 'registry.key', - type: 'keyword', - }, - 'registry.path': { - category: 'registry', - description: 'Full path, including hive, key and value', - example: - 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe\\Debugger', - name: 'registry.path', - type: 'keyword', - }, - 'registry.value': { - category: 'registry', - description: 'Name of the value written.', - example: 'Debugger', - name: 'registry.value', - type: 'keyword', - }, - 'related.hash': { - category: 'related', - description: - "All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search).", - name: 'related.hash', - type: 'keyword', - }, - 'related.hosts': { - category: 'related', - description: - 'All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases.', - name: 'related.hosts', - type: 'keyword', - }, - 'related.ip': { - category: 'related', - description: 'All of the IPs seen on your event.', - name: 'related.ip', - type: 'ip', - }, - 'related.user': { - category: 'related', - description: 'All the user names seen on your event.', - name: 'related.user', - type: 'keyword', - }, - 'rule.author': { - category: 'rule', - description: - 'Name, organization, or pseudonym of the author or authors who created the rule used to generate this event.', - example: '["Star-Lord"]', - name: 'rule.author', - type: 'keyword', - }, - 'rule.category': { - category: 'rule', - description: - 'A categorization value keyword used by the entity using the rule for detection of this event.', - example: 'Attempted Information Leak', - name: 'rule.category', - type: 'keyword', - }, - 'rule.description': { - category: 'rule', - description: 'The description of the rule generating the event.', - example: 'Block requests to public DNS over HTTPS / TLS protocols', - name: 'rule.description', - type: 'keyword', - }, - 'rule.id': { - category: 'rule', - description: - 'A rule ID that is unique within the scope of an agent, observer, or other entity using the rule for detection of this event.', - example: 101, - name: 'rule.id', - type: 'keyword', - }, - 'rule.license': { - category: 'rule', - description: - 'Name of the license under which the rule used to generate this event is made available.', - example: 'Apache 2.0', - name: 'rule.license', - type: 'keyword', - }, - 'rule.name': { - category: 'rule', - description: 'The name of the rule or signature generating the event.', - example: 'BLOCK_DNS_over_TLS', - name: 'rule.name', - type: 'keyword', - }, - 'rule.reference': { - category: 'rule', - description: - "Reference URL to additional information about the rule used to generate this event. The URL can point to the vendor's documentation about the rule. If that's not available, it can also be a link to a more general page describing this type of alert.", - example: 'https://en.wikipedia.org/wiki/DNS_over_TLS', - name: 'rule.reference', - type: 'keyword', - }, - 'rule.ruleset': { - category: 'rule', - description: - 'Name of the ruleset, policy, group, or parent category in which the rule used to generate this event is a member.', - example: 'Standard_Protocol_Filters', - name: 'rule.ruleset', - type: 'keyword', - }, - 'rule.uuid': { - category: 'rule', - description: - 'A rule ID that is unique within the scope of a set or group of agents, observers, or other entities using the rule for detection of this event.', - example: 1100110011, - name: 'rule.uuid', - type: 'keyword', - }, - 'rule.version': { - category: 'rule', - description: 'The version / revision of the rule being used for analysis.', - example: 1.1, - name: 'rule.version', - type: 'keyword', - }, - 'server.address': { - category: 'server', - description: - 'Some event server addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.', - name: 'server.address', - type: 'keyword', - }, - 'server.as.number': { - category: 'server', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'server.as.number', - type: 'long', - }, - 'server.as.organization.name': { - category: 'server', - description: 'Organization name.', - example: 'Google LLC', - name: 'server.as.organization.name', - type: 'keyword', - }, - 'server.bytes': { - category: 'server', - description: 'Bytes sent from the server to the client.', - example: 184, - name: 'server.bytes', - type: 'long', - format: 'bytes', - }, - 'server.domain': { - category: 'server', - description: 'Server domain.', - name: 'server.domain', - type: 'keyword', - }, - 'server.geo.city_name': { - category: 'server', - description: 'City name.', - example: 'Montreal', - name: 'server.geo.city_name', - type: 'keyword', - }, - 'server.geo.continent_code': { - category: 'server', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'server.geo.continent_code', - type: 'keyword', - }, - 'server.geo.continent_name': { - category: 'server', - description: 'Name of the continent.', - example: 'North America', - name: 'server.geo.continent_name', - type: 'keyword', - }, - 'server.geo.country_iso_code': { - category: 'server', - description: 'Country ISO code.', - example: 'CA', - name: 'server.geo.country_iso_code', - type: 'keyword', - }, - 'server.geo.country_name': { - category: 'server', - description: 'Country name.', - example: 'Canada', - name: 'server.geo.country_name', - type: 'keyword', - }, - 'server.geo.location': { - category: 'server', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'server.geo.location', - type: 'geo_point', - }, - 'server.geo.name': { - category: 'server', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'server.geo.name', - type: 'keyword', - }, - 'server.geo.postal_code': { - category: 'server', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'server.geo.postal_code', - type: 'keyword', - }, - 'server.geo.region_iso_code': { - category: 'server', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'server.geo.region_iso_code', - type: 'keyword', - }, - 'server.geo.region_name': { - category: 'server', - description: 'Region name.', - example: 'Quebec', - name: 'server.geo.region_name', - type: 'keyword', - }, - 'server.geo.timezone': { - category: 'server', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'server.geo.timezone', - type: 'keyword', - }, - 'server.ip': { - category: 'server', - description: 'IP address of the server (IPv4 or IPv6).', - name: 'server.ip', - type: 'ip', - }, - 'server.mac': { - category: 'server', - description: - 'MAC address of the server. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '00-00-5E-00-53-23', - name: 'server.mac', - type: 'keyword', - }, - 'server.nat.ip': { - category: 'server', - description: - 'Translated ip of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers.', - name: 'server.nat.ip', - type: 'ip', - }, - 'server.nat.port': { - category: 'server', - description: - 'Translated port of destination based NAT sessions (e.g. internet to private DMZ) Typically used with load balancers, firewalls, or routers.', - name: 'server.nat.port', - type: 'long', - format: 'string', - }, - 'server.packets': { - category: 'server', - description: 'Packets sent from the server to the client.', - example: 12, - name: 'server.packets', - type: 'long', - }, - 'server.port': { - category: 'server', - description: 'Port of the server.', - name: 'server.port', - type: 'long', - format: 'string', - }, - 'server.registered_domain': { - category: 'server', - description: - 'The highest registered server domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'server.registered_domain', - type: 'keyword', - }, - 'server.subdomain': { - category: 'server', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'server.subdomain', - type: 'keyword', - }, - 'server.top_level_domain': { - category: 'server', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'server.top_level_domain', - type: 'keyword', - }, - 'server.user.domain': { - category: 'server', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'server.user.domain', - type: 'keyword', - }, - 'server.user.email': { - category: 'server', - description: 'User email address.', - name: 'server.user.email', - type: 'keyword', - }, - 'server.user.full_name': { - category: 'server', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'server.user.full_name', - type: 'keyword', - }, - 'server.user.group.domain': { - category: 'server', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'server.user.group.domain', - type: 'keyword', - }, - 'server.user.group.id': { - category: 'server', - description: 'Unique identifier for the group on the system/platform.', - name: 'server.user.group.id', - type: 'keyword', - }, - 'server.user.group.name': { - category: 'server', - description: 'Name of the group.', - name: 'server.user.group.name', - type: 'keyword', - }, - 'server.user.hash': { - category: 'server', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'server.user.hash', - type: 'keyword', - }, - 'server.user.id': { - category: 'server', - description: 'Unique identifier of the user.', - name: 'server.user.id', - type: 'keyword', - }, - 'server.user.name': { - category: 'server', - description: 'Short name or login of the user.', - example: 'albert', - name: 'server.user.name', - type: 'keyword', - }, - 'server.user.roles': { - category: 'server', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'server.user.roles', - type: 'keyword', - }, - 'service.ephemeral_id': { - category: 'service', - description: - 'Ephemeral identifier of this service (if one exists). This id normally changes across restarts, but `service.id` does not.', - example: '8a4f500f', - name: 'service.ephemeral_id', - type: 'keyword', - }, - 'service.id': { - category: 'service', - description: - 'Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead.', - example: 'd37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6', - name: 'service.id', - type: 'keyword', - }, - 'service.name': { - category: 'service', - description: - 'Name of the service data is collected from. The name of the service is normally user given. This allows for distributed services that run on multiple hosts to correlate the related instances based on the name. In the case of Elasticsearch the `service.name` could contain the cluster name. For Beats the `service.name` is by default a copy of the `service.type` field if no name is specified.', - example: 'elasticsearch-metrics', - name: 'service.name', - type: 'keyword', - }, - 'service.node.name': { - category: 'service', - description: - "Name of a service node. This allows for two nodes of the same service running on the same host to be differentiated. Therefore, `service.node.name` should typically be unique across nodes of a given service. In the case of Elasticsearch, the `service.node.name` could contain the unique node name within the Elasticsearch cluster. In cases where the service doesn't have the concept of a node name, the host name or container name can be used to distinguish running instances that make up this service. If those do not provide uniqueness (e.g. multiple instances of the service running on the same host) - the node name can be manually set.", - example: 'instance-0000000016', - name: 'service.node.name', - type: 'keyword', - }, - 'service.state': { - category: 'service', - description: 'Current state of the service.', - name: 'service.state', - type: 'keyword', - }, - 'service.type': { - category: 'service', - description: - 'The type of the service data is collected from. The type can be used to group and correlate logs and metrics from one service type. Example: If logs or metrics are collected from Elasticsearch, `service.type` would be `elasticsearch`.', - example: 'elasticsearch', - name: 'service.type', - type: 'keyword', - }, - 'service.version': { - category: 'service', - description: - 'Version of the service the data was collected from. This allows to look at a data set only for a specific version of a service.', - example: '3.2.4', - name: 'service.version', - type: 'keyword', - }, - 'source.address': { - category: 'source', - description: - 'Some event source addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. Then it should be duplicated to `.ip` or `.domain`, depending on which one it is.', - name: 'source.address', - type: 'keyword', - }, - 'source.as.number': { - category: 'source', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'source.as.number', - type: 'long', - }, - 'source.as.organization.name': { - category: 'source', - description: 'Organization name.', - example: 'Google LLC', - name: 'source.as.organization.name', - type: 'keyword', - }, - 'source.bytes': { - category: 'source', - description: 'Bytes sent from the source to the destination.', - example: 184, - name: 'source.bytes', - type: 'long', - format: 'bytes', - }, - 'source.domain': { - category: 'source', - description: 'Source domain.', - name: 'source.domain', - type: 'keyword', - }, - 'source.geo.city_name': { - category: 'source', - description: 'City name.', - example: 'Montreal', - name: 'source.geo.city_name', - type: 'keyword', - }, - 'source.geo.continent_code': { - category: 'source', - description: "Two-letter code representing continent's name.", - example: 'NA', - name: 'source.geo.continent_code', - type: 'keyword', - }, - 'source.geo.continent_name': { - category: 'source', - description: 'Name of the continent.', - example: 'North America', - name: 'source.geo.continent_name', - type: 'keyword', - }, - 'source.geo.country_iso_code': { - category: 'source', - description: 'Country ISO code.', - example: 'CA', - name: 'source.geo.country_iso_code', - type: 'keyword', - }, - 'source.geo.country_name': { - category: 'source', - description: 'Country name.', - example: 'Canada', - name: 'source.geo.country_name', - type: 'keyword', - }, - 'source.geo.location': { - category: 'source', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'source.geo.location', - type: 'geo_point', - }, - 'source.geo.name': { - category: 'source', - description: - 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', - example: 'boston-dc', - name: 'source.geo.name', - type: 'keyword', - }, - 'source.geo.postal_code': { - category: 'source', - description: - 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', - example: 94040, - name: 'source.geo.postal_code', - type: 'keyword', - }, - 'source.geo.region_iso_code': { - category: 'source', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'source.geo.region_iso_code', - type: 'keyword', - }, - 'source.geo.region_name': { - category: 'source', - description: 'Region name.', - example: 'Quebec', - name: 'source.geo.region_name', - type: 'keyword', - }, - 'source.geo.timezone': { - category: 'source', - description: 'The time zone of the location, such as IANA time zone name.', - example: 'America/Argentina/Buenos_Aires', - name: 'source.geo.timezone', - type: 'keyword', - }, - 'source.ip': { - category: 'source', - description: 'IP address of the source (IPv4 or IPv6).', - name: 'source.ip', - type: 'ip', - }, - 'source.mac': { - category: 'source', - description: - 'MAC address of the source. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', - example: '00-00-5E-00-53-23', - name: 'source.mac', - type: 'keyword', - }, - 'source.nat.ip': { - category: 'source', - description: - 'Translated ip of source based NAT sessions (e.g. internal client to internet) Typically connections traversing load balancers, firewalls, or routers.', - name: 'source.nat.ip', - type: 'ip', - }, - 'source.nat.port': { - category: 'source', - description: - 'Translated port of source based NAT sessions. (e.g. internal client to internet) Typically used with load balancers, firewalls, or routers.', - name: 'source.nat.port', - type: 'long', - format: 'string', - }, - 'source.packets': { - category: 'source', - description: 'Packets sent from the source to the destination.', - example: 12, - name: 'source.packets', - type: 'long', - }, - 'source.port': { - category: 'source', - description: 'Port of the source.', - name: 'source.port', - type: 'long', - format: 'string', - }, - 'source.registered_domain': { - category: 'source', - description: - 'The highest registered source domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'source.registered_domain', - type: 'keyword', - }, - 'source.subdomain': { - category: 'source', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'source.subdomain', - type: 'keyword', - }, - 'source.top_level_domain': { - category: 'source', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'source.top_level_domain', - type: 'keyword', - }, - 'source.user.domain': { - category: 'source', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'source.user.domain', - type: 'keyword', - }, - 'source.user.email': { - category: 'source', - description: 'User email address.', - name: 'source.user.email', - type: 'keyword', - }, - 'source.user.full_name': { - category: 'source', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'source.user.full_name', - type: 'keyword', - }, - 'source.user.group.domain': { - category: 'source', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'source.user.group.domain', - type: 'keyword', - }, - 'source.user.group.id': { - category: 'source', - description: 'Unique identifier for the group on the system/platform.', - name: 'source.user.group.id', - type: 'keyword', - }, - 'source.user.group.name': { - category: 'source', - description: 'Name of the group.', - name: 'source.user.group.name', - type: 'keyword', - }, - 'source.user.hash': { - category: 'source', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'source.user.hash', - type: 'keyword', - }, - 'source.user.id': { - category: 'source', - description: 'Unique identifier of the user.', - name: 'source.user.id', - type: 'keyword', - }, - 'source.user.name': { - category: 'source', - description: 'Short name or login of the user.', - example: 'albert', - name: 'source.user.name', - type: 'keyword', - }, - 'source.user.roles': { - category: 'source', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'source.user.roles', - type: 'keyword', - }, - 'threat.framework': { - category: 'threat', - description: - 'Name of the threat framework used to further categorize and classify the tactic and technique of the reported threat. Framework classification can be provided by detecting systems, evaluated at ingest time, or retrospectively tagged to events.', - example: 'MITRE ATT&CK', - name: 'threat.framework', - type: 'keyword', - }, - 'threat.tactic.id': { - category: 'threat', - description: - 'The id of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ )', - example: 'TA0002', - name: 'threat.tactic.id', - type: 'keyword', - }, - 'threat.tactic.name': { - category: 'threat', - description: - 'Name of the type of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/)', - example: 'Execution', - name: 'threat.tactic.name', - type: 'keyword', - }, - 'threat.tactic.reference': { - category: 'threat', - description: - 'The reference url of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ )', - example: 'https://attack.mitre.org/tactics/TA0002/', - name: 'threat.tactic.reference', - type: 'keyword', - }, - 'threat.technique.id': { - category: 'threat', - description: - 'The id of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)', - example: 'T1059', - name: 'threat.technique.id', - type: 'keyword', - }, - 'threat.technique.name': { - category: 'threat', - description: - 'The name of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)', - example: 'Command and Scripting Interpreter', - name: 'threat.technique.name', - type: 'keyword', - }, - 'threat.technique.reference': { - category: 'threat', - description: - 'The reference url of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)', - example: 'https://attack.mitre.org/techniques/T1059/', - name: 'threat.technique.reference', - type: 'keyword', - }, - 'threat.technique.subtechnique.id': { - category: 'threat', - description: - 'The full id of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)', - example: 'T1059.001', - name: 'threat.technique.subtechnique.id', - type: 'keyword', - }, - 'threat.technique.subtechnique.name': { - category: 'threat', - description: - 'The name of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)', - example: 'PowerShell', - name: 'threat.technique.subtechnique.name', - type: 'keyword', - }, - 'threat.technique.subtechnique.reference': { - category: 'threat', - description: - 'The reference url of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)', - example: 'https://attack.mitre.org/techniques/T1059/001/', - name: 'threat.technique.subtechnique.reference', - type: 'keyword', - }, - 'tls.cipher': { - category: 'tls', - description: 'String indicating the cipher used during the current connection.', - example: 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256', - name: 'tls.cipher', - type: 'keyword', - }, - 'tls.client.certificate': { - category: 'tls', - description: - 'PEM-encoded stand-alone certificate offered by the client. This is usually mutually-exclusive of `client.certificate_chain` since this value also exists in that list.', - example: 'MII...', - name: 'tls.client.certificate', - type: 'keyword', - }, - 'tls.client.certificate_chain': { - category: 'tls', - description: - 'Array of PEM-encoded certificates that make up the certificate chain offered by the client. This is usually mutually-exclusive of `client.certificate` since that value should be the first certificate in the chain.', - example: '["MII...", "MII..."]', - name: 'tls.client.certificate_chain', - type: 'keyword', - }, - 'tls.client.hash.md5': { - category: 'tls', - description: - 'Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC', - name: 'tls.client.hash.md5', - type: 'keyword', - }, - 'tls.client.hash.sha1': { - category: 'tls', - description: - 'Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '9E393D93138888D288266C2D915214D1D1CCEB2A', - name: 'tls.client.hash.sha1', - type: 'keyword', - }, - 'tls.client.hash.sha256': { - category: 'tls', - description: - 'Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0', - name: 'tls.client.hash.sha256', - type: 'keyword', - }, - 'tls.client.issuer': { - category: 'tls', - description: - 'Distinguished name of subject of the issuer of the x.509 certificate presented by the client.', - example: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com', - name: 'tls.client.issuer', - type: 'keyword', - }, - 'tls.client.ja3': { - category: 'tls', - description: 'A hash that identifies clients based on how they perform an SSL/TLS handshake.', - example: 'd4e5b18d6b55c71272893221c96ba240', - name: 'tls.client.ja3', - type: 'keyword', - }, - 'tls.client.not_after': { - category: 'tls', - description: 'Date/Time indicating when client certificate is no longer considered valid.', - example: '2021-01-01T00:00:00.000Z', - name: 'tls.client.not_after', - type: 'date', - }, - 'tls.client.not_before': { - category: 'tls', - description: 'Date/Time indicating when client certificate is first considered valid.', - example: '1970-01-01T00:00:00.000Z', - name: 'tls.client.not_before', - type: 'date', - }, - 'tls.client.server_name': { - category: 'tls', - description: - 'Also called an SNI, this tells the server which hostname to which the client is attempting to connect to. When this value is available, it should get copied to `destination.domain`.', - example: 'www.elastic.co', - name: 'tls.client.server_name', - type: 'keyword', - }, - 'tls.client.subject': { - category: 'tls', - description: 'Distinguished name of subject of the x.509 certificate presented by the client.', - example: 'CN=myclient, OU=Documentation Team, DC=example, DC=com', - name: 'tls.client.subject', - type: 'keyword', - }, - 'tls.client.supported_ciphers': { - category: 'tls', - description: 'Array of ciphers offered by the client during the client hello.', - example: - '["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "..."]', - name: 'tls.client.supported_ciphers', - type: 'keyword', - }, - 'tls.client.x509.alternative_names': { - category: 'tls', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'tls.client.x509.alternative_names', - type: 'keyword', - }, - 'tls.client.x509.issuer.common_name': { - category: 'tls', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'tls.client.x509.issuer.common_name', - type: 'keyword', - }, - 'tls.client.x509.issuer.country': { - category: 'tls', - description: 'List of country (C) codes', - example: 'US', - name: 'tls.client.x509.issuer.country', - type: 'keyword', - }, - 'tls.client.x509.issuer.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'tls.client.x509.issuer.distinguished_name', - type: 'keyword', - }, - 'tls.client.x509.issuer.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'tls.client.x509.issuer.locality', - type: 'keyword', - }, - 'tls.client.x509.issuer.organization': { - category: 'tls', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'tls.client.x509.issuer.organization', - type: 'keyword', - }, - 'tls.client.x509.issuer.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'tls.client.x509.issuer.organizational_unit', - type: 'keyword', - }, - 'tls.client.x509.issuer.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.client.x509.issuer.state_or_province', - type: 'keyword', - }, - 'tls.client.x509.not_after': { - category: 'tls', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'tls.client.x509.not_after', - type: 'date', - }, - 'tls.client.x509.not_before': { - category: 'tls', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'tls.client.x509.not_before', - type: 'date', - }, - 'tls.client.x509.public_key_algorithm': { - category: 'tls', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'tls.client.x509.public_key_algorithm', - type: 'keyword', - }, - 'tls.client.x509.public_key_curve': { - category: 'tls', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'tls.client.x509.public_key_curve', - type: 'keyword', - }, - 'tls.client.x509.public_key_exponent': { - category: 'tls', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'tls.client.x509.public_key_exponent', - type: 'long', - }, - 'tls.client.x509.public_key_size': { - category: 'tls', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'tls.client.x509.public_key_size', - type: 'long', - }, - 'tls.client.x509.serial_number': { - category: 'tls', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'tls.client.x509.serial_number', - type: 'keyword', - }, - 'tls.client.x509.signature_algorithm': { - category: 'tls', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'tls.client.x509.signature_algorithm', - type: 'keyword', - }, - 'tls.client.x509.subject.common_name': { - category: 'tls', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'tls.client.x509.subject.common_name', - type: 'keyword', - }, - 'tls.client.x509.subject.country': { - category: 'tls', - description: 'List of country (C) code', - example: 'US', - name: 'tls.client.x509.subject.country', - type: 'keyword', - }, - 'tls.client.x509.subject.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'tls.client.x509.subject.distinguished_name', - type: 'keyword', - }, - 'tls.client.x509.subject.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'tls.client.x509.subject.locality', - type: 'keyword', - }, - 'tls.client.x509.subject.organization': { - category: 'tls', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'tls.client.x509.subject.organization', - type: 'keyword', - }, - 'tls.client.x509.subject.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of subject.', - name: 'tls.client.x509.subject.organizational_unit', - type: 'keyword', - }, - 'tls.client.x509.subject.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.client.x509.subject.state_or_province', - type: 'keyword', - }, - 'tls.client.x509.version_number': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.client.x509.version_number', - type: 'keyword', - }, - 'tls.curve': { - category: 'tls', - description: 'String indicating the curve used for the given cipher, when applicable.', - example: 'secp256r1', - name: 'tls.curve', - type: 'keyword', - }, - 'tls.established': { - category: 'tls', - description: - 'Boolean flag indicating if the TLS negotiation was successful and transitioned to an encrypted tunnel.', - name: 'tls.established', - type: 'boolean', - }, - 'tls.next_protocol': { - category: 'tls', - description: - 'String indicating the protocol being tunneled. Per the values in the IANA registry (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), this string should be lower case.', - example: 'http/1.1', - name: 'tls.next_protocol', - type: 'keyword', - }, - 'tls.resumed': { - category: 'tls', - description: - 'Boolean flag indicating if this TLS connection was resumed from an existing TLS negotiation.', - name: 'tls.resumed', - type: 'boolean', - }, - 'tls.server.certificate': { - category: 'tls', - description: - 'PEM-encoded stand-alone certificate offered by the server. This is usually mutually-exclusive of `server.certificate_chain` since this value also exists in that list.', - example: 'MII...', - name: 'tls.server.certificate', - type: 'keyword', - }, - 'tls.server.certificate_chain': { - category: 'tls', - description: - 'Array of PEM-encoded certificates that make up the certificate chain offered by the server. This is usually mutually-exclusive of `server.certificate` since that value should be the first certificate in the chain.', - example: '["MII...", "MII..."]', - name: 'tls.server.certificate_chain', - type: 'keyword', - }, - 'tls.server.hash.md5': { - category: 'tls', - description: - 'Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC', - name: 'tls.server.hash.md5', - type: 'keyword', - }, - 'tls.server.hash.sha1': { - category: 'tls', - description: - 'Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '9E393D93138888D288266C2D915214D1D1CCEB2A', - name: 'tls.server.hash.sha1', - type: 'keyword', - }, - 'tls.server.hash.sha256': { - category: 'tls', - description: - 'Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0', - name: 'tls.server.hash.sha256', - type: 'keyword', - }, - 'tls.server.issuer': { - category: 'tls', - description: 'Subject of the issuer of the x.509 certificate presented by the server.', - example: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com', - name: 'tls.server.issuer', - type: 'keyword', - }, - 'tls.server.ja3s': { - category: 'tls', - description: 'A hash that identifies servers based on how they perform an SSL/TLS handshake.', - example: '394441ab65754e2207b1e1b457b3641d', - name: 'tls.server.ja3s', - type: 'keyword', - }, - 'tls.server.not_after': { - category: 'tls', - description: 'Timestamp indicating when server certificate is no longer considered valid.', - example: '2021-01-01T00:00:00.000Z', - name: 'tls.server.not_after', - type: 'date', - }, - 'tls.server.not_before': { - category: 'tls', - description: 'Timestamp indicating when server certificate is first considered valid.', - example: '1970-01-01T00:00:00.000Z', - name: 'tls.server.not_before', - type: 'date', - }, - 'tls.server.subject': { - category: 'tls', - description: 'Subject of the x.509 certificate presented by the server.', - example: 'CN=www.example.com, OU=Infrastructure Team, DC=example, DC=com', - name: 'tls.server.subject', - type: 'keyword', - }, - 'tls.server.x509.alternative_names': { - category: 'tls', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'tls.server.x509.alternative_names', - type: 'keyword', - }, - 'tls.server.x509.issuer.common_name': { - category: 'tls', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'tls.server.x509.issuer.common_name', - type: 'keyword', - }, - 'tls.server.x509.issuer.country': { - category: 'tls', - description: 'List of country (C) codes', - example: 'US', - name: 'tls.server.x509.issuer.country', - type: 'keyword', - }, - 'tls.server.x509.issuer.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'tls.server.x509.issuer.distinguished_name', - type: 'keyword', - }, - 'tls.server.x509.issuer.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'tls.server.x509.issuer.locality', - type: 'keyword', - }, - 'tls.server.x509.issuer.organization': { - category: 'tls', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'tls.server.x509.issuer.organization', - type: 'keyword', - }, - 'tls.server.x509.issuer.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'tls.server.x509.issuer.organizational_unit', - type: 'keyword', - }, - 'tls.server.x509.issuer.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.server.x509.issuer.state_or_province', - type: 'keyword', - }, - 'tls.server.x509.not_after': { - category: 'tls', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'tls.server.x509.not_after', - type: 'date', - }, - 'tls.server.x509.not_before': { - category: 'tls', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'tls.server.x509.not_before', - type: 'date', - }, - 'tls.server.x509.public_key_algorithm': { - category: 'tls', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'tls.server.x509.public_key_algorithm', - type: 'keyword', - }, - 'tls.server.x509.public_key_curve': { - category: 'tls', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'tls.server.x509.public_key_curve', - type: 'keyword', - }, - 'tls.server.x509.public_key_exponent': { - category: 'tls', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'tls.server.x509.public_key_exponent', - type: 'long', - }, - 'tls.server.x509.public_key_size': { - category: 'tls', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'tls.server.x509.public_key_size', - type: 'long', - }, - 'tls.server.x509.serial_number': { - category: 'tls', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'tls.server.x509.serial_number', - type: 'keyword', - }, - 'tls.server.x509.signature_algorithm': { - category: 'tls', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'tls.server.x509.signature_algorithm', - type: 'keyword', - }, - 'tls.server.x509.subject.common_name': { - category: 'tls', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'tls.server.x509.subject.common_name', - type: 'keyword', - }, - 'tls.server.x509.subject.country': { - category: 'tls', - description: 'List of country (C) code', - example: 'US', - name: 'tls.server.x509.subject.country', - type: 'keyword', - }, - 'tls.server.x509.subject.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'tls.server.x509.subject.distinguished_name', - type: 'keyword', - }, - 'tls.server.x509.subject.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'tls.server.x509.subject.locality', - type: 'keyword', - }, - 'tls.server.x509.subject.organization': { - category: 'tls', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'tls.server.x509.subject.organization', - type: 'keyword', - }, - 'tls.server.x509.subject.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of subject.', - name: 'tls.server.x509.subject.organizational_unit', - type: 'keyword', - }, - 'tls.server.x509.subject.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.server.x509.subject.state_or_province', - type: 'keyword', - }, - 'tls.server.x509.version_number': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.server.x509.version_number', - type: 'keyword', - }, - 'tls.version': { - category: 'tls', - description: 'Numeric part of the version parsed from the original string.', - example: '1.2', - name: 'tls.version', - type: 'keyword', - }, - 'tls.version_protocol': { - category: 'tls', - description: 'Normalized lowercase protocol name parsed from original string.', - example: 'tls', - name: 'tls.version_protocol', - type: 'keyword', - }, - 'span.id': { - category: 'span', - description: - 'Unique identifier of the span within the scope of its trace. A span represents an operation within a transaction, such as a request to another service, or a database query.', - example: '3ff9a8981b7ccd5a', - name: 'span.id', - type: 'keyword', - }, - 'trace.id': { - category: 'trace', - description: - 'Unique identifier of the trace. A trace groups multiple events like transactions that belong together. For example, a user request handled by multiple inter-connected services.', - example: '4bf92f3577b34da6a3ce929d0e0e4736', - name: 'trace.id', - type: 'keyword', - }, - 'transaction.id': { - category: 'transaction', - description: - 'Unique identifier of the transaction within the scope of its trace. A transaction is the highest level of work measured within a service, such as a request to a server.', - example: '00f067aa0ba902b7', - name: 'transaction.id', - type: 'keyword', - }, - 'url.domain': { - category: 'url', - description: - 'Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field.', - example: 'www.elastic.co', - name: 'url.domain', - type: 'keyword', - }, - 'url.extension': { - category: 'url', - description: - 'The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', - example: 'png', - name: 'url.extension', - type: 'keyword', - }, - 'url.fragment': { - category: 'url', - description: - 'Portion of the url after the `#`, such as "top". The `#` is not part of the fragment.', - name: 'url.fragment', - type: 'keyword', - }, - 'url.full': { - category: 'url', - description: - 'If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.', - example: 'https://www.elastic.co:443/search?q=elasticsearch#top', - name: 'url.full', - type: 'keyword', - }, - 'url.original': { - category: 'url', - description: - 'Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.', - example: 'https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch', - name: 'url.original', - type: 'keyword', - }, - 'url.password': { - category: 'url', - description: 'Password of the request.', - name: 'url.password', - type: 'keyword', - }, - 'url.path': { - category: 'url', - description: 'Path of the request, such as "/search".', - name: 'url.path', - type: 'keyword', - }, - 'url.port': { - category: 'url', - description: 'Port of the request, such as 443.', - example: 443, - name: 'url.port', - type: 'long', - format: 'string', - }, - 'url.query': { - category: 'url', - description: - 'The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.', - name: 'url.query', - type: 'keyword', - }, - 'url.registered_domain': { - category: 'url', - description: - 'The highest registered url domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'example.com', - name: 'url.registered_domain', - type: 'keyword', - }, - 'url.scheme': { - category: 'url', - description: 'Scheme of the request, such as "https". Note: The `:` is not part of the scheme.', - example: 'https', - name: 'url.scheme', - type: 'keyword', - }, - 'url.subdomain': { - category: 'url', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', - example: 'east', - name: 'url.subdomain', - type: 'keyword', - }, - 'url.top_level_domain': { - category: 'url', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'url.top_level_domain', - type: 'keyword', - }, - 'url.username': { - category: 'url', - description: 'Username of the request.', - name: 'url.username', - type: 'keyword', - }, - 'user.changes.domain': { - category: 'user', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.changes.domain', - type: 'keyword', - }, - 'user.changes.email': { - category: 'user', - description: 'User email address.', - name: 'user.changes.email', - type: 'keyword', - }, - 'user.changes.full_name': { - category: 'user', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'user.changes.full_name', - type: 'keyword', - }, - 'user.changes.group.domain': { - category: 'user', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.changes.group.domain', - type: 'keyword', - }, - 'user.changes.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform.', - name: 'user.changes.group.id', - type: 'keyword', - }, - 'user.changes.group.name': { - category: 'user', - description: 'Name of the group.', - name: 'user.changes.group.name', - type: 'keyword', - }, - 'user.changes.hash': { - category: 'user', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'user.changes.hash', - type: 'keyword', - }, - 'user.changes.id': { - category: 'user', - description: 'Unique identifier of the user.', - name: 'user.changes.id', - type: 'keyword', - }, - 'user.changes.name': { - category: 'user', - description: 'Short name or login of the user.', - example: 'albert', - name: 'user.changes.name', - type: 'keyword', - }, - 'user.changes.roles': { - category: 'user', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'user.changes.roles', - type: 'keyword', - }, - 'user.domain': { - category: 'user', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.domain', - type: 'keyword', - }, - 'user.effective.domain': { - category: 'user', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.effective.domain', - type: 'keyword', - }, - 'user.effective.email': { - category: 'user', - description: 'User email address.', - name: 'user.effective.email', - type: 'keyword', - }, - 'user.effective.full_name': { - category: 'user', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'user.effective.full_name', - type: 'keyword', - }, - 'user.effective.group.domain': { - category: 'user', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.effective.group.domain', - type: 'keyword', - }, - 'user.effective.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform.', - name: 'user.effective.group.id', - type: 'keyword', - }, - 'user.effective.group.name': { - category: 'user', - description: 'Name of the group.', - name: 'user.effective.group.name', - type: 'keyword', - }, - 'user.effective.hash': { - category: 'user', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'user.effective.hash', - type: 'keyword', - }, - 'user.effective.id': { - category: 'user', - description: 'Unique identifier of the user.', - name: 'user.effective.id', - type: 'keyword', - }, - 'user.effective.name': { - category: 'user', - description: 'Short name or login of the user.', - example: 'albert', - name: 'user.effective.name', - type: 'keyword', - }, - 'user.effective.roles': { - category: 'user', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'user.effective.roles', - type: 'keyword', - }, - 'user.email': { - category: 'user', - description: 'User email address.', - name: 'user.email', - type: 'keyword', - }, - 'user.full_name': { - category: 'user', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'user.full_name', - type: 'keyword', - }, - 'user.group.domain': { - category: 'user', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.group.domain', - type: 'keyword', - }, - 'user.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform.', - name: 'user.group.id', - type: 'keyword', - }, - 'user.group.name': { - category: 'user', - description: 'Name of the group.', - name: 'user.group.name', - type: 'keyword', - }, - 'user.hash': { - category: 'user', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'user.hash', - type: 'keyword', - }, - 'user.id': { - category: 'user', - description: 'Unique identifier of the user.', - name: 'user.id', - type: 'keyword', - }, - 'user.name': { - category: 'user', - description: 'Short name or login of the user.', - example: 'albert', - name: 'user.name', - type: 'keyword', - }, - 'user.roles': { - category: 'user', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'user.roles', - type: 'keyword', - }, - 'user.target.domain': { - category: 'user', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.target.domain', - type: 'keyword', - }, - 'user.target.email': { - category: 'user', - description: 'User email address.', - name: 'user.target.email', - type: 'keyword', - }, - 'user.target.full_name': { - category: 'user', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'user.target.full_name', - type: 'keyword', - }, - 'user.target.group.domain': { - category: 'user', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.target.group.domain', - type: 'keyword', - }, - 'user.target.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform.', - name: 'user.target.group.id', - type: 'keyword', - }, - 'user.target.group.name': { - category: 'user', - description: 'Name of the group.', - name: 'user.target.group.name', - type: 'keyword', - }, - 'user.target.hash': { - category: 'user', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'user.target.hash', - type: 'keyword', - }, - 'user.target.id': { - category: 'user', - description: 'Unique identifier of the user.', - name: 'user.target.id', - type: 'keyword', - }, - 'user.target.name': { - category: 'user', - description: 'Short name or login of the user.', - example: 'albert', - name: 'user.target.name', - type: 'keyword', - }, - 'user.target.roles': { - category: 'user', - description: 'Array of user roles at the time of the event.', - example: '["kibana_admin", "reporting_user"]', - name: 'user.target.roles', - type: 'keyword', - }, - 'user_agent.device.name': { - category: 'user_agent', - description: 'Name of the device.', - example: 'iPhone', - name: 'user_agent.device.name', - type: 'keyword', - }, - 'user_agent.name': { - category: 'user_agent', - description: 'Name of the user agent.', - example: 'Safari', - name: 'user_agent.name', - type: 'keyword', - }, - 'user_agent.original': { - category: 'user_agent', - description: 'Unparsed user_agent string.', - example: - 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1', - name: 'user_agent.original', - type: 'keyword', - }, - 'user_agent.os.family': { - category: 'user_agent', - description: 'OS family (such as redhat, debian, freebsd, windows).', - example: 'debian', - name: 'user_agent.os.family', - type: 'keyword', - }, - 'user_agent.os.full': { - category: 'user_agent', - description: 'Operating system name, including the version or code name.', - example: 'Mac OS Mojave', - name: 'user_agent.os.full', - type: 'keyword', - }, - 'user_agent.os.kernel': { - category: 'user_agent', - description: 'Operating system kernel version as a raw string.', - example: '4.4.0-112-generic', - name: 'user_agent.os.kernel', - type: 'keyword', - }, - 'user_agent.os.name': { - category: 'user_agent', - description: 'Operating system name, without the version.', - example: 'Mac OS X', - name: 'user_agent.os.name', - type: 'keyword', - }, - 'user_agent.os.platform': { - category: 'user_agent', - description: 'Operating system platform (such centos, ubuntu, windows).', - example: 'darwin', - name: 'user_agent.os.platform', - type: 'keyword', - }, - 'user_agent.os.type': { - category: 'user_agent', - description: - "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", - example: 'macos', - name: 'user_agent.os.type', - type: 'keyword', - }, - 'user_agent.os.version': { - category: 'user_agent', - description: 'Operating system version as a raw string.', - example: '10.14.1', - name: 'user_agent.os.version', - type: 'keyword', - }, - 'user_agent.version': { - category: 'user_agent', - description: 'Version of the user agent.', - example: 12, - name: 'user_agent.version', - type: 'keyword', - }, - 'vlan.id': { - category: 'vlan', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'vlan.id', - type: 'keyword', - }, - 'vlan.name': { - category: 'vlan', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'vlan.name', - type: 'keyword', - }, - 'vulnerability.category': { - category: 'vulnerability', - description: - 'The type of system or architecture that the vulnerability affects. These may be platform-specific (for example, Debian or SUSE) or general (for example, Database or Firewall). For example (https://qualysguard.qualys.com/qwebhelp/fo_portal/knowledgebase/vulnerability_categories.htm[Qualys vulnerability categories]) This field must be an array.', - example: '["Firewall"]', - name: 'vulnerability.category', - type: 'keyword', - }, - 'vulnerability.classification': { - category: 'vulnerability', - description: - 'The classification of the vulnerability scoring system. For example (https://www.first.org/cvss/)', - example: 'CVSS', - name: 'vulnerability.classification', - type: 'keyword', - }, - 'vulnerability.description': { - category: 'vulnerability', - description: - 'The description of the vulnerability that provides additional context of the vulnerability. For example (https://cve.mitre.org/about/faqs.html#cve_entry_descriptions_created[Common Vulnerabilities and Exposure CVE description])', - example: 'In macOS before 2.12.6, there is a vulnerability in the RPC...', - name: 'vulnerability.description', - type: 'keyword', - }, - 'vulnerability.enumeration': { - category: 'vulnerability', - description: - 'The type of identifier used for this vulnerability. For example (https://cve.mitre.org/about/)', - example: 'CVE', - name: 'vulnerability.enumeration', - type: 'keyword', - }, - 'vulnerability.id': { - category: 'vulnerability', - description: - 'The identification (ID) is the number portion of a vulnerability entry. It includes a unique identification number for the vulnerability. For example (https://cve.mitre.org/about/faqs.html#what_is_cve_id)[Common Vulnerabilities and Exposure CVE ID]', - example: 'CVE-2019-00001', - name: 'vulnerability.id', - type: 'keyword', - }, - 'vulnerability.reference': { - category: 'vulnerability', - description: - 'A resource that provides additional information, context, and mitigations for the identified vulnerability.', - example: 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6111', - name: 'vulnerability.reference', - type: 'keyword', - }, - 'vulnerability.report_id': { - category: 'vulnerability', - description: 'The report or scan identification number.', - example: 20191018.0001, - name: 'vulnerability.report_id', - type: 'keyword', - }, - 'vulnerability.scanner.vendor': { - category: 'vulnerability', - description: 'The name of the vulnerability scanner vendor.', - example: 'Tenable', - name: 'vulnerability.scanner.vendor', - type: 'keyword', - }, - 'vulnerability.score.base': { - category: 'vulnerability', - description: - 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Base scores cover an assessment for exploitability metrics (attack vector, complexity, privileges, and user interaction), impact metrics (confidentiality, integrity, and availability), and scope. For example (https://www.first.org/cvss/specification-document)', - example: 5.5, - name: 'vulnerability.score.base', - type: 'float', - }, - 'vulnerability.score.environmental': { - category: 'vulnerability', - description: - 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Environmental scores cover an assessment for any modified Base metrics, confidentiality, integrity, and availability requirements. For example (https://www.first.org/cvss/specification-document)', - example: 5.5, - name: 'vulnerability.score.environmental', - type: 'float', - }, - 'vulnerability.score.temporal': { - category: 'vulnerability', - description: - 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Temporal scores cover an assessment for code maturity, remediation level, and confidence. For example (https://www.first.org/cvss/specification-document)', - name: 'vulnerability.score.temporal', - type: 'float', - }, - 'vulnerability.score.version': { - category: 'vulnerability', - description: - 'The National Vulnerability Database (NVD) provides qualitative severity rankings of "Low", "Medium", and "High" for CVSS v2.0 base score ranges in addition to the severity ratings for CVSS v3.0 as they are defined in the CVSS v3.0 specification. CVSS is owned and managed by FIRST.Org, Inc. (FIRST), a US-based non-profit organization, whose mission is to help computer security incident response teams across the world. For example (https://nvd.nist.gov/vuln-metrics/cvss)', - example: 2, - name: 'vulnerability.score.version', - type: 'keyword', - }, - 'vulnerability.severity': { - category: 'vulnerability', - description: - 'The severity of the vulnerability can help with metrics and internal prioritization regarding remediation. For example (https://nvd.nist.gov/vuln-metrics/cvss)', - example: 'Critical', - name: 'vulnerability.severity', - type: 'keyword', - }, - 'x509.alternative_names': { - category: 'x509', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'x509.alternative_names', - type: 'keyword', - }, - 'x509.issuer.common_name': { - category: 'x509', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'Example SHA2 High Assurance Server CA', - name: 'x509.issuer.common_name', - type: 'keyword', - }, - 'x509.issuer.country': { - category: 'x509', - description: 'List of country (C) codes', - example: 'US', - name: 'x509.issuer.country', - type: 'keyword', - }, - 'x509.issuer.distinguished_name': { - category: 'x509', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'x509.issuer.distinguished_name', - type: 'keyword', - }, - 'x509.issuer.locality': { - category: 'x509', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'x509.issuer.locality', - type: 'keyword', - }, - 'x509.issuer.organization': { - category: 'x509', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'Example Inc', - name: 'x509.issuer.organization', - type: 'keyword', - }, - 'x509.issuer.organizational_unit': { - category: 'x509', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.example.com', - name: 'x509.issuer.organizational_unit', - type: 'keyword', - }, - 'x509.issuer.state_or_province': { - category: 'x509', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'x509.issuer.state_or_province', - type: 'keyword', - }, - 'x509.not_after': { - category: 'x509', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'x509.not_after', - type: 'date', - }, - 'x509.not_before': { - category: 'x509', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'x509.not_before', - type: 'date', - }, - 'x509.public_key_algorithm': { - category: 'x509', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'x509.public_key_algorithm', - type: 'keyword', - }, - 'x509.public_key_curve': { - category: 'x509', - description: - 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', - example: 'nistp521', - name: 'x509.public_key_curve', - type: 'keyword', - }, - 'x509.public_key_exponent': { - category: 'x509', - description: 'Exponent used to derive the public key. This is algorithm specific.', - example: 65537, - name: 'x509.public_key_exponent', - type: 'long', - }, - 'x509.public_key_size': { - category: 'x509', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'x509.public_key_size', - type: 'long', - }, - 'x509.serial_number': { - category: 'x509', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'x509.serial_number', - type: 'keyword', - }, - 'x509.signature_algorithm': { - category: 'x509', - description: - 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', - example: 'SHA256-RSA', - name: 'x509.signature_algorithm', - type: 'keyword', - }, - 'x509.subject.common_name': { - category: 'x509', - description: 'List of common names (CN) of subject.', - example: 'shared.global.example.net', - name: 'x509.subject.common_name', - type: 'keyword', - }, - 'x509.subject.country': { - category: 'x509', - description: 'List of country (C) code', - example: 'US', - name: 'x509.subject.country', - type: 'keyword', - }, - 'x509.subject.distinguished_name': { - category: 'x509', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'x509.subject.distinguished_name', - type: 'keyword', - }, - 'x509.subject.locality': { - category: 'x509', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'x509.subject.locality', - type: 'keyword', - }, - 'x509.subject.organization': { - category: 'x509', - description: 'List of organizations (O) of subject.', - example: 'Example, Inc.', - name: 'x509.subject.organization', - type: 'keyword', - }, - 'x509.subject.organizational_unit': { - category: 'x509', - description: 'List of organizational units (OU) of subject.', - name: 'x509.subject.organizational_unit', - type: 'keyword', - }, - 'x509.subject.state_or_province': { - category: 'x509', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'x509.subject.state_or_province', - type: 'keyword', - }, - 'x509.version_number': { - category: 'x509', - description: 'Version of x509 format.', - example: 3, - name: 'x509.version_number', - type: 'keyword', - }, - 'agent.hostname': { - category: 'agent', - description: - 'Deprecated - use agent.name or agent.id to identify an agent. Hostname of the agent. ', - name: 'agent.hostname', - type: 'keyword', - }, - 'beat.timezone': { - category: 'beat', - name: 'beat.timezone', - type: 'alias', - }, - fields: { - category: 'base', - description: 'Contains user configurable fields. ', - name: 'fields', - type: 'object', - }, - 'beat.name': { - category: 'beat', - name: 'beat.name', - type: 'alias', - }, - 'beat.hostname': { - category: 'beat', - name: 'beat.hostname', - type: 'alias', - }, - 'timeseries.instance': { - category: 'timeseries', - description: 'Time series instance id', - name: 'timeseries.instance', - type: 'keyword', - }, - 'cloud.image.id': { - category: 'cloud', - description: 'Image ID for the cloud instance. ', - example: 'ami-abcd1234', - name: 'cloud.image.id', - }, - 'meta.cloud.provider': { - category: 'meta', - name: 'meta.cloud.provider', - type: 'alias', - }, - 'meta.cloud.instance_id': { - category: 'meta', - name: 'meta.cloud.instance_id', - type: 'alias', - }, - 'meta.cloud.instance_name': { - category: 'meta', - name: 'meta.cloud.instance_name', - type: 'alias', - }, - 'meta.cloud.machine_type': { - category: 'meta', - name: 'meta.cloud.machine_type', - type: 'alias', - }, - 'meta.cloud.availability_zone': { - category: 'meta', - name: 'meta.cloud.availability_zone', - type: 'alias', - }, - 'meta.cloud.project_id': { - category: 'meta', - name: 'meta.cloud.project_id', - type: 'alias', - }, - 'meta.cloud.region': { - category: 'meta', - name: 'meta.cloud.region', - type: 'alias', - }, - 'docker.container.id': { - category: 'docker', - name: 'docker.container.id', - type: 'alias', - }, - 'docker.container.image': { - category: 'docker', - name: 'docker.container.image', - type: 'alias', - }, - 'docker.container.name': { - category: 'docker', - name: 'docker.container.name', - type: 'alias', - }, - 'docker.container.labels': { - category: 'docker', - description: 'Image labels. ', - name: 'docker.container.labels', - type: 'object', - }, - 'host.containerized': { - category: 'host', - description: 'If the host is a container. ', - name: 'host.containerized', - type: 'boolean', - }, - 'host.os.build': { - category: 'host', - description: 'OS build information. ', - example: '18D109', - name: 'host.os.build', - type: 'keyword', - }, - 'host.os.codename': { - category: 'host', - description: 'OS codename, if any. ', - example: 'stretch', - name: 'host.os.codename', - type: 'keyword', - }, - 'kubernetes.pod.name': { - category: 'kubernetes', - description: 'Kubernetes pod name ', - name: 'kubernetes.pod.name', - type: 'keyword', - }, - 'kubernetes.pod.uid': { - category: 'kubernetes', - description: 'Kubernetes Pod UID ', - name: 'kubernetes.pod.uid', - type: 'keyword', - }, - 'kubernetes.pod.ip': { - category: 'kubernetes', - description: 'Kubernetes Pod IP ', - name: 'kubernetes.pod.ip', - type: 'ip', - }, - 'kubernetes.namespace': { - category: 'kubernetes', - description: 'Kubernetes namespace ', - name: 'kubernetes.namespace', - type: 'keyword', - }, - 'kubernetes.node.name': { - category: 'kubernetes', - description: 'Kubernetes node name ', - name: 'kubernetes.node.name', - type: 'keyword', - }, - 'kubernetes.node.hostname': { - category: 'kubernetes', - description: 'Kubernetes hostname as reported by the node’s kernel ', - name: 'kubernetes.node.hostname', - type: 'keyword', - }, - 'kubernetes.labels.*': { - category: 'kubernetes', - description: 'Kubernetes labels map ', - name: 'kubernetes.labels.*', - type: 'object', - }, - 'kubernetes.annotations.*': { - category: 'kubernetes', - description: 'Kubernetes annotations map ', - name: 'kubernetes.annotations.*', - type: 'object', - }, - 'kubernetes.selectors.*': { - category: 'kubernetes', - description: 'Kubernetes selectors map ', - name: 'kubernetes.selectors.*', - type: 'object', - }, - 'kubernetes.replicaset.name': { - category: 'kubernetes', - description: 'Kubernetes replicaset name ', - name: 'kubernetes.replicaset.name', - type: 'keyword', - }, - 'kubernetes.deployment.name': { - category: 'kubernetes', - description: 'Kubernetes deployment name ', - name: 'kubernetes.deployment.name', - type: 'keyword', - }, - 'kubernetes.statefulset.name': { - category: 'kubernetes', - description: 'Kubernetes statefulset name ', - name: 'kubernetes.statefulset.name', - type: 'keyword', - }, - 'kubernetes.container.name': { - category: 'kubernetes', - description: 'Kubernetes container name (different than the name from the runtime) ', - name: 'kubernetes.container.name', - type: 'keyword', - }, - 'kubernetes.container.image': { - category: 'kubernetes', - description: 'Kubernetes container image ', - name: 'kubernetes.container.image', - type: 'alias', - }, - 'process.exe': { - category: 'process', - name: 'process.exe', - type: 'alias', - }, - 'jolokia.agent.version': { - category: 'jolokia', - description: 'Version number of jolokia agent. ', - name: 'jolokia.agent.version', - type: 'keyword', - }, - 'jolokia.agent.id': { - category: 'jolokia', - description: - 'Each agent has a unique id which can be either provided during startup of the agent in form of a configuration parameter or being autodetected. If autodected, the id has several parts: The IP, the process id, hashcode of the agent and its type. ', - name: 'jolokia.agent.id', - type: 'keyword', - }, - 'jolokia.server.product': { - category: 'jolokia', - description: 'The container product if detected. ', - name: 'jolokia.server.product', - type: 'keyword', - }, - 'jolokia.server.version': { - category: 'jolokia', - description: "The container's version (if detected). ", - name: 'jolokia.server.version', - type: 'keyword', - }, - 'jolokia.server.vendor': { - category: 'jolokia', - description: 'The vendor of the container the agent is running in. ', - name: 'jolokia.server.vendor', - type: 'keyword', - }, - 'jolokia.url': { - category: 'jolokia', - description: 'The URL how this agent can be contacted. ', - name: 'jolokia.url', - type: 'keyword', - }, - 'jolokia.secured': { - category: 'jolokia', - description: 'Whether the agent was configured for authentication or not. ', - name: 'jolokia.secured', - type: 'boolean', - }, - 'file.setuid': { - category: 'file', - description: 'Set if the file has the `setuid` bit set. Omitted otherwise.', - example: 'true', - name: 'file.setuid', - type: 'boolean', - }, - 'file.setgid': { - category: 'file', - description: 'Set if the file has the `setgid` bit set. Omitted otherwise.', - example: 'true', - name: 'file.setgid', - type: 'boolean', - }, - 'file.origin': { - category: 'file', - description: - 'An array of strings describing a possible external origin for this file. For example, the URL it was downloaded from. Only supported in macOS, via the kMDItemWhereFroms attribute. Omitted if origin information is not available. ', - name: 'file.origin', - type: 'keyword', - }, - 'file.selinux.user': { - category: 'file', - description: 'The owner of the object.', - name: 'file.selinux.user', - type: 'keyword', - }, - 'file.selinux.role': { - category: 'file', - description: "The object's SELinux role.", - name: 'file.selinux.role', - type: 'keyword', - }, - 'file.selinux.domain': { - category: 'file', - description: "The object's SELinux domain or type.", - name: 'file.selinux.domain', - type: 'keyword', - }, - 'file.selinux.level': { - category: 'file', - description: "The object's SELinux level.", - example: 's0', - name: 'file.selinux.level', - type: 'keyword', - }, - 'user.audit.id': { - category: 'user', - description: 'Audit user ID.', - name: 'user.audit.id', - type: 'keyword', - }, - 'user.audit.name': { - category: 'user', - description: 'Audit user name.', - name: 'user.audit.name', - type: 'keyword', - }, - 'user.filesystem.id': { - category: 'user', - description: 'Filesystem user ID.', - name: 'user.filesystem.id', - type: 'keyword', - }, - 'user.filesystem.name': { - category: 'user', - description: 'Filesystem user name.', - name: 'user.filesystem.name', - type: 'keyword', - }, - 'user.filesystem.group.id': { - category: 'user', - description: 'Filesystem group ID.', - name: 'user.filesystem.group.id', - type: 'keyword', - }, - 'user.filesystem.group.name': { - category: 'user', - description: 'Filesystem group name.', - name: 'user.filesystem.group.name', - type: 'keyword', - }, - 'user.saved.id': { - category: 'user', - description: 'Saved user ID.', - name: 'user.saved.id', - type: 'keyword', - }, - 'user.saved.name': { - category: 'user', - description: 'Saved user name.', - name: 'user.saved.name', - type: 'keyword', - }, - 'user.saved.group.id': { - category: 'user', - description: 'Saved group ID.', - name: 'user.saved.group.id', - type: 'keyword', - }, - 'user.saved.group.name': { - category: 'user', - description: 'Saved group name.', - name: 'user.saved.group.name', - type: 'keyword', - }, - 'user.auid': { - category: 'user', - name: 'user.auid', - type: 'alias', - }, - 'user.uid': { - category: 'user', - name: 'user.uid', - type: 'alias', - }, - 'user.fsuid': { - category: 'user', - name: 'user.fsuid', - type: 'alias', - }, - 'user.suid': { - category: 'user', - name: 'user.suid', - type: 'alias', - }, - 'user.gid': { - category: 'user', - name: 'user.gid', - type: 'alias', - }, - 'user.sgid': { - category: 'user', - name: 'user.sgid', - type: 'alias', - }, - 'user.fsgid': { - category: 'user', - name: 'user.fsgid', - type: 'alias', - }, - 'user.name_map.auid': { - category: 'user', - name: 'user.name_map.auid', - type: 'alias', - }, - 'user.name_map.uid': { - category: 'user', - name: 'user.name_map.uid', - type: 'alias', - }, - 'user.name_map.fsuid': { - category: 'user', - name: 'user.name_map.fsuid', - type: 'alias', - }, - 'user.name_map.suid': { - category: 'user', - name: 'user.name_map.suid', - type: 'alias', - }, - 'user.name_map.gid': { - category: 'user', - name: 'user.name_map.gid', - type: 'alias', - }, - 'user.name_map.sgid': { - category: 'user', - name: 'user.name_map.sgid', - type: 'alias', - }, - 'user.name_map.fsgid': { - category: 'user', - name: 'user.name_map.fsgid', - type: 'alias', - }, - 'user.selinux.user': { - category: 'user', - description: 'account submitted for authentication', - name: 'user.selinux.user', - type: 'keyword', - }, - 'user.selinux.role': { - category: 'user', - description: "user's SELinux role", - name: 'user.selinux.role', - type: 'keyword', - }, - 'user.selinux.domain': { - category: 'user', - description: "The actor's SELinux domain or type.", - name: 'user.selinux.domain', - type: 'keyword', - }, - 'user.selinux.level': { - category: 'user', - description: "The actor's SELinux level.", - example: 's0', - name: 'user.selinux.level', - type: 'keyword', - }, - 'user.selinux.category': { - category: 'user', - description: "The actor's SELinux category or compartments.", - name: 'user.selinux.category', - type: 'keyword', - }, - 'process.cwd': { - category: 'process', - description: 'The current working directory.', - name: 'process.cwd', - type: 'alias', - }, - 'source.path': { - category: 'source', - description: 'This is the path associated with a unix socket.', - name: 'source.path', - type: 'keyword', - }, - 'destination.path': { - category: 'destination', - description: 'This is the path associated with a unix socket.', - name: 'destination.path', - type: 'keyword', - }, - 'auditd.message_type': { - category: 'auditd', - description: 'The audit message type (e.g. syscall or apparmor_denied). ', - example: 'syscall', - name: 'auditd.message_type', - type: 'keyword', - }, - 'auditd.sequence': { - category: 'auditd', - description: - 'The sequence number of the event as assigned by the kernel. Sequence numbers are stored as a uint32 in the kernel and can rollover. ', - name: 'auditd.sequence', - type: 'long', - }, - 'auditd.session': { - category: 'auditd', - description: - 'The session ID assigned to a login. All events related to a login session will have the same value. ', - name: 'auditd.session', - type: 'keyword', - }, - 'auditd.result': { - category: 'auditd', - description: 'The result of the audited operation (success/fail).', - example: 'success or fail', - name: 'auditd.result', - type: 'keyword', - }, - 'auditd.summary.actor.primary': { - category: 'auditd', - description: - "The primary identity of the actor. This is the actor's original login ID. It will not change even if the user changes to another account. ", - name: 'auditd.summary.actor.primary', - type: 'keyword', - }, - 'auditd.summary.actor.secondary': { - category: 'auditd', - description: - 'The secondary identity of the actor. This is typically the same as the primary, except for when the user has used `su`.', - name: 'auditd.summary.actor.secondary', - type: 'keyword', - }, - 'auditd.summary.object.type': { - category: 'auditd', - description: 'A description of the what the "thing" is (e.g. file, socket, user-session). ', - name: 'auditd.summary.object.type', - type: 'keyword', - }, - 'auditd.summary.object.primary': { - category: 'auditd', - description: '', - name: 'auditd.summary.object.primary', - type: 'keyword', - }, - 'auditd.summary.object.secondary': { - category: 'auditd', - description: '', - name: 'auditd.summary.object.secondary', - type: 'keyword', - }, - 'auditd.summary.how': { - category: 'auditd', - description: - 'This describes how the action was performed. Usually this is the exe or command that was being executed that triggered the event. ', - name: 'auditd.summary.how', - type: 'keyword', - }, - 'auditd.paths.inode': { - category: 'auditd', - description: 'inode number', - name: 'auditd.paths.inode', - type: 'keyword', - }, - 'auditd.paths.dev': { - category: 'auditd', - description: 'device name as found in /dev', - name: 'auditd.paths.dev', - type: 'keyword', - }, - 'auditd.paths.obj_user': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_user', - type: 'keyword', - }, - 'auditd.paths.obj_role': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_role', - type: 'keyword', - }, - 'auditd.paths.obj_domain': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_domain', - type: 'keyword', - }, - 'auditd.paths.obj_level': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_level', - type: 'keyword', - }, - 'auditd.paths.objtype': { - category: 'auditd', - description: '', - name: 'auditd.paths.objtype', - type: 'keyword', - }, - 'auditd.paths.ouid': { - category: 'auditd', - description: 'file owner user ID', - name: 'auditd.paths.ouid', - type: 'keyword', - }, - 'auditd.paths.rdev': { - category: 'auditd', - description: 'the device identifier (special files only)', - name: 'auditd.paths.rdev', - type: 'keyword', - }, - 'auditd.paths.nametype': { - category: 'auditd', - description: 'kind of file operation being referenced', - name: 'auditd.paths.nametype', - type: 'keyword', - }, - 'auditd.paths.ogid': { - category: 'auditd', - description: 'file owner group ID', - name: 'auditd.paths.ogid', - type: 'keyword', - }, - 'auditd.paths.item': { - category: 'auditd', - description: 'which item is being recorded', - name: 'auditd.paths.item', - type: 'keyword', - }, - 'auditd.paths.mode': { - category: 'auditd', - description: 'mode flags on a file', - name: 'auditd.paths.mode', - type: 'keyword', - }, - 'auditd.paths.name': { - category: 'auditd', - description: 'file name in avcs', - name: 'auditd.paths.name', - type: 'keyword', - }, - 'auditd.data.action': { - category: 'auditd', - description: 'netfilter packet disposition', - name: 'auditd.data.action', - type: 'keyword', - }, - 'auditd.data.minor': { - category: 'auditd', - description: 'device minor number', - name: 'auditd.data.minor', - type: 'keyword', - }, - 'auditd.data.acct': { - category: 'auditd', - description: "a user's account name", - name: 'auditd.data.acct', - type: 'keyword', - }, - 'auditd.data.addr': { - category: 'auditd', - description: 'the remote address that the user is connecting from', - name: 'auditd.data.addr', - type: 'keyword', - }, - 'auditd.data.cipher': { - category: 'auditd', - description: 'name of crypto cipher selected', - name: 'auditd.data.cipher', - type: 'keyword', - }, - 'auditd.data.id': { - category: 'auditd', - description: 'during account changes', - name: 'auditd.data.id', - type: 'keyword', - }, - 'auditd.data.entries': { - category: 'auditd', - description: 'number of entries in the netfilter table', - name: 'auditd.data.entries', - type: 'keyword', - }, - 'auditd.data.kind': { - category: 'auditd', - description: 'server or client in crypto operation', - name: 'auditd.data.kind', - type: 'keyword', - }, - 'auditd.data.ksize': { - category: 'auditd', - description: 'key size for crypto operation', - name: 'auditd.data.ksize', - type: 'keyword', - }, - 'auditd.data.spid': { - category: 'auditd', - description: 'sent process ID', - name: 'auditd.data.spid', - type: 'keyword', - }, - 'auditd.data.arch': { - category: 'auditd', - description: 'the elf architecture flags', - name: 'auditd.data.arch', - type: 'keyword', - }, - 'auditd.data.argc': { - category: 'auditd', - description: 'the number of arguments to an execve syscall', - name: 'auditd.data.argc', - type: 'keyword', - }, - 'auditd.data.major': { - category: 'auditd', - description: 'device major number', - name: 'auditd.data.major', - type: 'keyword', - }, - 'auditd.data.unit': { - category: 'auditd', - description: 'systemd unit', - name: 'auditd.data.unit', - type: 'keyword', - }, - 'auditd.data.table': { - category: 'auditd', - description: 'netfilter table name', - name: 'auditd.data.table', - type: 'keyword', - }, - 'auditd.data.terminal': { - category: 'auditd', - description: 'terminal name the user is running programs on', - name: 'auditd.data.terminal', - type: 'keyword', - }, - 'auditd.data.grantors': { - category: 'auditd', - description: 'pam modules approving the action', - name: 'auditd.data.grantors', - type: 'keyword', - }, - 'auditd.data.direction': { - category: 'auditd', - description: 'direction of crypto operation', - name: 'auditd.data.direction', - type: 'keyword', - }, - 'auditd.data.op': { - category: 'auditd', - description: 'the operation being performed that is audited', - name: 'auditd.data.op', - type: 'keyword', - }, - 'auditd.data.tty': { - category: 'auditd', - description: 'tty udevice the user is running programs on', - name: 'auditd.data.tty', - type: 'keyword', - }, - 'auditd.data.syscall': { - category: 'auditd', - description: 'syscall number in effect when the event occurred', - name: 'auditd.data.syscall', - type: 'keyword', - }, - 'auditd.data.data': { - category: 'auditd', - description: 'TTY text', - name: 'auditd.data.data', - type: 'keyword', - }, - 'auditd.data.family': { - category: 'auditd', - description: 'netfilter protocol', - name: 'auditd.data.family', - type: 'keyword', - }, - 'auditd.data.mac': { - category: 'auditd', - description: 'crypto MAC algorithm selected', - name: 'auditd.data.mac', - type: 'keyword', - }, - 'auditd.data.pfs': { - category: 'auditd', - description: 'perfect forward secrecy method', - name: 'auditd.data.pfs', - type: 'keyword', - }, - 'auditd.data.items': { - category: 'auditd', - description: 'the number of path records in the event', - name: 'auditd.data.items', - type: 'keyword', - }, - 'auditd.data.a0': { - category: 'auditd', - description: '', - name: 'auditd.data.a0', - type: 'keyword', - }, - 'auditd.data.a1': { - category: 'auditd', - description: '', - name: 'auditd.data.a1', - type: 'keyword', - }, - 'auditd.data.a2': { - category: 'auditd', - description: '', - name: 'auditd.data.a2', - type: 'keyword', - }, - 'auditd.data.a3': { - category: 'auditd', - description: '', - name: 'auditd.data.a3', - type: 'keyword', - }, - 'auditd.data.hostname': { - category: 'auditd', - description: 'the hostname that the user is connecting from', - name: 'auditd.data.hostname', - type: 'keyword', - }, - 'auditd.data.lport': { - category: 'auditd', - description: 'local network port', - name: 'auditd.data.lport', - type: 'keyword', - }, - 'auditd.data.rport': { - category: 'auditd', - description: 'remote port number', - name: 'auditd.data.rport', - type: 'keyword', - }, - 'auditd.data.exit': { - category: 'auditd', - description: 'syscall exit code', - name: 'auditd.data.exit', - type: 'keyword', - }, - 'auditd.data.fp': { - category: 'auditd', - description: 'crypto key finger print', - name: 'auditd.data.fp', - type: 'keyword', - }, - 'auditd.data.laddr': { - category: 'auditd', - description: 'local network address', - name: 'auditd.data.laddr', - type: 'keyword', - }, - 'auditd.data.sport': { - category: 'auditd', - description: 'local port number', - name: 'auditd.data.sport', - type: 'keyword', - }, - 'auditd.data.capability': { - category: 'auditd', - description: 'posix capabilities', - name: 'auditd.data.capability', - type: 'keyword', - }, - 'auditd.data.nargs': { - category: 'auditd', - description: 'the number of arguments to a socket call', - name: 'auditd.data.nargs', - type: 'keyword', - }, - 'auditd.data.new-enabled': { - category: 'auditd', - description: 'new TTY audit enabled setting', - name: 'auditd.data.new-enabled', - type: 'keyword', - }, - 'auditd.data.audit_backlog_limit': { - category: 'auditd', - description: "audit system's backlog queue size", - name: 'auditd.data.audit_backlog_limit', - type: 'keyword', - }, - 'auditd.data.dir': { - category: 'auditd', - description: 'directory name', - name: 'auditd.data.dir', - type: 'keyword', - }, - 'auditd.data.cap_pe': { - category: 'auditd', - description: 'process effective capability map', - name: 'auditd.data.cap_pe', - type: 'keyword', - }, - 'auditd.data.model': { - category: 'auditd', - description: 'security model being used for virt', - name: 'auditd.data.model', - type: 'keyword', - }, - 'auditd.data.new_pp': { - category: 'auditd', - description: 'new process permitted capability map', - name: 'auditd.data.new_pp', - type: 'keyword', - }, - 'auditd.data.old-enabled': { - category: 'auditd', - description: 'present TTY audit enabled setting', - name: 'auditd.data.old-enabled', - type: 'keyword', - }, - 'auditd.data.oauid': { - category: 'auditd', - description: "object's login user ID", - name: 'auditd.data.oauid', - type: 'keyword', - }, - 'auditd.data.old': { - category: 'auditd', - description: 'old value', - name: 'auditd.data.old', - type: 'keyword', - }, - 'auditd.data.banners': { - category: 'auditd', - description: 'banners used on printed page', - name: 'auditd.data.banners', - type: 'keyword', - }, - 'auditd.data.feature': { - category: 'auditd', - description: 'kernel feature being changed', - name: 'auditd.data.feature', - type: 'keyword', - }, - 'auditd.data.vm-ctx': { - category: 'auditd', - description: "the vm's context string", - name: 'auditd.data.vm-ctx', - type: 'keyword', - }, - 'auditd.data.opid': { - category: 'auditd', - description: "object's process ID", - name: 'auditd.data.opid', - type: 'keyword', - }, - 'auditd.data.seperms': { - category: 'auditd', - description: 'SELinux permissions being used', - name: 'auditd.data.seperms', - type: 'keyword', - }, - 'auditd.data.seresult': { - category: 'auditd', - description: 'SELinux AVC decision granted/denied', - name: 'auditd.data.seresult', - type: 'keyword', - }, - 'auditd.data.new-rng': { - category: 'auditd', - description: 'device name of rng being added from a vm', - name: 'auditd.data.new-rng', - type: 'keyword', - }, - 'auditd.data.old-net': { - category: 'auditd', - description: 'present MAC address assigned to vm', - name: 'auditd.data.old-net', - type: 'keyword', - }, - 'auditd.data.sigev_signo': { - category: 'auditd', - description: 'signal number', - name: 'auditd.data.sigev_signo', - type: 'keyword', - }, - 'auditd.data.ino': { - category: 'auditd', - description: 'inode number', - name: 'auditd.data.ino', - type: 'keyword', - }, - 'auditd.data.old_enforcing': { - category: 'auditd', - description: 'old MAC enforcement status', - name: 'auditd.data.old_enforcing', - type: 'keyword', - }, - 'auditd.data.old-vcpu': { - category: 'auditd', - description: 'present number of CPU cores', - name: 'auditd.data.old-vcpu', - type: 'keyword', - }, - 'auditd.data.range': { - category: 'auditd', - description: "user's SE Linux range", - name: 'auditd.data.range', - type: 'keyword', - }, - 'auditd.data.res': { - category: 'auditd', - description: 'result of the audited operation(success/fail)', - name: 'auditd.data.res', - type: 'keyword', - }, - 'auditd.data.added': { - category: 'auditd', - description: 'number of new files detected', - name: 'auditd.data.added', - type: 'keyword', - }, - 'auditd.data.fam': { - category: 'auditd', - description: 'socket address family', - name: 'auditd.data.fam', - type: 'keyword', - }, - 'auditd.data.nlnk-pid': { - category: 'auditd', - description: 'pid of netlink packet sender', - name: 'auditd.data.nlnk-pid', - type: 'keyword', - }, - 'auditd.data.subj': { - category: 'auditd', - description: "lspp subject's context string", - name: 'auditd.data.subj', - type: 'keyword', - }, - 'auditd.data.a[0-3]': { - category: 'auditd', - description: 'the arguments to a syscall', - name: 'auditd.data.a[0-3]', - type: 'keyword', - }, - 'auditd.data.cgroup': { - category: 'auditd', - description: 'path to cgroup in sysfs', - name: 'auditd.data.cgroup', - type: 'keyword', - }, - 'auditd.data.kernel': { - category: 'auditd', - description: "kernel's version number", - name: 'auditd.data.kernel', - type: 'keyword', - }, - 'auditd.data.ocomm': { - category: 'auditd', - description: "object's command line name", - name: 'auditd.data.ocomm', - type: 'keyword', - }, - 'auditd.data.new-net': { - category: 'auditd', - description: 'MAC address being assigned to vm', - name: 'auditd.data.new-net', - type: 'keyword', - }, - 'auditd.data.permissive': { - category: 'auditd', - description: 'SELinux is in permissive mode', - name: 'auditd.data.permissive', - type: 'keyword', - }, - 'auditd.data.class': { - category: 'auditd', - description: 'resource class assigned to vm', - name: 'auditd.data.class', - type: 'keyword', - }, - 'auditd.data.compat': { - category: 'auditd', - description: 'is_compat_task result', - name: 'auditd.data.compat', - type: 'keyword', - }, - 'auditd.data.fi': { - category: 'auditd', - description: 'file assigned inherited capability map', - name: 'auditd.data.fi', - type: 'keyword', - }, - 'auditd.data.changed': { - category: 'auditd', - description: 'number of changed files', - name: 'auditd.data.changed', - type: 'keyword', - }, - 'auditd.data.msg': { - category: 'auditd', - description: 'the payload of the audit record', - name: 'auditd.data.msg', - type: 'keyword', - }, - 'auditd.data.dport': { - category: 'auditd', - description: 'remote port number', - name: 'auditd.data.dport', - type: 'keyword', - }, - 'auditd.data.new-seuser': { - category: 'auditd', - description: 'new SELinux user', - name: 'auditd.data.new-seuser', - type: 'keyword', - }, - 'auditd.data.invalid_context': { - category: 'auditd', - description: 'SELinux context', - name: 'auditd.data.invalid_context', - type: 'keyword', - }, - 'auditd.data.dmac': { - category: 'auditd', - description: 'remote MAC address', - name: 'auditd.data.dmac', - type: 'keyword', - }, - 'auditd.data.ipx-net': { - category: 'auditd', - description: 'IPX network number', - name: 'auditd.data.ipx-net', - type: 'keyword', - }, - 'auditd.data.iuid': { - category: 'auditd', - description: "ipc object's user ID", - name: 'auditd.data.iuid', - type: 'keyword', - }, - 'auditd.data.macproto': { - category: 'auditd', - description: 'ethernet packet type ID field', - name: 'auditd.data.macproto', - type: 'keyword', - }, - 'auditd.data.obj': { - category: 'auditd', - description: 'lspp object context string', - name: 'auditd.data.obj', - type: 'keyword', - }, - 'auditd.data.ipid': { - category: 'auditd', - description: 'IP datagram fragment identifier', - name: 'auditd.data.ipid', - type: 'keyword', - }, - 'auditd.data.new-fs': { - category: 'auditd', - description: 'file system being added to vm', - name: 'auditd.data.new-fs', - type: 'keyword', - }, - 'auditd.data.vm-pid': { - category: 'auditd', - description: "vm's process ID", - name: 'auditd.data.vm-pid', - type: 'keyword', - }, - 'auditd.data.cap_pi': { - category: 'auditd', - description: 'process inherited capability map', - name: 'auditd.data.cap_pi', - type: 'keyword', - }, - 'auditd.data.old-auid': { - category: 'auditd', - description: 'previous auid value', - name: 'auditd.data.old-auid', - type: 'keyword', - }, - 'auditd.data.oses': { - category: 'auditd', - description: "object's session ID", - name: 'auditd.data.oses', - type: 'keyword', - }, - 'auditd.data.fd': { - category: 'auditd', - description: 'file descriptor number', - name: 'auditd.data.fd', - type: 'keyword', - }, - 'auditd.data.igid': { - category: 'auditd', - description: "ipc object's group ID", - name: 'auditd.data.igid', - type: 'keyword', - }, - 'auditd.data.new-disk': { - category: 'auditd', - description: 'disk being added to vm', - name: 'auditd.data.new-disk', - type: 'keyword', - }, - 'auditd.data.parent': { - category: 'auditd', - description: 'the inode number of the parent file', - name: 'auditd.data.parent', - type: 'keyword', - }, - 'auditd.data.len': { - category: 'auditd', - description: 'length', - name: 'auditd.data.len', - type: 'keyword', - }, - 'auditd.data.oflag': { - category: 'auditd', - description: 'open syscall flags', - name: 'auditd.data.oflag', - type: 'keyword', - }, - 'auditd.data.uuid': { - category: 'auditd', - description: 'a UUID', - name: 'auditd.data.uuid', - type: 'keyword', - }, - 'auditd.data.code': { - category: 'auditd', - description: 'seccomp action code', - name: 'auditd.data.code', - type: 'keyword', - }, - 'auditd.data.nlnk-grp': { - category: 'auditd', - description: 'netlink group number', - name: 'auditd.data.nlnk-grp', - type: 'keyword', - }, - 'auditd.data.cap_fp': { - category: 'auditd', - description: 'file permitted capability map', - name: 'auditd.data.cap_fp', - type: 'keyword', - }, - 'auditd.data.new-mem': { - category: 'auditd', - description: 'new amount of memory in KB', - name: 'auditd.data.new-mem', - type: 'keyword', - }, - 'auditd.data.seperm': { - category: 'auditd', - description: 'SELinux permission being decided on', - name: 'auditd.data.seperm', - type: 'keyword', - }, - 'auditd.data.enforcing': { - category: 'auditd', - description: 'new MAC enforcement status', - name: 'auditd.data.enforcing', - type: 'keyword', - }, - 'auditd.data.new-chardev': { - category: 'auditd', - description: 'new character device being assigned to vm', - name: 'auditd.data.new-chardev', - type: 'keyword', - }, - 'auditd.data.old-rng': { - category: 'auditd', - description: 'device name of rng being removed from a vm', - name: 'auditd.data.old-rng', - type: 'keyword', - }, - 'auditd.data.outif': { - category: 'auditd', - description: 'out interface number', - name: 'auditd.data.outif', - type: 'keyword', - }, - 'auditd.data.cmd': { - category: 'auditd', - description: 'command being executed', - name: 'auditd.data.cmd', - type: 'keyword', - }, - 'auditd.data.hook': { - category: 'auditd', - description: 'netfilter hook that packet came from', - name: 'auditd.data.hook', - type: 'keyword', - }, - 'auditd.data.new-level': { - category: 'auditd', - description: 'new run level', - name: 'auditd.data.new-level', - type: 'keyword', - }, - 'auditd.data.sauid': { - category: 'auditd', - description: 'sent login user ID', - name: 'auditd.data.sauid', - type: 'keyword', - }, - 'auditd.data.sig': { - category: 'auditd', - description: 'signal number', - name: 'auditd.data.sig', - type: 'keyword', - }, - 'auditd.data.audit_backlog_wait_time': { - category: 'auditd', - description: "audit system's backlog wait time", - name: 'auditd.data.audit_backlog_wait_time', - type: 'keyword', - }, - 'auditd.data.printer': { - category: 'auditd', - description: 'printer name', - name: 'auditd.data.printer', - type: 'keyword', - }, - 'auditd.data.old-mem': { - category: 'auditd', - description: 'present amount of memory in KB', - name: 'auditd.data.old-mem', - type: 'keyword', - }, - 'auditd.data.perm': { - category: 'auditd', - description: 'the file permission being used', - name: 'auditd.data.perm', - type: 'keyword', - }, - 'auditd.data.old_pi': { - category: 'auditd', - description: 'old process inherited capability map', - name: 'auditd.data.old_pi', - type: 'keyword', - }, - 'auditd.data.state': { - category: 'auditd', - description: 'audit daemon configuration resulting state', - name: 'auditd.data.state', - type: 'keyword', - }, - 'auditd.data.format': { - category: 'auditd', - description: "audit log's format", - name: 'auditd.data.format', - type: 'keyword', - }, - 'auditd.data.new_gid': { - category: 'auditd', - description: 'new group ID being assigned', - name: 'auditd.data.new_gid', - type: 'keyword', - }, - 'auditd.data.tcontext': { - category: 'auditd', - description: "the target's or object's context string", - name: 'auditd.data.tcontext', - type: 'keyword', - }, - 'auditd.data.maj': { - category: 'auditd', - description: 'device major number', - name: 'auditd.data.maj', - type: 'keyword', - }, - 'auditd.data.watch': { - category: 'auditd', - description: 'file name in a watch record', - name: 'auditd.data.watch', - type: 'keyword', - }, - 'auditd.data.device': { - category: 'auditd', - description: 'device name', - name: 'auditd.data.device', - type: 'keyword', - }, - 'auditd.data.grp': { - category: 'auditd', - description: 'group name', - name: 'auditd.data.grp', - type: 'keyword', - }, - 'auditd.data.bool': { - category: 'auditd', - description: 'name of SELinux boolean', - name: 'auditd.data.bool', - type: 'keyword', - }, - 'auditd.data.icmp_type': { - category: 'auditd', - description: 'type of icmp message', - name: 'auditd.data.icmp_type', - type: 'keyword', - }, - 'auditd.data.new_lock': { - category: 'auditd', - description: 'new value of feature lock', - name: 'auditd.data.new_lock', - type: 'keyword', - }, - 'auditd.data.old_prom': { - category: 'auditd', - description: 'network promiscuity flag', - name: 'auditd.data.old_prom', - type: 'keyword', - }, - 'auditd.data.acl': { - category: 'auditd', - description: 'access mode of resource assigned to vm', - name: 'auditd.data.acl', - type: 'keyword', - }, - 'auditd.data.ip': { - category: 'auditd', - description: 'network address of a printer', - name: 'auditd.data.ip', - type: 'keyword', - }, - 'auditd.data.new_pi': { - category: 'auditd', - description: 'new process inherited capability map', - name: 'auditd.data.new_pi', - type: 'keyword', - }, - 'auditd.data.default-context': { - category: 'auditd', - description: 'default MAC context', - name: 'auditd.data.default-context', - type: 'keyword', - }, - 'auditd.data.inode_gid': { - category: 'auditd', - description: "group ID of the inode's owner", - name: 'auditd.data.inode_gid', - type: 'keyword', - }, - 'auditd.data.new-log_passwd': { - category: 'auditd', - description: 'new value for TTY password logging', - name: 'auditd.data.new-log_passwd', - type: 'keyword', - }, - 'auditd.data.new_pe': { - category: 'auditd', - description: 'new process effective capability map', - name: 'auditd.data.new_pe', - type: 'keyword', - }, - 'auditd.data.selected-context': { - category: 'auditd', - description: 'new MAC context assigned to session', - name: 'auditd.data.selected-context', - type: 'keyword', - }, - 'auditd.data.cap_fver': { - category: 'auditd', - description: 'file system capabilities version number', - name: 'auditd.data.cap_fver', - type: 'keyword', - }, - 'auditd.data.file': { - category: 'auditd', - description: 'file name', - name: 'auditd.data.file', - type: 'keyword', - }, - 'auditd.data.net': { - category: 'auditd', - description: 'network MAC address', - name: 'auditd.data.net', - type: 'keyword', - }, - 'auditd.data.virt': { - category: 'auditd', - description: 'kind of virtualization being referenced', - name: 'auditd.data.virt', - type: 'keyword', - }, - 'auditd.data.cap_pp': { - category: 'auditd', - description: 'process permitted capability map', - name: 'auditd.data.cap_pp', - type: 'keyword', - }, - 'auditd.data.old-range': { - category: 'auditd', - description: 'present SELinux range', - name: 'auditd.data.old-range', - type: 'keyword', - }, - 'auditd.data.resrc': { - category: 'auditd', - description: 'resource being assigned', - name: 'auditd.data.resrc', - type: 'keyword', - }, - 'auditd.data.new-range': { - category: 'auditd', - description: 'new SELinux range', - name: 'auditd.data.new-range', - type: 'keyword', - }, - 'auditd.data.obj_gid': { - category: 'auditd', - description: 'group ID of object', - name: 'auditd.data.obj_gid', - type: 'keyword', - }, - 'auditd.data.proto': { - category: 'auditd', - description: 'network protocol', - name: 'auditd.data.proto', - type: 'keyword', - }, - 'auditd.data.old-disk': { - category: 'auditd', - description: 'disk being removed from vm', - name: 'auditd.data.old-disk', - type: 'keyword', - }, - 'auditd.data.audit_failure': { - category: 'auditd', - description: "audit system's failure mode", - name: 'auditd.data.audit_failure', - type: 'keyword', - }, - 'auditd.data.inif': { - category: 'auditd', - description: 'in interface number', - name: 'auditd.data.inif', - type: 'keyword', - }, - 'auditd.data.vm': { - category: 'auditd', - description: 'virtual machine name', - name: 'auditd.data.vm', - type: 'keyword', - }, - 'auditd.data.flags': { - category: 'auditd', - description: 'mmap syscall flags', - name: 'auditd.data.flags', - type: 'keyword', - }, - 'auditd.data.nlnk-fam': { - category: 'auditd', - description: 'netlink protocol number', - name: 'auditd.data.nlnk-fam', - type: 'keyword', - }, - 'auditd.data.old-fs': { - category: 'auditd', - description: 'file system being removed from vm', - name: 'auditd.data.old-fs', - type: 'keyword', - }, - 'auditd.data.old-ses': { - category: 'auditd', - description: 'previous ses value', - name: 'auditd.data.old-ses', - type: 'keyword', - }, - 'auditd.data.seqno': { - category: 'auditd', - description: 'sequence number', - name: 'auditd.data.seqno', - type: 'keyword', - }, - 'auditd.data.fver': { - category: 'auditd', - description: 'file system capabilities version number', - name: 'auditd.data.fver', - type: 'keyword', - }, - 'auditd.data.qbytes': { - category: 'auditd', - description: 'ipc objects quantity of bytes', - name: 'auditd.data.qbytes', - type: 'keyword', - }, - 'auditd.data.seuser': { - category: 'auditd', - description: "user's SE Linux user acct", - name: 'auditd.data.seuser', - type: 'keyword', - }, - 'auditd.data.cap_fe': { - category: 'auditd', - description: 'file assigned effective capability map', - name: 'auditd.data.cap_fe', - type: 'keyword', - }, - 'auditd.data.new-vcpu': { - category: 'auditd', - description: 'new number of CPU cores', - name: 'auditd.data.new-vcpu', - type: 'keyword', - }, - 'auditd.data.old-level': { - category: 'auditd', - description: 'old run level', - name: 'auditd.data.old-level', - type: 'keyword', - }, - 'auditd.data.old_pp': { - category: 'auditd', - description: 'old process permitted capability map', - name: 'auditd.data.old_pp', - type: 'keyword', - }, - 'auditd.data.daddr': { - category: 'auditd', - description: 'remote IP address', - name: 'auditd.data.daddr', - type: 'keyword', - }, - 'auditd.data.old-role': { - category: 'auditd', - description: 'present SELinux role', - name: 'auditd.data.old-role', - type: 'keyword', - }, - 'auditd.data.ioctlcmd': { - category: 'auditd', - description: 'The request argument to the ioctl syscall', - name: 'auditd.data.ioctlcmd', - type: 'keyword', - }, - 'auditd.data.smac': { - category: 'auditd', - description: 'local MAC address', - name: 'auditd.data.smac', - type: 'keyword', - }, - 'auditd.data.apparmor': { - category: 'auditd', - description: 'apparmor event information', - name: 'auditd.data.apparmor', - type: 'keyword', - }, - 'auditd.data.fe': { - category: 'auditd', - description: 'file assigned effective capability map', - name: 'auditd.data.fe', - type: 'keyword', - }, - 'auditd.data.perm_mask': { - category: 'auditd', - description: 'file permission mask that triggered a watch event', - name: 'auditd.data.perm_mask', - type: 'keyword', - }, - 'auditd.data.ses': { - category: 'auditd', - description: 'login session ID', - name: 'auditd.data.ses', - type: 'keyword', - }, - 'auditd.data.cap_fi': { - category: 'auditd', - description: 'file inherited capability map', - name: 'auditd.data.cap_fi', - type: 'keyword', - }, - 'auditd.data.obj_uid': { - category: 'auditd', - description: 'user ID of object', - name: 'auditd.data.obj_uid', - type: 'keyword', - }, - 'auditd.data.reason': { - category: 'auditd', - description: 'text string denoting a reason for the action', - name: 'auditd.data.reason', - type: 'keyword', - }, - 'auditd.data.list': { - category: 'auditd', - description: "the audit system's filter list number", - name: 'auditd.data.list', - type: 'keyword', - }, - 'auditd.data.old_lock': { - category: 'auditd', - description: 'present value of feature lock', - name: 'auditd.data.old_lock', - type: 'keyword', - }, - 'auditd.data.bus': { - category: 'auditd', - description: 'name of subsystem bus a vm resource belongs to', - name: 'auditd.data.bus', - type: 'keyword', - }, - 'auditd.data.old_pe': { - category: 'auditd', - description: 'old process effective capability map', - name: 'auditd.data.old_pe', - type: 'keyword', - }, - 'auditd.data.new-role': { - category: 'auditd', - description: 'new SELinux role', - name: 'auditd.data.new-role', - type: 'keyword', - }, - 'auditd.data.prom': { - category: 'auditd', - description: 'network promiscuity flag', - name: 'auditd.data.prom', - type: 'keyword', - }, - 'auditd.data.uri': { - category: 'auditd', - description: 'URI pointing to a printer', - name: 'auditd.data.uri', - type: 'keyword', - }, - 'auditd.data.audit_enabled': { - category: 'auditd', - description: "audit systems's enable/disable status", - name: 'auditd.data.audit_enabled', - type: 'keyword', - }, - 'auditd.data.old-log_passwd': { - category: 'auditd', - description: 'present value for TTY password logging', - name: 'auditd.data.old-log_passwd', - type: 'keyword', - }, - 'auditd.data.old-seuser': { - category: 'auditd', - description: 'present SELinux user', - name: 'auditd.data.old-seuser', - type: 'keyword', - }, - 'auditd.data.per': { - category: 'auditd', - description: 'linux personality', - name: 'auditd.data.per', - type: 'keyword', - }, - 'auditd.data.scontext': { - category: 'auditd', - description: "the subject's context string", - name: 'auditd.data.scontext', - type: 'keyword', - }, - 'auditd.data.tclass': { - category: 'auditd', - description: "target's object classification", - name: 'auditd.data.tclass', - type: 'keyword', - }, - 'auditd.data.ver': { - category: 'auditd', - description: "audit daemon's version number", - name: 'auditd.data.ver', - type: 'keyword', - }, - 'auditd.data.new': { - category: 'auditd', - description: 'value being set in feature', - name: 'auditd.data.new', - type: 'keyword', - }, - 'auditd.data.val': { - category: 'auditd', - description: 'generic value associated with the operation', - name: 'auditd.data.val', - type: 'keyword', - }, - 'auditd.data.img-ctx': { - category: 'auditd', - description: "the vm's disk image context string", - name: 'auditd.data.img-ctx', - type: 'keyword', - }, - 'auditd.data.old-chardev': { - category: 'auditd', - description: 'present character device assigned to vm', - name: 'auditd.data.old-chardev', - type: 'keyword', - }, - 'auditd.data.old_val': { - category: 'auditd', - description: 'current value of SELinux boolean', - name: 'auditd.data.old_val', - type: 'keyword', - }, - 'auditd.data.success': { - category: 'auditd', - description: 'whether the syscall was successful or not', - name: 'auditd.data.success', - type: 'keyword', - }, - 'auditd.data.inode_uid': { - category: 'auditd', - description: "user ID of the inode's owner", - name: 'auditd.data.inode_uid', - type: 'keyword', - }, - 'auditd.data.removed': { - category: 'auditd', - description: 'number of deleted files', - name: 'auditd.data.removed', - type: 'keyword', - }, - 'auditd.data.socket.port': { - category: 'auditd', - description: 'The port number.', - name: 'auditd.data.socket.port', - type: 'keyword', - }, - 'auditd.data.socket.saddr': { - category: 'auditd', - description: 'The raw socket address structure.', - name: 'auditd.data.socket.saddr', - type: 'keyword', - }, - 'auditd.data.socket.addr': { - category: 'auditd', - description: 'The remote address.', - name: 'auditd.data.socket.addr', - type: 'keyword', - }, - 'auditd.data.socket.family': { - category: 'auditd', - description: 'The socket family (unix, ipv4, ipv6, netlink).', - example: 'unix', - name: 'auditd.data.socket.family', - type: 'keyword', - }, - 'auditd.data.socket.path': { - category: 'auditd', - description: 'This is the path associated with a unix socket.', - name: 'auditd.data.socket.path', - type: 'keyword', - }, - 'auditd.messages': { - category: 'auditd', - description: - 'An ordered list of the raw messages received from the kernel that were used to construct this document. This field is present if an error occurred processing the data or if `include_raw_message` is set in the config. ', - name: 'auditd.messages', - type: 'alias', - }, - 'auditd.warnings': { - category: 'auditd', - description: - 'The warnings generated by the Beat during the construction of the event. These are disabled by default and are used for development and debug purposes only. ', - name: 'auditd.warnings', - type: 'alias', - }, - 'geoip.continent_name': { - category: 'geoip', - description: 'The name of the continent. ', - name: 'geoip.continent_name', - type: 'keyword', - }, - 'geoip.city_name': { - category: 'geoip', - description: 'The name of the city. ', - name: 'geoip.city_name', - type: 'keyword', - }, - 'geoip.region_name': { - category: 'geoip', - description: 'The name of the region. ', - name: 'geoip.region_name', - type: 'keyword', - }, - 'geoip.country_iso_code': { - category: 'geoip', - description: 'Country ISO code. ', - name: 'geoip.country_iso_code', - type: 'keyword', - }, - 'geoip.location': { - category: 'geoip', - description: 'The longitude and latitude. ', - name: 'geoip.location', - type: 'geo_point', - }, - 'hash.blake2b_256': { - category: 'hash', - description: 'BLAKE2b-256 hash of the file.', - name: 'hash.blake2b_256', - type: 'keyword', - }, - 'hash.blake2b_384': { - category: 'hash', - description: 'BLAKE2b-384 hash of the file.', - name: 'hash.blake2b_384', - type: 'keyword', - }, - 'hash.blake2b_512': { - category: 'hash', - description: 'BLAKE2b-512 hash of the file.', - name: 'hash.blake2b_512', - type: 'keyword', - }, - 'hash.sha224': { - category: 'hash', - description: 'SHA224 hash of the file.', - name: 'hash.sha224', - type: 'keyword', - }, - 'hash.sha384': { - category: 'hash', - description: 'SHA384 hash of the file.', - name: 'hash.sha384', - type: 'keyword', - }, - 'hash.sha3_224': { - category: 'hash', - description: 'SHA3_224 hash of the file.', - name: 'hash.sha3_224', - type: 'keyword', - }, - 'hash.sha3_256': { - category: 'hash', - description: 'SHA3_256 hash of the file.', - name: 'hash.sha3_256', - type: 'keyword', - }, - 'hash.sha3_384': { - category: 'hash', - description: 'SHA3_384 hash of the file.', - name: 'hash.sha3_384', - type: 'keyword', - }, - 'hash.sha3_512': { - category: 'hash', - description: 'SHA3_512 hash of the file.', - name: 'hash.sha3_512', - type: 'keyword', - }, - 'hash.sha512_224': { - category: 'hash', - description: 'SHA512/224 hash of the file.', - name: 'hash.sha512_224', - type: 'keyword', - }, - 'hash.sha512_256': { - category: 'hash', - description: 'SHA512/256 hash of the file.', - name: 'hash.sha512_256', - type: 'keyword', - }, - 'hash.xxh64': { - category: 'hash', - description: 'XX64 hash of the file.', - name: 'hash.xxh64', - type: 'keyword', - }, - 'event.origin': { - category: 'event', - description: - 'Origin of the event. This can be a file path (e.g. `/var/log/log.1`), or the name of the system component that supplied the data (e.g. `netlink`). ', - name: 'event.origin', - type: 'keyword', - }, - 'user.entity_id': { - category: 'user', - description: - 'ID uniquely identifying the user on a host. It is computed as a SHA-256 hash of the host ID, user ID, and user name. ', - name: 'user.entity_id', - type: 'keyword', - }, - 'user.terminal': { - category: 'user', - description: 'Terminal of the user. ', - name: 'user.terminal', - type: 'keyword', - }, - 'process.hash.blake2b_256': { - category: 'process', - description: 'BLAKE2b-256 hash of the executable.', - name: 'process.hash.blake2b_256', - type: 'keyword', - }, - 'process.hash.blake2b_384': { - category: 'process', - description: 'BLAKE2b-384 hash of the executable.', - name: 'process.hash.blake2b_384', - type: 'keyword', - }, - 'process.hash.blake2b_512': { - category: 'process', - description: 'BLAKE2b-512 hash of the executable.', - name: 'process.hash.blake2b_512', - type: 'keyword', - }, - 'process.hash.sha224': { - category: 'process', - description: 'SHA224 hash of the executable.', - name: 'process.hash.sha224', - type: 'keyword', - }, - 'process.hash.sha384': { - category: 'process', - description: 'SHA384 hash of the executable.', - name: 'process.hash.sha384', - type: 'keyword', - }, - 'process.hash.sha3_224': { - category: 'process', - description: 'SHA3_224 hash of the executable.', - name: 'process.hash.sha3_224', - type: 'keyword', - }, - 'process.hash.sha3_256': { - category: 'process', - description: 'SHA3_256 hash of the executable.', - name: 'process.hash.sha3_256', - type: 'keyword', - }, - 'process.hash.sha3_384': { - category: 'process', - description: 'SHA3_384 hash of the executable.', - name: 'process.hash.sha3_384', - type: 'keyword', - }, - 'process.hash.sha3_512': { - category: 'process', - description: 'SHA3_512 hash of the executable.', - name: 'process.hash.sha3_512', - type: 'keyword', - }, - 'process.hash.sha512_224': { - category: 'process', - description: 'SHA512/224 hash of the executable.', - name: 'process.hash.sha512_224', - type: 'keyword', - }, - 'process.hash.sha512_256': { - category: 'process', - description: 'SHA512/256 hash of the executable.', - name: 'process.hash.sha512_256', - type: 'keyword', - }, - 'process.hash.xxh64': { - category: 'process', - description: 'XX64 hash of the executable.', - name: 'process.hash.xxh64', - type: 'keyword', - }, - 'socket.entity_id': { - category: 'socket', - description: - 'ID uniquely identifying the socket. It is computed as a SHA-256 hash of the host ID, socket inode, local IP, local port, remote IP, and remote port. ', - name: 'socket.entity_id', - type: 'keyword', - }, - 'system.audit.host.uptime': { - category: 'system', - description: 'Uptime in nanoseconds. ', - name: 'system.audit.host.uptime', - type: 'long', - format: 'duration', - }, - 'system.audit.host.boottime': { - category: 'system', - description: 'Boot time. ', - name: 'system.audit.host.boottime', - type: 'date', - }, - 'system.audit.host.containerized': { - category: 'system', - description: 'Set if host is a container. ', - name: 'system.audit.host.containerized', - type: 'boolean', - }, - 'system.audit.host.timezone.name': { - category: 'system', - description: 'Name of the timezone of the host, e.g. BST. ', - name: 'system.audit.host.timezone.name', - type: 'keyword', - }, - 'system.audit.host.timezone.offset.sec': { - category: 'system', - description: 'Timezone offset in seconds. ', - name: 'system.audit.host.timezone.offset.sec', - type: 'long', - }, - 'system.audit.host.hostname': { - category: 'system', - description: 'Hostname. ', - name: 'system.audit.host.hostname', - type: 'keyword', - }, - 'system.audit.host.id': { - category: 'system', - description: 'Host ID. ', - name: 'system.audit.host.id', - type: 'keyword', - }, - 'system.audit.host.architecture': { - category: 'system', - description: 'Host architecture (e.g. x86_64). ', - name: 'system.audit.host.architecture', - type: 'keyword', - }, - 'system.audit.host.mac': { - category: 'system', - description: 'MAC addresses. ', - name: 'system.audit.host.mac', - type: 'keyword', - }, - 'system.audit.host.ip': { - category: 'system', - description: 'IP addresses. ', - name: 'system.audit.host.ip', - type: 'ip', - }, - 'system.audit.host.os.codename': { - category: 'system', - description: 'OS codename, if any (e.g. stretch). ', - name: 'system.audit.host.os.codename', - type: 'keyword', - }, - 'system.audit.host.os.platform': { - category: 'system', - description: 'OS platform (e.g. centos, ubuntu, windows). ', - name: 'system.audit.host.os.platform', - type: 'keyword', - }, - 'system.audit.host.os.name': { - category: 'system', - description: 'OS name (e.g. Mac OS X). ', - name: 'system.audit.host.os.name', - type: 'keyword', - }, - 'system.audit.host.os.family': { - category: 'system', - description: 'OS family (e.g. redhat, debian, freebsd, windows). ', - name: 'system.audit.host.os.family', - type: 'keyword', - }, - 'system.audit.host.os.version': { - category: 'system', - description: 'OS version. ', - name: 'system.audit.host.os.version', - type: 'keyword', - }, - 'system.audit.host.os.kernel': { - category: 'system', - description: "The operating system's kernel version. ", - name: 'system.audit.host.os.kernel', - type: 'keyword', - }, - 'system.audit.host.os.type': { - category: 'system', - description: 'OS type (see ECS os.type). ', - name: 'system.audit.host.os.type', - type: 'keyword', - }, - 'system.audit.package.entity_id': { - category: 'system', - description: - 'ID uniquely identifying the package. It is computed as a SHA-256 hash of the host ID, package name, and package version. ', - name: 'system.audit.package.entity_id', - type: 'keyword', - }, - 'system.audit.package.name': { - category: 'system', - description: 'Package name. ', - name: 'system.audit.package.name', - type: 'keyword', - }, - 'system.audit.package.version': { - category: 'system', - description: 'Package version. ', - name: 'system.audit.package.version', - type: 'keyword', - }, - 'system.audit.package.release': { - category: 'system', - description: 'Package release. ', - name: 'system.audit.package.release', - type: 'keyword', - }, - 'system.audit.package.arch': { - category: 'system', - description: 'Package architecture. ', - name: 'system.audit.package.arch', - type: 'keyword', - }, - 'system.audit.package.license': { - category: 'system', - description: 'Package license. ', - name: 'system.audit.package.license', - type: 'keyword', - }, - 'system.audit.package.installtime': { - category: 'system', - description: 'Package install time. ', - name: 'system.audit.package.installtime', - type: 'date', - }, - 'system.audit.package.size': { - category: 'system', - description: 'Package size. ', - name: 'system.audit.package.size', - type: 'long', - }, - 'system.audit.package.summary': { - category: 'system', - description: 'Package summary. ', - name: 'system.audit.package.summary', - }, - 'system.audit.package.url': { - category: 'system', - description: 'Package URL. ', - name: 'system.audit.package.url', - type: 'keyword', - }, - 'system.audit.user.name': { - category: 'system', - description: 'User name. ', - name: 'system.audit.user.name', - type: 'keyword', - }, - 'system.audit.user.uid': { - category: 'system', - description: 'User ID. ', - name: 'system.audit.user.uid', - type: 'keyword', - }, - 'system.audit.user.gid': { - category: 'system', - description: 'Group ID. ', - name: 'system.audit.user.gid', - type: 'keyword', - }, - 'system.audit.user.dir': { - category: 'system', - description: "User's home directory. ", - name: 'system.audit.user.dir', - type: 'keyword', - }, - 'system.audit.user.shell': { - category: 'system', - description: 'Program to run at login. ', - name: 'system.audit.user.shell', - type: 'keyword', - }, - 'system.audit.user.user_information': { - category: 'system', - description: 'General user information. On Linux, this is the gecos field. ', - name: 'system.audit.user.user_information', - type: 'keyword', - }, - 'system.audit.user.group.name': { - category: 'system', - description: 'Group name. ', - name: 'system.audit.user.group.name', - type: 'keyword', - }, - 'system.audit.user.group.gid': { - category: 'system', - description: 'Group ID. ', - name: 'system.audit.user.group.gid', - type: 'integer', - }, - 'system.audit.user.password.type': { - category: 'system', - description: - "A user's password type. Possible values are `shadow_password` (the password hash is in the shadow file), `password_disabled`, `no_password` (this is dangerous as anyone can log in), and `crypt_password` (when the password field in /etc/passwd seems to contain an encrypted password). ", - name: 'system.audit.user.password.type', - type: 'keyword', - }, - 'system.audit.user.password.last_changed': { - category: 'system', - description: "The day the user's password was last changed. ", - name: 'system.audit.user.password.last_changed', - type: 'date', - }, - 'log.source.address': { - category: 'log', - description: 'Source address from which the log event was read / sent from. ', - name: 'log.source.address', - type: 'keyword', - }, - 'log.offset': { - category: 'log', - description: 'The file offset the reported line starts at. ', - name: 'log.offset', - type: 'long', - }, - stream: { - category: 'base', - description: "Log stream when reading container logs, can be 'stdout' or 'stderr' ", - name: 'stream', - type: 'keyword', - }, - 'input.type': { - category: 'input', - description: - 'The input type from which the event was generated. This field is set to the value specified for the `type` option in the input section of the Filebeat config file. ', - name: 'input.type', - }, - 'syslog.facility': { - category: 'syslog', - description: 'The facility extracted from the priority. ', - name: 'syslog.facility', - type: 'long', - }, - 'syslog.priority': { - category: 'syslog', - description: 'The priority of the syslog event. ', - name: 'syslog.priority', - type: 'long', - }, - 'syslog.severity_label': { - category: 'syslog', - description: 'The human readable severity. ', - name: 'syslog.severity_label', - type: 'keyword', - }, - 'syslog.facility_label': { - category: 'syslog', - description: 'The human readable facility. ', - name: 'syslog.facility_label', - type: 'keyword', - }, - 'process.program': { - category: 'process', - description: 'The name of the program. ', - name: 'process.program', - type: 'keyword', - }, - 'log.flags': { - category: 'log', - description: 'This field contains the flags of the event. ', - name: 'log.flags', - }, - 'http.response.content_length': { - category: 'http', - name: 'http.response.content_length', - type: 'alias', - }, - 'user_agent.os.full_name': { - category: 'user_agent', - name: 'user_agent.os.full_name', - type: 'keyword', - }, - 'fileset.name': { - category: 'fileset', - description: 'The Filebeat fileset that generated this event. ', - name: 'fileset.name', - type: 'keyword', - }, - 'fileset.module': { - category: 'fileset', - name: 'fileset.module', - type: 'alias', - }, - read_timestamp: { - category: 'base', - name: 'read_timestamp', - type: 'alias', - }, - 'docker.attrs': { - category: 'docker', - description: - "docker.attrs contains labels and environment variables written by docker's JSON File logging driver. These fields are only available when they are configured in the logging driver options. ", - name: 'docker.attrs', - type: 'object', - }, - 'icmp.code': { - category: 'icmp', - description: 'ICMP code. ', - name: 'icmp.code', - type: 'keyword', - }, - 'icmp.type': { - category: 'icmp', - description: 'ICMP type. ', - name: 'icmp.type', - type: 'keyword', - }, - 'igmp.type': { - category: 'igmp', - description: 'IGMP type. ', - name: 'igmp.type', - type: 'keyword', - }, - 'azure.eventhub': { - category: 'azure', - description: 'Name of the eventhub. ', - name: 'azure.eventhub', - type: 'keyword', - }, - 'azure.offset': { - category: 'azure', - description: 'The offset. ', - name: 'azure.offset', - type: 'long', - }, - 'azure.enqueued_time': { - category: 'azure', - description: 'The enqueued time. ', - name: 'azure.enqueued_time', - type: 'date', - }, - 'azure.partition_id': { - category: 'azure', - description: 'The partition id. ', - name: 'azure.partition_id', - type: 'long', - }, - 'azure.consumer_group': { - category: 'azure', - description: 'The consumer group. ', - name: 'azure.consumer_group', - type: 'keyword', - }, - 'azure.sequence_number': { - category: 'azure', - description: 'The sequence number. ', - name: 'azure.sequence_number', - type: 'long', - }, - 'kafka.topic': { - category: 'kafka', - description: 'Kafka topic ', - name: 'kafka.topic', - type: 'keyword', - }, - 'kafka.partition': { - category: 'kafka', - description: 'Kafka partition number ', - name: 'kafka.partition', - type: 'long', - }, - 'kafka.offset': { - category: 'kafka', - description: 'Kafka offset of this message ', - name: 'kafka.offset', - type: 'long', - }, - 'kafka.key': { - category: 'kafka', - description: 'Kafka key, corresponding to the Kafka value stored in the message ', - name: 'kafka.key', - type: 'keyword', - }, - 'kafka.block_timestamp': { - category: 'kafka', - description: 'Kafka outer (compressed) block timestamp ', - name: 'kafka.block_timestamp', - type: 'date', - }, - 'kafka.headers': { - category: 'kafka', - description: - 'An array of Kafka header strings for this message, in the form ": ". ', - name: 'kafka.headers', - type: 'array', - }, - 'apache2.access.remote_ip': { - category: 'apache2', - name: 'apache2.access.remote_ip', - type: 'alias', - }, - 'apache2.access.ssl.protocol': { - category: 'apache2', - name: 'apache2.access.ssl.protocol', - type: 'alias', - }, - 'apache2.access.ssl.cipher': { - category: 'apache2', - name: 'apache2.access.ssl.cipher', - type: 'alias', - }, - 'apache2.access.body_sent.bytes': { - category: 'apache2', - name: 'apache2.access.body_sent.bytes', - type: 'alias', - }, - 'apache2.access.user_name': { - category: 'apache2', - name: 'apache2.access.user_name', - type: 'alias', - }, - 'apache2.access.method': { - category: 'apache2', - name: 'apache2.access.method', - type: 'alias', - }, - 'apache2.access.url': { - category: 'apache2', - name: 'apache2.access.url', - type: 'alias', - }, - 'apache2.access.http_version': { - category: 'apache2', - name: 'apache2.access.http_version', - type: 'alias', - }, - 'apache2.access.response_code': { - category: 'apache2', - name: 'apache2.access.response_code', - type: 'alias', - }, - 'apache2.access.referrer': { - category: 'apache2', - name: 'apache2.access.referrer', - type: 'alias', - }, - 'apache2.access.agent': { - category: 'apache2', - name: 'apache2.access.agent', - type: 'alias', - }, - 'apache2.access.user_agent.device': { - category: 'apache2', - name: 'apache2.access.user_agent.device', - type: 'alias', - }, - 'apache2.access.user_agent.name': { - category: 'apache2', - name: 'apache2.access.user_agent.name', - type: 'alias', - }, - 'apache2.access.user_agent.os': { - category: 'apache2', - name: 'apache2.access.user_agent.os', - type: 'alias', - }, - 'apache2.access.user_agent.os_name': { - category: 'apache2', - name: 'apache2.access.user_agent.os_name', - type: 'alias', - }, - 'apache2.access.user_agent.original': { - category: 'apache2', - name: 'apache2.access.user_agent.original', - type: 'alias', - }, - 'apache2.access.geoip.continent_name': { - category: 'apache2', - name: 'apache2.access.geoip.continent_name', - type: 'alias', - }, - 'apache2.access.geoip.country_iso_code': { - category: 'apache2', - name: 'apache2.access.geoip.country_iso_code', - type: 'alias', - }, - 'apache2.access.geoip.location': { - category: 'apache2', - name: 'apache2.access.geoip.location', - type: 'alias', - }, - 'apache2.access.geoip.region_name': { - category: 'apache2', - name: 'apache2.access.geoip.region_name', - type: 'alias', - }, - 'apache2.access.geoip.city_name': { - category: 'apache2', - name: 'apache2.access.geoip.city_name', - type: 'alias', - }, - 'apache2.access.geoip.region_iso_code': { - category: 'apache2', - name: 'apache2.access.geoip.region_iso_code', - type: 'alias', - }, - 'apache2.error.level': { - category: 'apache2', - name: 'apache2.error.level', - type: 'alias', - }, - 'apache2.error.message': { - category: 'apache2', - name: 'apache2.error.message', - type: 'alias', - }, - 'apache2.error.pid': { - category: 'apache2', - name: 'apache2.error.pid', - type: 'alias', - }, - 'apache2.error.tid': { - category: 'apache2', - name: 'apache2.error.tid', - type: 'alias', - }, - 'apache2.error.module': { - category: 'apache2', - name: 'apache2.error.module', - type: 'alias', - }, - 'apache.access.ssl.protocol': { - category: 'apache', - description: 'SSL protocol version. ', - name: 'apache.access.ssl.protocol', - type: 'keyword', - }, - 'apache.access.ssl.cipher': { - category: 'apache', - description: 'SSL cipher name. ', - name: 'apache.access.ssl.cipher', - type: 'keyword', - }, - 'apache.error.module': { - category: 'apache', - description: 'The module producing the logged message. ', - name: 'apache.error.module', - type: 'keyword', - }, - 'user.audit.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform. ', - name: 'user.audit.group.id', - type: 'keyword', - }, - 'user.audit.group.name': { - category: 'user', - description: 'Name of the group. ', - name: 'user.audit.group.name', - type: 'keyword', - }, - 'user.owner.id': { - category: 'user', - description: 'One or multiple unique identifiers of the user. ', - name: 'user.owner.id', - type: 'keyword', - }, - 'user.owner.name': { - category: 'user', - description: 'Short name or login of the user. ', - example: 'albert', - name: 'user.owner.name', - type: 'keyword', - }, - 'user.owner.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform. ', - name: 'user.owner.group.id', - type: 'keyword', - }, - 'user.owner.group.name': { - category: 'user', - description: 'Name of the group. ', - name: 'user.owner.group.name', - type: 'keyword', - }, - 'auditd.log.old_auid': { - category: 'auditd', - description: - 'For login events this is the old audit ID used for the user prior to this login. ', - name: 'auditd.log.old_auid', - }, - 'auditd.log.new_auid': { - category: 'auditd', - description: - 'For login events this is the new audit ID. The audit ID can be used to trace future events to the user even if their identity changes (like becoming root). ', - name: 'auditd.log.new_auid', - }, - 'auditd.log.old_ses': { - category: 'auditd', - description: - 'For login events this is the old session ID used for the user prior to this login. ', - name: 'auditd.log.old_ses', - }, - 'auditd.log.new_ses': { - category: 'auditd', - description: - 'For login events this is the new session ID. It can be used to tie a user to future events by session ID. ', - name: 'auditd.log.new_ses', - }, - 'auditd.log.sequence': { - category: 'auditd', - description: 'The audit event sequence number. ', - name: 'auditd.log.sequence', - type: 'long', - }, - 'auditd.log.items': { - category: 'auditd', - description: 'The number of items in an event. ', - name: 'auditd.log.items', - }, - 'auditd.log.item': { - category: 'auditd', - description: - 'The item field indicates which item out of the total number of items. This number is zero-based; a value of 0 means it is the first item. ', - name: 'auditd.log.item', - }, - 'auditd.log.tty': { - category: 'auditd', - name: 'auditd.log.tty', - type: 'keyword', - }, - 'auditd.log.a0': { - category: 'auditd', - description: 'The first argument to the system call. ', - name: 'auditd.log.a0', - }, - 'auditd.log.addr': { - category: 'auditd', - name: 'auditd.log.addr', - type: 'ip', - }, - 'auditd.log.rport': { - category: 'auditd', - name: 'auditd.log.rport', - type: 'long', - }, - 'auditd.log.laddr': { - category: 'auditd', - name: 'auditd.log.laddr', - type: 'ip', - }, - 'auditd.log.lport': { - category: 'auditd', - name: 'auditd.log.lport', - type: 'long', - }, - 'auditd.log.acct': { - category: 'auditd', - name: 'auditd.log.acct', - type: 'alias', - }, - 'auditd.log.pid': { - category: 'auditd', - name: 'auditd.log.pid', - type: 'alias', - }, - 'auditd.log.ppid': { - category: 'auditd', - name: 'auditd.log.ppid', - type: 'alias', - }, - 'auditd.log.res': { - category: 'auditd', - name: 'auditd.log.res', - type: 'alias', - }, - 'auditd.log.record_type': { - category: 'auditd', - name: 'auditd.log.record_type', - type: 'alias', - }, - 'auditd.log.geoip.continent_name': { - category: 'auditd', - name: 'auditd.log.geoip.continent_name', - type: 'alias', - }, - 'auditd.log.geoip.country_iso_code': { - category: 'auditd', - name: 'auditd.log.geoip.country_iso_code', - type: 'alias', - }, - 'auditd.log.geoip.location': { - category: 'auditd', - name: 'auditd.log.geoip.location', - type: 'alias', - }, - 'auditd.log.geoip.region_name': { - category: 'auditd', - name: 'auditd.log.geoip.region_name', - type: 'alias', - }, - 'auditd.log.geoip.city_name': { - category: 'auditd', - name: 'auditd.log.geoip.city_name', - type: 'alias', - }, - 'auditd.log.geoip.region_iso_code': { - category: 'auditd', - name: 'auditd.log.geoip.region_iso_code', - type: 'alias', - }, - 'auditd.log.arch': { - category: 'auditd', - name: 'auditd.log.arch', - type: 'alias', - }, - 'auditd.log.gid': { - category: 'auditd', - name: 'auditd.log.gid', - type: 'alias', - }, - 'auditd.log.uid': { - category: 'auditd', - name: 'auditd.log.uid', - type: 'alias', - }, - 'auditd.log.agid': { - category: 'auditd', - name: 'auditd.log.agid', - type: 'alias', - }, - 'auditd.log.auid': { - category: 'auditd', - name: 'auditd.log.auid', - type: 'alias', - }, - 'auditd.log.fsgid': { - category: 'auditd', - name: 'auditd.log.fsgid', - type: 'alias', - }, - 'auditd.log.fsuid': { - category: 'auditd', - name: 'auditd.log.fsuid', - type: 'alias', - }, - 'auditd.log.egid': { - category: 'auditd', - name: 'auditd.log.egid', - type: 'alias', - }, - 'auditd.log.euid': { - category: 'auditd', - name: 'auditd.log.euid', - type: 'alias', - }, - 'auditd.log.sgid': { - category: 'auditd', - name: 'auditd.log.sgid', - type: 'alias', - }, - 'auditd.log.suid': { - category: 'auditd', - name: 'auditd.log.suid', - type: 'alias', - }, - 'auditd.log.ogid': { - category: 'auditd', - name: 'auditd.log.ogid', - type: 'alias', - }, - 'auditd.log.ouid': { - category: 'auditd', - name: 'auditd.log.ouid', - type: 'alias', - }, - 'auditd.log.comm': { - category: 'auditd', - name: 'auditd.log.comm', - type: 'alias', - }, - 'auditd.log.exe': { - category: 'auditd', - name: 'auditd.log.exe', - type: 'alias', - }, - 'auditd.log.terminal': { - category: 'auditd', - name: 'auditd.log.terminal', - type: 'alias', - }, - 'auditd.log.msg': { - category: 'auditd', - name: 'auditd.log.msg', - type: 'alias', - }, - 'auditd.log.src': { - category: 'auditd', - name: 'auditd.log.src', - type: 'alias', - }, - 'auditd.log.dst': { - category: 'auditd', - name: 'auditd.log.dst', - type: 'alias', - }, - 'elasticsearch.component': { - category: 'elasticsearch', - description: 'Elasticsearch component from where the log event originated', - example: 'o.e.c.m.MetaDataCreateIndexService', - name: 'elasticsearch.component', - type: 'keyword', - }, - 'elasticsearch.cluster.uuid': { - category: 'elasticsearch', - description: 'UUID of the cluster', - example: 'GmvrbHlNTiSVYiPf8kxg9g', - name: 'elasticsearch.cluster.uuid', - type: 'keyword', - }, - 'elasticsearch.cluster.name': { - category: 'elasticsearch', - description: 'Name of the cluster', - example: 'docker-cluster', - name: 'elasticsearch.cluster.name', - type: 'keyword', - }, - 'elasticsearch.node.id': { - category: 'elasticsearch', - description: 'ID of the node', - example: 'DSiWcTyeThWtUXLB9J0BMw', - name: 'elasticsearch.node.id', - type: 'keyword', - }, - 'elasticsearch.node.name': { - category: 'elasticsearch', - description: 'Name of the node', - example: 'vWNJsZ3', - name: 'elasticsearch.node.name', - type: 'keyword', - }, - 'elasticsearch.index.name': { - category: 'elasticsearch', - description: 'Index name', - example: 'filebeat-test-input', - name: 'elasticsearch.index.name', - type: 'keyword', - }, - 'elasticsearch.index.id': { - category: 'elasticsearch', - description: 'Index id', - example: 'aOGgDwbURfCV57AScqbCgw', - name: 'elasticsearch.index.id', - type: 'keyword', - }, - 'elasticsearch.shard.id': { - category: 'elasticsearch', - description: 'Id of the shard', - example: '0', - name: 'elasticsearch.shard.id', - type: 'keyword', - }, - 'elasticsearch.audit.layer': { - category: 'elasticsearch', - description: 'The layer from which this event originated: rest, transport or ip_filter', - example: 'rest', - name: 'elasticsearch.audit.layer', - type: 'keyword', - }, - 'elasticsearch.audit.event_type': { - category: 'elasticsearch', - description: - 'The type of event that occurred: anonymous_access_denied, authentication_failed, access_denied, access_granted, connection_granted, connection_denied, tampered_request, run_as_granted, run_as_denied', - example: 'access_granted', - name: 'elasticsearch.audit.event_type', - type: 'keyword', - }, - 'elasticsearch.audit.origin.type': { - category: 'elasticsearch', - description: - 'Where the request originated: rest (request originated from a REST API request), transport (request was received on the transport channel), local_node (the local node issued the request)', - example: 'local_node', - name: 'elasticsearch.audit.origin.type', - type: 'keyword', - }, - 'elasticsearch.audit.realm': { - category: 'elasticsearch', - description: 'The authentication realm the authentication was validated against', - name: 'elasticsearch.audit.realm', - type: 'keyword', - }, - 'elasticsearch.audit.user.realm': { - category: 'elasticsearch', - description: "The user's authentication realm, if authenticated", - name: 'elasticsearch.audit.user.realm', - type: 'keyword', - }, - 'elasticsearch.audit.user.roles': { - category: 'elasticsearch', - description: 'Roles to which the principal belongs', - example: '["kibana_admin","beats_admin"]', - name: 'elasticsearch.audit.user.roles', - type: 'keyword', - }, - 'elasticsearch.audit.user.run_as.name': { - category: 'elasticsearch', - name: 'elasticsearch.audit.user.run_as.name', - type: 'keyword', - }, - 'elasticsearch.audit.user.run_as.realm': { - category: 'elasticsearch', - name: 'elasticsearch.audit.user.run_as.realm', - type: 'keyword', - }, - 'elasticsearch.audit.component': { - category: 'elasticsearch', - name: 'elasticsearch.audit.component', - type: 'keyword', - }, - 'elasticsearch.audit.action': { - category: 'elasticsearch', - description: 'The name of the action that was executed', - example: 'cluster:monitor/main', - name: 'elasticsearch.audit.action', - type: 'keyword', - }, - 'elasticsearch.audit.url.params': { - category: 'elasticsearch', - description: 'REST URI parameters', - example: '{username=jacknich2}', - name: 'elasticsearch.audit.url.params', - }, - 'elasticsearch.audit.indices': { - category: 'elasticsearch', - description: 'Indices accessed by action', - example: '["foo-2019.01.04","foo-2019.01.03","foo-2019.01.06"]', - name: 'elasticsearch.audit.indices', - type: 'keyword', - }, - 'elasticsearch.audit.request.id': { - category: 'elasticsearch', - description: 'Unique ID of request', - example: 'WzL_kb6VSvOhAq0twPvHOQ', - name: 'elasticsearch.audit.request.id', - type: 'keyword', - }, - 'elasticsearch.audit.request.name': { - category: 'elasticsearch', - description: 'The type of request that was executed', - example: 'ClearScrollRequest', - name: 'elasticsearch.audit.request.name', - type: 'keyword', - }, - 'elasticsearch.audit.request_body': { - category: 'elasticsearch', - name: 'elasticsearch.audit.request_body', - type: 'alias', - }, - 'elasticsearch.audit.origin_address': { - category: 'elasticsearch', - name: 'elasticsearch.audit.origin_address', - type: 'alias', - }, - 'elasticsearch.audit.uri': { - category: 'elasticsearch', - name: 'elasticsearch.audit.uri', - type: 'alias', - }, - 'elasticsearch.audit.principal': { - category: 'elasticsearch', - name: 'elasticsearch.audit.principal', - type: 'alias', - }, - 'elasticsearch.audit.message': { - category: 'elasticsearch', - name: 'elasticsearch.audit.message', - type: 'text', - }, - 'elasticsearch.audit.invalidate.apikeys.owned_by_authenticated_user': { - category: 'elasticsearch', - name: 'elasticsearch.audit.invalidate.apikeys.owned_by_authenticated_user', - type: 'boolean', - }, - 'elasticsearch.deprecation': { - category: 'elasticsearch', - description: '', - name: 'elasticsearch.deprecation', - type: 'group', - }, - 'elasticsearch.gc.phase.name': { - category: 'elasticsearch', - description: 'Name of the GC collection phase. ', - name: 'elasticsearch.gc.phase.name', - type: 'keyword', - }, - 'elasticsearch.gc.phase.duration_sec': { - category: 'elasticsearch', - description: 'Collection phase duration according to the Java virtual machine. ', - name: 'elasticsearch.gc.phase.duration_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.scrub_symbol_table_time_sec': { - category: 'elasticsearch', - description: 'Pause time in seconds cleaning up symbol tables. ', - name: 'elasticsearch.gc.phase.scrub_symbol_table_time_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.scrub_string_table_time_sec': { - category: 'elasticsearch', - description: 'Pause time in seconds cleaning up string tables. ', - name: 'elasticsearch.gc.phase.scrub_string_table_time_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.weak_refs_processing_time_sec': { - category: 'elasticsearch', - description: 'Time spent processing weak references in seconds. ', - name: 'elasticsearch.gc.phase.weak_refs_processing_time_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.parallel_rescan_time_sec': { - category: 'elasticsearch', - description: 'Time spent in seconds marking live objects while application is stopped. ', - name: 'elasticsearch.gc.phase.parallel_rescan_time_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.class_unload_time_sec': { - category: 'elasticsearch', - description: 'Time spent unloading unused classes in seconds. ', - name: 'elasticsearch.gc.phase.class_unload_time_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.cpu_time.user_sec': { - category: 'elasticsearch', - description: 'CPU time spent outside the kernel. ', - name: 'elasticsearch.gc.phase.cpu_time.user_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.cpu_time.sys_sec': { - category: 'elasticsearch', - description: 'CPU time spent inside the kernel. ', - name: 'elasticsearch.gc.phase.cpu_time.sys_sec', - type: 'float', - }, - 'elasticsearch.gc.phase.cpu_time.real_sec': { - category: 'elasticsearch', - description: 'Total elapsed CPU time spent to complete the collection from start to finish. ', - name: 'elasticsearch.gc.phase.cpu_time.real_sec', - type: 'float', - }, - 'elasticsearch.gc.jvm_runtime_sec': { - category: 'elasticsearch', - description: 'The time from JVM start up in seconds, as a floating point number. ', - name: 'elasticsearch.gc.jvm_runtime_sec', - type: 'float', - }, - 'elasticsearch.gc.threads_total_stop_time_sec': { - category: 'elasticsearch', - description: 'Garbage collection threads total stop time seconds. ', - name: 'elasticsearch.gc.threads_total_stop_time_sec', - type: 'float', - }, - 'elasticsearch.gc.stopping_threads_time_sec': { - category: 'elasticsearch', - description: 'Time took to stop threads seconds. ', - name: 'elasticsearch.gc.stopping_threads_time_sec', - type: 'float', - }, - 'elasticsearch.gc.tags': { - category: 'elasticsearch', - description: 'GC logging tags. ', - name: 'elasticsearch.gc.tags', - type: 'keyword', - }, - 'elasticsearch.gc.heap.size_kb': { - category: 'elasticsearch', - description: 'Total heap size in kilobytes. ', - name: 'elasticsearch.gc.heap.size_kb', - type: 'integer', - }, - 'elasticsearch.gc.heap.used_kb': { - category: 'elasticsearch', - description: 'Used heap in kilobytes. ', - name: 'elasticsearch.gc.heap.used_kb', - type: 'integer', - }, - 'elasticsearch.gc.old_gen.size_kb': { - category: 'elasticsearch', - description: 'Total size of old generation in kilobytes. ', - name: 'elasticsearch.gc.old_gen.size_kb', - type: 'integer', - }, - 'elasticsearch.gc.old_gen.used_kb': { - category: 'elasticsearch', - description: 'Old generation occupancy in kilobytes. ', - name: 'elasticsearch.gc.old_gen.used_kb', - type: 'integer', - }, - 'elasticsearch.gc.young_gen.size_kb': { - category: 'elasticsearch', - description: 'Total size of young generation in kilobytes. ', - name: 'elasticsearch.gc.young_gen.size_kb', - type: 'integer', - }, - 'elasticsearch.gc.young_gen.used_kb': { - category: 'elasticsearch', - description: 'Young generation occupancy in kilobytes. ', - name: 'elasticsearch.gc.young_gen.used_kb', - type: 'integer', - }, - 'elasticsearch.server.stacktrace': { - category: 'elasticsearch', - name: 'elasticsearch.server.stacktrace', - }, - 'elasticsearch.server.gc.young.one': { - category: 'elasticsearch', - description: '', - example: '', - name: 'elasticsearch.server.gc.young.one', - type: 'long', - }, - 'elasticsearch.server.gc.young.two': { - category: 'elasticsearch', - description: '', - example: '', - name: 'elasticsearch.server.gc.young.two', - type: 'long', - }, - 'elasticsearch.server.gc.overhead_seq': { - category: 'elasticsearch', - description: 'Sequence number', - example: 3449992, - name: 'elasticsearch.server.gc.overhead_seq', - type: 'long', - }, - 'elasticsearch.server.gc.collection_duration.ms': { - category: 'elasticsearch', - description: 'Time spent in GC, in milliseconds', - example: 1600, - name: 'elasticsearch.server.gc.collection_duration.ms', - type: 'float', - }, - 'elasticsearch.server.gc.observation_duration.ms': { - category: 'elasticsearch', - description: 'Total time over which collection was observed, in milliseconds', - example: 1800, - name: 'elasticsearch.server.gc.observation_duration.ms', - type: 'float', - }, - 'elasticsearch.slowlog.logger': { - category: 'elasticsearch', - description: 'Logger name', - example: 'index.search.slowlog.fetch', - name: 'elasticsearch.slowlog.logger', - type: 'keyword', - }, - 'elasticsearch.slowlog.took': { - category: 'elasticsearch', - description: 'Time it took to execute the query', - example: '300ms', - name: 'elasticsearch.slowlog.took', - type: 'keyword', - }, - 'elasticsearch.slowlog.types': { - category: 'elasticsearch', - description: 'Types', - example: '', - name: 'elasticsearch.slowlog.types', - type: 'keyword', - }, - 'elasticsearch.slowlog.stats': { - category: 'elasticsearch', - description: 'Stats groups', - example: 'group1', - name: 'elasticsearch.slowlog.stats', - type: 'keyword', - }, - 'elasticsearch.slowlog.search_type': { - category: 'elasticsearch', - description: 'Search type', - example: 'QUERY_THEN_FETCH', - name: 'elasticsearch.slowlog.search_type', - type: 'keyword', - }, - 'elasticsearch.slowlog.source_query': { - category: 'elasticsearch', - description: 'Slow query', - example: '{"query":{"match_all":{"boost":1.0}}}', - name: 'elasticsearch.slowlog.source_query', - type: 'keyword', - }, - 'elasticsearch.slowlog.extra_source': { - category: 'elasticsearch', - description: 'Extra source information', - example: '', - name: 'elasticsearch.slowlog.extra_source', - type: 'keyword', - }, - 'elasticsearch.slowlog.total_hits': { - category: 'elasticsearch', - description: 'Total hits', - example: 42, - name: 'elasticsearch.slowlog.total_hits', - type: 'keyword', - }, - 'elasticsearch.slowlog.total_shards': { - category: 'elasticsearch', - description: 'Total queried shards', - example: 22, - name: 'elasticsearch.slowlog.total_shards', - type: 'keyword', - }, - 'elasticsearch.slowlog.routing': { - category: 'elasticsearch', - description: 'Routing', - example: 's01HZ2QBk9jw4gtgaFtn', - name: 'elasticsearch.slowlog.routing', - type: 'keyword', - }, - 'elasticsearch.slowlog.id': { - category: 'elasticsearch', - description: 'Id', - example: '', - name: 'elasticsearch.slowlog.id', - type: 'keyword', - }, - 'elasticsearch.slowlog.type': { - category: 'elasticsearch', - description: 'Type', - example: 'doc', - name: 'elasticsearch.slowlog.type', - type: 'keyword', - }, - 'elasticsearch.slowlog.source': { - category: 'elasticsearch', - description: 'Source of document that was indexed', - name: 'elasticsearch.slowlog.source', - type: 'keyword', - }, - 'haproxy.frontend_name': { - category: 'haproxy', - description: 'Name of the frontend (or listener) which received and processed the connection.', - name: 'haproxy.frontend_name', - }, - 'haproxy.backend_name': { - category: 'haproxy', - description: - 'Name of the backend (or listener) which was selected to manage the connection to the server.', - name: 'haproxy.backend_name', - }, - 'haproxy.server_name': { - category: 'haproxy', - description: 'Name of the last server to which the connection was sent.', - name: 'haproxy.server_name', - }, - 'haproxy.total_waiting_time_ms': { - category: 'haproxy', - description: 'Total time in milliseconds spent waiting in the various queues', - name: 'haproxy.total_waiting_time_ms', - type: 'long', - }, - 'haproxy.connection_wait_time_ms': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for the connection to establish to the final server', - name: 'haproxy.connection_wait_time_ms', - type: 'long', - }, - 'haproxy.bytes_read': { - category: 'haproxy', - description: 'Total number of bytes transmitted to the client when the log is emitted.', - name: 'haproxy.bytes_read', - type: 'long', - }, - 'haproxy.time_queue': { - category: 'haproxy', - description: 'Total time in milliseconds spent waiting in the various queues.', - name: 'haproxy.time_queue', - type: 'long', - }, - 'haproxy.time_backend_connect': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for the connection to establish to the final server, including retries.', - name: 'haproxy.time_backend_connect', - type: 'long', - }, - 'haproxy.server_queue': { - category: 'haproxy', - description: - 'Total number of requests which were processed before this one in the server queue.', - name: 'haproxy.server_queue', - type: 'long', - }, - 'haproxy.backend_queue': { - category: 'haproxy', - description: - "Total number of requests which were processed before this one in the backend's global queue.", - name: 'haproxy.backend_queue', - type: 'long', - }, - 'haproxy.bind_name': { - category: 'haproxy', - description: 'Name of the listening address which received the connection.', - name: 'haproxy.bind_name', - }, - 'haproxy.error_message': { - category: 'haproxy', - description: 'Error message logged by HAProxy in case of error.', - name: 'haproxy.error_message', - type: 'text', - }, - 'haproxy.source': { - category: 'haproxy', - description: 'The HAProxy source of the log', - name: 'haproxy.source', - type: 'keyword', - }, - 'haproxy.termination_state': { - category: 'haproxy', - description: 'Condition the session was in when the session ended.', - name: 'haproxy.termination_state', - }, - 'haproxy.mode': { - category: 'haproxy', - description: 'mode that the frontend is operating (TCP or HTTP)', - name: 'haproxy.mode', - type: 'keyword', - }, - 'haproxy.connections.active': { - category: 'haproxy', - description: - 'Total number of concurrent connections on the process when the session was logged.', - name: 'haproxy.connections.active', - type: 'long', - }, - 'haproxy.connections.frontend': { - category: 'haproxy', - description: - 'Total number of concurrent connections on the frontend when the session was logged.', - name: 'haproxy.connections.frontend', - type: 'long', - }, - 'haproxy.connections.backend': { - category: 'haproxy', - description: - 'Total number of concurrent connections handled by the backend when the session was logged.', - name: 'haproxy.connections.backend', - type: 'long', - }, - 'haproxy.connections.server': { - category: 'haproxy', - description: - 'Total number of concurrent connections still active on the server when the session was logged.', - name: 'haproxy.connections.server', - type: 'long', - }, - 'haproxy.connections.retries': { - category: 'haproxy', - description: - 'Number of connection retries experienced by this session when trying to connect to the server.', - name: 'haproxy.connections.retries', - type: 'long', - }, - 'haproxy.client.ip': { - category: 'haproxy', - name: 'haproxy.client.ip', - type: 'alias', - }, - 'haproxy.client.port': { - category: 'haproxy', - name: 'haproxy.client.port', - type: 'alias', - }, - 'haproxy.process_name': { - category: 'haproxy', - name: 'haproxy.process_name', - type: 'alias', - }, - 'haproxy.pid': { - category: 'haproxy', - name: 'haproxy.pid', - type: 'alias', - }, - 'haproxy.destination.port': { - category: 'haproxy', - name: 'haproxy.destination.port', - type: 'alias', - }, - 'haproxy.destination.ip': { - category: 'haproxy', - name: 'haproxy.destination.ip', - type: 'alias', - }, - 'haproxy.geoip.continent_name': { - category: 'haproxy', - name: 'haproxy.geoip.continent_name', - type: 'alias', - }, - 'haproxy.geoip.country_iso_code': { - category: 'haproxy', - name: 'haproxy.geoip.country_iso_code', - type: 'alias', - }, - 'haproxy.geoip.location': { - category: 'haproxy', - name: 'haproxy.geoip.location', - type: 'alias', - }, - 'haproxy.geoip.region_name': { - category: 'haproxy', - name: 'haproxy.geoip.region_name', - type: 'alias', - }, - 'haproxy.geoip.city_name': { - category: 'haproxy', - name: 'haproxy.geoip.city_name', - type: 'alias', - }, - 'haproxy.geoip.region_iso_code': { - category: 'haproxy', - name: 'haproxy.geoip.region_iso_code', - type: 'alias', - }, - 'haproxy.http.response.captured_cookie': { - category: 'haproxy', - description: - 'Optional "name=value" entry indicating that the client had this cookie in the response. ', - name: 'haproxy.http.response.captured_cookie', - }, - 'haproxy.http.response.captured_headers': { - category: 'haproxy', - description: - 'List of headers captured in the response due to the presence of the "capture response header" statement in the frontend. ', - name: 'haproxy.http.response.captured_headers', - type: 'keyword', - }, - 'haproxy.http.response.status_code': { - category: 'haproxy', - name: 'haproxy.http.response.status_code', - type: 'alias', - }, - 'haproxy.http.request.captured_cookie': { - category: 'haproxy', - description: - 'Optional "name=value" entry indicating that the server has returned a cookie with its request. ', - name: 'haproxy.http.request.captured_cookie', - }, - 'haproxy.http.request.captured_headers': { - category: 'haproxy', - description: - 'List of headers captured in the request due to the presence of the "capture request header" statement in the frontend. ', - name: 'haproxy.http.request.captured_headers', - type: 'keyword', - }, - 'haproxy.http.request.raw_request_line': { - category: 'haproxy', - description: - 'Complete HTTP request line, including the method, request and HTTP version string.', - name: 'haproxy.http.request.raw_request_line', - type: 'keyword', - }, - 'haproxy.http.request.time_wait_without_data_ms': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for the server to send a full HTTP response, not counting data.', - name: 'haproxy.http.request.time_wait_without_data_ms', - type: 'long', - }, - 'haproxy.http.request.time_wait_ms': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for a full HTTP request from the client (not counting body) after the first byte was received.', - name: 'haproxy.http.request.time_wait_ms', - type: 'long', - }, - 'haproxy.tcp.connection_waiting_time_ms': { - category: 'haproxy', - description: 'Total time in milliseconds elapsed between the accept and the last close', - name: 'haproxy.tcp.connection_waiting_time_ms', - type: 'long', - }, - 'icinga.debug.facility': { - category: 'icinga', - description: 'Specifies what component of Icinga logged the message. ', - name: 'icinga.debug.facility', - type: 'keyword', - }, - 'icinga.debug.severity': { - category: 'icinga', - name: 'icinga.debug.severity', - type: 'alias', - }, - 'icinga.debug.message': { - category: 'icinga', - name: 'icinga.debug.message', - type: 'alias', - }, - 'icinga.main.facility': { - category: 'icinga', - description: 'Specifies what component of Icinga logged the message. ', - name: 'icinga.main.facility', - type: 'keyword', - }, - 'icinga.main.severity': { - category: 'icinga', - name: 'icinga.main.severity', - type: 'alias', - }, - 'icinga.main.message': { - category: 'icinga', - name: 'icinga.main.message', - type: 'alias', - }, - 'icinga.startup.facility': { - category: 'icinga', - description: 'Specifies what component of Icinga logged the message. ', - name: 'icinga.startup.facility', - type: 'keyword', - }, - 'icinga.startup.severity': { - category: 'icinga', - name: 'icinga.startup.severity', - type: 'alias', - }, - 'icinga.startup.message': { - category: 'icinga', - name: 'icinga.startup.message', - type: 'alias', - }, - 'iis.access.sub_status': { - category: 'iis', - description: 'The HTTP substatus code. ', - name: 'iis.access.sub_status', - type: 'long', - }, - 'iis.access.win32_status': { - category: 'iis', - description: 'The Windows status code. ', - name: 'iis.access.win32_status', - type: 'long', - }, - 'iis.access.site_name': { - category: 'iis', - description: 'The site name and instance number. ', - name: 'iis.access.site_name', - type: 'keyword', - }, - 'iis.access.server_name': { - category: 'iis', - description: 'The name of the server on which the log file entry was generated. ', - name: 'iis.access.server_name', - type: 'keyword', - }, - 'iis.access.cookie': { - category: 'iis', - description: 'The content of the cookie sent or received, if any. ', - name: 'iis.access.cookie', - type: 'keyword', - }, - 'iis.access.body_received.bytes': { - category: 'iis', - name: 'iis.access.body_received.bytes', - type: 'alias', - }, - 'iis.access.body_sent.bytes': { - category: 'iis', - name: 'iis.access.body_sent.bytes', - type: 'alias', - }, - 'iis.access.server_ip': { - category: 'iis', - name: 'iis.access.server_ip', - type: 'alias', - }, - 'iis.access.method': { - category: 'iis', - name: 'iis.access.method', - type: 'alias', - }, - 'iis.access.url': { - category: 'iis', - name: 'iis.access.url', - type: 'alias', - }, - 'iis.access.query_string': { - category: 'iis', - name: 'iis.access.query_string', - type: 'alias', - }, - 'iis.access.port': { - category: 'iis', - name: 'iis.access.port', - type: 'alias', - }, - 'iis.access.user_name': { - category: 'iis', - name: 'iis.access.user_name', - type: 'alias', - }, - 'iis.access.remote_ip': { - category: 'iis', - name: 'iis.access.remote_ip', - type: 'alias', - }, - 'iis.access.referrer': { - category: 'iis', - name: 'iis.access.referrer', - type: 'alias', - }, - 'iis.access.response_code': { - category: 'iis', - name: 'iis.access.response_code', - type: 'alias', - }, - 'iis.access.http_version': { - category: 'iis', - name: 'iis.access.http_version', - type: 'alias', - }, - 'iis.access.hostname': { - category: 'iis', - name: 'iis.access.hostname', - type: 'alias', - }, - 'iis.access.user_agent.device': { - category: 'iis', - name: 'iis.access.user_agent.device', - type: 'alias', - }, - 'iis.access.user_agent.name': { - category: 'iis', - name: 'iis.access.user_agent.name', - type: 'alias', - }, - 'iis.access.user_agent.os': { - category: 'iis', - name: 'iis.access.user_agent.os', - type: 'alias', - }, - 'iis.access.user_agent.os_name': { - category: 'iis', - name: 'iis.access.user_agent.os_name', - type: 'alias', - }, - 'iis.access.user_agent.original': { - category: 'iis', - name: 'iis.access.user_agent.original', - type: 'alias', - }, - 'iis.access.geoip.continent_name': { - category: 'iis', - name: 'iis.access.geoip.continent_name', - type: 'alias', - }, - 'iis.access.geoip.country_iso_code': { - category: 'iis', - name: 'iis.access.geoip.country_iso_code', - type: 'alias', - }, - 'iis.access.geoip.location': { - category: 'iis', - name: 'iis.access.geoip.location', - type: 'alias', - }, - 'iis.access.geoip.region_name': { - category: 'iis', - name: 'iis.access.geoip.region_name', - type: 'alias', - }, - 'iis.access.geoip.city_name': { - category: 'iis', - name: 'iis.access.geoip.city_name', - type: 'alias', - }, - 'iis.access.geoip.region_iso_code': { - category: 'iis', - name: 'iis.access.geoip.region_iso_code', - type: 'alias', - }, - 'iis.error.reason_phrase': { - category: 'iis', - description: 'The HTTP reason phrase. ', - name: 'iis.error.reason_phrase', - type: 'keyword', - }, - 'iis.error.queue_name': { - category: 'iis', - description: 'The IIS application pool name. ', - name: 'iis.error.queue_name', - type: 'keyword', - }, - 'iis.error.remote_ip': { - category: 'iis', - name: 'iis.error.remote_ip', - type: 'alias', - }, - 'iis.error.remote_port': { - category: 'iis', - name: 'iis.error.remote_port', - type: 'alias', - }, - 'iis.error.server_ip': { - category: 'iis', - name: 'iis.error.server_ip', - type: 'alias', - }, - 'iis.error.server_port': { - category: 'iis', - name: 'iis.error.server_port', - type: 'alias', - }, - 'iis.error.http_version': { - category: 'iis', - name: 'iis.error.http_version', - type: 'alias', - }, - 'iis.error.method': { - category: 'iis', - name: 'iis.error.method', - type: 'alias', - }, - 'iis.error.url': { - category: 'iis', - name: 'iis.error.url', - type: 'alias', - }, - 'iis.error.response_code': { - category: 'iis', - name: 'iis.error.response_code', - type: 'alias', - }, - 'iis.error.geoip.continent_name': { - category: 'iis', - name: 'iis.error.geoip.continent_name', - type: 'alias', - }, - 'iis.error.geoip.country_iso_code': { - category: 'iis', - name: 'iis.error.geoip.country_iso_code', - type: 'alias', - }, - 'iis.error.geoip.location': { - category: 'iis', - name: 'iis.error.geoip.location', - type: 'alias', - }, - 'iis.error.geoip.region_name': { - category: 'iis', - name: 'iis.error.geoip.region_name', - type: 'alias', - }, - 'iis.error.geoip.city_name': { - category: 'iis', - name: 'iis.error.geoip.city_name', - type: 'alias', - }, - 'iis.error.geoip.region_iso_code': { - category: 'iis', - name: 'iis.error.geoip.region_iso_code', - type: 'alias', - }, - 'kafka.log.level': { - category: 'kafka', - name: 'kafka.log.level', - type: 'alias', - }, - 'kafka.log.message': { - category: 'kafka', - name: 'kafka.log.message', - type: 'alias', - }, - 'kafka.log.component': { - category: 'kafka', - description: 'Component the log is coming from. ', - name: 'kafka.log.component', - type: 'keyword', - }, - 'kafka.log.class': { - category: 'kafka', - description: 'Java class the log is coming from. ', - name: 'kafka.log.class', - type: 'keyword', - }, - 'kafka.log.thread': { - category: 'kafka', - description: 'Thread name the log is coming from. ', - name: 'kafka.log.thread', - type: 'keyword', - }, - 'kafka.log.trace.class': { - category: 'kafka', - description: 'Java class the trace is coming from. ', - name: 'kafka.log.trace.class', - type: 'keyword', - }, - 'kafka.log.trace.message': { - category: 'kafka', - description: 'Message part of the trace. ', - name: 'kafka.log.trace.message', - type: 'text', - }, - 'kibana.session_id': { - category: 'kibana', - description: - 'The ID of the user session associated with this event. Each login attempt results in a unique session id.', - example: '123e4567-e89b-12d3-a456-426614174000', - name: 'kibana.session_id', - type: 'keyword', - }, - 'kibana.space_id': { - category: 'kibana', - description: 'The id of the space associated with this event.', - example: 'default', - name: 'kibana.space_id', - type: 'keyword', - }, - 'kibana.saved_object.type': { - category: 'kibana', - description: 'The type of the saved object associated with this event.', - example: 'dashboard', - name: 'kibana.saved_object.type', - type: 'keyword', - }, - 'kibana.saved_object.id': { - category: 'kibana', - description: 'The id of the saved object associated with this event.', - example: '6295bdd0-0a0e-11e7-825f-6748cda7d858', - name: 'kibana.saved_object.id', - type: 'keyword', - }, - 'kibana.add_to_spaces': { - category: 'kibana', - description: 'The set of space ids that a saved object was shared to.', - example: "['default', 'marketing']", - name: 'kibana.add_to_spaces', - type: 'keyword', - }, - 'kibana.delete_from_spaces': { - category: 'kibana', - description: 'The set of space ids that a saved object was removed from.', - example: "['default', 'marketing']", - name: 'kibana.delete_from_spaces', - type: 'keyword', - }, - 'kibana.authentication_provider': { - category: 'kibana', - description: 'The authentication provider associated with a login event.', - example: 'basic1', - name: 'kibana.authentication_provider', - type: 'keyword', - }, - 'kibana.authentication_type': { - category: 'kibana', - description: 'The authentication provider type associated with a login event.', - example: 'basic', - name: 'kibana.authentication_type', - type: 'keyword', - }, - 'kibana.authentication_realm': { - category: 'kibana', - description: 'The Elasticsearch authentication realm name which fulfilled a login event.', - example: 'native', - name: 'kibana.authentication_realm', - type: 'keyword', - }, - 'kibana.lookup_realm': { - category: 'kibana', - description: 'The Elasticsearch lookup realm which fulfilled a login event.', - example: 'native', - name: 'kibana.lookup_realm', - type: 'keyword', - }, - 'kibana.log.tags': { - category: 'kibana', - description: 'Kibana logging tags. ', - name: 'kibana.log.tags', - type: 'keyword', - }, - 'kibana.log.state': { - category: 'kibana', - description: 'Current state of Kibana. ', - name: 'kibana.log.state', - type: 'keyword', - }, - 'kibana.log.meta': { - category: 'kibana', - name: 'kibana.log.meta', - type: 'object', - }, - 'kibana.log.kibana.log.meta.req.headers.referer': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.headers.referer', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.req.referer': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.referer', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.req.headers.user-agent': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.headers.user-agent', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.req.remoteAddress': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.remoteAddress', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.req.url': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.url', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.statusCode': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.statusCode', - type: 'alias', - }, - 'kibana.log.kibana.log.meta.method': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.method', - type: 'alias', - }, - 'logstash.log.module': { - category: 'logstash', - description: 'The module or class where the event originate. ', - name: 'logstash.log.module', - type: 'keyword', - }, - 'logstash.log.thread': { - category: 'logstash', - description: 'Information about the running thread where the log originate. ', - name: 'logstash.log.thread', - type: 'keyword', - }, - 'logstash.log.log_event': { - category: 'logstash', - description: 'key and value debugging information. ', - name: 'logstash.log.log_event', - type: 'object', - }, - 'logstash.log.log_event.action': { - category: 'logstash', - name: 'logstash.log.log_event.action', - type: 'keyword', - }, - 'logstash.log.pipeline_id': { - category: 'logstash', - description: 'The ID of the pipeline. ', - example: 'main', - name: 'logstash.log.pipeline_id', - type: 'keyword', - }, - 'logstash.log.message': { - category: 'logstash', - name: 'logstash.log.message', - type: 'alias', - }, - 'logstash.log.level': { - category: 'logstash', - name: 'logstash.log.level', - type: 'alias', - }, - 'logstash.slowlog.module': { - category: 'logstash', - description: 'The module or class where the event originate. ', - name: 'logstash.slowlog.module', - type: 'keyword', - }, - 'logstash.slowlog.thread': { - category: 'logstash', - description: 'Information about the running thread where the log originate. ', - name: 'logstash.slowlog.thread', - type: 'keyword', - }, - 'logstash.slowlog.event': { - category: 'logstash', - description: 'Raw dump of the original event ', - name: 'logstash.slowlog.event', - type: 'keyword', - }, - 'logstash.slowlog.plugin_name': { - category: 'logstash', - description: 'Name of the plugin ', - name: 'logstash.slowlog.plugin_name', - type: 'keyword', - }, - 'logstash.slowlog.plugin_type': { - category: 'logstash', - description: 'Type of the plugin: Inputs, Filters, Outputs or Codecs. ', - name: 'logstash.slowlog.plugin_type', - type: 'keyword', - }, - 'logstash.slowlog.took_in_millis': { - category: 'logstash', - description: 'Execution time for the plugin in milliseconds. ', - name: 'logstash.slowlog.took_in_millis', - type: 'long', - }, - 'logstash.slowlog.plugin_params': { - category: 'logstash', - description: 'String value of the plugin configuration ', - name: 'logstash.slowlog.plugin_params', - type: 'keyword', - }, - 'logstash.slowlog.plugin_params_object': { - category: 'logstash', - description: 'key -> value of the configuration used by the plugin. ', - name: 'logstash.slowlog.plugin_params_object', - type: 'object', - }, - 'logstash.slowlog.level': { - category: 'logstash', - name: 'logstash.slowlog.level', - type: 'alias', - }, - 'logstash.slowlog.took_in_nanos': { - category: 'logstash', - name: 'logstash.slowlog.took_in_nanos', - type: 'alias', - }, - 'mongodb.log.component': { - category: 'mongodb', - description: 'Functional categorization of message ', - example: 'COMMAND', - name: 'mongodb.log.component', - type: 'keyword', - }, - 'mongodb.log.context': { - category: 'mongodb', - description: 'Context of message ', - example: 'initandlisten', - name: 'mongodb.log.context', - type: 'keyword', - }, - 'mongodb.log.severity': { - category: 'mongodb', - name: 'mongodb.log.severity', - type: 'alias', - }, - 'mongodb.log.message': { - category: 'mongodb', - name: 'mongodb.log.message', - type: 'alias', - }, - 'mongodb.log.id': { - category: 'mongodb', - description: 'Integer representing the unique identifier of the log statement ', - example: 4615611, - name: 'mongodb.log.id', - type: 'long', - }, - 'mysql.thread_id': { - category: 'mysql', - description: 'The connection or thread ID for the query. ', - name: 'mysql.thread_id', - type: 'long', - }, - 'mysql.error.thread_id': { - category: 'mysql', - name: 'mysql.error.thread_id', - type: 'alias', - }, - 'mysql.error.level': { - category: 'mysql', - name: 'mysql.error.level', - type: 'alias', - }, - 'mysql.error.message': { - category: 'mysql', - name: 'mysql.error.message', - type: 'alias', - }, - 'mysql.slowlog.lock_time.sec': { - category: 'mysql', - description: - 'The amount of time the query waited for the lock to be available. The value is in seconds, as a floating point number. ', - name: 'mysql.slowlog.lock_time.sec', - type: 'float', - }, - 'mysql.slowlog.rows_sent': { - category: 'mysql', - description: 'The number of rows returned by the query. ', - name: 'mysql.slowlog.rows_sent', - type: 'long', - }, - 'mysql.slowlog.rows_examined': { - category: 'mysql', - description: 'The number of rows scanned by the query. ', - name: 'mysql.slowlog.rows_examined', - type: 'long', - }, - 'mysql.slowlog.rows_affected': { - category: 'mysql', - description: 'The number of rows modified by the query. ', - name: 'mysql.slowlog.rows_affected', - type: 'long', - }, - 'mysql.slowlog.bytes_sent': { - category: 'mysql', - description: 'The number of bytes sent to client. ', - name: 'mysql.slowlog.bytes_sent', - type: 'long', - format: 'bytes', - }, - 'mysql.slowlog.bytes_received': { - category: 'mysql', - description: 'The number of bytes received from client. ', - name: 'mysql.slowlog.bytes_received', - type: 'long', - format: 'bytes', - }, - 'mysql.slowlog.query': { - category: 'mysql', - description: 'The slow query. ', - name: 'mysql.slowlog.query', - }, - 'mysql.slowlog.id': { - category: 'mysql', - name: 'mysql.slowlog.id', - type: 'alias', - }, - 'mysql.slowlog.schema': { - category: 'mysql', - description: 'The schema where the slow query was executed. ', - name: 'mysql.slowlog.schema', - type: 'keyword', - }, - 'mysql.slowlog.current_user': { - category: 'mysql', - description: - 'Current authenticated user, used to determine access privileges. Can differ from the value for user. ', - name: 'mysql.slowlog.current_user', - type: 'keyword', - }, - 'mysql.slowlog.last_errno': { - category: 'mysql', - description: 'Last SQL error seen. ', - name: 'mysql.slowlog.last_errno', - type: 'keyword', - }, - 'mysql.slowlog.killed': { - category: 'mysql', - description: 'Code of the reason if the query was killed. ', - name: 'mysql.slowlog.killed', - type: 'keyword', - }, - 'mysql.slowlog.query_cache_hit': { - category: 'mysql', - description: 'Whether the query cache was hit. ', - name: 'mysql.slowlog.query_cache_hit', - type: 'boolean', - }, - 'mysql.slowlog.tmp_table': { - category: 'mysql', - description: 'Whether a temporary table was used to resolve the query. ', - name: 'mysql.slowlog.tmp_table', - type: 'boolean', - }, - 'mysql.slowlog.tmp_table_on_disk': { - category: 'mysql', - description: 'Whether the query needed temporary tables on disk. ', - name: 'mysql.slowlog.tmp_table_on_disk', - type: 'boolean', - }, - 'mysql.slowlog.tmp_tables': { - category: 'mysql', - description: 'Number of temporary tables created for this query ', - name: 'mysql.slowlog.tmp_tables', - type: 'long', - }, - 'mysql.slowlog.tmp_disk_tables': { - category: 'mysql', - description: 'Number of temporary tables created on disk for this query. ', - name: 'mysql.slowlog.tmp_disk_tables', - type: 'long', - }, - 'mysql.slowlog.tmp_table_sizes': { - category: 'mysql', - description: 'Size of temporary tables created for this query.', - name: 'mysql.slowlog.tmp_table_sizes', - type: 'long', - format: 'bytes', - }, - 'mysql.slowlog.filesort': { - category: 'mysql', - description: 'Whether filesort optimization was used. ', - name: 'mysql.slowlog.filesort', - type: 'boolean', - }, - 'mysql.slowlog.filesort_on_disk': { - category: 'mysql', - description: 'Whether filesort optimization was used and it needed temporary tables on disk. ', - name: 'mysql.slowlog.filesort_on_disk', - type: 'boolean', - }, - 'mysql.slowlog.priority_queue': { - category: 'mysql', - description: 'Whether a priority queue was used for filesort. ', - name: 'mysql.slowlog.priority_queue', - type: 'boolean', - }, - 'mysql.slowlog.full_scan': { - category: 'mysql', - description: 'Whether a full table scan was needed for the slow query. ', - name: 'mysql.slowlog.full_scan', - type: 'boolean', - }, - 'mysql.slowlog.full_join': { - category: 'mysql', - description: - 'Whether a full join was needed for the slow query (no indexes were used for joins). ', - name: 'mysql.slowlog.full_join', - type: 'boolean', - }, - 'mysql.slowlog.merge_passes': { - category: 'mysql', - description: 'Number of merge passes executed for the query. ', - name: 'mysql.slowlog.merge_passes', - type: 'long', - }, - 'mysql.slowlog.sort_merge_passes': { - category: 'mysql', - description: 'Number of merge passes that the sort algorithm has had to do. ', - name: 'mysql.slowlog.sort_merge_passes', - type: 'long', - }, - 'mysql.slowlog.sort_range_count': { - category: 'mysql', - description: 'Number of sorts that were done using ranges. ', - name: 'mysql.slowlog.sort_range_count', - type: 'long', - }, - 'mysql.slowlog.sort_rows': { - category: 'mysql', - description: 'Number of sorted rows. ', - name: 'mysql.slowlog.sort_rows', - type: 'long', - }, - 'mysql.slowlog.sort_scan_count': { - category: 'mysql', - description: 'Number of sorts that were done by scanning the table. ', - name: 'mysql.slowlog.sort_scan_count', - type: 'long', - }, - 'mysql.slowlog.log_slow_rate_type': { - category: 'mysql', - description: - 'Type of slow log rate limit, it can be `session` if the rate limit is applied per session, or `query` if it applies per query. ', - name: 'mysql.slowlog.log_slow_rate_type', - type: 'keyword', - }, - 'mysql.slowlog.log_slow_rate_limit': { - category: 'mysql', - description: - 'Slow log rate limit, a value of 100 means that one in a hundred queries or sessions are being logged. ', - name: 'mysql.slowlog.log_slow_rate_limit', - type: 'keyword', - }, - 'mysql.slowlog.read_first': { - category: 'mysql', - description: 'The number of times the first entry in an index was read. ', - name: 'mysql.slowlog.read_first', - type: 'long', - }, - 'mysql.slowlog.read_last': { - category: 'mysql', - description: 'The number of times the last key in an index was read. ', - name: 'mysql.slowlog.read_last', - type: 'long', - }, - 'mysql.slowlog.read_key': { - category: 'mysql', - description: 'The number of requests to read a row based on a key. ', - name: 'mysql.slowlog.read_key', - type: 'long', - }, - 'mysql.slowlog.read_next': { - category: 'mysql', - description: 'The number of requests to read the next row in key order. ', - name: 'mysql.slowlog.read_next', - type: 'long', - }, - 'mysql.slowlog.read_prev': { - category: 'mysql', - description: 'The number of requests to read the previous row in key order. ', - name: 'mysql.slowlog.read_prev', - type: 'long', - }, - 'mysql.slowlog.read_rnd': { - category: 'mysql', - description: 'The number of requests to read a row based on a fixed position. ', - name: 'mysql.slowlog.read_rnd', - type: 'long', - }, - 'mysql.slowlog.read_rnd_next': { - category: 'mysql', - description: 'The number of requests to read the next row in the data file. ', - name: 'mysql.slowlog.read_rnd_next', - type: 'long', - }, - 'mysql.slowlog.innodb.trx_id': { - category: 'mysql', - description: 'Transaction ID ', - name: 'mysql.slowlog.innodb.trx_id', - type: 'keyword', - }, - 'mysql.slowlog.innodb.io_r_ops': { - category: 'mysql', - description: 'Number of page read operations. ', - name: 'mysql.slowlog.innodb.io_r_ops', - type: 'long', - }, - 'mysql.slowlog.innodb.io_r_bytes': { - category: 'mysql', - description: 'Bytes read during page read operations. ', - name: 'mysql.slowlog.innodb.io_r_bytes', - type: 'long', - format: 'bytes', - }, - 'mysql.slowlog.innodb.io_r_wait.sec': { - category: 'mysql', - description: 'How long it took to read all needed data from storage. ', - name: 'mysql.slowlog.innodb.io_r_wait.sec', - type: 'long', - }, - 'mysql.slowlog.innodb.rec_lock_wait.sec': { - category: 'mysql', - description: 'How long the query waited for locks. ', - name: 'mysql.slowlog.innodb.rec_lock_wait.sec', - type: 'long', - }, - 'mysql.slowlog.innodb.queue_wait.sec': { - category: 'mysql', - description: - 'How long the query waited to enter the InnoDB queue and to be executed once in the queue. ', - name: 'mysql.slowlog.innodb.queue_wait.sec', - type: 'long', - }, - 'mysql.slowlog.innodb.pages_distinct': { - category: 'mysql', - description: 'Approximated count of pages accessed to execute the query. ', - name: 'mysql.slowlog.innodb.pages_distinct', - type: 'long', - }, - 'mysql.slowlog.user': { - category: 'mysql', - name: 'mysql.slowlog.user', - type: 'alias', - }, - 'mysql.slowlog.host': { - category: 'mysql', - name: 'mysql.slowlog.host', - type: 'alias', - }, - 'mysql.slowlog.ip': { - category: 'mysql', - name: 'mysql.slowlog.ip', - type: 'alias', - }, - 'nats.log.client.id': { - category: 'nats', - description: 'The id of the client ', - name: 'nats.log.client.id', - type: 'integer', - }, - 'nats.log.msg.bytes': { - category: 'nats', - description: 'Size of the payload in bytes ', - name: 'nats.log.msg.bytes', - type: 'long', - format: 'bytes', - }, - 'nats.log.msg.type': { - category: 'nats', - description: 'The protocol message type ', - name: 'nats.log.msg.type', - type: 'keyword', - }, - 'nats.log.msg.subject': { - category: 'nats', - description: 'Subject name this message was received on ', - name: 'nats.log.msg.subject', - type: 'keyword', - }, - 'nats.log.msg.sid': { - category: 'nats', - description: 'The unique alphanumeric subscription ID of the subject ', - name: 'nats.log.msg.sid', - type: 'integer', - }, - 'nats.log.msg.reply_to': { - category: 'nats', - description: 'The inbox subject on which the publisher is listening for responses ', - name: 'nats.log.msg.reply_to', - type: 'keyword', - }, - 'nats.log.msg.max_messages': { - category: 'nats', - description: 'An optional number of messages to wait for before automatically unsubscribing ', - name: 'nats.log.msg.max_messages', - type: 'integer', - }, - 'nats.log.msg.error.message': { - category: 'nats', - description: 'Details about the error occurred ', - name: 'nats.log.msg.error.message', - type: 'text', - }, - 'nats.log.msg.queue_group': { - category: 'nats', - description: 'The queue group which subscriber will join ', - name: 'nats.log.msg.queue_group', - type: 'text', - }, - 'nginx.access.remote_ip_list': { - category: 'nginx', - description: - 'An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. Real source IP is restored to `source.ip`. ', - name: 'nginx.access.remote_ip_list', - type: 'array', - }, - 'nginx.access.body_sent.bytes': { - category: 'nginx', - name: 'nginx.access.body_sent.bytes', - type: 'alias', - }, - 'nginx.access.user_name': { - category: 'nginx', - name: 'nginx.access.user_name', - type: 'alias', - }, - 'nginx.access.method': { - category: 'nginx', - name: 'nginx.access.method', - type: 'alias', - }, - 'nginx.access.url': { - category: 'nginx', - name: 'nginx.access.url', - type: 'alias', - }, - 'nginx.access.http_version': { - category: 'nginx', - name: 'nginx.access.http_version', - type: 'alias', - }, - 'nginx.access.response_code': { - category: 'nginx', - name: 'nginx.access.response_code', - type: 'alias', - }, - 'nginx.access.referrer': { - category: 'nginx', - name: 'nginx.access.referrer', - type: 'alias', - }, - 'nginx.access.agent': { - category: 'nginx', - name: 'nginx.access.agent', - type: 'alias', - }, - 'nginx.access.user_agent.device': { - category: 'nginx', - name: 'nginx.access.user_agent.device', - type: 'alias', - }, - 'nginx.access.user_agent.name': { - category: 'nginx', - name: 'nginx.access.user_agent.name', - type: 'alias', - }, - 'nginx.access.user_agent.os': { - category: 'nginx', - name: 'nginx.access.user_agent.os', - type: 'alias', - }, - 'nginx.access.user_agent.os_name': { - category: 'nginx', - name: 'nginx.access.user_agent.os_name', - type: 'alias', - }, - 'nginx.access.user_agent.original': { - category: 'nginx', - name: 'nginx.access.user_agent.original', - type: 'alias', - }, - 'nginx.access.geoip.continent_name': { - category: 'nginx', - name: 'nginx.access.geoip.continent_name', - type: 'alias', - }, - 'nginx.access.geoip.country_iso_code': { - category: 'nginx', - name: 'nginx.access.geoip.country_iso_code', - type: 'alias', - }, - 'nginx.access.geoip.location': { - category: 'nginx', - name: 'nginx.access.geoip.location', - type: 'alias', - }, - 'nginx.access.geoip.region_name': { - category: 'nginx', - name: 'nginx.access.geoip.region_name', - type: 'alias', - }, - 'nginx.access.geoip.city_name': { - category: 'nginx', - name: 'nginx.access.geoip.city_name', - type: 'alias', - }, - 'nginx.access.geoip.region_iso_code': { - category: 'nginx', - name: 'nginx.access.geoip.region_iso_code', - type: 'alias', - }, - 'nginx.error.connection_id': { - category: 'nginx', - description: 'Connection identifier. ', - name: 'nginx.error.connection_id', - type: 'long', - }, - 'nginx.error.level': { - category: 'nginx', - name: 'nginx.error.level', - type: 'alias', - }, - 'nginx.error.pid': { - category: 'nginx', - name: 'nginx.error.pid', - type: 'alias', - }, - 'nginx.error.tid': { - category: 'nginx', - name: 'nginx.error.tid', - type: 'alias', - }, - 'nginx.error.message': { - category: 'nginx', - name: 'nginx.error.message', - type: 'alias', - }, - 'nginx.ingress_controller.remote_ip_list': { - category: 'nginx', - description: - 'An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. Real source IP is restored to `source.ip`. ', - name: 'nginx.ingress_controller.remote_ip_list', - type: 'array', - }, - 'nginx.ingress_controller.upstream_address_list': { - category: 'nginx', - description: - 'An array of the upstream addresses. It is a list because it is common that several upstream servers were contacted during request processing. ', - name: 'nginx.ingress_controller.upstream_address_list', - type: 'keyword', - }, - 'nginx.ingress_controller.upstream.response.length_list': { - category: 'nginx', - description: - 'An array of upstream response lengths. It is a list because it is common that several upstream servers were contacted during request processing. ', - name: 'nginx.ingress_controller.upstream.response.length_list', - type: 'keyword', - }, - 'nginx.ingress_controller.upstream.response.time_list': { - category: 'nginx', - description: - 'An array of upstream response durations. It is a list because it is common that several upstream servers were contacted during request processing. ', - name: 'nginx.ingress_controller.upstream.response.time_list', - type: 'keyword', - }, - 'nginx.ingress_controller.upstream.response.status_code_list': { - category: 'nginx', - description: - 'An array of upstream response status codes. It is a list because it is common that several upstream servers were contacted during request processing. ', - name: 'nginx.ingress_controller.upstream.response.status_code_list', - type: 'keyword', - }, - 'nginx.ingress_controller.http.request.length': { - category: 'nginx', - description: 'The request length (including request line, header, and request body) ', - name: 'nginx.ingress_controller.http.request.length', - type: 'long', - format: 'bytes', - }, - 'nginx.ingress_controller.http.request.time': { - category: 'nginx', - description: 'Time elapsed since the first bytes were read from the client ', - name: 'nginx.ingress_controller.http.request.time', - type: 'double', - format: 'duration', - }, - 'nginx.ingress_controller.upstream.name': { - category: 'nginx', - description: 'The name of the upstream. ', - name: 'nginx.ingress_controller.upstream.name', - type: 'keyword', - }, - 'nginx.ingress_controller.upstream.alternative_name': { - category: 'nginx', - description: 'The name of the alternative upstream. ', - name: 'nginx.ingress_controller.upstream.alternative_name', - type: 'keyword', - }, - 'nginx.ingress_controller.upstream.response.length': { - category: 'nginx', - description: - 'The length of the response obtained from the upstream server. If several servers were contacted during request process, the summary of the multiple response lengths is stored. ', - name: 'nginx.ingress_controller.upstream.response.length', - type: 'long', - format: 'bytes', - }, - 'nginx.ingress_controller.upstream.response.time': { - category: 'nginx', - description: - 'The time spent on receiving the response from the upstream as seconds with millisecond resolution. If several servers were contacted during request process, the summary of the multiple response times is stored. ', - name: 'nginx.ingress_controller.upstream.response.time', - type: 'double', - format: 'duration', - }, - 'nginx.ingress_controller.upstream.response.status_code': { - category: 'nginx', - description: - 'The status code of the response obtained from the upstream server. If several servers were contacted during request process, only the status code of the response from the last one is stored in this field. ', - name: 'nginx.ingress_controller.upstream.response.status_code', - type: 'long', - }, - 'nginx.ingress_controller.upstream.ip': { - category: 'nginx', - description: - 'The IP address of the upstream server. If several servers were contacted during request process, only the last one is stored in this field. ', - name: 'nginx.ingress_controller.upstream.ip', - type: 'ip', - }, - 'nginx.ingress_controller.upstream.port': { - category: 'nginx', - description: - 'The port of the upstream server. If several servers were contacted during request process, only the last one is stored in this field. ', - name: 'nginx.ingress_controller.upstream.port', - type: 'long', - }, - 'nginx.ingress_controller.http.request.id': { - category: 'nginx', - description: 'The randomly generated ID of the request ', - name: 'nginx.ingress_controller.http.request.id', - type: 'keyword', - }, - 'nginx.ingress_controller.body_sent.bytes': { - category: 'nginx', - name: 'nginx.ingress_controller.body_sent.bytes', - type: 'alias', - }, - 'nginx.ingress_controller.user_name': { - category: 'nginx', - name: 'nginx.ingress_controller.user_name', - type: 'alias', - }, - 'nginx.ingress_controller.method': { - category: 'nginx', - name: 'nginx.ingress_controller.method', - type: 'alias', - }, - 'nginx.ingress_controller.url': { - category: 'nginx', - name: 'nginx.ingress_controller.url', - type: 'alias', - }, - 'nginx.ingress_controller.http_version': { - category: 'nginx', - name: 'nginx.ingress_controller.http_version', - type: 'alias', - }, - 'nginx.ingress_controller.response_code': { - category: 'nginx', - name: 'nginx.ingress_controller.response_code', - type: 'alias', - }, - 'nginx.ingress_controller.referrer': { - category: 'nginx', - name: 'nginx.ingress_controller.referrer', - type: 'alias', - }, - 'nginx.ingress_controller.agent': { - category: 'nginx', - name: 'nginx.ingress_controller.agent', - type: 'alias', - }, - 'nginx.ingress_controller.user_agent.device': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.device', - type: 'alias', - }, - 'nginx.ingress_controller.user_agent.name': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.name', - type: 'alias', - }, - 'nginx.ingress_controller.user_agent.os': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.os', - type: 'alias', - }, - 'nginx.ingress_controller.user_agent.os_name': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.os_name', - type: 'alias', - }, - 'nginx.ingress_controller.user_agent.original': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.original', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.continent_name': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.continent_name', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.country_iso_code': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.country_iso_code', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.location': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.location', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.region_name': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.region_name', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.city_name': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.city_name', - type: 'alias', - }, - 'nginx.ingress_controller.geoip.region_iso_code': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.region_iso_code', - type: 'alias', - }, - 'osquery.result.name': { - category: 'osquery', - description: 'The name of the query that generated this event. ', - name: 'osquery.result.name', - type: 'keyword', - }, - 'osquery.result.action': { - category: 'osquery', - description: - 'For incremental data, marks whether the entry was added or removed. It can be one of "added", "removed", or "snapshot". ', - name: 'osquery.result.action', - type: 'keyword', - }, - 'osquery.result.host_identifier': { - category: 'osquery', - description: - 'The identifier for the host on which the osquery agent is running. Normally the hostname. ', - name: 'osquery.result.host_identifier', - type: 'keyword', - }, - 'osquery.result.unix_time': { - category: 'osquery', - description: - 'Unix timestamp of the event, in seconds since the epoch. Used for computing the `@timestamp` column. ', - name: 'osquery.result.unix_time', - type: 'long', - }, - 'osquery.result.calendar_time': { - category: 'osquery', - description: 'String representation of the collection time, as formatted by osquery. ', - name: 'osquery.result.calendar_time', - type: 'keyword', - }, - 'pensando.dfw.action': { - category: 'pensando', - description: 'Action on the flow. ', - name: 'pensando.dfw.action', - type: 'keyword', - }, - 'pensando.dfw.app_id': { - category: 'pensando', - description: 'Application ID ', - name: 'pensando.dfw.app_id', - type: 'integer', - }, - 'pensando.dfw.destination_address': { - category: 'pensando', - description: 'Address of destination. ', - name: 'pensando.dfw.destination_address', - type: 'keyword', - }, - 'pensando.dfw.destination_port': { - category: 'pensando', - description: 'Port of destination. ', - name: 'pensando.dfw.destination_port', - type: 'integer', - }, - 'pensando.dfw.direction': { - category: 'pensando', - description: 'Direction of the flow ', - name: 'pensando.dfw.direction', - type: 'keyword', - }, - 'pensando.dfw.protocol': { - category: 'pensando', - description: 'Protocol of the flow ', - name: 'pensando.dfw.protocol', - type: 'keyword', - }, - 'pensando.dfw.rule_id': { - category: 'pensando', - description: 'Rule ID that was matched. ', - name: 'pensando.dfw.rule_id', - type: 'keyword', - }, - 'pensando.dfw.session_id': { - category: 'pensando', - description: 'Session ID of the flow ', - name: 'pensando.dfw.session_id', - type: 'integer', - }, - 'pensando.dfw.session_state': { - category: 'pensando', - description: 'Session state of the flow. ', - name: 'pensando.dfw.session_state', - type: 'keyword', - }, - 'pensando.dfw.source_address': { - category: 'pensando', - description: 'Source address of the flow. ', - name: 'pensando.dfw.source_address', - type: 'keyword', - }, - 'pensando.dfw.source_port': { - category: 'pensando', - description: 'Source port of the flow. ', - name: 'pensando.dfw.source_port', - type: 'integer', - }, - 'pensando.dfw.timestamp': { - category: 'pensando', - description: 'Timestamp of the log. ', - name: 'pensando.dfw.timestamp', - type: 'date', - }, - 'postgresql.log.timestamp': { - category: 'postgresql', - description: 'The timestamp from the log line. ', - name: 'postgresql.log.timestamp', - }, - 'postgresql.log.core_id': { - category: 'postgresql', - description: - 'Core id. (deprecated, there is no core_id in PostgreSQL logs, this is actually session_line_number). ', - name: 'postgresql.log.core_id', - type: 'alias', - }, - 'postgresql.log.client_addr': { - category: 'postgresql', - description: 'Host where the connection originated from. ', - example: '127.0.0.1', - name: 'postgresql.log.client_addr', - }, - 'postgresql.log.client_port': { - category: 'postgresql', - description: 'Port where the connection originated from. ', - example: '59700', - name: 'postgresql.log.client_port', - }, - 'postgresql.log.session_id': { - category: 'postgresql', - description: 'PostgreSQL session. ', - example: '5ff1dd98.22', - name: 'postgresql.log.session_id', - }, - 'postgresql.log.session_line_number': { - category: 'postgresql', - description: 'Line number inside a session. (%l in `log_line_prefix`). ', - name: 'postgresql.log.session_line_number', - type: 'long', - }, - 'postgresql.log.database': { - category: 'postgresql', - description: 'Name of database. ', - example: 'postgres', - name: 'postgresql.log.database', - }, - 'postgresql.log.query': { - category: 'postgresql', - description: - 'Query statement. In the case of CSV parse, look at command_tag to get more context. ', - example: 'SELECT * FROM users;', - name: 'postgresql.log.query', - }, - 'postgresql.log.query_step': { - category: 'postgresql', - description: - 'Statement step when using extended query protocol (one of statement, parse, bind or execute). ', - example: 'parse', - name: 'postgresql.log.query_step', - }, - 'postgresql.log.query_name': { - category: 'postgresql', - description: - 'Name given to a query when using extended query protocol. If it is "", or not present, this field is ignored. ', - example: 'pdo_stmt_00000001', - name: 'postgresql.log.query_name', - }, - 'postgresql.log.command_tag': { - category: 'postgresql', - description: - "Type of session's current command. The complete list can be found at: src/include/tcop/cmdtaglist.h ", - example: 'SELECT', - name: 'postgresql.log.command_tag', - }, - 'postgresql.log.session_start_time': { - category: 'postgresql', - description: 'Time when this session started. ', - name: 'postgresql.log.session_start_time', - type: 'date', - }, - 'postgresql.log.virtual_transaction_id': { - category: 'postgresql', - description: 'Backend local transaction id. ', - name: 'postgresql.log.virtual_transaction_id', - }, - 'postgresql.log.transaction_id': { - category: 'postgresql', - description: 'The id of current transaction. ', - name: 'postgresql.log.transaction_id', - type: 'long', - }, - 'postgresql.log.sql_state_code': { - category: 'postgresql', - description: - 'State code returned by Postgres (if any). See also https://www.postgresql.org/docs/current/errcodes-appendix.html ', - name: 'postgresql.log.sql_state_code', - type: 'keyword', - }, - 'postgresql.log.detail': { - category: 'postgresql', - description: - "More information about the message, parameters in case of a parametrized query. e.g. 'Role \\\"user\\\" does not exist.', 'parameters: $1 = 42', etc. ", - name: 'postgresql.log.detail', - }, - 'postgresql.log.hint': { - category: 'postgresql', - description: 'A possible solution to solve an error. ', - name: 'postgresql.log.hint', - }, - 'postgresql.log.internal_query': { - category: 'postgresql', - description: 'Internal query that led to the error (if any). ', - name: 'postgresql.log.internal_query', - }, - 'postgresql.log.internal_query_pos': { - category: 'postgresql', - description: 'Character count of the internal query (if any). ', - name: 'postgresql.log.internal_query_pos', - type: 'long', - }, - 'postgresql.log.context': { - category: 'postgresql', - description: 'Error context. ', - name: 'postgresql.log.context', - }, - 'postgresql.log.query_pos': { - category: 'postgresql', - description: 'Character count of the error position (if any). ', - name: 'postgresql.log.query_pos', - type: 'long', - }, - 'postgresql.log.location': { - category: 'postgresql', - description: - 'Location of the error in the PostgreSQL source code (if log_error_verbosity is set to verbose). ', - name: 'postgresql.log.location', - }, - 'postgresql.log.application_name': { - category: 'postgresql', - description: 'Name of the application of this event. It is defined by the client. ', - name: 'postgresql.log.application_name', - }, - 'postgresql.log.backend_type': { - category: 'postgresql', - description: - 'Type of backend of this event. Possible types are autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, startup, walreceiver, walsender and walwriter. In addition, background workers registered by extensions may have additional types. ', - example: 'client backend', - name: 'postgresql.log.backend_type', - }, - 'postgresql.log.error.code': { - category: 'postgresql', - description: - 'Error code returned by Postgres (if any). Deprecated: errors can have letters. Use sql_state_code instead. ', - name: 'postgresql.log.error.code', - type: 'alias', - }, - 'postgresql.log.timezone': { - category: 'postgresql', - name: 'postgresql.log.timezone', - type: 'alias', - }, - 'postgresql.log.user': { - category: 'postgresql', - name: 'postgresql.log.user', - type: 'alias', - }, - 'postgresql.log.level': { - category: 'postgresql', - description: - 'Valid values are DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC. ', - example: 'LOG', - name: 'postgresql.log.level', - type: 'alias', - }, - 'postgresql.log.message': { - category: 'postgresql', - name: 'postgresql.log.message', - type: 'alias', - }, - 'redis.log.role': { - category: 'redis', - description: - 'The role of the Redis instance. Can be one of `master`, `slave`, `child` (for RDF/AOF writing child), or `sentinel`. ', - name: 'redis.log.role', - type: 'keyword', - }, - 'redis.log.pid': { - category: 'redis', - name: 'redis.log.pid', - type: 'alias', - }, - 'redis.log.level': { - category: 'redis', - name: 'redis.log.level', - type: 'alias', - }, - 'redis.log.message': { - category: 'redis', - name: 'redis.log.message', - type: 'alias', - }, - 'redis.slowlog.cmd': { - category: 'redis', - description: 'The command executed. ', - name: 'redis.slowlog.cmd', - type: 'keyword', - }, - 'redis.slowlog.duration.us': { - category: 'redis', - description: 'How long it took to execute the command in microseconds. ', - name: 'redis.slowlog.duration.us', - type: 'long', - }, - 'redis.slowlog.id': { - category: 'redis', - description: 'The ID of the query. ', - name: 'redis.slowlog.id', - type: 'long', - }, - 'redis.slowlog.key': { - category: 'redis', - description: 'The key on which the command was executed. ', - name: 'redis.slowlog.key', - type: 'keyword', - }, - 'redis.slowlog.args': { - category: 'redis', - description: 'The arguments with which the command was called. ', - name: 'redis.slowlog.args', - type: 'keyword', - }, - 'santa.action': { - category: 'santa', - description: 'Action', - example: 'EXEC', - name: 'santa.action', - type: 'keyword', - }, - 'santa.decision': { - category: 'santa', - description: 'Decision that santad took.', - example: 'ALLOW', - name: 'santa.decision', - type: 'keyword', - }, - 'santa.reason': { - category: 'santa', - description: 'Reason for the decsision.', - example: 'CERT', - name: 'santa.reason', - type: 'keyword', - }, - 'santa.mode': { - category: 'santa', - description: 'Operating mode of Santa.', - example: 'M', - name: 'santa.mode', - type: 'keyword', - }, - 'santa.disk.volume': { - category: 'santa', - description: 'The volume name.', - name: 'santa.disk.volume', - }, - 'santa.disk.bus': { - category: 'santa', - description: 'The disk bus protocol.', - name: 'santa.disk.bus', - }, - 'santa.disk.serial': { - category: 'santa', - description: 'The disk serial number.', - name: 'santa.disk.serial', - }, - 'santa.disk.bsdname': { - category: 'santa', - description: 'The disk BSD name.', - example: 'disk1s3', - name: 'santa.disk.bsdname', - }, - 'santa.disk.model': { - category: 'santa', - description: 'The disk model.', - example: 'APPLE SSD SM0512L', - name: 'santa.disk.model', - }, - 'santa.disk.fs': { - category: 'santa', - description: 'The disk volume kind (filesystem type).', - example: 'apfs', - name: 'santa.disk.fs', - }, - 'santa.disk.mount': { - category: 'santa', - description: 'The disk volume path.', - name: 'santa.disk.mount', - }, - 'santa.certificate.common_name': { - category: 'santa', - description: 'Common name from code signing certificate.', - name: 'santa.certificate.common_name', - type: 'keyword', - }, - 'santa.certificate.sha256': { - category: 'santa', - description: 'SHA256 hash of code signing certificate.', - name: 'santa.certificate.sha256', - type: 'keyword', - }, - 'system.auth.timestamp': { - category: 'system', - name: 'system.auth.timestamp', - type: 'alias', - }, - 'system.auth.hostname': { - category: 'system', - name: 'system.auth.hostname', - type: 'alias', - }, - 'system.auth.program': { - category: 'system', - name: 'system.auth.program', - type: 'alias', - }, - 'system.auth.pid': { - category: 'system', - name: 'system.auth.pid', - type: 'alias', - }, - 'system.auth.message': { - category: 'system', - name: 'system.auth.message', - type: 'alias', - }, - 'system.auth.user': { - category: 'system', - name: 'system.auth.user', - type: 'alias', - }, - 'system.auth.ssh.method': { - category: 'system', - description: 'The SSH authentication method. Can be one of "password" or "publickey". ', - name: 'system.auth.ssh.method', - }, - 'system.auth.ssh.signature': { - category: 'system', - description: 'The signature of the client public key. ', - name: 'system.auth.ssh.signature', - }, - 'system.auth.ssh.dropped_ip': { - category: 'system', - description: 'The client IP from SSH connections that are open and immediately dropped. ', - name: 'system.auth.ssh.dropped_ip', - type: 'ip', - }, - 'system.auth.ssh.event': { - category: 'system', - description: 'The SSH event as found in the logs (Accepted, Invalid, Failed, etc.) ', - example: 'Accepted', - name: 'system.auth.ssh.event', - }, - 'system.auth.ssh.ip': { - category: 'system', - name: 'system.auth.ssh.ip', - type: 'alias', - }, - 'system.auth.ssh.port': { - category: 'system', - name: 'system.auth.ssh.port', - type: 'alias', - }, - 'system.auth.ssh.geoip.continent_name': { - category: 'system', - name: 'system.auth.ssh.geoip.continent_name', - type: 'alias', - }, - 'system.auth.ssh.geoip.country_iso_code': { - category: 'system', - name: 'system.auth.ssh.geoip.country_iso_code', - type: 'alias', - }, - 'system.auth.ssh.geoip.location': { - category: 'system', - name: 'system.auth.ssh.geoip.location', - type: 'alias', - }, - 'system.auth.ssh.geoip.region_name': { - category: 'system', - name: 'system.auth.ssh.geoip.region_name', - type: 'alias', - }, - 'system.auth.ssh.geoip.city_name': { - category: 'system', - name: 'system.auth.ssh.geoip.city_name', - type: 'alias', - }, - 'system.auth.ssh.geoip.region_iso_code': { - category: 'system', - name: 'system.auth.ssh.geoip.region_iso_code', - type: 'alias', - }, - 'system.auth.sudo.error': { - category: 'system', - description: 'The error message in case the sudo command failed. ', - example: 'user NOT in sudoers', - name: 'system.auth.sudo.error', - }, - 'system.auth.sudo.tty': { - category: 'system', - description: 'The TTY where the sudo command is executed. ', - name: 'system.auth.sudo.tty', - }, - 'system.auth.sudo.pwd': { - category: 'system', - description: 'The current directory where the sudo command is executed. ', - name: 'system.auth.sudo.pwd', - }, - 'system.auth.sudo.user': { - category: 'system', - description: 'The target user to which the sudo command is switching. ', - example: 'root', - name: 'system.auth.sudo.user', - }, - 'system.auth.sudo.command': { - category: 'system', - description: 'The command executed via sudo. ', - name: 'system.auth.sudo.command', - }, - 'system.auth.useradd.home': { - category: 'system', - description: 'The home folder for the new user.', - name: 'system.auth.useradd.home', - }, - 'system.auth.useradd.shell': { - category: 'system', - description: 'The default shell for the new user.', - name: 'system.auth.useradd.shell', - }, - 'system.auth.useradd.name': { - category: 'system', - name: 'system.auth.useradd.name', - type: 'alias', - }, - 'system.auth.useradd.uid': { - category: 'system', - name: 'system.auth.useradd.uid', - type: 'alias', - }, - 'system.auth.useradd.gid': { - category: 'system', - name: 'system.auth.useradd.gid', - type: 'alias', - }, - 'system.auth.groupadd.name': { - category: 'system', - name: 'system.auth.groupadd.name', - type: 'alias', - }, - 'system.auth.groupadd.gid': { - category: 'system', - name: 'system.auth.groupadd.gid', - type: 'alias', - }, - 'system.syslog.timestamp': { - category: 'system', - name: 'system.syslog.timestamp', - type: 'alias', - }, - 'system.syslog.hostname': { - category: 'system', - name: 'system.syslog.hostname', - type: 'alias', - }, - 'system.syslog.program': { - category: 'system', - name: 'system.syslog.program', - type: 'alias', - }, - 'system.syslog.pid': { - category: 'system', - name: 'system.syslog.pid', - type: 'alias', - }, - 'system.syslog.message': { - category: 'system', - name: 'system.syslog.message', - type: 'alias', - }, - 'traefik.access.user_identifier': { - category: 'traefik', - description: 'Is the RFC 1413 identity of the client ', - name: 'traefik.access.user_identifier', - type: 'keyword', - }, - 'traefik.access.request_count': { - category: 'traefik', - description: 'The number of requests ', - name: 'traefik.access.request_count', - type: 'long', - }, - 'traefik.access.frontend_name': { - category: 'traefik', - description: 'The name of the frontend used ', - name: 'traefik.access.frontend_name', - type: 'keyword', - }, - 'traefik.access.backend_url': { - category: 'traefik', - description: 'The url of the backend where request is forwarded', - name: 'traefik.access.backend_url', - type: 'keyword', - }, - 'traefik.access.body_sent.bytes': { - category: 'traefik', - name: 'traefik.access.body_sent.bytes', - type: 'alias', - }, - 'traefik.access.remote_ip': { - category: 'traefik', - name: 'traefik.access.remote_ip', - type: 'alias', - }, - 'traefik.access.user_name': { - category: 'traefik', - name: 'traefik.access.user_name', - type: 'alias', - }, - 'traefik.access.method': { - category: 'traefik', - name: 'traefik.access.method', - type: 'alias', - }, - 'traefik.access.url': { - category: 'traefik', - name: 'traefik.access.url', - type: 'alias', - }, - 'traefik.access.http_version': { - category: 'traefik', - name: 'traefik.access.http_version', - type: 'alias', - }, - 'traefik.access.response_code': { - category: 'traefik', - name: 'traefik.access.response_code', - type: 'alias', - }, - 'traefik.access.referrer': { - category: 'traefik', - name: 'traefik.access.referrer', - type: 'alias', - }, - 'traefik.access.agent': { - category: 'traefik', - name: 'traefik.access.agent', - type: 'alias', - }, - 'traefik.access.user_agent.device': { - category: 'traefik', - name: 'traefik.access.user_agent.device', - type: 'alias', - }, - 'traefik.access.user_agent.name': { - category: 'traefik', - name: 'traefik.access.user_agent.name', - type: 'alias', - }, - 'traefik.access.user_agent.os': { - category: 'traefik', - name: 'traefik.access.user_agent.os', - type: 'alias', - }, - 'traefik.access.user_agent.os_name': { - category: 'traefik', - name: 'traefik.access.user_agent.os_name', - type: 'alias', - }, - 'traefik.access.user_agent.original': { - category: 'traefik', - name: 'traefik.access.user_agent.original', - type: 'alias', - }, - 'traefik.access.geoip.continent_name': { - category: 'traefik', - name: 'traefik.access.geoip.continent_name', - type: 'alias', - }, - 'traefik.access.geoip.country_iso_code': { - category: 'traefik', - name: 'traefik.access.geoip.country_iso_code', - type: 'alias', - }, - 'traefik.access.geoip.location': { - category: 'traefik', - name: 'traefik.access.geoip.location', - type: 'alias', - }, - 'traefik.access.geoip.region_name': { - category: 'traefik', - name: 'traefik.access.geoip.region_name', - type: 'alias', - }, - 'traefik.access.geoip.city_name': { - category: 'traefik', - name: 'traefik.access.geoip.city_name', - type: 'alias', - }, - 'traefik.access.geoip.region_iso_code': { - category: 'traefik', - name: 'traefik.access.geoip.region_iso_code', - type: 'alias', - }, - 'activemq.caller': { - category: 'activemq', - description: 'Name of the caller issuing the logging request (class or resource). ', - name: 'activemq.caller', - type: 'keyword', - }, - 'activemq.thread': { - category: 'activemq', - description: 'Thread that generated the logging event. ', - name: 'activemq.thread', - type: 'keyword', - }, - 'activemq.user': { - category: 'activemq', - description: 'User that generated the logging event. ', - name: 'activemq.user', - type: 'keyword', - }, - 'activemq.audit': { - category: 'activemq', - description: 'Fields from ActiveMQ audit logs. ', - name: 'activemq.audit', - type: 'group', - }, - 'activemq.log.stack_trace': { - category: 'activemq', - name: 'activemq.log.stack_trace', - type: 'keyword', - }, - 'aws.cloudtrail.event_version': { - category: 'aws', - description: 'The CloudTrail version of the log event format. ', - name: 'aws.cloudtrail.event_version', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.type': { - category: 'aws', - description: 'The type of the identity ', - name: 'aws.cloudtrail.user_identity.type', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.arn': { - category: 'aws', - description: 'The Amazon Resource Name (ARN) of the principal that made the call.', - name: 'aws.cloudtrail.user_identity.arn', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.access_key_id': { - category: 'aws', - description: 'The access key ID that was used to sign the request.', - name: 'aws.cloudtrail.user_identity.access_key_id', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.session_context.mfa_authenticated': { - category: 'aws', - description: - 'The value is true if the root user or IAM user whose credentials were used for the request also was authenticated with an MFA device; otherwise, false.', - name: 'aws.cloudtrail.user_identity.session_context.mfa_authenticated', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.session_context.creation_date': { - category: 'aws', - description: 'The date and time when the temporary security credentials were issued.', - name: 'aws.cloudtrail.user_identity.session_context.creation_date', - type: 'date', - }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.type': { - category: 'aws', - description: - 'The source of the temporary security credentials, such as Root, IAMUser, or Role.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.type', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.principal_id': { - category: 'aws', - description: 'The internal ID of the entity that was used to get credentials.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.principal_id', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.arn': { - category: 'aws', - description: - 'The ARN of the source (account, IAM user, or role) that was used to get temporary security credentials.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.arn', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.account_id': { - category: 'aws', - description: 'The account that owns the entity that was used to get credentials.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.account_id', - type: 'keyword', - }, - 'aws.cloudtrail.user_identity.invoked_by': { - category: 'aws', - description: - 'The name of the AWS service that made the request, such as Amazon EC2 Auto Scaling or AWS Elastic Beanstalk.', - name: 'aws.cloudtrail.user_identity.invoked_by', - type: 'keyword', - }, - 'aws.cloudtrail.error_code': { - category: 'aws', - description: 'The AWS service error if the request returns an error.', - name: 'aws.cloudtrail.error_code', - type: 'keyword', - }, - 'aws.cloudtrail.error_message': { - category: 'aws', - description: 'If the request returns an error, the description of the error.', - name: 'aws.cloudtrail.error_message', - type: 'keyword', - }, - 'aws.cloudtrail.request_parameters': { - category: 'aws', - description: 'The parameters, if any, that were sent with the request.', - name: 'aws.cloudtrail.request_parameters', - type: 'keyword', - }, - 'aws.cloudtrail.response_elements': { - category: 'aws', - description: - 'The response element for actions that make changes (create, update, or delete actions).', - name: 'aws.cloudtrail.response_elements', - type: 'keyword', - }, - 'aws.cloudtrail.additional_eventdata': { - category: 'aws', - description: 'Additional data about the event that was not part of the request or response.', - name: 'aws.cloudtrail.additional_eventdata', - type: 'keyword', - }, - 'aws.cloudtrail.request_id': { - category: 'aws', - description: - 'The value that identifies the request. The service being called generates this value.', - name: 'aws.cloudtrail.request_id', - type: 'keyword', - }, - 'aws.cloudtrail.event_type': { - category: 'aws', - description: 'Identifies the type of event that generated the event record.', - name: 'aws.cloudtrail.event_type', - type: 'keyword', - }, - 'aws.cloudtrail.api_version': { - category: 'aws', - description: 'Identifies the API version associated with the AwsApiCall eventType value.', - name: 'aws.cloudtrail.api_version', - type: 'keyword', - }, - 'aws.cloudtrail.management_event': { - category: 'aws', - description: 'A Boolean value that identifies whether the event is a management event.', - name: 'aws.cloudtrail.management_event', - type: 'keyword', - }, - 'aws.cloudtrail.read_only': { - category: 'aws', - description: 'Identifies whether this operation is a read-only operation.', - name: 'aws.cloudtrail.read_only', - type: 'keyword', - }, - 'aws.cloudtrail.resources.arn': { - category: 'aws', - description: 'Resource ARNs', - name: 'aws.cloudtrail.resources.arn', - type: 'keyword', - }, - 'aws.cloudtrail.resources.account_id': { - category: 'aws', - description: 'Account ID of the resource owner', - name: 'aws.cloudtrail.resources.account_id', - type: 'keyword', - }, - 'aws.cloudtrail.resources.type': { - category: 'aws', - description: 'Resource type identifier in the format: AWS::aws-service-name::data-type-name', - name: 'aws.cloudtrail.resources.type', - type: 'keyword', - }, - 'aws.cloudtrail.recipient_account_id': { - category: 'aws', - description: 'Represents the account ID that received this event.', - name: 'aws.cloudtrail.recipient_account_id', - type: 'keyword', - }, - 'aws.cloudtrail.service_event_details': { - category: 'aws', - description: 'Identifies the service event, including what triggered the event and the result.', - name: 'aws.cloudtrail.service_event_details', - type: 'keyword', - }, - 'aws.cloudtrail.shared_event_id': { - category: 'aws', - description: - 'GUID generated by CloudTrail to uniquely identify CloudTrail events from the same AWS action that is sent to different AWS accounts.', - name: 'aws.cloudtrail.shared_event_id', - type: 'keyword', - }, - 'aws.cloudtrail.vpc_endpoint_id': { - category: 'aws', - description: - 'Identifies the VPC endpoint in which requests were made from a VPC to another AWS service, such as Amazon S3.', - name: 'aws.cloudtrail.vpc_endpoint_id', - type: 'keyword', - }, - 'aws.cloudtrail.event_category': { - category: 'aws', - description: - 'Shows the event category that is used in LookupEvents calls. - For management events, the value is management. - For data events, the value is data. - For Insights events, the value is insight.', - name: 'aws.cloudtrail.event_category', - type: 'keyword', - }, - 'aws.cloudtrail.console_login.additional_eventdata.mobile_version': { - category: 'aws', - description: 'Identifies whether ConsoleLogin was from mobile version', - name: 'aws.cloudtrail.console_login.additional_eventdata.mobile_version', - type: 'boolean', - }, - 'aws.cloudtrail.console_login.additional_eventdata.login_to': { - category: 'aws', - description: 'URL for ConsoleLogin', - name: 'aws.cloudtrail.console_login.additional_eventdata.login_to', - type: 'keyword', - }, - 'aws.cloudtrail.console_login.additional_eventdata.mfa_used': { - category: 'aws', - description: 'Identifies whether multi factor authentication was used during ConsoleLogin', - name: 'aws.cloudtrail.console_login.additional_eventdata.mfa_used', - type: 'boolean', - }, - 'aws.cloudtrail.flattened.additional_eventdata': { - category: 'aws', - description: 'Additional data about the event that was not part of the request or response. ', - name: 'aws.cloudtrail.flattened.additional_eventdata', - type: 'flattened', - }, - 'aws.cloudtrail.flattened.request_parameters': { - category: 'aws', - description: 'The parameters, if any, that were sent with the request.', - name: 'aws.cloudtrail.flattened.request_parameters', - type: 'flattened', - }, - 'aws.cloudtrail.flattened.response_elements': { - category: 'aws', - description: - 'The response element for actions that make changes (create, update, or delete actions).', - name: 'aws.cloudtrail.flattened.response_elements', - type: 'flattened', - }, - 'aws.cloudtrail.flattened.service_event_details': { - category: 'aws', - description: 'Identifies the service event, including what triggered the event and the result.', - name: 'aws.cloudtrail.flattened.service_event_details', - type: 'flattened', - }, - 'aws.cloudtrail.digest.log_files': { - category: 'aws', - description: 'A list of Logfiles contained in the digest.', - name: 'aws.cloudtrail.digest.log_files', - type: 'nested', - }, - 'aws.cloudtrail.digest.start_time': { - category: 'aws', - description: - 'The starting UTC time range that the digest file covers, taking as a reference the time in which log files have been delivered by CloudTrail.', - name: 'aws.cloudtrail.digest.start_time', - type: 'date', - }, - 'aws.cloudtrail.digest.end_time': { - category: 'aws', - description: - 'The ending UTC time range that the digest file covers, taking as a reference the time in which log files have been delivered by CloudTrail.', - name: 'aws.cloudtrail.digest.end_time', - type: 'date', - }, - 'aws.cloudtrail.digest.s3_bucket': { - category: 'aws', - description: - 'The name of the Amazon S3 bucket to which the current digest file has been delivered.', - name: 'aws.cloudtrail.digest.s3_bucket', - type: 'keyword', - }, - 'aws.cloudtrail.digest.s3_object': { - category: 'aws', - description: - 'The Amazon S3 object key (that is, the Amazon S3 bucket location) of the current digest file.', - name: 'aws.cloudtrail.digest.s3_object', - type: 'keyword', - }, - 'aws.cloudtrail.digest.newest_event_time': { - category: 'aws', - description: - 'The UTC time of the most recent event among all of the events in the log files in the digest.', - name: 'aws.cloudtrail.digest.newest_event_time', - type: 'date', - }, - 'aws.cloudtrail.digest.oldest_event_time': { - category: 'aws', - description: - 'The UTC time of the oldest event among all of the events in the log files in the digest.', - name: 'aws.cloudtrail.digest.oldest_event_time', - type: 'date', - }, - 'aws.cloudtrail.digest.previous_s3_bucket': { - category: 'aws', - description: 'The Amazon S3 bucket to which the previous digest file was delivered.', - name: 'aws.cloudtrail.digest.previous_s3_bucket', - type: 'keyword', - }, - 'aws.cloudtrail.digest.previous_hash_algorithm': { - category: 'aws', - description: 'The name of the hash algorithm that was used to hash the previous digest file.', - name: 'aws.cloudtrail.digest.previous_hash_algorithm', - type: 'keyword', - }, - 'aws.cloudtrail.digest.public_key_fingerprint': { - category: 'aws', - description: - 'The hexadecimal encoded fingerprint of the public key that matches the private key used to sign this digest file.', - name: 'aws.cloudtrail.digest.public_key_fingerprint', - type: 'keyword', - }, - 'aws.cloudtrail.digest.signature_algorithm': { - category: 'aws', - description: 'The algorithm used to sign the digest file.', - name: 'aws.cloudtrail.digest.signature_algorithm', - type: 'keyword', - }, - 'aws.cloudtrail.insight_details': { - category: 'aws', - description: - 'Shows information about the underlying triggers of an Insights event, such as event source, user agent, statistics, API name, and whether the event is the start or end of the Insights event.', - name: 'aws.cloudtrail.insight_details', - type: 'flattened', - }, - 'aws.cloudwatch.message': { - category: 'aws', - description: 'CloudWatch log message. ', - name: 'aws.cloudwatch.message', - type: 'text', - }, - 'aws.ec2.ip_address': { - category: 'aws', - description: 'The internet address of the requester. ', - name: 'aws.ec2.ip_address', - type: 'keyword', - }, - 'aws.elb.name': { - category: 'aws', - description: 'The name of the load balancer. ', - name: 'aws.elb.name', - type: 'keyword', - }, - 'aws.elb.type': { - category: 'aws', - description: 'The type of the load balancer for v2 Load Balancers. ', - name: 'aws.elb.type', - type: 'keyword', - }, - 'aws.elb.target_group.arn': { - category: 'aws', - description: 'The ARN of the target group handling the request. ', - name: 'aws.elb.target_group.arn', - type: 'keyword', - }, - 'aws.elb.listener': { - category: 'aws', - description: 'The ELB listener that received the connection. ', - name: 'aws.elb.listener', - type: 'keyword', - }, - 'aws.elb.protocol': { - category: 'aws', - description: 'The protocol of the load balancer (http or tcp). ', - name: 'aws.elb.protocol', - type: 'keyword', - }, - 'aws.elb.request_processing_time.sec': { - category: 'aws', - description: - 'The total time in seconds since the connection or request is received until it is sent to a registered backend. ', - name: 'aws.elb.request_processing_time.sec', - type: 'float', - }, - 'aws.elb.backend_processing_time.sec': { - category: 'aws', - description: - 'The total time in seconds since the connection is sent to the backend till the backend starts responding. ', - name: 'aws.elb.backend_processing_time.sec', - type: 'float', - }, - 'aws.elb.response_processing_time.sec': { - category: 'aws', - description: - 'The total time in seconds since the response is received from the backend till it is sent to the client. ', - name: 'aws.elb.response_processing_time.sec', - type: 'float', - }, - 'aws.elb.connection_time.ms': { - category: 'aws', - description: - 'The total time of the connection in milliseconds, since it is opened till it is closed. ', - name: 'aws.elb.connection_time.ms', - type: 'long', - }, - 'aws.elb.tls_handshake_time.ms': { - category: 'aws', - description: - 'The total time for the TLS handshake to complete in milliseconds once the connection has been established. ', - name: 'aws.elb.tls_handshake_time.ms', - type: 'long', - }, - 'aws.elb.backend.ip': { - category: 'aws', - description: 'The IP address of the backend processing this connection. ', - name: 'aws.elb.backend.ip', - type: 'keyword', - }, - 'aws.elb.backend.port': { - category: 'aws', - description: 'The port in the backend processing this connection. ', - name: 'aws.elb.backend.port', - type: 'keyword', - }, - 'aws.elb.backend.http.response.status_code': { - category: 'aws', - description: - 'The status code from the backend (status code sent to the client from ELB is stored in `http.response.status_code` ', - name: 'aws.elb.backend.http.response.status_code', - type: 'keyword', - }, - 'aws.elb.ssl_cipher': { - category: 'aws', - description: 'The SSL cipher used in TLS/SSL connections. ', - name: 'aws.elb.ssl_cipher', - type: 'keyword', - }, - 'aws.elb.ssl_protocol': { - category: 'aws', - description: 'The SSL protocol used in TLS/SSL connections. ', - name: 'aws.elb.ssl_protocol', - type: 'keyword', - }, - 'aws.elb.chosen_cert.arn': { - category: 'aws', - description: - 'The ARN of the chosen certificate presented to the client in TLS/SSL connections. ', - name: 'aws.elb.chosen_cert.arn', - type: 'keyword', - }, - 'aws.elb.chosen_cert.serial': { - category: 'aws', - description: - 'The serial number of the chosen certificate presented to the client in TLS/SSL connections. ', - name: 'aws.elb.chosen_cert.serial', - type: 'keyword', - }, - 'aws.elb.incoming_tls_alert': { - category: 'aws', - description: - 'The integer value of TLS alerts received by the load balancer from the client, if present. ', - name: 'aws.elb.incoming_tls_alert', - type: 'keyword', - }, - 'aws.elb.tls_named_group': { - category: 'aws', - description: 'The TLS named group. ', - name: 'aws.elb.tls_named_group', - type: 'keyword', - }, - 'aws.elb.trace_id': { - category: 'aws', - description: 'The contents of the `X-Amzn-Trace-Id` header. ', - name: 'aws.elb.trace_id', - type: 'keyword', - }, - 'aws.elb.matched_rule_priority': { - category: 'aws', - description: 'The priority value of the rule that matched the request, if a rule matched. ', - name: 'aws.elb.matched_rule_priority', - type: 'keyword', - }, - 'aws.elb.action_executed': { - category: 'aws', - description: - 'The action executed when processing the request (forward, fixed-response, authenticate...). It can contain several values. ', - name: 'aws.elb.action_executed', - type: 'keyword', - }, - 'aws.elb.redirect_url': { - category: 'aws', - description: 'The URL used if a redirection action was executed. ', - name: 'aws.elb.redirect_url', - type: 'keyword', - }, - 'aws.elb.error.reason': { - category: 'aws', - description: 'The error reason if the executed action failed. ', - name: 'aws.elb.error.reason', - type: 'keyword', - }, - 'aws.elb.target_port': { - category: 'aws', - description: 'List of IP addresses and ports for the targets that processed this request. ', - name: 'aws.elb.target_port', - type: 'keyword', - }, - 'aws.elb.target_status_code': { - category: 'aws', - description: 'List of status codes from the responses of the targets. ', - name: 'aws.elb.target_status_code', - type: 'keyword', - }, - 'aws.elb.classification': { - category: 'aws', - description: 'The classification for desync mitigation. ', - name: 'aws.elb.classification', - type: 'keyword', - }, - 'aws.elb.classification_reason': { - category: 'aws', - description: 'The classification reason code. ', - name: 'aws.elb.classification_reason', - type: 'keyword', - }, - 'aws.s3access.bucket_owner': { - category: 'aws', - description: 'The canonical user ID of the owner of the source bucket. ', - name: 'aws.s3access.bucket_owner', - type: 'keyword', - }, - 'aws.s3access.bucket': { - category: 'aws', - description: 'The name of the bucket that the request was processed against. ', - name: 'aws.s3access.bucket', - type: 'keyword', - }, - 'aws.s3access.remote_ip': { - category: 'aws', - description: 'The apparent internet address of the requester. ', - name: 'aws.s3access.remote_ip', - type: 'ip', - }, - 'aws.s3access.requester': { - category: 'aws', - description: 'The canonical user ID of the requester, or a - for unauthenticated requests. ', - name: 'aws.s3access.requester', - type: 'keyword', - }, - 'aws.s3access.request_id': { - category: 'aws', - description: 'A string generated by Amazon S3 to uniquely identify each request. ', - name: 'aws.s3access.request_id', - type: 'keyword', - }, - 'aws.s3access.operation': { - category: 'aws', - description: - 'The operation listed here is declared as SOAP.operation, REST.HTTP_method.resource_type, WEBSITE.HTTP_method.resource_type, or BATCH.DELETE.OBJECT. ', - name: 'aws.s3access.operation', - type: 'keyword', - }, - 'aws.s3access.key': { - category: 'aws', - description: - 'The "key" part of the request, URL encoded, or "-" if the operation does not take a key parameter. ', - name: 'aws.s3access.key', - type: 'keyword', - }, - 'aws.s3access.request_uri': { - category: 'aws', - description: 'The Request-URI part of the HTTP request message. ', - name: 'aws.s3access.request_uri', - type: 'keyword', - }, - 'aws.s3access.http_status': { - category: 'aws', - description: 'The numeric HTTP status code of the response. ', - name: 'aws.s3access.http_status', - type: 'long', - }, - 'aws.s3access.error_code': { - category: 'aws', - description: 'The Amazon S3 Error Code, or "-" if no error occurred. ', - name: 'aws.s3access.error_code', - type: 'keyword', - }, - 'aws.s3access.bytes_sent': { - category: 'aws', - description: - 'The number of response bytes sent, excluding HTTP protocol overhead, or "-" if zero. ', - name: 'aws.s3access.bytes_sent', - type: 'long', - }, - 'aws.s3access.object_size': { - category: 'aws', - description: 'The total size of the object in question. ', - name: 'aws.s3access.object_size', - type: 'long', - }, - 'aws.s3access.total_time': { - category: 'aws', - description: - "The number of milliseconds the request was in flight from the server's perspective. ", - name: 'aws.s3access.total_time', - type: 'long', - }, - 'aws.s3access.turn_around_time': { - category: 'aws', - description: 'The number of milliseconds that Amazon S3 spent processing your request. ', - name: 'aws.s3access.turn_around_time', - type: 'long', - }, - 'aws.s3access.referrer': { - category: 'aws', - description: 'The value of the HTTP Referrer header, if present. ', - name: 'aws.s3access.referrer', - type: 'keyword', - }, - 'aws.s3access.user_agent': { - category: 'aws', - description: 'The value of the HTTP User-Agent header. ', - name: 'aws.s3access.user_agent', - type: 'keyword', - }, - 'aws.s3access.version_id': { - category: 'aws', - description: - 'The version ID in the request, or "-" if the operation does not take a versionId parameter. ', - name: 'aws.s3access.version_id', - type: 'keyword', - }, - 'aws.s3access.host_id': { - category: 'aws', - description: 'The x-amz-id-2 or Amazon S3 extended request ID. ', - name: 'aws.s3access.host_id', - type: 'keyword', - }, - 'aws.s3access.signature_version': { - category: 'aws', - description: - 'The signature version, SigV2 or SigV4, that was used to authenticate the request or a - for unauthenticated requests. ', - name: 'aws.s3access.signature_version', - type: 'keyword', - }, - 'aws.s3access.cipher_suite': { - category: 'aws', - description: - 'The Secure Sockets Layer (SSL) cipher that was negotiated for HTTPS request or a - for HTTP. ', - name: 'aws.s3access.cipher_suite', - type: 'keyword', - }, - 'aws.s3access.authentication_type': { - category: 'aws', - description: - 'The type of request authentication used, AuthHeader for authentication headers, QueryString for query string (pre-signed URL) or a - for unauthenticated requests. ', - name: 'aws.s3access.authentication_type', - type: 'keyword', - }, - 'aws.s3access.host_header': { - category: 'aws', - description: 'The endpoint used to connect to Amazon S3. ', - name: 'aws.s3access.host_header', - type: 'keyword', - }, - 'aws.s3access.tls_version': { - category: 'aws', - description: 'The Transport Layer Security (TLS) version negotiated by the client. ', - name: 'aws.s3access.tls_version', - type: 'keyword', - }, - 'aws.vpcflow.version': { - category: 'aws', - description: - 'The VPC Flow Logs version. If you use the default format, the version is 2. If you specify a custom format, the version is 3. ', - name: 'aws.vpcflow.version', - type: 'keyword', - }, - 'aws.vpcflow.account_id': { - category: 'aws', - description: 'The AWS account ID for the flow log. ', - name: 'aws.vpcflow.account_id', - type: 'keyword', - }, - 'aws.vpcflow.interface_id': { - category: 'aws', - description: 'The ID of the network interface for which the traffic is recorded. ', - name: 'aws.vpcflow.interface_id', - type: 'keyword', - }, - 'aws.vpcflow.action': { - category: 'aws', - description: 'The action that is associated with the traffic, ACCEPT or REJECT. ', - name: 'aws.vpcflow.action', - type: 'keyword', - }, - 'aws.vpcflow.log_status': { - category: 'aws', - description: 'The logging status of the flow log, OK, NODATA or SKIPDATA. ', - name: 'aws.vpcflow.log_status', - type: 'keyword', - }, - 'aws.vpcflow.instance_id': { - category: 'aws', - description: - "The ID of the instance that's associated with network interface for which the traffic is recorded, if the instance is owned by you. ", - name: 'aws.vpcflow.instance_id', - type: 'keyword', - }, - 'aws.vpcflow.pkt_srcaddr': { - category: 'aws', - description: 'The packet-level (original) source IP address of the traffic. ', - name: 'aws.vpcflow.pkt_srcaddr', - type: 'ip', - }, - 'aws.vpcflow.pkt_dstaddr': { - category: 'aws', - description: 'The packet-level (original) destination IP address for the traffic. ', - name: 'aws.vpcflow.pkt_dstaddr', - type: 'ip', - }, - 'aws.vpcflow.vpc_id': { - category: 'aws', - description: - 'The ID of the VPC that contains the network interface for which the traffic is recorded. ', - name: 'aws.vpcflow.vpc_id', - type: 'keyword', - }, - 'aws.vpcflow.subnet_id': { - category: 'aws', - description: - 'The ID of the subnet that contains the network interface for which the traffic is recorded. ', - name: 'aws.vpcflow.subnet_id', - type: 'keyword', - }, - 'aws.vpcflow.tcp_flags': { - category: 'aws', - description: 'The bitmask value for the following TCP flags: 2=SYN,18=SYN-ACK,1=FIN,4=RST ', - name: 'aws.vpcflow.tcp_flags', - type: 'keyword', - }, - 'aws.vpcflow.tcp_flags_array': { - category: 'aws', - description: "List of TCP flags: 'fin, syn, rst, psh, ack, urg' ", - name: 'aws.vpcflow.tcp_flags_array', - type: 'keyword', - }, - 'aws.vpcflow.type': { - category: 'aws', - description: 'The type of traffic: IPv4, IPv6, or EFA. ', - name: 'aws.vpcflow.type', - type: 'keyword', - }, - 'awsfargate.log': { - category: 'awsfargate', - description: 'Fields for Amazon Fargate container logs. ', - name: 'awsfargate.log', - type: 'group', - }, - 'azure.subscription_id': { - category: 'azure', - description: 'Azure subscription ID ', - name: 'azure.subscription_id', - type: 'keyword', - }, - 'azure.correlation_id': { - category: 'azure', - description: 'Correlation ID ', - name: 'azure.correlation_id', - type: 'keyword', - }, - 'azure.tenant_id': { - category: 'azure', - description: 'tenant ID ', - name: 'azure.tenant_id', - type: 'keyword', - }, - 'azure.resource.id': { - category: 'azure', - description: 'Resource ID ', - name: 'azure.resource.id', - type: 'keyword', - }, - 'azure.resource.group': { - category: 'azure', - description: 'Resource group ', - name: 'azure.resource.group', - type: 'keyword', - }, - 'azure.resource.provider': { - category: 'azure', - description: 'Resource type/namespace ', - name: 'azure.resource.provider', - type: 'keyword', - }, - 'azure.resource.namespace': { - category: 'azure', - description: 'Resource type/namespace ', - name: 'azure.resource.namespace', - type: 'keyword', - }, - 'azure.resource.name': { - category: 'azure', - description: 'Name ', - name: 'azure.resource.name', - type: 'keyword', - }, - 'azure.resource.authorization_rule': { - category: 'azure', - description: 'Authorization rule ', - name: 'azure.resource.authorization_rule', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims_initiated_by_user.name': { - category: 'azure', - description: 'Name ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.name', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims_initiated_by_user.givenname': { - category: 'azure', - description: 'Givenname ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.givenname', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims_initiated_by_user.surname': { - category: 'azure', - description: 'Surname ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.surname', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims_initiated_by_user.fullname': { - category: 'azure', - description: 'Fullname ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.fullname', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims_initiated_by_user.schema': { - category: 'azure', - description: 'Schema ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.schema', - type: 'keyword', - }, - 'azure.activitylogs.identity.claims.*': { - category: 'azure', - description: 'Claims ', - name: 'azure.activitylogs.identity.claims.*', - type: 'object', - }, - 'azure.activitylogs.identity.authorization.scope': { - category: 'azure', - description: 'Scope ', - name: 'azure.activitylogs.identity.authorization.scope', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.action': { - category: 'azure', - description: 'Action ', - name: 'azure.activitylogs.identity.authorization.action', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.role_assignment_scope': { - category: 'azure', - description: 'Role assignment scope ', - name: 'azure.activitylogs.identity.authorization.evidence.role_assignment_scope', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.role_definition_id': { - category: 'azure', - description: 'Role definition ID ', - name: 'azure.activitylogs.identity.authorization.evidence.role_definition_id', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.role': { - category: 'azure', - description: 'Role ', - name: 'azure.activitylogs.identity.authorization.evidence.role', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.role_assignment_id': { - category: 'azure', - description: 'Role assignment ID ', - name: 'azure.activitylogs.identity.authorization.evidence.role_assignment_id', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.principal_id': { - category: 'azure', - description: 'Principal ID ', - name: 'azure.activitylogs.identity.authorization.evidence.principal_id', - type: 'keyword', - }, - 'azure.activitylogs.identity.authorization.evidence.principal_type': { - category: 'azure', - description: 'Principal type ', - name: 'azure.activitylogs.identity.authorization.evidence.principal_type', - type: 'keyword', - }, - 'azure.activitylogs.operation_name': { - category: 'azure', - description: 'Operation name ', - name: 'azure.activitylogs.operation_name', - type: 'keyword', - }, - 'azure.activitylogs.result_type': { - category: 'azure', - description: 'Result type ', - name: 'azure.activitylogs.result_type', - type: 'keyword', - }, - 'azure.activitylogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.activitylogs.result_signature', - type: 'keyword', - }, - 'azure.activitylogs.category': { - category: 'azure', - description: 'Category ', - name: 'azure.activitylogs.category', - type: 'keyword', - }, - 'azure.activitylogs.event_category': { - category: 'azure', - description: 'Event Category ', - name: 'azure.activitylogs.event_category', - type: 'keyword', - }, - 'azure.activitylogs.properties': { - category: 'azure', - description: 'Properties ', - name: 'azure.activitylogs.properties', - type: 'flattened', - }, - 'azure.auditlogs.category': { - category: 'azure', - description: 'The category of the operation. Currently, Audit is the only supported value. ', - name: 'azure.auditlogs.category', - type: 'keyword', - }, - 'azure.auditlogs.operation_name': { - category: 'azure', - description: 'The operation name ', - name: 'azure.auditlogs.operation_name', - type: 'keyword', - }, - 'azure.auditlogs.operation_version': { - category: 'azure', - description: 'The operation version ', - name: 'azure.auditlogs.operation_version', - type: 'keyword', - }, - 'azure.auditlogs.identity': { - category: 'azure', - description: 'Identity ', - name: 'azure.auditlogs.identity', - type: 'keyword', - }, - 'azure.auditlogs.tenant_id': { - category: 'azure', - description: 'Tenant ID ', - name: 'azure.auditlogs.tenant_id', - type: 'keyword', - }, - 'azure.auditlogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.auditlogs.result_signature', - type: 'keyword', - }, - 'azure.auditlogs.properties.result': { - category: 'azure', - description: 'Log result ', - name: 'azure.auditlogs.properties.result', - type: 'keyword', - }, - 'azure.auditlogs.properties.activity_display_name': { - category: 'azure', - description: 'Activity display name ', - name: 'azure.auditlogs.properties.activity_display_name', - type: 'keyword', - }, - 'azure.auditlogs.properties.result_reason': { - category: 'azure', - description: 'Reason for the log result ', - name: 'azure.auditlogs.properties.result_reason', - type: 'keyword', - }, - 'azure.auditlogs.properties.correlation_id': { - category: 'azure', - description: 'Correlation ID ', - name: 'azure.auditlogs.properties.correlation_id', - type: 'keyword', - }, - 'azure.auditlogs.properties.logged_by_service': { - category: 'azure', - description: 'Logged by service ', - name: 'azure.auditlogs.properties.logged_by_service', - type: 'keyword', - }, - 'azure.auditlogs.properties.operation_type': { - category: 'azure', - description: 'Operation type ', - name: 'azure.auditlogs.properties.operation_type', - type: 'keyword', - }, - 'azure.auditlogs.properties.id': { - category: 'azure', - description: 'ID ', - name: 'azure.auditlogs.properties.id', - type: 'keyword', - }, - 'azure.auditlogs.properties.activity_datetime': { - category: 'azure', - description: 'Activity timestamp ', - name: 'azure.auditlogs.properties.activity_datetime', - type: 'date', - }, - 'azure.auditlogs.properties.category': { - category: 'azure', - description: 'category ', - name: 'azure.auditlogs.properties.category', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.display_name': { - category: 'azure', - description: 'Display name ', - name: 'azure.auditlogs.properties.target_resources.*.display_name', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.id': { - category: 'azure', - description: 'ID ', - name: 'azure.auditlogs.properties.target_resources.*.id', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.type': { - category: 'azure', - description: 'Type ', - name: 'azure.auditlogs.properties.target_resources.*.type', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.ip_address': { - category: 'azure', - description: 'ip Address ', - name: 'azure.auditlogs.properties.target_resources.*.ip_address', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.user_principal_name': { - category: 'azure', - description: 'User principal name ', - name: 'azure.auditlogs.properties.target_resources.*.user_principal_name', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.modified_properties.*.new_value': { - category: 'azure', - description: 'New value ', - name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.new_value', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.modified_properties.*.display_name': { - category: 'azure', - description: 'Display value ', - name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.display_name', - type: 'keyword', - }, - 'azure.auditlogs.properties.target_resources.*.modified_properties.*.old_value': { - category: 'azure', - description: 'Old value ', - name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.old_value', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.app.servicePrincipalName': { - category: 'azure', - description: 'Service principal name ', - name: 'azure.auditlogs.properties.initiated_by.app.servicePrincipalName', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.app.displayName': { - category: 'azure', - description: 'Display name ', - name: 'azure.auditlogs.properties.initiated_by.app.displayName', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.app.appId': { - category: 'azure', - description: 'App ID ', - name: 'azure.auditlogs.properties.initiated_by.app.appId', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.app.servicePrincipalId': { - category: 'azure', - description: 'Service principal ID ', - name: 'azure.auditlogs.properties.initiated_by.app.servicePrincipalId', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.user.userPrincipalName': { - category: 'azure', - description: 'User principal name ', - name: 'azure.auditlogs.properties.initiated_by.user.userPrincipalName', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.user.displayName': { - category: 'azure', - description: 'Display name ', - name: 'azure.auditlogs.properties.initiated_by.user.displayName', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.user.id': { - category: 'azure', - description: 'ID ', - name: 'azure.auditlogs.properties.initiated_by.user.id', - type: 'keyword', - }, - 'azure.auditlogs.properties.initiated_by.user.ipAddress': { - category: 'azure', - description: 'ip Address ', - name: 'azure.auditlogs.properties.initiated_by.user.ipAddress', - type: 'keyword', - }, - 'azure.platformlogs.operation_name': { - category: 'azure', - description: 'Operation name ', - name: 'azure.platformlogs.operation_name', - type: 'keyword', - }, - 'azure.platformlogs.result_type': { - category: 'azure', - description: 'Result type ', - name: 'azure.platformlogs.result_type', - type: 'keyword', - }, - 'azure.platformlogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.platformlogs.result_signature', - type: 'keyword', - }, - 'azure.platformlogs.category': { - category: 'azure', - description: 'Category ', - name: 'azure.platformlogs.category', - type: 'keyword', - }, - 'azure.platformlogs.event_category': { - category: 'azure', - description: 'Event Category ', - name: 'azure.platformlogs.event_category', - type: 'keyword', - }, - 'azure.platformlogs.status': { - category: 'azure', - description: 'Status ', - name: 'azure.platformlogs.status', - type: 'keyword', - }, - 'azure.platformlogs.ccpNamespace': { - category: 'azure', - description: 'ccpNamespace ', - name: 'azure.platformlogs.ccpNamespace', - type: 'keyword', - }, - 'azure.platformlogs.Cloud': { - category: 'azure', - description: 'Cloud ', - name: 'azure.platformlogs.Cloud', - type: 'keyword', - }, - 'azure.platformlogs.Environment': { - category: 'azure', - description: 'Environment ', - name: 'azure.platformlogs.Environment', - type: 'keyword', - }, - 'azure.platformlogs.EventTimeString': { - category: 'azure', - description: 'EventTimeString ', - name: 'azure.platformlogs.EventTimeString', - type: 'keyword', - }, - 'azure.platformlogs.Caller': { - category: 'azure', - description: 'Caller ', - name: 'azure.platformlogs.Caller', - type: 'keyword', - }, - 'azure.platformlogs.ScaleUnit': { - category: 'azure', - description: 'ScaleUnit ', - name: 'azure.platformlogs.ScaleUnit', - type: 'keyword', - }, - 'azure.platformlogs.ActivityId': { - category: 'azure', - description: 'ActivityId ', - name: 'azure.platformlogs.ActivityId', - type: 'keyword', - }, - 'azure.platformlogs.properties': { - category: 'azure', - description: 'Event inner properties ', - name: 'azure.platformlogs.properties', - type: 'flattened', - }, - 'azure.signinlogs.operation_name': { - category: 'azure', - description: 'The operation name ', - name: 'azure.signinlogs.operation_name', - type: 'keyword', - }, - 'azure.signinlogs.operation_version': { - category: 'azure', - description: 'The operation version ', - name: 'azure.signinlogs.operation_version', - type: 'keyword', - }, - 'azure.signinlogs.tenant_id': { - category: 'azure', - description: 'Tenant ID ', - name: 'azure.signinlogs.tenant_id', - type: 'keyword', - }, - 'azure.signinlogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.signinlogs.result_signature', - type: 'keyword', - }, - 'azure.signinlogs.result_description': { - category: 'azure', - description: 'Result description ', - name: 'azure.signinlogs.result_description', - type: 'keyword', - }, - 'azure.signinlogs.result_type': { - category: 'azure', - description: 'Result type ', - name: 'azure.signinlogs.result_type', - type: 'keyword', - }, - 'azure.signinlogs.identity': { - category: 'azure', - description: 'Identity ', - name: 'azure.signinlogs.identity', - type: 'keyword', - }, - 'azure.signinlogs.category': { - category: 'azure', - description: 'Category ', - name: 'azure.signinlogs.category', - type: 'keyword', - }, - 'azure.signinlogs.properties.id': { - category: 'azure', - description: 'ID ', - name: 'azure.signinlogs.properties.id', - type: 'keyword', - }, - 'azure.signinlogs.properties.created_at': { - category: 'azure', - description: 'Created date time ', - name: 'azure.signinlogs.properties.created_at', - type: 'date', - }, - 'azure.signinlogs.properties.user_display_name': { - category: 'azure', - description: 'User display name ', - name: 'azure.signinlogs.properties.user_display_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.correlation_id': { - category: 'azure', - description: 'Correlation ID ', - name: 'azure.signinlogs.properties.correlation_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.user_principal_name': { - category: 'azure', - description: 'User principal name ', - name: 'azure.signinlogs.properties.user_principal_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.user_id': { - category: 'azure', - description: 'User ID ', - name: 'azure.signinlogs.properties.user_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.app_id': { - category: 'azure', - description: 'App ID ', - name: 'azure.signinlogs.properties.app_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.app_display_name': { - category: 'azure', - description: 'App display name ', - name: 'azure.signinlogs.properties.app_display_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.ip_address': { - category: 'azure', - description: 'Ip address ', - name: 'azure.signinlogs.properties.ip_address', - type: 'keyword', - }, - 'azure.signinlogs.properties.client_app_used': { - category: 'azure', - description: 'Client app used ', - name: 'azure.signinlogs.properties.client_app_used', - type: 'keyword', - }, - 'azure.signinlogs.properties.conditional_access_status': { - category: 'azure', - description: 'Conditional access status ', - name: 'azure.signinlogs.properties.conditional_access_status', - type: 'keyword', - }, - 'azure.signinlogs.properties.original_request_id': { - category: 'azure', - description: 'Original request ID ', - name: 'azure.signinlogs.properties.original_request_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.is_interactive': { - category: 'azure', - description: 'Is interactive ', - name: 'azure.signinlogs.properties.is_interactive', - type: 'keyword', - }, - 'azure.signinlogs.properties.token_issuer_name': { - category: 'azure', - description: 'Token issuer name ', - name: 'azure.signinlogs.properties.token_issuer_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.token_issuer_type': { - category: 'azure', - description: 'Token issuer type ', - name: 'azure.signinlogs.properties.token_issuer_type', - type: 'keyword', - }, - 'azure.signinlogs.properties.processing_time_ms': { - category: 'azure', - description: 'Processing time in milliseconds ', - name: 'azure.signinlogs.properties.processing_time_ms', - type: 'float', - }, - 'azure.signinlogs.properties.risk_detail': { - category: 'azure', - description: 'Risk detail ', - name: 'azure.signinlogs.properties.risk_detail', - type: 'keyword', - }, - 'azure.signinlogs.properties.risk_level_aggregated': { - category: 'azure', - description: 'Risk level aggregated ', - name: 'azure.signinlogs.properties.risk_level_aggregated', - type: 'keyword', - }, - 'azure.signinlogs.properties.risk_level_during_signin': { - category: 'azure', - description: 'Risk level during signIn ', - name: 'azure.signinlogs.properties.risk_level_during_signin', - type: 'keyword', - }, - 'azure.signinlogs.properties.risk_state': { - category: 'azure', - description: 'Risk state ', - name: 'azure.signinlogs.properties.risk_state', - type: 'keyword', - }, - 'azure.signinlogs.properties.resource_display_name': { - category: 'azure', - description: 'Resource display name ', - name: 'azure.signinlogs.properties.resource_display_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.status.error_code': { - category: 'azure', - description: 'Error code ', - name: 'azure.signinlogs.properties.status.error_code', - type: 'keyword', - }, - 'azure.signinlogs.properties.device_detail.device_id': { - category: 'azure', - description: 'Device ID ', - name: 'azure.signinlogs.properties.device_detail.device_id', - type: 'keyword', - }, - 'azure.signinlogs.properties.device_detail.operating_system': { - category: 'azure', - description: 'Operating system ', - name: 'azure.signinlogs.properties.device_detail.operating_system', - type: 'keyword', - }, - 'azure.signinlogs.properties.device_detail.browser': { - category: 'azure', - description: 'Browser ', - name: 'azure.signinlogs.properties.device_detail.browser', - type: 'keyword', - }, - 'azure.signinlogs.properties.device_detail.display_name': { - category: 'azure', - description: 'Display name ', - name: 'azure.signinlogs.properties.device_detail.display_name', - type: 'keyword', - }, - 'azure.signinlogs.properties.device_detail.trust_type': { - category: 'azure', - description: 'Trust type ', - name: 'azure.signinlogs.properties.device_detail.trust_type', - type: 'keyword', - }, - 'azure.signinlogs.properties.service_principal_id': { - category: 'azure', - description: 'Status ', - name: 'azure.signinlogs.properties.service_principal_id', - type: 'keyword', - }, - 'network.interface.name': { - category: 'network', - description: 'Name of the network interface where the traffic has been observed. ', - name: 'network.interface.name', - type: 'keyword', - }, - 'rsa.internal.msg': { - category: 'rsa', - description: 'This key is used to capture the raw message that comes into the Log Decoder', - name: 'rsa.internal.msg', - type: 'keyword', - }, - 'rsa.internal.messageid': { - category: 'rsa', - name: 'rsa.internal.messageid', - type: 'keyword', - }, - 'rsa.internal.event_desc': { - category: 'rsa', - name: 'rsa.internal.event_desc', - type: 'keyword', - }, - 'rsa.internal.message': { - category: 'rsa', - description: 'This key captures the contents of instant messages', - name: 'rsa.internal.message', - type: 'keyword', - }, - 'rsa.internal.time': { - category: 'rsa', - description: - 'This is the time at which a session hits a NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness.', - name: 'rsa.internal.time', - type: 'date', - }, - 'rsa.internal.level': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.level', - type: 'long', - }, - 'rsa.internal.msg_id': { - category: 'rsa', - description: - 'This is the Message ID1 value that identifies the exact log parser definition which parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.msg_id', - type: 'keyword', - }, - 'rsa.internal.msg_vid': { - category: 'rsa', - description: - 'This is the Message ID2 value that identifies the exact log parser definition which parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.msg_vid', - type: 'keyword', - }, - 'rsa.internal.data': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.data', - type: 'keyword', - }, - 'rsa.internal.obj_server': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.obj_server', - type: 'keyword', - }, - 'rsa.internal.obj_val': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.obj_val', - type: 'keyword', - }, - 'rsa.internal.resource': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.resource', - type: 'keyword', - }, - 'rsa.internal.obj_id': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.obj_id', - type: 'keyword', - }, - 'rsa.internal.statement': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.statement', - type: 'keyword', - }, - 'rsa.internal.audit_class': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.audit_class', - type: 'keyword', - }, - 'rsa.internal.entry': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.entry', - type: 'keyword', - }, - 'rsa.internal.hcode': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.hcode', - type: 'keyword', - }, - 'rsa.internal.inode': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.inode', - type: 'long', - }, - 'rsa.internal.resource_class': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.resource_class', - type: 'keyword', - }, - 'rsa.internal.dead': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.dead', - type: 'long', - }, - 'rsa.internal.feed_desc': { - category: 'rsa', - description: - 'This is used to capture the description of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.feed_desc', - type: 'keyword', - }, - 'rsa.internal.feed_name': { - category: 'rsa', - description: - 'This is used to capture the name of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.feed_name', - type: 'keyword', - }, - 'rsa.internal.cid': { - category: 'rsa', - description: - 'This is the unique identifier used to identify a NetWitness Concentrator. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.cid', - type: 'keyword', - }, - 'rsa.internal.device_class': { - category: 'rsa', - description: - 'This is the Classification of the Log Event Source under a predefined fixed set of Event Source Classifications. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_class', - type: 'keyword', - }, - 'rsa.internal.device_group': { - category: 'rsa', - description: - 'This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_group', - type: 'keyword', - }, - 'rsa.internal.device_host': { - category: 'rsa', - description: - 'This is the Hostname of the log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_host', - type: 'keyword', - }, - 'rsa.internal.device_ip': { - category: 'rsa', - description: - 'This is the IPv4 address of the Log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_ip', - type: 'ip', - }, - 'rsa.internal.device_ipv6': { - category: 'rsa', - description: - 'This is the IPv6 address of the Log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_ipv6', - type: 'ip', - }, - 'rsa.internal.device_type': { - category: 'rsa', - description: - 'This is the name of the log parser which parsed a given session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_type', - type: 'keyword', - }, - 'rsa.internal.device_type_id': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.device_type_id', - type: 'long', - }, - 'rsa.internal.did': { - category: 'rsa', - description: - 'This is the unique identifier used to identify a NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.did', - type: 'keyword', - }, - 'rsa.internal.entropy_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the Meta Type can be either UInt16 or Float32 based on the configuration', - name: 'rsa.internal.entropy_req', - type: 'long', - }, - 'rsa.internal.entropy_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the Meta Type can be either UInt16 or Float32 based on the configuration', - name: 'rsa.internal.entropy_res', - type: 'long', - }, - 'rsa.internal.event_name': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.event_name', - type: 'keyword', - }, - 'rsa.internal.feed_category': { - category: 'rsa', - description: - 'This is used to capture the category of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.feed_category', - type: 'keyword', - }, - 'rsa.internal.forward_ip': { - category: 'rsa', - description: - 'This key should be used to capture the IPV4 address of a relay system which forwarded the events from the original system to NetWitness.', - name: 'rsa.internal.forward_ip', - type: 'ip', - }, - 'rsa.internal.forward_ipv6': { - category: 'rsa', - description: - 'This key is used to capture the IPV6 address of a relay system which forwarded the events from the original system to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.forward_ipv6', - type: 'ip', - }, - 'rsa.internal.header_id': { - category: 'rsa', - description: - 'This is the Header ID value that identifies the exact log parser header definition that parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.header_id', - type: 'keyword', - }, - 'rsa.internal.lc_cid': { - category: 'rsa', - description: - 'This is a unique Identifier of a Log Collector. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.lc_cid', - type: 'keyword', - }, - 'rsa.internal.lc_ctime': { - category: 'rsa', - description: - 'This is the time at which a log is collected in a NetWitness Log Collector. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.lc_ctime', - type: 'date', - }, - 'rsa.internal.mcb_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte request is simply which byte for each side (0 thru 255) was seen the most', - name: 'rsa.internal.mcb_req', - type: 'long', - }, - 'rsa.internal.mcb_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte response is simply which byte for each side (0 thru 255) was seen the most', - name: 'rsa.internal.mcb_res', - type: 'long', - }, - 'rsa.internal.mcbc_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte count is the number of times the most common byte (above) was seen in the session streams', - name: 'rsa.internal.mcbc_req', - type: 'long', - }, - 'rsa.internal.mcbc_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte count is the number of times the most common byte (above) was seen in the session streams', - name: 'rsa.internal.mcbc_res', - type: 'long', - }, - 'rsa.internal.medium': { - category: 'rsa', - description: - 'This key is used to identify if it’s a log/packet session or Layer 2 Encapsulation Type. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness. 32 = log, 33 = correlation session, < 32 is packet session', - name: 'rsa.internal.medium', - type: 'long', - }, - 'rsa.internal.node_name': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.node_name', - type: 'keyword', - }, - 'rsa.internal.nwe_callback_id': { - category: 'rsa', - description: 'This key denotes that event is endpoint related', - name: 'rsa.internal.nwe_callback_id', - type: 'keyword', - }, - 'rsa.internal.parse_error': { - category: 'rsa', - description: - 'This is a special key that stores any Meta key validation error found while parsing a log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.parse_error', - type: 'keyword', - }, - 'rsa.internal.payload_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the payload size metrics are the payload sizes of each session side at the time of parsing. However, in order to keep', - name: 'rsa.internal.payload_req', - type: 'long', - }, - 'rsa.internal.payload_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the payload size metrics are the payload sizes of each session side at the time of parsing. However, in order to keep', - name: 'rsa.internal.payload_res', - type: 'long', - }, - 'rsa.internal.process_vid_dst': { - category: 'rsa', - description: - 'Endpoint generates and uses a unique virtual ID to identify any similar group of process. This ID represents the target process.', - name: 'rsa.internal.process_vid_dst', - type: 'keyword', - }, - 'rsa.internal.process_vid_src': { - category: 'rsa', - description: - 'Endpoint generates and uses a unique virtual ID to identify any similar group of process. This ID represents the source process.', - name: 'rsa.internal.process_vid_src', - type: 'keyword', - }, - 'rsa.internal.rid': { - category: 'rsa', - description: - 'This is a special ID of the Remote Session created by NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.rid', - type: 'long', - }, - 'rsa.internal.session_split': { - category: 'rsa', - description: - 'This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.session_split', - type: 'keyword', - }, - 'rsa.internal.site': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.site', - type: 'keyword', - }, - 'rsa.internal.size': { - category: 'rsa', - description: - 'This is the size of the session as seen by the NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.size', - type: 'long', - }, - 'rsa.internal.sourcefile': { - category: 'rsa', - description: - 'This is the name of the log file or PCAPs that can be imported into NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.sourcefile', - type: 'keyword', - }, - 'rsa.internal.ubc_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, Unique byte count is the number of unique bytes seen in each stream. 256 would mean all byte values of 0 thru 255 were seen at least once', - name: 'rsa.internal.ubc_req', - type: 'long', - }, - 'rsa.internal.ubc_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, Unique byte count is the number of unique bytes seen in each stream. 256 would mean all byte values of 0 thru 255 were seen at least once', - name: 'rsa.internal.ubc_res', - type: 'long', - }, - 'rsa.internal.word': { - category: 'rsa', - description: - 'This is used by the Word Parsing technology to capture the first 5 character of every word in an unparsed log', - name: 'rsa.internal.word', - type: 'keyword', - }, - 'rsa.time.event_time': { - category: 'rsa', - description: - 'This key is used to capture the time mentioned in a raw session that represents the actual time an event occured in a standard normalized form', - name: 'rsa.time.event_time', - type: 'date', - }, - 'rsa.time.duration_time': { - category: 'rsa', - description: 'This key is used to capture the normalized duration/lifetime in seconds.', - name: 'rsa.time.duration_time', - type: 'double', - }, - 'rsa.time.event_time_str': { - category: 'rsa', - description: - 'This key is used to capture the incomplete time mentioned in a session as a string', - name: 'rsa.time.event_time_str', - type: 'keyword', - }, - 'rsa.time.starttime': { - category: 'rsa', - description: - 'This key is used to capture the Start time mentioned in a session in a standard form', - name: 'rsa.time.starttime', - type: 'date', - }, - 'rsa.time.month': { - category: 'rsa', - name: 'rsa.time.month', - type: 'keyword', - }, - 'rsa.time.day': { - category: 'rsa', - name: 'rsa.time.day', - type: 'keyword', - }, - 'rsa.time.endtime': { - category: 'rsa', - description: - 'This key is used to capture the End time mentioned in a session in a standard form', - name: 'rsa.time.endtime', - type: 'date', - }, - 'rsa.time.timezone': { - category: 'rsa', - description: 'This key is used to capture the timezone of the Event Time', - name: 'rsa.time.timezone', - type: 'keyword', - }, - 'rsa.time.duration_str': { - category: 'rsa', - description: 'A text string version of the duration', - name: 'rsa.time.duration_str', - type: 'keyword', - }, - 'rsa.time.date': { - category: 'rsa', - name: 'rsa.time.date', - type: 'keyword', - }, - 'rsa.time.year': { - category: 'rsa', - name: 'rsa.time.year', - type: 'keyword', - }, - 'rsa.time.recorded_time': { - category: 'rsa', - description: - "The event time as recorded by the system the event is collected from. The usage scenario is a multi-tier application where the management layer of the system records it's own timestamp at the time of collection from its child nodes. Must be in timestamp format.", - name: 'rsa.time.recorded_time', - type: 'date', - }, - 'rsa.time.datetime': { - category: 'rsa', - name: 'rsa.time.datetime', - type: 'keyword', - }, - 'rsa.time.effective_time': { - category: 'rsa', - description: - 'This key is the effective time referenced by an individual event in a Standard Timestamp format', - name: 'rsa.time.effective_time', - type: 'date', - }, - 'rsa.time.expire_time': { - category: 'rsa', - description: 'This key is the timestamp that explicitly refers to an expiration.', - name: 'rsa.time.expire_time', - type: 'date', - }, - 'rsa.time.process_time': { - category: 'rsa', - description: 'Deprecated, use duration.time', - name: 'rsa.time.process_time', - type: 'keyword', - }, - 'rsa.time.hour': { - category: 'rsa', - name: 'rsa.time.hour', - type: 'keyword', - }, - 'rsa.time.min': { - category: 'rsa', - name: 'rsa.time.min', - type: 'keyword', - }, - 'rsa.time.timestamp': { - category: 'rsa', - name: 'rsa.time.timestamp', - type: 'keyword', - }, - 'rsa.time.event_queue_time': { - category: 'rsa', - description: 'This key is the Time that the event was queued.', - name: 'rsa.time.event_queue_time', - type: 'date', - }, - 'rsa.time.p_time1': { - category: 'rsa', - name: 'rsa.time.p_time1', - type: 'keyword', - }, - 'rsa.time.tzone': { - category: 'rsa', - name: 'rsa.time.tzone', - type: 'keyword', - }, - 'rsa.time.eventtime': { - category: 'rsa', - name: 'rsa.time.eventtime', - type: 'keyword', - }, - 'rsa.time.gmtdate': { - category: 'rsa', - name: 'rsa.time.gmtdate', - type: 'keyword', - }, - 'rsa.time.gmttime': { - category: 'rsa', - name: 'rsa.time.gmttime', - type: 'keyword', - }, - 'rsa.time.p_date': { - category: 'rsa', - name: 'rsa.time.p_date', - type: 'keyword', - }, - 'rsa.time.p_month': { - category: 'rsa', - name: 'rsa.time.p_month', - type: 'keyword', - }, - 'rsa.time.p_time': { - category: 'rsa', - name: 'rsa.time.p_time', - type: 'keyword', - }, - 'rsa.time.p_time2': { - category: 'rsa', - name: 'rsa.time.p_time2', - type: 'keyword', - }, - 'rsa.time.p_year': { - category: 'rsa', - name: 'rsa.time.p_year', - type: 'keyword', - }, - 'rsa.time.expire_time_str': { - category: 'rsa', - description: - 'This key is used to capture incomplete timestamp that explicitly refers to an expiration.', - name: 'rsa.time.expire_time_str', - type: 'keyword', - }, - 'rsa.time.stamp': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.time.stamp', - type: 'date', - }, - 'rsa.misc.action': { - category: 'rsa', - name: 'rsa.misc.action', - type: 'keyword', - }, - 'rsa.misc.result': { - category: 'rsa', - description: - 'This key is used to capture the outcome/result string value of an action in a session.', - name: 'rsa.misc.result', - type: 'keyword', - }, - 'rsa.misc.severity': { - category: 'rsa', - description: 'This key is used to capture the severity given the session', - name: 'rsa.misc.severity', - type: 'keyword', - }, - 'rsa.misc.event_type': { - category: 'rsa', - description: 'This key captures the event category type as specified by the event source.', - name: 'rsa.misc.event_type', - type: 'keyword', - }, - 'rsa.misc.reference_id': { - category: 'rsa', - description: 'This key is used to capture an event id from the session directly', - name: 'rsa.misc.reference_id', - type: 'keyword', - }, - 'rsa.misc.version': { - category: 'rsa', - description: - 'This key captures Version of the application or OS which is generating the event.', - name: 'rsa.misc.version', - type: 'keyword', - }, - 'rsa.misc.disposition': { - category: 'rsa', - description: 'This key captures the The end state of an action.', - name: 'rsa.misc.disposition', - type: 'keyword', - }, - 'rsa.misc.result_code': { - category: 'rsa', - description: - 'This key is used to capture the outcome/result numeric value of an action in a session', - name: 'rsa.misc.result_code', - type: 'keyword', - }, - 'rsa.misc.category': { - category: 'rsa', - description: - 'This key is used to capture the category of an event given by the vendor in the session', - name: 'rsa.misc.category', - type: 'keyword', - }, - 'rsa.misc.obj_name': { - category: 'rsa', - description: 'This is used to capture name of object', - name: 'rsa.misc.obj_name', - type: 'keyword', - }, - 'rsa.misc.obj_type': { - category: 'rsa', - description: 'This is used to capture type of object', - name: 'rsa.misc.obj_type', - type: 'keyword', - }, - 'rsa.misc.event_source': { - category: 'rsa', - description: 'This key captures Source of the event that’s not a hostname', - name: 'rsa.misc.event_source', - type: 'keyword', - }, - 'rsa.misc.log_session_id': { - category: 'rsa', - description: 'This key is used to capture a sessionid from the session directly', - name: 'rsa.misc.log_session_id', - type: 'keyword', - }, - 'rsa.misc.group': { - category: 'rsa', - description: 'This key captures the Group Name value', - name: 'rsa.misc.group', - type: 'keyword', - }, - 'rsa.misc.policy_name': { - category: 'rsa', - description: 'This key is used to capture the Policy Name only.', - name: 'rsa.misc.policy_name', - type: 'keyword', - }, - 'rsa.misc.rule_name': { - category: 'rsa', - description: 'This key captures the Rule Name', - name: 'rsa.misc.rule_name', - type: 'keyword', - }, - 'rsa.misc.context': { - category: 'rsa', - description: 'This key captures Information which adds additional context to the event.', - name: 'rsa.misc.context', - type: 'keyword', - }, - 'rsa.misc.change_new': { - category: 'rsa', - description: - 'This key is used to capture the new values of the attribute that’s changing in a session', - name: 'rsa.misc.change_new', - type: 'keyword', - }, - 'rsa.misc.space': { - category: 'rsa', - name: 'rsa.misc.space', - type: 'keyword', - }, - 'rsa.misc.client': { - category: 'rsa', - description: - 'This key is used to capture only the name of the client application requesting resources of the server. See the user.agent meta key for capture of the specific user agent identifier or browser identification string.', - name: 'rsa.misc.client', - type: 'keyword', - }, - 'rsa.misc.msgIdPart1': { - category: 'rsa', - name: 'rsa.misc.msgIdPart1', - type: 'keyword', - }, - 'rsa.misc.msgIdPart2': { - category: 'rsa', - name: 'rsa.misc.msgIdPart2', - type: 'keyword', - }, - 'rsa.misc.change_old': { - category: 'rsa', - description: - 'This key is used to capture the old value of the attribute that’s changing in a session', - name: 'rsa.misc.change_old', - type: 'keyword', - }, - 'rsa.misc.operation_id': { - category: 'rsa', - description: - 'An alert number or operation number. The values should be unique and non-repeating.', - name: 'rsa.misc.operation_id', - type: 'keyword', - }, - 'rsa.misc.event_state': { - category: 'rsa', - description: - 'This key captures the current state of the object/item referenced within the event. Describing an on-going event.', - name: 'rsa.misc.event_state', - type: 'keyword', - }, - 'rsa.misc.group_object': { - category: 'rsa', - description: 'This key captures a collection/grouping of entities. Specific usage', - name: 'rsa.misc.group_object', - type: 'keyword', - }, - 'rsa.misc.node': { - category: 'rsa', - description: - 'Common use case is the node name within a cluster. The cluster name is reflected by the host name.', - name: 'rsa.misc.node', - type: 'keyword', - }, - 'rsa.misc.rule': { - category: 'rsa', - description: 'This key captures the Rule number', - name: 'rsa.misc.rule', - type: 'keyword', - }, - 'rsa.misc.device_name': { - category: 'rsa', - description: - 'This is used to capture name of the Device associated with the node Like: a physical disk, printer, etc', - name: 'rsa.misc.device_name', - type: 'keyword', - }, - 'rsa.misc.param': { - category: 'rsa', - description: 'This key is the parameters passed as part of a command or application, etc.', - name: 'rsa.misc.param', - type: 'keyword', - }, - 'rsa.misc.change_attrib': { - category: 'rsa', - description: - 'This key is used to capture the name of the attribute that’s changing in a session', - name: 'rsa.misc.change_attrib', - type: 'keyword', - }, - 'rsa.misc.event_computer': { - category: 'rsa', - description: - 'This key is a windows only concept, where this key is used to capture fully qualified domain name in a windows log.', - name: 'rsa.misc.event_computer', - type: 'keyword', - }, - 'rsa.misc.reference_id1': { - category: 'rsa', - description: 'This key is for Linked ID to be used as an addition to "reference.id"', - name: 'rsa.misc.reference_id1', - type: 'keyword', - }, - 'rsa.misc.event_log': { - category: 'rsa', - description: 'This key captures the Name of the event log', - name: 'rsa.misc.event_log', - type: 'keyword', - }, - 'rsa.misc.OS': { - category: 'rsa', - description: 'This key captures the Name of the Operating System', - name: 'rsa.misc.OS', - type: 'keyword', - }, - 'rsa.misc.terminal': { - category: 'rsa', - description: 'This key captures the Terminal Names only', - name: 'rsa.misc.terminal', - type: 'keyword', - }, - 'rsa.misc.msgIdPart3': { - category: 'rsa', - name: 'rsa.misc.msgIdPart3', - type: 'keyword', - }, - 'rsa.misc.filter': { - category: 'rsa', - description: 'This key captures Filter used to reduce result set', - name: 'rsa.misc.filter', - type: 'keyword', - }, - 'rsa.misc.serial_number': { - category: 'rsa', - description: 'This key is the Serial number associated with a physical asset.', - name: 'rsa.misc.serial_number', - type: 'keyword', - }, - 'rsa.misc.checksum': { - category: 'rsa', - description: - 'This key is used to capture the checksum or hash of the entity such as a file or process. Checksum should be used over checksum.src or checksum.dst when it is unclear whether the entity is a source or target of an action.', - name: 'rsa.misc.checksum', - type: 'keyword', - }, - 'rsa.misc.event_user': { - category: 'rsa', - description: - 'This key is a windows only concept, where this key is used to capture combination of domain name and username in a windows log.', - name: 'rsa.misc.event_user', - type: 'keyword', - }, - 'rsa.misc.virusname': { - category: 'rsa', - description: 'This key captures the name of the virus', - name: 'rsa.misc.virusname', - type: 'keyword', - }, - 'rsa.misc.content_type': { - category: 'rsa', - description: 'This key is used to capture Content Type only.', - name: 'rsa.misc.content_type', - type: 'keyword', - }, - 'rsa.misc.group_id': { - category: 'rsa', - description: 'This key captures Group ID Number (related to the group name)', - name: 'rsa.misc.group_id', - type: 'keyword', - }, - 'rsa.misc.policy_id': { - category: 'rsa', - description: - 'This key is used to capture the Policy ID only, this should be a numeric value, use policy.name otherwise', - name: 'rsa.misc.policy_id', - type: 'keyword', - }, - 'rsa.misc.vsys': { - category: 'rsa', - description: 'This key captures Virtual System Name', - name: 'rsa.misc.vsys', - type: 'keyword', - }, - 'rsa.misc.connection_id': { - category: 'rsa', - description: 'This key captures the Connection ID', - name: 'rsa.misc.connection_id', - type: 'keyword', - }, - 'rsa.misc.reference_id2': { - category: 'rsa', - description: - 'This key is for the 2nd Linked ID. Can be either linked to "reference.id" or "reference.id1" value but should not be used unless the other two variables are in play.', - name: 'rsa.misc.reference_id2', - type: 'keyword', - }, - 'rsa.misc.sensor': { - category: 'rsa', - description: 'This key captures Name of the sensor. Typically used in IDS/IPS based devices', - name: 'rsa.misc.sensor', - type: 'keyword', - }, - 'rsa.misc.sig_id': { - category: 'rsa', - description: 'This key captures IDS/IPS Int Signature ID', - name: 'rsa.misc.sig_id', - type: 'long', - }, - 'rsa.misc.port_name': { - category: 'rsa', - description: - 'This key is used for Physical or logical port connection but does NOT include a network port. (Example: Printer port name).', - name: 'rsa.misc.port_name', - type: 'keyword', - }, - 'rsa.misc.rule_group': { - category: 'rsa', - description: 'This key captures the Rule group name', - name: 'rsa.misc.rule_group', - type: 'keyword', - }, - 'rsa.misc.risk_num': { - category: 'rsa', - description: 'This key captures a Numeric Risk value', - name: 'rsa.misc.risk_num', - type: 'double', - }, - 'rsa.misc.trigger_val': { - category: 'rsa', - description: 'This key captures the Value of the trigger or threshold condition.', - name: 'rsa.misc.trigger_val', - type: 'keyword', - }, - 'rsa.misc.log_session_id1': { - category: 'rsa', - description: - 'This key is used to capture a Linked (Related) Session ID from the session directly', - name: 'rsa.misc.log_session_id1', - type: 'keyword', - }, - 'rsa.misc.comp_version': { - category: 'rsa', - description: 'This key captures the Version level of a sub-component of a product.', - name: 'rsa.misc.comp_version', - type: 'keyword', - }, - 'rsa.misc.content_version': { - category: 'rsa', - description: 'This key captures Version level of a signature or database content.', - name: 'rsa.misc.content_version', - type: 'keyword', - }, - 'rsa.misc.hardware_id': { - category: 'rsa', - description: - 'This key is used to capture unique identifier for a device or system (NOT a Mac address)', - name: 'rsa.misc.hardware_id', - type: 'keyword', - }, - 'rsa.misc.risk': { - category: 'rsa', - description: 'This key captures the non-numeric risk value', - name: 'rsa.misc.risk', - type: 'keyword', - }, - 'rsa.misc.event_id': { - category: 'rsa', - name: 'rsa.misc.event_id', - type: 'keyword', - }, - 'rsa.misc.reason': { - category: 'rsa', - name: 'rsa.misc.reason', - type: 'keyword', - }, - 'rsa.misc.status': { - category: 'rsa', - name: 'rsa.misc.status', - type: 'keyword', - }, - 'rsa.misc.mail_id': { - category: 'rsa', - description: 'This key is used to capture the mailbox id/name', - name: 'rsa.misc.mail_id', - type: 'keyword', - }, - 'rsa.misc.rule_uid': { - category: 'rsa', - description: 'This key is the Unique Identifier for a rule.', - name: 'rsa.misc.rule_uid', - type: 'keyword', - }, - 'rsa.misc.trigger_desc': { - category: 'rsa', - description: 'This key captures the Description of the trigger or threshold condition.', - name: 'rsa.misc.trigger_desc', - type: 'keyword', - }, - 'rsa.misc.inout': { - category: 'rsa', - name: 'rsa.misc.inout', - type: 'keyword', - }, - 'rsa.misc.p_msgid': { - category: 'rsa', - name: 'rsa.misc.p_msgid', - type: 'keyword', - }, - 'rsa.misc.data_type': { - category: 'rsa', - name: 'rsa.misc.data_type', - type: 'keyword', - }, - 'rsa.misc.msgIdPart4': { - category: 'rsa', - name: 'rsa.misc.msgIdPart4', - type: 'keyword', - }, - 'rsa.misc.error': { - category: 'rsa', - description: 'This key captures All non successful Error codes or responses', - name: 'rsa.misc.error', - type: 'keyword', - }, - 'rsa.misc.index': { - category: 'rsa', - name: 'rsa.misc.index', - type: 'keyword', - }, - 'rsa.misc.listnum': { - category: 'rsa', - description: - 'This key is used to capture listname or listnumber, primarily for collecting access-list', - name: 'rsa.misc.listnum', - type: 'keyword', - }, - 'rsa.misc.ntype': { - category: 'rsa', - name: 'rsa.misc.ntype', - type: 'keyword', - }, - 'rsa.misc.observed_val': { - category: 'rsa', - description: - 'This key captures the Value observed (from the perspective of the device generating the log).', - name: 'rsa.misc.observed_val', - type: 'keyword', - }, - 'rsa.misc.policy_value': { - category: 'rsa', - description: - 'This key captures the contents of the policy. This contains details about the policy', - name: 'rsa.misc.policy_value', - type: 'keyword', - }, - 'rsa.misc.pool_name': { - category: 'rsa', - description: 'This key captures the name of a resource pool', - name: 'rsa.misc.pool_name', - type: 'keyword', - }, - 'rsa.misc.rule_template': { - category: 'rsa', - description: - 'A default set of parameters which are overlayed onto a rule (or rulename) which efffectively constitutes a template', - name: 'rsa.misc.rule_template', - type: 'keyword', - }, - 'rsa.misc.count': { - category: 'rsa', - name: 'rsa.misc.count', - type: 'keyword', - }, - 'rsa.misc.number': { - category: 'rsa', - name: 'rsa.misc.number', - type: 'keyword', - }, - 'rsa.misc.sigcat': { - category: 'rsa', - name: 'rsa.misc.sigcat', - type: 'keyword', - }, - 'rsa.misc.type': { - category: 'rsa', - name: 'rsa.misc.type', - type: 'keyword', - }, - 'rsa.misc.comments': { - category: 'rsa', - description: 'Comment information provided in the log message', - name: 'rsa.misc.comments', - type: 'keyword', - }, - 'rsa.misc.doc_number': { - category: 'rsa', - description: 'This key captures File Identification number', - name: 'rsa.misc.doc_number', - type: 'long', - }, - 'rsa.misc.expected_val': { - category: 'rsa', - description: - 'This key captures the Value expected (from the perspective of the device generating the log).', - name: 'rsa.misc.expected_val', - type: 'keyword', - }, - 'rsa.misc.job_num': { - category: 'rsa', - description: 'This key captures the Job Number', - name: 'rsa.misc.job_num', - type: 'keyword', - }, - 'rsa.misc.spi_dst': { - category: 'rsa', - description: 'Destination SPI Index', - name: 'rsa.misc.spi_dst', - type: 'keyword', - }, - 'rsa.misc.spi_src': { - category: 'rsa', - description: 'Source SPI Index', - name: 'rsa.misc.spi_src', - type: 'keyword', - }, - 'rsa.misc.code': { - category: 'rsa', - name: 'rsa.misc.code', - type: 'keyword', - }, - 'rsa.misc.agent_id': { - category: 'rsa', - description: 'This key is used to capture agent id', - name: 'rsa.misc.agent_id', - type: 'keyword', - }, - 'rsa.misc.message_body': { - category: 'rsa', - description: 'This key captures the The contents of the message body.', - name: 'rsa.misc.message_body', - type: 'keyword', - }, - 'rsa.misc.phone': { - category: 'rsa', - name: 'rsa.misc.phone', - type: 'keyword', - }, - 'rsa.misc.sig_id_str': { - category: 'rsa', - description: 'This key captures a string object of the sigid variable.', - name: 'rsa.misc.sig_id_str', - type: 'keyword', - }, - 'rsa.misc.cmd': { - category: 'rsa', - name: 'rsa.misc.cmd', - type: 'keyword', - }, - 'rsa.misc.misc': { - category: 'rsa', - name: 'rsa.misc.misc', - type: 'keyword', - }, - 'rsa.misc.name': { - category: 'rsa', - name: 'rsa.misc.name', - type: 'keyword', - }, - 'rsa.misc.cpu': { - category: 'rsa', - description: 'This key is the CPU time used in the execution of the event being recorded.', - name: 'rsa.misc.cpu', - type: 'long', - }, - 'rsa.misc.event_desc': { - category: 'rsa', - description: - 'This key is used to capture a description of an event available directly or inferred', - name: 'rsa.misc.event_desc', - type: 'keyword', - }, - 'rsa.misc.sig_id1': { - category: 'rsa', - description: 'This key captures IDS/IPS Int Signature ID. This must be linked to the sig.id', - name: 'rsa.misc.sig_id1', - type: 'long', - }, - 'rsa.misc.im_buddyid': { - category: 'rsa', - name: 'rsa.misc.im_buddyid', - type: 'keyword', - }, - 'rsa.misc.im_client': { - category: 'rsa', - name: 'rsa.misc.im_client', - type: 'keyword', - }, - 'rsa.misc.im_userid': { - category: 'rsa', - name: 'rsa.misc.im_userid', - type: 'keyword', - }, - 'rsa.misc.pid': { - category: 'rsa', - name: 'rsa.misc.pid', - type: 'keyword', - }, - 'rsa.misc.priority': { - category: 'rsa', - name: 'rsa.misc.priority', - type: 'keyword', - }, - 'rsa.misc.context_subject': { - category: 'rsa', - description: - 'This key is to be used in an audit context where the subject is the object being identified', - name: 'rsa.misc.context_subject', - type: 'keyword', - }, - 'rsa.misc.context_target': { - category: 'rsa', - name: 'rsa.misc.context_target', - type: 'keyword', - }, - 'rsa.misc.cve': { - category: 'rsa', - description: - 'This key captures CVE (Common Vulnerabilities and Exposures) - an identifier for known information security vulnerabilities.', - name: 'rsa.misc.cve', - type: 'keyword', - }, - 'rsa.misc.fcatnum': { - category: 'rsa', - description: 'This key captures Filter Category Number. Legacy Usage', - name: 'rsa.misc.fcatnum', - type: 'keyword', - }, - 'rsa.misc.library': { - category: 'rsa', - description: 'This key is used to capture library information in mainframe devices', - name: 'rsa.misc.library', - type: 'keyword', - }, - 'rsa.misc.parent_node': { - category: 'rsa', - description: 'This key captures the Parent Node Name. Must be related to node variable.', - name: 'rsa.misc.parent_node', - type: 'keyword', - }, - 'rsa.misc.risk_info': { - category: 'rsa', - description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.risk_info', - type: 'keyword', - }, - 'rsa.misc.tcp_flags': { - category: 'rsa', - description: 'This key is captures the TCP flags set in any packet of session', - name: 'rsa.misc.tcp_flags', - type: 'long', - }, - 'rsa.misc.tos': { - category: 'rsa', - description: 'This key describes the type of service', - name: 'rsa.misc.tos', - type: 'long', - }, - 'rsa.misc.vm_target': { - category: 'rsa', - description: 'VMWare Target **VMWARE** only varaible.', - name: 'rsa.misc.vm_target', - type: 'keyword', - }, - 'rsa.misc.workspace': { - category: 'rsa', - description: 'This key captures Workspace Description', - name: 'rsa.misc.workspace', - type: 'keyword', - }, - 'rsa.misc.command': { - category: 'rsa', - name: 'rsa.misc.command', - type: 'keyword', - }, - 'rsa.misc.event_category': { - category: 'rsa', - name: 'rsa.misc.event_category', - type: 'keyword', - }, - 'rsa.misc.facilityname': { - category: 'rsa', - name: 'rsa.misc.facilityname', - type: 'keyword', - }, - 'rsa.misc.forensic_info': { - category: 'rsa', - name: 'rsa.misc.forensic_info', - type: 'keyword', - }, - 'rsa.misc.jobname': { - category: 'rsa', - name: 'rsa.misc.jobname', - type: 'keyword', - }, - 'rsa.misc.mode': { - category: 'rsa', - name: 'rsa.misc.mode', - type: 'keyword', - }, - 'rsa.misc.policy': { - category: 'rsa', - name: 'rsa.misc.policy', - type: 'keyword', - }, - 'rsa.misc.policy_waiver': { - category: 'rsa', - name: 'rsa.misc.policy_waiver', - type: 'keyword', - }, - 'rsa.misc.second': { - category: 'rsa', - name: 'rsa.misc.second', - type: 'keyword', - }, - 'rsa.misc.space1': { - category: 'rsa', - name: 'rsa.misc.space1', - type: 'keyword', - }, - 'rsa.misc.subcategory': { - category: 'rsa', - name: 'rsa.misc.subcategory', - type: 'keyword', - }, - 'rsa.misc.tbdstr2': { - category: 'rsa', - name: 'rsa.misc.tbdstr2', - type: 'keyword', - }, - 'rsa.misc.alert_id': { - category: 'rsa', - description: 'Deprecated, New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.alert_id', - type: 'keyword', - }, - 'rsa.misc.checksum_dst': { - category: 'rsa', - description: - 'This key is used to capture the checksum or hash of the the target entity such as a process or file.', - name: 'rsa.misc.checksum_dst', - type: 'keyword', - }, - 'rsa.misc.checksum_src': { - category: 'rsa', - description: - 'This key is used to capture the checksum or hash of the source entity such as a file or process.', - name: 'rsa.misc.checksum_src', - type: 'keyword', - }, - 'rsa.misc.fresult': { - category: 'rsa', - description: 'This key captures the Filter Result', - name: 'rsa.misc.fresult', - type: 'long', - }, - 'rsa.misc.payload_dst': { - category: 'rsa', - description: 'This key is used to capture destination payload', - name: 'rsa.misc.payload_dst', - type: 'keyword', - }, - 'rsa.misc.payload_src': { - category: 'rsa', - description: 'This key is used to capture source payload', - name: 'rsa.misc.payload_src', - type: 'keyword', - }, - 'rsa.misc.pool_id': { - category: 'rsa', - description: 'This key captures the identifier (typically numeric field) of a resource pool', - name: 'rsa.misc.pool_id', - type: 'keyword', - }, - 'rsa.misc.process_id_val': { - category: 'rsa', - description: 'This key is a failure key for Process ID when it is not an integer value', - name: 'rsa.misc.process_id_val', - type: 'keyword', - }, - 'rsa.misc.risk_num_comm': { - category: 'rsa', - description: 'This key captures Risk Number Community', - name: 'rsa.misc.risk_num_comm', - type: 'double', - }, - 'rsa.misc.risk_num_next': { - category: 'rsa', - description: 'This key captures Risk Number NextGen', - name: 'rsa.misc.risk_num_next', - type: 'double', - }, - 'rsa.misc.risk_num_sand': { - category: 'rsa', - description: 'This key captures Risk Number SandBox', - name: 'rsa.misc.risk_num_sand', - type: 'double', - }, - 'rsa.misc.risk_num_static': { - category: 'rsa', - description: 'This key captures Risk Number Static', - name: 'rsa.misc.risk_num_static', - type: 'double', - }, - 'rsa.misc.risk_suspicious': { - category: 'rsa', - description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.risk_suspicious', - type: 'keyword', - }, - 'rsa.misc.risk_warning': { - category: 'rsa', - description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.risk_warning', - type: 'keyword', - }, - 'rsa.misc.snmp_oid': { - category: 'rsa', - description: 'SNMP Object Identifier', - name: 'rsa.misc.snmp_oid', - type: 'keyword', - }, - 'rsa.misc.sql': { - category: 'rsa', - description: 'This key captures the SQL query', - name: 'rsa.misc.sql', - type: 'keyword', - }, - 'rsa.misc.vuln_ref': { - category: 'rsa', - description: 'This key captures the Vulnerability Reference details', - name: 'rsa.misc.vuln_ref', - type: 'keyword', - }, - 'rsa.misc.acl_id': { - category: 'rsa', - name: 'rsa.misc.acl_id', - type: 'keyword', - }, - 'rsa.misc.acl_op': { - category: 'rsa', - name: 'rsa.misc.acl_op', - type: 'keyword', - }, - 'rsa.misc.acl_pos': { - category: 'rsa', - name: 'rsa.misc.acl_pos', - type: 'keyword', - }, - 'rsa.misc.acl_table': { - category: 'rsa', - name: 'rsa.misc.acl_table', - type: 'keyword', - }, - 'rsa.misc.admin': { - category: 'rsa', - name: 'rsa.misc.admin', - type: 'keyword', - }, - 'rsa.misc.alarm_id': { - category: 'rsa', - name: 'rsa.misc.alarm_id', - type: 'keyword', - }, - 'rsa.misc.alarmname': { - category: 'rsa', - name: 'rsa.misc.alarmname', - type: 'keyword', - }, - 'rsa.misc.app_id': { - category: 'rsa', - name: 'rsa.misc.app_id', - type: 'keyword', - }, - 'rsa.misc.audit': { - category: 'rsa', - name: 'rsa.misc.audit', - type: 'keyword', - }, - 'rsa.misc.audit_object': { - category: 'rsa', - name: 'rsa.misc.audit_object', - type: 'keyword', - }, - 'rsa.misc.auditdata': { - category: 'rsa', - name: 'rsa.misc.auditdata', - type: 'keyword', - }, - 'rsa.misc.benchmark': { - category: 'rsa', - name: 'rsa.misc.benchmark', - type: 'keyword', - }, - 'rsa.misc.bypass': { - category: 'rsa', - name: 'rsa.misc.bypass', - type: 'keyword', - }, - 'rsa.misc.cache': { - category: 'rsa', - name: 'rsa.misc.cache', - type: 'keyword', - }, - 'rsa.misc.cache_hit': { - category: 'rsa', - name: 'rsa.misc.cache_hit', - type: 'keyword', - }, - 'rsa.misc.cefversion': { - category: 'rsa', - name: 'rsa.misc.cefversion', - type: 'keyword', - }, - 'rsa.misc.cfg_attr': { - category: 'rsa', - name: 'rsa.misc.cfg_attr', - type: 'keyword', - }, - 'rsa.misc.cfg_obj': { - category: 'rsa', - name: 'rsa.misc.cfg_obj', - type: 'keyword', - }, - 'rsa.misc.cfg_path': { - category: 'rsa', - name: 'rsa.misc.cfg_path', - type: 'keyword', - }, - 'rsa.misc.changes': { - category: 'rsa', - name: 'rsa.misc.changes', - type: 'keyword', - }, - 'rsa.misc.client_ip': { - category: 'rsa', - name: 'rsa.misc.client_ip', - type: 'keyword', - }, - 'rsa.misc.clustermembers': { - category: 'rsa', - name: 'rsa.misc.clustermembers', - type: 'keyword', - }, - 'rsa.misc.cn_acttimeout': { - category: 'rsa', - name: 'rsa.misc.cn_acttimeout', - type: 'keyword', - }, - 'rsa.misc.cn_asn_src': { - category: 'rsa', - name: 'rsa.misc.cn_asn_src', - type: 'keyword', - }, - 'rsa.misc.cn_bgpv4nxthop': { - category: 'rsa', - name: 'rsa.misc.cn_bgpv4nxthop', - type: 'keyword', - }, - 'rsa.misc.cn_ctr_dst_code': { - category: 'rsa', - name: 'rsa.misc.cn_ctr_dst_code', - type: 'keyword', - }, - 'rsa.misc.cn_dst_tos': { - category: 'rsa', - name: 'rsa.misc.cn_dst_tos', - type: 'keyword', - }, - 'rsa.misc.cn_dst_vlan': { - category: 'rsa', - name: 'rsa.misc.cn_dst_vlan', - type: 'keyword', - }, - 'rsa.misc.cn_engine_id': { - category: 'rsa', - name: 'rsa.misc.cn_engine_id', - type: 'keyword', - }, - 'rsa.misc.cn_engine_type': { - category: 'rsa', - name: 'rsa.misc.cn_engine_type', - type: 'keyword', - }, - 'rsa.misc.cn_f_switch': { - category: 'rsa', - name: 'rsa.misc.cn_f_switch', - type: 'keyword', - }, - 'rsa.misc.cn_flowsampid': { - category: 'rsa', - name: 'rsa.misc.cn_flowsampid', - type: 'keyword', - }, - 'rsa.misc.cn_flowsampintv': { - category: 'rsa', - name: 'rsa.misc.cn_flowsampintv', - type: 'keyword', - }, - 'rsa.misc.cn_flowsampmode': { - category: 'rsa', - name: 'rsa.misc.cn_flowsampmode', - type: 'keyword', - }, - 'rsa.misc.cn_inacttimeout': { - category: 'rsa', - name: 'rsa.misc.cn_inacttimeout', - type: 'keyword', - }, - 'rsa.misc.cn_inpermbyts': { - category: 'rsa', - name: 'rsa.misc.cn_inpermbyts', - type: 'keyword', - }, - 'rsa.misc.cn_inpermpckts': { - category: 'rsa', - name: 'rsa.misc.cn_inpermpckts', - type: 'keyword', - }, - 'rsa.misc.cn_invalid': { - category: 'rsa', - name: 'rsa.misc.cn_invalid', - type: 'keyword', - }, - 'rsa.misc.cn_ip_proto_ver': { - category: 'rsa', - name: 'rsa.misc.cn_ip_proto_ver', - type: 'keyword', - }, - 'rsa.misc.cn_ipv4_ident': { - category: 'rsa', - name: 'rsa.misc.cn_ipv4_ident', - type: 'keyword', - }, - 'rsa.misc.cn_l_switch': { - category: 'rsa', - name: 'rsa.misc.cn_l_switch', - type: 'keyword', - }, - 'rsa.misc.cn_log_did': { - category: 'rsa', - name: 'rsa.misc.cn_log_did', - type: 'keyword', - }, - 'rsa.misc.cn_log_rid': { - category: 'rsa', - name: 'rsa.misc.cn_log_rid', - type: 'keyword', - }, - 'rsa.misc.cn_max_ttl': { - category: 'rsa', - name: 'rsa.misc.cn_max_ttl', - type: 'keyword', - }, - 'rsa.misc.cn_maxpcktlen': { - category: 'rsa', - name: 'rsa.misc.cn_maxpcktlen', - type: 'keyword', - }, - 'rsa.misc.cn_min_ttl': { - category: 'rsa', - name: 'rsa.misc.cn_min_ttl', - type: 'keyword', - }, - 'rsa.misc.cn_minpcktlen': { - category: 'rsa', - name: 'rsa.misc.cn_minpcktlen', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_1': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_1', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_10': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_10', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_2': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_2', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_3': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_3', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_4': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_4', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_5': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_5', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_6': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_6', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_7': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_7', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_8': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_8', - type: 'keyword', - }, - 'rsa.misc.cn_mpls_lbl_9': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_9', - type: 'keyword', - }, - 'rsa.misc.cn_mplstoplabel': { - category: 'rsa', - name: 'rsa.misc.cn_mplstoplabel', - type: 'keyword', - }, - 'rsa.misc.cn_mplstoplabip': { - category: 'rsa', - name: 'rsa.misc.cn_mplstoplabip', - type: 'keyword', - }, - 'rsa.misc.cn_mul_dst_byt': { - category: 'rsa', - name: 'rsa.misc.cn_mul_dst_byt', - type: 'keyword', - }, - 'rsa.misc.cn_mul_dst_pks': { - category: 'rsa', - name: 'rsa.misc.cn_mul_dst_pks', - type: 'keyword', - }, - 'rsa.misc.cn_muligmptype': { - category: 'rsa', - name: 'rsa.misc.cn_muligmptype', - type: 'keyword', - }, - 'rsa.misc.cn_sampalgo': { - category: 'rsa', - name: 'rsa.misc.cn_sampalgo', - type: 'keyword', - }, - 'rsa.misc.cn_sampint': { - category: 'rsa', - name: 'rsa.misc.cn_sampint', - type: 'keyword', - }, - 'rsa.misc.cn_seqctr': { - category: 'rsa', - name: 'rsa.misc.cn_seqctr', - type: 'keyword', - }, - 'rsa.misc.cn_spackets': { - category: 'rsa', - name: 'rsa.misc.cn_spackets', - type: 'keyword', - }, - 'rsa.misc.cn_src_tos': { - category: 'rsa', - name: 'rsa.misc.cn_src_tos', - type: 'keyword', - }, - 'rsa.misc.cn_src_vlan': { - category: 'rsa', - name: 'rsa.misc.cn_src_vlan', - type: 'keyword', - }, - 'rsa.misc.cn_sysuptime': { - category: 'rsa', - name: 'rsa.misc.cn_sysuptime', - type: 'keyword', - }, - 'rsa.misc.cn_template_id': { - category: 'rsa', - name: 'rsa.misc.cn_template_id', - type: 'keyword', - }, - 'rsa.misc.cn_totbytsexp': { - category: 'rsa', - name: 'rsa.misc.cn_totbytsexp', - type: 'keyword', - }, - 'rsa.misc.cn_totflowexp': { - category: 'rsa', - name: 'rsa.misc.cn_totflowexp', - type: 'keyword', - }, - 'rsa.misc.cn_totpcktsexp': { - category: 'rsa', - name: 'rsa.misc.cn_totpcktsexp', - type: 'keyword', - }, - 'rsa.misc.cn_unixnanosecs': { - category: 'rsa', - name: 'rsa.misc.cn_unixnanosecs', - type: 'keyword', - }, - 'rsa.misc.cn_v6flowlabel': { - category: 'rsa', - name: 'rsa.misc.cn_v6flowlabel', - type: 'keyword', - }, - 'rsa.misc.cn_v6optheaders': { - category: 'rsa', - name: 'rsa.misc.cn_v6optheaders', - type: 'keyword', - }, - 'rsa.misc.comp_class': { - category: 'rsa', - name: 'rsa.misc.comp_class', - type: 'keyword', - }, - 'rsa.misc.comp_name': { - category: 'rsa', - name: 'rsa.misc.comp_name', - type: 'keyword', - }, - 'rsa.misc.comp_rbytes': { - category: 'rsa', - name: 'rsa.misc.comp_rbytes', - type: 'keyword', - }, - 'rsa.misc.comp_sbytes': { - category: 'rsa', - name: 'rsa.misc.comp_sbytes', - type: 'keyword', - }, - 'rsa.misc.cpu_data': { - category: 'rsa', - name: 'rsa.misc.cpu_data', - type: 'keyword', - }, - 'rsa.misc.criticality': { - category: 'rsa', - name: 'rsa.misc.criticality', - type: 'keyword', - }, - 'rsa.misc.cs_agency_dst': { - category: 'rsa', - name: 'rsa.misc.cs_agency_dst', - type: 'keyword', - }, - 'rsa.misc.cs_analyzedby': { - category: 'rsa', - name: 'rsa.misc.cs_analyzedby', - type: 'keyword', - }, - 'rsa.misc.cs_av_other': { - category: 'rsa', - name: 'rsa.misc.cs_av_other', - type: 'keyword', - }, - 'rsa.misc.cs_av_primary': { - category: 'rsa', - name: 'rsa.misc.cs_av_primary', - type: 'keyword', - }, - 'rsa.misc.cs_av_secondary': { - category: 'rsa', - name: 'rsa.misc.cs_av_secondary', - type: 'keyword', - }, - 'rsa.misc.cs_bgpv6nxthop': { - category: 'rsa', - name: 'rsa.misc.cs_bgpv6nxthop', - type: 'keyword', - }, - 'rsa.misc.cs_bit9status': { - category: 'rsa', - name: 'rsa.misc.cs_bit9status', - type: 'keyword', - }, - 'rsa.misc.cs_context': { - category: 'rsa', - name: 'rsa.misc.cs_context', - type: 'keyword', - }, - 'rsa.misc.cs_control': { - category: 'rsa', - name: 'rsa.misc.cs_control', - type: 'keyword', - }, - 'rsa.misc.cs_data': { - category: 'rsa', - name: 'rsa.misc.cs_data', - type: 'keyword', - }, - 'rsa.misc.cs_datecret': { - category: 'rsa', - name: 'rsa.misc.cs_datecret', - type: 'keyword', - }, - 'rsa.misc.cs_dst_tld': { - category: 'rsa', - name: 'rsa.misc.cs_dst_tld', - type: 'keyword', - }, - 'rsa.misc.cs_eth_dst_ven': { - category: 'rsa', - name: 'rsa.misc.cs_eth_dst_ven', - type: 'keyword', - }, - 'rsa.misc.cs_eth_src_ven': { - category: 'rsa', - name: 'rsa.misc.cs_eth_src_ven', - type: 'keyword', - }, - 'rsa.misc.cs_event_uuid': { - category: 'rsa', - name: 'rsa.misc.cs_event_uuid', - type: 'keyword', - }, - 'rsa.misc.cs_filetype': { - category: 'rsa', - name: 'rsa.misc.cs_filetype', - type: 'keyword', - }, - 'rsa.misc.cs_fld': { - category: 'rsa', - name: 'rsa.misc.cs_fld', - type: 'keyword', - }, - 'rsa.misc.cs_if_desc': { - category: 'rsa', - name: 'rsa.misc.cs_if_desc', - type: 'keyword', - }, - 'rsa.misc.cs_if_name': { - category: 'rsa', - name: 'rsa.misc.cs_if_name', - type: 'keyword', - }, - 'rsa.misc.cs_ip_next_hop': { - category: 'rsa', - name: 'rsa.misc.cs_ip_next_hop', - type: 'keyword', - }, - 'rsa.misc.cs_ipv4dstpre': { - category: 'rsa', - name: 'rsa.misc.cs_ipv4dstpre', - type: 'keyword', - }, - 'rsa.misc.cs_ipv4srcpre': { - category: 'rsa', - name: 'rsa.misc.cs_ipv4srcpre', - type: 'keyword', - }, - 'rsa.misc.cs_lifetime': { - category: 'rsa', - name: 'rsa.misc.cs_lifetime', - type: 'keyword', - }, - 'rsa.misc.cs_log_medium': { - category: 'rsa', - name: 'rsa.misc.cs_log_medium', - type: 'keyword', - }, - 'rsa.misc.cs_loginname': { - category: 'rsa', - name: 'rsa.misc.cs_loginname', - type: 'keyword', - }, - 'rsa.misc.cs_modulescore': { - category: 'rsa', - name: 'rsa.misc.cs_modulescore', - type: 'keyword', - }, - 'rsa.misc.cs_modulesign': { - category: 'rsa', - name: 'rsa.misc.cs_modulesign', - type: 'keyword', - }, - 'rsa.misc.cs_opswatresult': { - category: 'rsa', - name: 'rsa.misc.cs_opswatresult', - type: 'keyword', - }, - 'rsa.misc.cs_payload': { - category: 'rsa', - name: 'rsa.misc.cs_payload', - type: 'keyword', - }, - 'rsa.misc.cs_registrant': { - category: 'rsa', - name: 'rsa.misc.cs_registrant', - type: 'keyword', - }, - 'rsa.misc.cs_registrar': { - category: 'rsa', - name: 'rsa.misc.cs_registrar', - type: 'keyword', - }, - 'rsa.misc.cs_represult': { - category: 'rsa', - name: 'rsa.misc.cs_represult', - type: 'keyword', - }, - 'rsa.misc.cs_rpayload': { - category: 'rsa', - name: 'rsa.misc.cs_rpayload', - type: 'keyword', - }, - 'rsa.misc.cs_sampler_name': { - category: 'rsa', - name: 'rsa.misc.cs_sampler_name', - type: 'keyword', - }, - 'rsa.misc.cs_sourcemodule': { - category: 'rsa', - name: 'rsa.misc.cs_sourcemodule', - type: 'keyword', - }, - 'rsa.misc.cs_streams': { - category: 'rsa', - name: 'rsa.misc.cs_streams', - type: 'keyword', - }, - 'rsa.misc.cs_targetmodule': { - category: 'rsa', - name: 'rsa.misc.cs_targetmodule', - type: 'keyword', - }, - 'rsa.misc.cs_v6nxthop': { - category: 'rsa', - name: 'rsa.misc.cs_v6nxthop', - type: 'keyword', - }, - 'rsa.misc.cs_whois_server': { - category: 'rsa', - name: 'rsa.misc.cs_whois_server', - type: 'keyword', - }, - 'rsa.misc.cs_yararesult': { - category: 'rsa', - name: 'rsa.misc.cs_yararesult', - type: 'keyword', - }, - 'rsa.misc.description': { - category: 'rsa', - name: 'rsa.misc.description', - type: 'keyword', - }, - 'rsa.misc.devvendor': { - category: 'rsa', - name: 'rsa.misc.devvendor', - type: 'keyword', - }, - 'rsa.misc.distance': { - category: 'rsa', - name: 'rsa.misc.distance', - type: 'keyword', - }, - 'rsa.misc.dstburb': { - category: 'rsa', - name: 'rsa.misc.dstburb', - type: 'keyword', - }, - 'rsa.misc.edomain': { - category: 'rsa', - name: 'rsa.misc.edomain', - type: 'keyword', - }, - 'rsa.misc.edomaub': { - category: 'rsa', - name: 'rsa.misc.edomaub', - type: 'keyword', - }, - 'rsa.misc.euid': { - category: 'rsa', - name: 'rsa.misc.euid', - type: 'keyword', - }, - 'rsa.misc.facility': { - category: 'rsa', - name: 'rsa.misc.facility', - type: 'keyword', - }, - 'rsa.misc.finterface': { - category: 'rsa', - name: 'rsa.misc.finterface', - type: 'keyword', - }, - 'rsa.misc.flags': { - category: 'rsa', - name: 'rsa.misc.flags', - type: 'keyword', - }, - 'rsa.misc.gaddr': { - category: 'rsa', - name: 'rsa.misc.gaddr', - type: 'keyword', - }, - 'rsa.misc.id3': { - category: 'rsa', - name: 'rsa.misc.id3', - type: 'keyword', - }, - 'rsa.misc.im_buddyname': { - category: 'rsa', - name: 'rsa.misc.im_buddyname', - type: 'keyword', - }, - 'rsa.misc.im_croomid': { - category: 'rsa', - name: 'rsa.misc.im_croomid', - type: 'keyword', - }, - 'rsa.misc.im_croomtype': { - category: 'rsa', - name: 'rsa.misc.im_croomtype', - type: 'keyword', - }, - 'rsa.misc.im_members': { - category: 'rsa', - name: 'rsa.misc.im_members', - type: 'keyword', - }, - 'rsa.misc.im_username': { - category: 'rsa', - name: 'rsa.misc.im_username', - type: 'keyword', - }, - 'rsa.misc.ipkt': { - category: 'rsa', - name: 'rsa.misc.ipkt', - type: 'keyword', - }, - 'rsa.misc.ipscat': { - category: 'rsa', - name: 'rsa.misc.ipscat', - type: 'keyword', - }, - 'rsa.misc.ipspri': { - category: 'rsa', - name: 'rsa.misc.ipspri', - type: 'keyword', - }, - 'rsa.misc.latitude': { - category: 'rsa', - name: 'rsa.misc.latitude', - type: 'keyword', - }, - 'rsa.misc.linenum': { - category: 'rsa', - name: 'rsa.misc.linenum', - type: 'keyword', - }, - 'rsa.misc.list_name': { - category: 'rsa', - name: 'rsa.misc.list_name', - type: 'keyword', - }, - 'rsa.misc.load_data': { - category: 'rsa', - name: 'rsa.misc.load_data', - type: 'keyword', - }, - 'rsa.misc.location_floor': { - category: 'rsa', - name: 'rsa.misc.location_floor', - type: 'keyword', - }, - 'rsa.misc.location_mark': { - category: 'rsa', - name: 'rsa.misc.location_mark', - type: 'keyword', - }, - 'rsa.misc.log_id': { - category: 'rsa', - name: 'rsa.misc.log_id', - type: 'keyword', - }, - 'rsa.misc.log_type': { - category: 'rsa', - name: 'rsa.misc.log_type', - type: 'keyword', - }, - 'rsa.misc.logid': { - category: 'rsa', - name: 'rsa.misc.logid', - type: 'keyword', - }, - 'rsa.misc.logip': { - category: 'rsa', - name: 'rsa.misc.logip', - type: 'keyword', - }, - 'rsa.misc.logname': { - category: 'rsa', - name: 'rsa.misc.logname', - type: 'keyword', - }, - 'rsa.misc.longitude': { - category: 'rsa', - name: 'rsa.misc.longitude', - type: 'keyword', - }, - 'rsa.misc.lport': { - category: 'rsa', - name: 'rsa.misc.lport', - type: 'keyword', - }, - 'rsa.misc.mbug_data': { - category: 'rsa', - name: 'rsa.misc.mbug_data', - type: 'keyword', - }, - 'rsa.misc.misc_name': { - category: 'rsa', - name: 'rsa.misc.misc_name', - type: 'keyword', - }, - 'rsa.misc.msg_type': { - category: 'rsa', - name: 'rsa.misc.msg_type', - type: 'keyword', - }, - 'rsa.misc.msgid': { - category: 'rsa', - name: 'rsa.misc.msgid', - type: 'keyword', - }, - 'rsa.misc.netsessid': { - category: 'rsa', - name: 'rsa.misc.netsessid', - type: 'keyword', - }, - 'rsa.misc.num': { - category: 'rsa', - name: 'rsa.misc.num', - type: 'keyword', - }, - 'rsa.misc.number1': { - category: 'rsa', - name: 'rsa.misc.number1', - type: 'keyword', - }, - 'rsa.misc.number2': { - category: 'rsa', - name: 'rsa.misc.number2', - type: 'keyword', - }, - 'rsa.misc.nwwn': { - category: 'rsa', - name: 'rsa.misc.nwwn', - type: 'keyword', - }, - 'rsa.misc.object': { - category: 'rsa', - name: 'rsa.misc.object', - type: 'keyword', - }, - 'rsa.misc.operation': { - category: 'rsa', - name: 'rsa.misc.operation', - type: 'keyword', - }, - 'rsa.misc.opkt': { - category: 'rsa', - name: 'rsa.misc.opkt', - type: 'keyword', - }, - 'rsa.misc.orig_from': { - category: 'rsa', - name: 'rsa.misc.orig_from', - type: 'keyword', - }, - 'rsa.misc.owner_id': { - category: 'rsa', - name: 'rsa.misc.owner_id', - type: 'keyword', - }, - 'rsa.misc.p_action': { - category: 'rsa', - name: 'rsa.misc.p_action', - type: 'keyword', - }, - 'rsa.misc.p_filter': { - category: 'rsa', - name: 'rsa.misc.p_filter', - type: 'keyword', - }, - 'rsa.misc.p_group_object': { - category: 'rsa', - name: 'rsa.misc.p_group_object', - type: 'keyword', - }, - 'rsa.misc.p_id': { - category: 'rsa', - name: 'rsa.misc.p_id', - type: 'keyword', - }, - 'rsa.misc.p_msgid1': { - category: 'rsa', - name: 'rsa.misc.p_msgid1', - type: 'keyword', - }, - 'rsa.misc.p_msgid2': { - category: 'rsa', - name: 'rsa.misc.p_msgid2', - type: 'keyword', - }, - 'rsa.misc.p_result1': { - category: 'rsa', - name: 'rsa.misc.p_result1', - type: 'keyword', - }, - 'rsa.misc.password_chg': { - category: 'rsa', - name: 'rsa.misc.password_chg', - type: 'keyword', - }, - 'rsa.misc.password_expire': { - category: 'rsa', - name: 'rsa.misc.password_expire', - type: 'keyword', - }, - 'rsa.misc.permgranted': { - category: 'rsa', - name: 'rsa.misc.permgranted', - type: 'keyword', - }, - 'rsa.misc.permwanted': { - category: 'rsa', - name: 'rsa.misc.permwanted', - type: 'keyword', - }, - 'rsa.misc.pgid': { - category: 'rsa', - name: 'rsa.misc.pgid', - type: 'keyword', - }, - 'rsa.misc.policyUUID': { - category: 'rsa', - name: 'rsa.misc.policyUUID', - type: 'keyword', - }, - 'rsa.misc.prog_asp_num': { - category: 'rsa', - name: 'rsa.misc.prog_asp_num', - type: 'keyword', - }, - 'rsa.misc.program': { - category: 'rsa', - name: 'rsa.misc.program', - type: 'keyword', - }, - 'rsa.misc.real_data': { - category: 'rsa', - name: 'rsa.misc.real_data', - type: 'keyword', - }, - 'rsa.misc.rec_asp_device': { - category: 'rsa', - name: 'rsa.misc.rec_asp_device', - type: 'keyword', - }, - 'rsa.misc.rec_asp_num': { - category: 'rsa', - name: 'rsa.misc.rec_asp_num', - type: 'keyword', - }, - 'rsa.misc.rec_library': { - category: 'rsa', - name: 'rsa.misc.rec_library', - type: 'keyword', - }, - 'rsa.misc.recordnum': { - category: 'rsa', - name: 'rsa.misc.recordnum', - type: 'keyword', - }, - 'rsa.misc.ruid': { - category: 'rsa', - name: 'rsa.misc.ruid', - type: 'keyword', - }, - 'rsa.misc.sburb': { - category: 'rsa', - name: 'rsa.misc.sburb', - type: 'keyword', - }, - 'rsa.misc.sdomain_fld': { - category: 'rsa', - name: 'rsa.misc.sdomain_fld', - type: 'keyword', - }, - 'rsa.misc.sec': { - category: 'rsa', - name: 'rsa.misc.sec', - type: 'keyword', - }, - 'rsa.misc.sensorname': { - category: 'rsa', - name: 'rsa.misc.sensorname', - type: 'keyword', - }, - 'rsa.misc.seqnum': { - category: 'rsa', - name: 'rsa.misc.seqnum', - type: 'keyword', - }, - 'rsa.misc.session': { - category: 'rsa', - name: 'rsa.misc.session', - type: 'keyword', - }, - 'rsa.misc.sessiontype': { - category: 'rsa', - name: 'rsa.misc.sessiontype', - type: 'keyword', - }, - 'rsa.misc.sigUUID': { - category: 'rsa', - name: 'rsa.misc.sigUUID', - type: 'keyword', - }, - 'rsa.misc.spi': { - category: 'rsa', - name: 'rsa.misc.spi', - type: 'keyword', - }, - 'rsa.misc.srcburb': { - category: 'rsa', - name: 'rsa.misc.srcburb', - type: 'keyword', - }, - 'rsa.misc.srcdom': { - category: 'rsa', - name: 'rsa.misc.srcdom', - type: 'keyword', - }, - 'rsa.misc.srcservice': { - category: 'rsa', - name: 'rsa.misc.srcservice', - type: 'keyword', - }, - 'rsa.misc.state': { - category: 'rsa', - name: 'rsa.misc.state', - type: 'keyword', - }, - 'rsa.misc.status1': { - category: 'rsa', - name: 'rsa.misc.status1', - type: 'keyword', - }, - 'rsa.misc.svcno': { - category: 'rsa', - name: 'rsa.misc.svcno', - type: 'keyword', - }, - 'rsa.misc.system': { - category: 'rsa', - name: 'rsa.misc.system', - type: 'keyword', - }, - 'rsa.misc.tbdstr1': { - category: 'rsa', - name: 'rsa.misc.tbdstr1', - type: 'keyword', - }, - 'rsa.misc.tgtdom': { - category: 'rsa', - name: 'rsa.misc.tgtdom', - type: 'keyword', - }, - 'rsa.misc.tgtdomain': { - category: 'rsa', - name: 'rsa.misc.tgtdomain', - type: 'keyword', - }, - 'rsa.misc.threshold': { - category: 'rsa', - name: 'rsa.misc.threshold', - type: 'keyword', - }, - 'rsa.misc.type1': { - category: 'rsa', - name: 'rsa.misc.type1', - type: 'keyword', - }, - 'rsa.misc.udb_class': { - category: 'rsa', - name: 'rsa.misc.udb_class', - type: 'keyword', - }, - 'rsa.misc.url_fld': { - category: 'rsa', - name: 'rsa.misc.url_fld', - type: 'keyword', - }, - 'rsa.misc.user_div': { - category: 'rsa', - name: 'rsa.misc.user_div', - type: 'keyword', - }, - 'rsa.misc.userid': { - category: 'rsa', - name: 'rsa.misc.userid', - type: 'keyword', - }, - 'rsa.misc.username_fld': { - category: 'rsa', - name: 'rsa.misc.username_fld', - type: 'keyword', - }, - 'rsa.misc.utcstamp': { - category: 'rsa', - name: 'rsa.misc.utcstamp', - type: 'keyword', - }, - 'rsa.misc.v_instafname': { - category: 'rsa', - name: 'rsa.misc.v_instafname', - type: 'keyword', - }, - 'rsa.misc.virt_data': { - category: 'rsa', - name: 'rsa.misc.virt_data', - type: 'keyword', - }, - 'rsa.misc.vpnid': { - category: 'rsa', - name: 'rsa.misc.vpnid', - type: 'keyword', - }, - 'rsa.misc.autorun_type': { - category: 'rsa', - description: 'This is used to capture Auto Run type', - name: 'rsa.misc.autorun_type', - type: 'keyword', - }, - 'rsa.misc.cc_number': { - category: 'rsa', - description: 'Valid Credit Card Numbers only', - name: 'rsa.misc.cc_number', - type: 'long', - }, - 'rsa.misc.content': { - category: 'rsa', - description: 'This key captures the content type from protocol headers', - name: 'rsa.misc.content', - type: 'keyword', - }, - 'rsa.misc.ein_number': { - category: 'rsa', - description: 'Employee Identification Numbers only', - name: 'rsa.misc.ein_number', - type: 'long', - }, - 'rsa.misc.found': { - category: 'rsa', - description: 'This is used to capture the results of regex match', - name: 'rsa.misc.found', - type: 'keyword', - }, - 'rsa.misc.language': { - category: 'rsa', - description: 'This is used to capture list of languages the client support and what it prefers', - name: 'rsa.misc.language', - type: 'keyword', - }, - 'rsa.misc.lifetime': { - category: 'rsa', - description: 'This key is used to capture the session lifetime in seconds.', - name: 'rsa.misc.lifetime', - type: 'long', - }, - 'rsa.misc.link': { - category: 'rsa', - description: - 'This key is used to link the sessions together. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.misc.link', - type: 'keyword', - }, - 'rsa.misc.match': { - category: 'rsa', - description: 'This key is for regex match name from search.ini', - name: 'rsa.misc.match', - type: 'keyword', - }, - 'rsa.misc.param_dst': { - category: 'rsa', - description: 'This key captures the command line/launch argument of the target process or file', - name: 'rsa.misc.param_dst', - type: 'keyword', - }, - 'rsa.misc.param_src': { - category: 'rsa', - description: 'This key captures source parameter', - name: 'rsa.misc.param_src', - type: 'keyword', - }, - 'rsa.misc.search_text': { - category: 'rsa', - description: 'This key captures the Search Text used', - name: 'rsa.misc.search_text', - type: 'keyword', - }, - 'rsa.misc.sig_name': { - category: 'rsa', - description: 'This key is used to capture the Signature Name only.', - name: 'rsa.misc.sig_name', - type: 'keyword', - }, - 'rsa.misc.snmp_value': { - category: 'rsa', - description: 'SNMP set request value', - name: 'rsa.misc.snmp_value', - type: 'keyword', - }, - 'rsa.misc.streams': { - category: 'rsa', - description: 'This key captures number of streams in session', - name: 'rsa.misc.streams', - type: 'long', - }, - 'rsa.db.index': { - category: 'rsa', - description: 'This key captures IndexID of the index.', - name: 'rsa.db.index', - type: 'keyword', - }, - 'rsa.db.instance': { - category: 'rsa', - description: 'This key is used to capture the database server instance name', - name: 'rsa.db.instance', - type: 'keyword', - }, - 'rsa.db.database': { - category: 'rsa', - description: - 'This key is used to capture the name of a database or an instance as seen in a session', - name: 'rsa.db.database', - type: 'keyword', - }, - 'rsa.db.transact_id': { - category: 'rsa', - description: 'This key captures the SQL transantion ID of the current session', - name: 'rsa.db.transact_id', - type: 'keyword', - }, - 'rsa.db.permissions': { - category: 'rsa', - description: 'This key captures permission or privilege level assigned to a resource.', - name: 'rsa.db.permissions', - type: 'keyword', - }, - 'rsa.db.table_name': { - category: 'rsa', - description: 'This key is used to capture the table name', - name: 'rsa.db.table_name', - type: 'keyword', - }, - 'rsa.db.db_id': { - category: 'rsa', - description: 'This key is used to capture the unique identifier for a database', - name: 'rsa.db.db_id', - type: 'keyword', - }, - 'rsa.db.db_pid': { - category: 'rsa', - description: 'This key captures the process id of a connection with database server', - name: 'rsa.db.db_pid', - type: 'long', - }, - 'rsa.db.lread': { - category: 'rsa', - description: 'This key is used for the number of logical reads', - name: 'rsa.db.lread', - type: 'long', - }, - 'rsa.db.lwrite': { - category: 'rsa', - description: 'This key is used for the number of logical writes', - name: 'rsa.db.lwrite', - type: 'long', - }, - 'rsa.db.pread': { - category: 'rsa', - description: 'This key is used for the number of physical writes', - name: 'rsa.db.pread', - type: 'long', - }, - 'rsa.network.alias_host': { - category: 'rsa', - description: - 'This key should be used when the source or destination context of a hostname is not clear.Also it captures the Device Hostname. Any Hostname that isnt ad.computer.', - name: 'rsa.network.alias_host', - type: 'keyword', - }, - 'rsa.network.domain': { - category: 'rsa', - name: 'rsa.network.domain', - type: 'keyword', - }, - 'rsa.network.host_dst': { - category: 'rsa', - description: 'This key should only be used when it’s a Destination Hostname', - name: 'rsa.network.host_dst', - type: 'keyword', - }, - 'rsa.network.network_service': { - category: 'rsa', - description: 'This is used to capture layer 7 protocols/service names', - name: 'rsa.network.network_service', - type: 'keyword', - }, - 'rsa.network.interface': { - category: 'rsa', - description: - 'This key should be used when the source or destination context of an interface is not clear', - name: 'rsa.network.interface', - type: 'keyword', - }, - 'rsa.network.network_port': { - category: 'rsa', - description: - 'Deprecated, use port. NOTE: There is a type discrepancy as currently used, TM: Int32, INDEX: UInt64 (why neither chose the correct UInt16?!)', - name: 'rsa.network.network_port', - type: 'long', - }, - 'rsa.network.eth_host': { - category: 'rsa', - description: 'Deprecated, use alias.mac', - name: 'rsa.network.eth_host', - type: 'keyword', - }, - 'rsa.network.sinterface': { - category: 'rsa', - description: 'This key should only be used when it’s a Source Interface', - name: 'rsa.network.sinterface', - type: 'keyword', - }, - 'rsa.network.dinterface': { - category: 'rsa', - description: 'This key should only be used when it’s a Destination Interface', - name: 'rsa.network.dinterface', - type: 'keyword', - }, - 'rsa.network.vlan': { - category: 'rsa', - description: 'This key should only be used to capture the ID of the Virtual LAN', - name: 'rsa.network.vlan', - type: 'long', - }, - 'rsa.network.zone_src': { - category: 'rsa', - description: 'This key should only be used when it’s a Source Zone.', - name: 'rsa.network.zone_src', - type: 'keyword', - }, - 'rsa.network.zone': { - category: 'rsa', - description: - 'This key should be used when the source or destination context of a Zone is not clear', - name: 'rsa.network.zone', - type: 'keyword', - }, - 'rsa.network.zone_dst': { - category: 'rsa', - description: 'This key should only be used when it’s a Destination Zone.', - name: 'rsa.network.zone_dst', - type: 'keyword', - }, - 'rsa.network.gateway': { - category: 'rsa', - description: 'This key is used to capture the IP Address of the gateway', - name: 'rsa.network.gateway', - type: 'keyword', - }, - 'rsa.network.icmp_type': { - category: 'rsa', - description: 'This key is used to capture the ICMP type only', - name: 'rsa.network.icmp_type', - type: 'long', - }, - 'rsa.network.mask': { - category: 'rsa', - description: 'This key is used to capture the device network IPmask.', - name: 'rsa.network.mask', - type: 'keyword', - }, - 'rsa.network.icmp_code': { - category: 'rsa', - description: 'This key is used to capture the ICMP code only', - name: 'rsa.network.icmp_code', - type: 'long', - }, - 'rsa.network.protocol_detail': { - category: 'rsa', - description: 'This key should be used to capture additional protocol information', - name: 'rsa.network.protocol_detail', - type: 'keyword', - }, - 'rsa.network.dmask': { - category: 'rsa', - description: 'This key is used for Destionation Device network mask', - name: 'rsa.network.dmask', - type: 'keyword', - }, - 'rsa.network.port': { - category: 'rsa', - description: - 'This key should only be used to capture a Network Port when the directionality is not clear', - name: 'rsa.network.port', - type: 'long', - }, - 'rsa.network.smask': { - category: 'rsa', - description: 'This key is used for capturing source Network Mask', - name: 'rsa.network.smask', - type: 'keyword', - }, - 'rsa.network.netname': { - category: 'rsa', - description: - 'This key is used to capture the network name associated with an IP range. This is configured by the end user.', - name: 'rsa.network.netname', - type: 'keyword', - }, - 'rsa.network.paddr': { - category: 'rsa', - description: 'Deprecated', - name: 'rsa.network.paddr', - type: 'ip', - }, - 'rsa.network.faddr': { - category: 'rsa', - name: 'rsa.network.faddr', - type: 'keyword', - }, - 'rsa.network.lhost': { - category: 'rsa', - name: 'rsa.network.lhost', - type: 'keyword', - }, - 'rsa.network.origin': { - category: 'rsa', - name: 'rsa.network.origin', - type: 'keyword', - }, - 'rsa.network.remote_domain_id': { - category: 'rsa', - name: 'rsa.network.remote_domain_id', - type: 'keyword', - }, - 'rsa.network.addr': { - category: 'rsa', - name: 'rsa.network.addr', - type: 'keyword', - }, - 'rsa.network.dns_a_record': { - category: 'rsa', - name: 'rsa.network.dns_a_record', - type: 'keyword', - }, - 'rsa.network.dns_ptr_record': { - category: 'rsa', - name: 'rsa.network.dns_ptr_record', - type: 'keyword', - }, - 'rsa.network.fhost': { - category: 'rsa', - name: 'rsa.network.fhost', - type: 'keyword', - }, - 'rsa.network.fport': { - category: 'rsa', - name: 'rsa.network.fport', - type: 'keyword', - }, - 'rsa.network.laddr': { - category: 'rsa', - name: 'rsa.network.laddr', - type: 'keyword', - }, - 'rsa.network.linterface': { - category: 'rsa', - name: 'rsa.network.linterface', - type: 'keyword', - }, - 'rsa.network.phost': { - category: 'rsa', - name: 'rsa.network.phost', - type: 'keyword', - }, - 'rsa.network.ad_computer_dst': { - category: 'rsa', - description: 'Deprecated, use host.dst', - name: 'rsa.network.ad_computer_dst', - type: 'keyword', - }, - 'rsa.network.eth_type': { - category: 'rsa', - description: 'This key is used to capture Ethernet Type, Used for Layer 3 Protocols Only', - name: 'rsa.network.eth_type', - type: 'long', - }, - 'rsa.network.ip_proto': { - category: 'rsa', - description: - 'This key should be used to capture the Protocol number, all the protocol nubers are converted into string in UI', - name: 'rsa.network.ip_proto', - type: 'long', - }, - 'rsa.network.dns_cname_record': { - category: 'rsa', - name: 'rsa.network.dns_cname_record', - type: 'keyword', - }, - 'rsa.network.dns_id': { - category: 'rsa', - name: 'rsa.network.dns_id', - type: 'keyword', - }, - 'rsa.network.dns_opcode': { - category: 'rsa', - name: 'rsa.network.dns_opcode', - type: 'keyword', - }, - 'rsa.network.dns_resp': { - category: 'rsa', - name: 'rsa.network.dns_resp', - type: 'keyword', - }, - 'rsa.network.dns_type': { - category: 'rsa', - name: 'rsa.network.dns_type', - type: 'keyword', - }, - 'rsa.network.domain1': { - category: 'rsa', - name: 'rsa.network.domain1', - type: 'keyword', - }, - 'rsa.network.host_type': { - category: 'rsa', - name: 'rsa.network.host_type', - type: 'keyword', - }, - 'rsa.network.packet_length': { - category: 'rsa', - name: 'rsa.network.packet_length', - type: 'keyword', - }, - 'rsa.network.host_orig': { - category: 'rsa', - description: - 'This is used to capture the original hostname in case of a Forwarding Agent or a Proxy in between.', - name: 'rsa.network.host_orig', - type: 'keyword', - }, - 'rsa.network.rpayload': { - category: 'rsa', - description: - 'This key is used to capture the total number of payload bytes seen in the retransmitted packets.', - name: 'rsa.network.rpayload', - type: 'keyword', - }, - 'rsa.network.vlan_name': { - category: 'rsa', - description: 'This key should only be used to capture the name of the Virtual LAN', - name: 'rsa.network.vlan_name', - type: 'keyword', - }, - 'rsa.investigations.ec_activity': { - category: 'rsa', - description: 'This key captures the particular event activity(Ex:Logoff)', - name: 'rsa.investigations.ec_activity', - type: 'keyword', - }, - 'rsa.investigations.ec_theme': { - category: 'rsa', - description: 'This key captures the Theme of a particular Event(Ex:Authentication)', - name: 'rsa.investigations.ec_theme', - type: 'keyword', - }, - 'rsa.investigations.ec_subject': { - category: 'rsa', - description: 'This key captures the Subject of a particular Event(Ex:User)', - name: 'rsa.investigations.ec_subject', - type: 'keyword', - }, - 'rsa.investigations.ec_outcome': { - category: 'rsa', - description: 'This key captures the outcome of a particular Event(Ex:Success)', - name: 'rsa.investigations.ec_outcome', - type: 'keyword', - }, - 'rsa.investigations.event_cat': { - category: 'rsa', - description: 'This key captures the Event category number', - name: 'rsa.investigations.event_cat', - type: 'long', - }, - 'rsa.investigations.event_cat_name': { - category: 'rsa', - description: 'This key captures the event category name corresponding to the event cat code', - name: 'rsa.investigations.event_cat_name', - type: 'keyword', - }, - 'rsa.investigations.event_vcat': { - category: 'rsa', - description: - 'This is a vendor supplied category. This should be used in situations where the vendor has adopted their own event_category taxonomy.', - name: 'rsa.investigations.event_vcat', - type: 'keyword', - }, - 'rsa.investigations.analysis_file': { - category: 'rsa', - description: - 'This is used to capture all indicators used in a File Analysis. This key should be used to capture an analysis of a file', - name: 'rsa.investigations.analysis_file', - type: 'keyword', - }, - 'rsa.investigations.analysis_service': { - category: 'rsa', - description: - 'This is used to capture all indicators used in a Service Analysis. This key should be used to capture an analysis of a service', - name: 'rsa.investigations.analysis_service', - type: 'keyword', - }, - 'rsa.investigations.analysis_session': { - category: 'rsa', - description: - 'This is used to capture all indicators used for a Session Analysis. This key should be used to capture an analysis of a session', - name: 'rsa.investigations.analysis_session', - type: 'keyword', - }, - 'rsa.investigations.boc': { - category: 'rsa', - description: 'This is used to capture behaviour of compromise', - name: 'rsa.investigations.boc', - type: 'keyword', - }, - 'rsa.investigations.eoc': { - category: 'rsa', - description: 'This is used to capture Enablers of Compromise', - name: 'rsa.investigations.eoc', - type: 'keyword', - }, - 'rsa.investigations.inv_category': { - category: 'rsa', - description: 'This used to capture investigation category', - name: 'rsa.investigations.inv_category', - type: 'keyword', - }, - 'rsa.investigations.inv_context': { - category: 'rsa', - description: 'This used to capture investigation context', - name: 'rsa.investigations.inv_context', - type: 'keyword', - }, - 'rsa.investigations.ioc': { - category: 'rsa', - description: 'This is key capture indicator of compromise', - name: 'rsa.investigations.ioc', - type: 'keyword', - }, - 'rsa.counters.dclass_c1': { - category: 'rsa', - description: - 'This is a generic counter key that should be used with the label dclass.c1.str only', - name: 'rsa.counters.dclass_c1', - type: 'long', - }, - 'rsa.counters.dclass_c2': { - category: 'rsa', - description: - 'This is a generic counter key that should be used with the label dclass.c2.str only', - name: 'rsa.counters.dclass_c2', - type: 'long', - }, - 'rsa.counters.event_counter': { - category: 'rsa', - description: 'This is used to capture the number of times an event repeated', - name: 'rsa.counters.event_counter', - type: 'long', - }, - 'rsa.counters.dclass_r1': { - category: 'rsa', - description: - 'This is a generic ratio key that should be used with the label dclass.r1.str only', - name: 'rsa.counters.dclass_r1', - type: 'keyword', - }, - 'rsa.counters.dclass_c3': { - category: 'rsa', - description: - 'This is a generic counter key that should be used with the label dclass.c3.str only', - name: 'rsa.counters.dclass_c3', - type: 'long', - }, - 'rsa.counters.dclass_c1_str': { - category: 'rsa', - description: - 'This is a generic counter string key that should be used with the label dclass.c1 only', - name: 'rsa.counters.dclass_c1_str', - type: 'keyword', - }, - 'rsa.counters.dclass_c2_str': { - category: 'rsa', - description: - 'This is a generic counter string key that should be used with the label dclass.c2 only', - name: 'rsa.counters.dclass_c2_str', - type: 'keyword', - }, - 'rsa.counters.dclass_r1_str': { - category: 'rsa', - description: - 'This is a generic ratio string key that should be used with the label dclass.r1 only', - name: 'rsa.counters.dclass_r1_str', - type: 'keyword', - }, - 'rsa.counters.dclass_r2': { - category: 'rsa', - description: - 'This is a generic ratio key that should be used with the label dclass.r2.str only', - name: 'rsa.counters.dclass_r2', - type: 'keyword', - }, - 'rsa.counters.dclass_c3_str': { - category: 'rsa', - description: - 'This is a generic counter string key that should be used with the label dclass.c3 only', - name: 'rsa.counters.dclass_c3_str', - type: 'keyword', - }, - 'rsa.counters.dclass_r3': { - category: 'rsa', - description: - 'This is a generic ratio key that should be used with the label dclass.r3.str only', - name: 'rsa.counters.dclass_r3', - type: 'keyword', - }, - 'rsa.counters.dclass_r2_str': { - category: 'rsa', - description: - 'This is a generic ratio string key that should be used with the label dclass.r2 only', - name: 'rsa.counters.dclass_r2_str', - type: 'keyword', - }, - 'rsa.counters.dclass_r3_str': { - category: 'rsa', - description: - 'This is a generic ratio string key that should be used with the label dclass.r3 only', - name: 'rsa.counters.dclass_r3_str', - type: 'keyword', - }, - 'rsa.identity.auth_method': { - category: 'rsa', - description: 'This key is used to capture authentication methods used only', - name: 'rsa.identity.auth_method', - type: 'keyword', - }, - 'rsa.identity.user_role': { - category: 'rsa', - description: 'This key is used to capture the Role of a user only', - name: 'rsa.identity.user_role', - type: 'keyword', - }, - 'rsa.identity.dn': { - category: 'rsa', - description: 'X.500 (LDAP) Distinguished Name', - name: 'rsa.identity.dn', - type: 'keyword', - }, - 'rsa.identity.logon_type': { - category: 'rsa', - description: 'This key is used to capture the type of logon method used.', - name: 'rsa.identity.logon_type', - type: 'keyword', - }, - 'rsa.identity.profile': { - category: 'rsa', - description: 'This key is used to capture the user profile', - name: 'rsa.identity.profile', - type: 'keyword', - }, - 'rsa.identity.accesses': { - category: 'rsa', - description: 'This key is used to capture actual privileges used in accessing an object', - name: 'rsa.identity.accesses', - type: 'keyword', - }, - 'rsa.identity.realm': { - category: 'rsa', - description: 'Radius realm or similar grouping of accounts', - name: 'rsa.identity.realm', - type: 'keyword', - }, - 'rsa.identity.user_sid_dst': { - category: 'rsa', - description: 'This key captures Destination User Session ID', - name: 'rsa.identity.user_sid_dst', - type: 'keyword', - }, - 'rsa.identity.dn_src': { - category: 'rsa', - description: - 'An X.500 (LDAP) Distinguished name that is used in a context that indicates a Source dn', - name: 'rsa.identity.dn_src', - type: 'keyword', - }, - 'rsa.identity.org': { - category: 'rsa', - description: 'This key captures the User organization', - name: 'rsa.identity.org', - type: 'keyword', - }, - 'rsa.identity.dn_dst': { - category: 'rsa', - description: - 'An X.500 (LDAP) Distinguished name that used in a context that indicates a Destination dn', - name: 'rsa.identity.dn_dst', - type: 'keyword', - }, - 'rsa.identity.firstname': { - category: 'rsa', - description: - 'This key is for First Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.identity.firstname', - type: 'keyword', - }, - 'rsa.identity.lastname': { - category: 'rsa', - description: - 'This key is for Last Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.identity.lastname', - type: 'keyword', - }, - 'rsa.identity.user_dept': { - category: 'rsa', - description: "User's Department Names only", - name: 'rsa.identity.user_dept', - type: 'keyword', - }, - 'rsa.identity.user_sid_src': { - category: 'rsa', - description: 'This key captures Source User Session ID', - name: 'rsa.identity.user_sid_src', - type: 'keyword', - }, - 'rsa.identity.federated_sp': { - category: 'rsa', - description: - 'This key is the Federated Service Provider. This is the application requesting authentication.', - name: 'rsa.identity.federated_sp', - type: 'keyword', - }, - 'rsa.identity.federated_idp': { - category: 'rsa', - description: - 'This key is the federated Identity Provider. This is the server providing the authentication.', - name: 'rsa.identity.federated_idp', - type: 'keyword', - }, - 'rsa.identity.logon_type_desc': { - category: 'rsa', - description: - "This key is used to capture the textual description of an integer logon type as stored in the meta key 'logon.type'.", - name: 'rsa.identity.logon_type_desc', - type: 'keyword', - }, - 'rsa.identity.middlename': { - category: 'rsa', - description: - 'This key is for Middle Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.identity.middlename', - type: 'keyword', - }, - 'rsa.identity.password': { - category: 'rsa', - description: 'This key is for Passwords seen in any session, plain text or encrypted', - name: 'rsa.identity.password', - type: 'keyword', - }, - 'rsa.identity.host_role': { - category: 'rsa', - description: 'This key should only be used to capture the role of a Host Machine', - name: 'rsa.identity.host_role', - type: 'keyword', - }, - 'rsa.identity.ldap': { - category: 'rsa', - description: - 'This key is for Uninterpreted LDAP values. Ldap Values that don’t have a clear query or response context', - name: 'rsa.identity.ldap', - type: 'keyword', - }, - 'rsa.identity.ldap_query': { - category: 'rsa', - description: 'This key is the Search criteria from an LDAP search', - name: 'rsa.identity.ldap_query', - type: 'keyword', - }, - 'rsa.identity.ldap_response': { - category: 'rsa', - description: 'This key is to capture Results from an LDAP search', - name: 'rsa.identity.ldap_response', - type: 'keyword', - }, - 'rsa.identity.owner': { - category: 'rsa', - description: - 'This is used to capture username the process or service is running as, the author of the task', - name: 'rsa.identity.owner', - type: 'keyword', - }, - 'rsa.identity.service_account': { - category: 'rsa', - description: - 'This key is a windows specific key, used for capturing name of the account a service (referenced in the event) is running under. Legacy Usage', - name: 'rsa.identity.service_account', - type: 'keyword', - }, - 'rsa.email.email_dst': { - category: 'rsa', - description: - 'This key is used to capture the Destination email address only, when the destination context is not clear use email', - name: 'rsa.email.email_dst', - type: 'keyword', - }, - 'rsa.email.email_src': { - category: 'rsa', - description: - 'This key is used to capture the source email address only, when the source context is not clear use email', - name: 'rsa.email.email_src', - type: 'keyword', - }, - 'rsa.email.subject': { - category: 'rsa', - description: 'This key is used to capture the subject string from an Email only.', - name: 'rsa.email.subject', - type: 'keyword', - }, - 'rsa.email.email': { - category: 'rsa', - description: - 'This key is used to capture a generic email address where the source or destination context is not clear', - name: 'rsa.email.email', - type: 'keyword', - }, - 'rsa.email.trans_from': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.email.trans_from', - type: 'keyword', - }, - 'rsa.email.trans_to': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.email.trans_to', - type: 'keyword', - }, - 'rsa.file.privilege': { - category: 'rsa', - description: 'Deprecated, use permissions', - name: 'rsa.file.privilege', - type: 'keyword', - }, - 'rsa.file.attachment': { - category: 'rsa', - description: 'This key captures the attachment file name', - name: 'rsa.file.attachment', - type: 'keyword', - }, - 'rsa.file.filesystem': { - category: 'rsa', - name: 'rsa.file.filesystem', - type: 'keyword', - }, - 'rsa.file.binary': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.file.binary', - type: 'keyword', - }, - 'rsa.file.filename_dst': { - category: 'rsa', - description: 'This is used to capture name of the file targeted by the action', - name: 'rsa.file.filename_dst', - type: 'keyword', - }, - 'rsa.file.filename_src': { - category: 'rsa', - description: - 'This is used to capture name of the parent filename, the file which performed the action', - name: 'rsa.file.filename_src', - type: 'keyword', - }, - 'rsa.file.filename_tmp': { - category: 'rsa', - name: 'rsa.file.filename_tmp', - type: 'keyword', - }, - 'rsa.file.directory_dst': { - category: 'rsa', - description: - 'This key is used to capture the directory of the target process or file', - name: 'rsa.file.directory_dst', - type: 'keyword', - }, - 'rsa.file.directory_src': { - category: 'rsa', - description: 'This key is used to capture the directory of the source process or file', - name: 'rsa.file.directory_src', - type: 'keyword', - }, - 'rsa.file.file_entropy': { - category: 'rsa', - description: 'This is used to capture entropy vale of a file', - name: 'rsa.file.file_entropy', - type: 'double', - }, - 'rsa.file.file_vendor': { - category: 'rsa', - description: 'This is used to capture Company name of file located in version_info', - name: 'rsa.file.file_vendor', - type: 'keyword', - }, - 'rsa.file.task_name': { - category: 'rsa', - description: 'This is used to capture name of the task', - name: 'rsa.file.task_name', - type: 'keyword', - }, - 'rsa.web.fqdn': { - category: 'rsa', - description: 'Fully Qualified Domain Names', - name: 'rsa.web.fqdn', - type: 'keyword', - }, - 'rsa.web.web_cookie': { - category: 'rsa', - description: 'This key is used to capture the Web cookies specifically.', - name: 'rsa.web.web_cookie', - type: 'keyword', - }, - 'rsa.web.alias_host': { - category: 'rsa', - name: 'rsa.web.alias_host', - type: 'keyword', - }, - 'rsa.web.reputation_num': { - category: 'rsa', - description: 'Reputation Number of an entity. Typically used for Web Domains', - name: 'rsa.web.reputation_num', - type: 'double', - }, - 'rsa.web.web_ref_domain': { - category: 'rsa', - description: "Web referer's domain", - name: 'rsa.web.web_ref_domain', - type: 'keyword', - }, - 'rsa.web.web_ref_query': { - category: 'rsa', - description: "This key captures Web referer's query portion of the URL", - name: 'rsa.web.web_ref_query', - type: 'keyword', - }, - 'rsa.web.remote_domain': { - category: 'rsa', - name: 'rsa.web.remote_domain', - type: 'keyword', - }, - 'rsa.web.web_ref_page': { - category: 'rsa', - description: "This key captures Web referer's page information", - name: 'rsa.web.web_ref_page', - type: 'keyword', - }, - 'rsa.web.web_ref_root': { - category: 'rsa', - description: "Web referer's root URL path", - name: 'rsa.web.web_ref_root', - type: 'keyword', - }, - 'rsa.web.cn_asn_dst': { - category: 'rsa', - name: 'rsa.web.cn_asn_dst', - type: 'keyword', - }, - 'rsa.web.cn_rpackets': { - category: 'rsa', - name: 'rsa.web.cn_rpackets', - type: 'keyword', - }, - 'rsa.web.urlpage': { - category: 'rsa', - name: 'rsa.web.urlpage', - type: 'keyword', - }, - 'rsa.web.urlroot': { - category: 'rsa', - name: 'rsa.web.urlroot', - type: 'keyword', - }, - 'rsa.web.p_url': { - category: 'rsa', - name: 'rsa.web.p_url', - type: 'keyword', - }, - 'rsa.web.p_user_agent': { - category: 'rsa', - name: 'rsa.web.p_user_agent', - type: 'keyword', - }, - 'rsa.web.p_web_cookie': { - category: 'rsa', - name: 'rsa.web.p_web_cookie', - type: 'keyword', - }, - 'rsa.web.p_web_method': { - category: 'rsa', - name: 'rsa.web.p_web_method', - type: 'keyword', - }, - 'rsa.web.p_web_referer': { - category: 'rsa', - name: 'rsa.web.p_web_referer', - type: 'keyword', - }, - 'rsa.web.web_extension_tmp': { - category: 'rsa', - name: 'rsa.web.web_extension_tmp', - type: 'keyword', - }, - 'rsa.web.web_page': { - category: 'rsa', - name: 'rsa.web.web_page', - type: 'keyword', - }, - 'rsa.threat.threat_category': { - category: 'rsa', - description: 'This key captures Threat Name/Threat Category/Categorization of alert', - name: 'rsa.threat.threat_category', - type: 'keyword', - }, - 'rsa.threat.threat_desc': { - category: 'rsa', - description: - 'This key is used to capture the threat description from the session directly or inferred', - name: 'rsa.threat.threat_desc', - type: 'keyword', - }, - 'rsa.threat.alert': { - category: 'rsa', - description: 'This key is used to capture name of the alert', - name: 'rsa.threat.alert', - type: 'keyword', - }, - 'rsa.threat.threat_source': { - category: 'rsa', - description: 'This key is used to capture source of the threat', - name: 'rsa.threat.threat_source', - type: 'keyword', - }, - 'rsa.crypto.crypto': { - category: 'rsa', - description: 'This key is used to capture the Encryption Type or Encryption Key only', - name: 'rsa.crypto.crypto', - type: 'keyword', - }, - 'rsa.crypto.cipher_src': { - category: 'rsa', - description: 'This key is for Source (Client) Cipher', - name: 'rsa.crypto.cipher_src', - type: 'keyword', - }, - 'rsa.crypto.cert_subject': { - category: 'rsa', - description: 'This key is used to capture the Certificate organization only', - name: 'rsa.crypto.cert_subject', - type: 'keyword', - }, - 'rsa.crypto.peer': { - category: 'rsa', - description: "This key is for Encryption peer's IP Address", - name: 'rsa.crypto.peer', - type: 'keyword', - }, - 'rsa.crypto.cipher_size_src': { - category: 'rsa', - description: 'This key captures Source (Client) Cipher Size', - name: 'rsa.crypto.cipher_size_src', - type: 'long', - }, - 'rsa.crypto.ike': { - category: 'rsa', - description: 'IKE negotiation phase.', - name: 'rsa.crypto.ike', - type: 'keyword', - }, - 'rsa.crypto.scheme': { - category: 'rsa', - description: 'This key captures the Encryption scheme used', - name: 'rsa.crypto.scheme', - type: 'keyword', - }, - 'rsa.crypto.peer_id': { - category: 'rsa', - description: 'This key is for Encryption peer’s identity', - name: 'rsa.crypto.peer_id', - type: 'keyword', - }, - 'rsa.crypto.sig_type': { - category: 'rsa', - description: 'This key captures the Signature Type', - name: 'rsa.crypto.sig_type', - type: 'keyword', - }, - 'rsa.crypto.cert_issuer': { - category: 'rsa', - name: 'rsa.crypto.cert_issuer', - type: 'keyword', - }, - 'rsa.crypto.cert_host_name': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.crypto.cert_host_name', - type: 'keyword', - }, - 'rsa.crypto.cert_error': { - category: 'rsa', - description: 'This key captures the Certificate Error String', - name: 'rsa.crypto.cert_error', - type: 'keyword', - }, - 'rsa.crypto.cipher_dst': { - category: 'rsa', - description: 'This key is for Destination (Server) Cipher', - name: 'rsa.crypto.cipher_dst', - type: 'keyword', - }, - 'rsa.crypto.cipher_size_dst': { - category: 'rsa', - description: 'This key captures Destination (Server) Cipher Size', - name: 'rsa.crypto.cipher_size_dst', - type: 'long', - }, - 'rsa.crypto.ssl_ver_src': { - category: 'rsa', - description: 'Deprecated, use version', - name: 'rsa.crypto.ssl_ver_src', - type: 'keyword', - }, - 'rsa.crypto.d_certauth': { - category: 'rsa', - name: 'rsa.crypto.d_certauth', - type: 'keyword', - }, - 'rsa.crypto.s_certauth': { - category: 'rsa', - name: 'rsa.crypto.s_certauth', - type: 'keyword', - }, - 'rsa.crypto.ike_cookie1': { - category: 'rsa', - description: 'ID of the negotiation — sent for ISAKMP Phase One', - name: 'rsa.crypto.ike_cookie1', - type: 'keyword', - }, - 'rsa.crypto.ike_cookie2': { - category: 'rsa', - description: 'ID of the negotiation — sent for ISAKMP Phase Two', - name: 'rsa.crypto.ike_cookie2', - type: 'keyword', - }, - 'rsa.crypto.cert_checksum': { - category: 'rsa', - name: 'rsa.crypto.cert_checksum', - type: 'keyword', - }, - 'rsa.crypto.cert_host_cat': { - category: 'rsa', - description: 'This key is used for the hostname category value of a certificate', - name: 'rsa.crypto.cert_host_cat', - type: 'keyword', - }, - 'rsa.crypto.cert_serial': { - category: 'rsa', - description: 'This key is used to capture the Certificate serial number only', - name: 'rsa.crypto.cert_serial', - type: 'keyword', - }, - 'rsa.crypto.cert_status': { - category: 'rsa', - description: 'This key captures Certificate validation status', - name: 'rsa.crypto.cert_status', - type: 'keyword', - }, - 'rsa.crypto.ssl_ver_dst': { - category: 'rsa', - description: 'Deprecated, use version', - name: 'rsa.crypto.ssl_ver_dst', - type: 'keyword', - }, - 'rsa.crypto.cert_keysize': { - category: 'rsa', - name: 'rsa.crypto.cert_keysize', - type: 'keyword', - }, - 'rsa.crypto.cert_username': { - category: 'rsa', - name: 'rsa.crypto.cert_username', - type: 'keyword', - }, - 'rsa.crypto.https_insact': { - category: 'rsa', - name: 'rsa.crypto.https_insact', - type: 'keyword', - }, - 'rsa.crypto.https_valid': { - category: 'rsa', - name: 'rsa.crypto.https_valid', - type: 'keyword', - }, - 'rsa.crypto.cert_ca': { - category: 'rsa', - description: 'This key is used to capture the Certificate signing authority only', - name: 'rsa.crypto.cert_ca', - type: 'keyword', - }, - 'rsa.crypto.cert_common': { - category: 'rsa', - description: 'This key is used to capture the Certificate common name only', - name: 'rsa.crypto.cert_common', - type: 'keyword', - }, - 'rsa.wireless.wlan_ssid': { - category: 'rsa', - description: 'This key is used to capture the ssid of a Wireless Session', - name: 'rsa.wireless.wlan_ssid', - type: 'keyword', - }, - 'rsa.wireless.access_point': { - category: 'rsa', - description: 'This key is used to capture the access point name.', - name: 'rsa.wireless.access_point', - type: 'keyword', - }, - 'rsa.wireless.wlan_channel': { - category: 'rsa', - description: 'This is used to capture the channel names', - name: 'rsa.wireless.wlan_channel', - type: 'long', - }, - 'rsa.wireless.wlan_name': { - category: 'rsa', - description: 'This key captures either WLAN number/name', - name: 'rsa.wireless.wlan_name', - type: 'keyword', - }, - 'rsa.storage.disk_volume': { - category: 'rsa', - description: 'A unique name assigned to logical units (volumes) within a physical disk', - name: 'rsa.storage.disk_volume', - type: 'keyword', - }, - 'rsa.storage.lun': { - category: 'rsa', - description: 'Logical Unit Number.This key is a very useful concept in Storage.', - name: 'rsa.storage.lun', - type: 'keyword', - }, - 'rsa.storage.pwwn': { - category: 'rsa', - description: 'This uniquely identifies a port on a HBA.', - name: 'rsa.storage.pwwn', - type: 'keyword', - }, - 'rsa.physical.org_dst': { - category: 'rsa', - description: - 'This is used to capture the destination organization based on the GEOPIP Maxmind database.', - name: 'rsa.physical.org_dst', - type: 'keyword', - }, - 'rsa.physical.org_src': { - category: 'rsa', - description: - 'This is used to capture the source organization based on the GEOPIP Maxmind database.', - name: 'rsa.physical.org_src', - type: 'keyword', - }, - 'rsa.healthcare.patient_fname': { - category: 'rsa', - description: - 'This key is for First Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.healthcare.patient_fname', - type: 'keyword', - }, - 'rsa.healthcare.patient_id': { - category: 'rsa', - description: 'This key captures the unique ID for a patient', - name: 'rsa.healthcare.patient_id', - type: 'keyword', - }, - 'rsa.healthcare.patient_lname': { - category: 'rsa', - description: - 'This key is for Last Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.healthcare.patient_lname', - type: 'keyword', - }, - 'rsa.healthcare.patient_mname': { - category: 'rsa', - description: - 'This key is for Middle Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.healthcare.patient_mname', - type: 'keyword', - }, - 'rsa.endpoint.host_state': { - category: 'rsa', - description: - 'This key is used to capture the current state of the machine, such as blacklisted, infected, firewall disabled and so on', - name: 'rsa.endpoint.host_state', - type: 'keyword', - }, - 'rsa.endpoint.registry_key': { - category: 'rsa', - description: 'This key captures the path to the registry key', - name: 'rsa.endpoint.registry_key', - type: 'keyword', - }, - 'rsa.endpoint.registry_value': { - category: 'rsa', - description: 'This key captures values or decorators used within a registry entry', - name: 'rsa.endpoint.registry_value', - type: 'keyword', - }, - 'forcepoint.virus_id': { - category: 'forcepoint', - description: 'Virus ID ', - name: 'forcepoint.virus_id', - type: 'keyword', - }, - 'checkpoint.app_risk': { - category: 'checkpoint', - description: 'Application risk.', - name: 'checkpoint.app_risk', - type: 'keyword', - }, - 'checkpoint.app_severity': { - category: 'checkpoint', - description: 'Application threat severity.', - name: 'checkpoint.app_severity', - type: 'keyword', - }, - 'checkpoint.app_sig_id': { - category: 'checkpoint', - description: 'The signature ID which the application was detected by.', - name: 'checkpoint.app_sig_id', - type: 'keyword', - }, - 'checkpoint.auth_method': { - category: 'checkpoint', - description: 'Password authentication protocol used.', - name: 'checkpoint.auth_method', - type: 'keyword', - }, - 'checkpoint.category': { - category: 'checkpoint', - description: 'Category.', - name: 'checkpoint.category', - type: 'keyword', - }, - 'checkpoint.confidence_level': { - category: 'checkpoint', - description: 'Confidence level determined.', - name: 'checkpoint.confidence_level', - type: 'integer', - }, - 'checkpoint.connectivity_state': { - category: 'checkpoint', - description: 'Connectivity state.', - name: 'checkpoint.connectivity_state', - type: 'keyword', - }, - 'checkpoint.cookie': { - category: 'checkpoint', - description: 'IKE cookie.', - name: 'checkpoint.cookie', - type: 'keyword', - }, - 'checkpoint.dst_phone_number': { - category: 'checkpoint', - description: 'Destination IP-Phone.', - name: 'checkpoint.dst_phone_number', - type: 'keyword', - }, - 'checkpoint.email_control': { - category: 'checkpoint', - description: 'Engine name.', - name: 'checkpoint.email_control', - type: 'keyword', - }, - 'checkpoint.email_id': { - category: 'checkpoint', - description: 'Internal email ID.', - name: 'checkpoint.email_id', - type: 'keyword', - }, - 'checkpoint.email_recipients_num': { - category: 'checkpoint', - description: 'Number of recipients.', - name: 'checkpoint.email_recipients_num', - type: 'long', - }, - 'checkpoint.email_session_id': { - category: 'checkpoint', - description: 'Internal email session ID.', - name: 'checkpoint.email_session_id', - type: 'keyword', - }, - 'checkpoint.email_spool_id': { - category: 'checkpoint', - description: 'Internal email spool ID.', - name: 'checkpoint.email_spool_id', - type: 'keyword', - }, - 'checkpoint.email_subject': { - category: 'checkpoint', - description: 'Email subject.', - name: 'checkpoint.email_subject', - type: 'keyword', - }, - 'checkpoint.event_count': { - category: 'checkpoint', - description: 'Number of events associated with the log.', - name: 'checkpoint.event_count', - type: 'long', - }, - 'checkpoint.frequency': { - category: 'checkpoint', - description: 'Scan frequency.', - name: 'checkpoint.frequency', - type: 'keyword', - }, - 'checkpoint.icmp_type': { - category: 'checkpoint', - description: 'ICMP type.', - name: 'checkpoint.icmp_type', - type: 'long', - }, - 'checkpoint.icmp_code': { - category: 'checkpoint', - description: 'ICMP code.', - name: 'checkpoint.icmp_code', - type: 'long', - }, - 'checkpoint.identity_type': { - category: 'checkpoint', - description: 'Identity type.', - name: 'checkpoint.identity_type', - type: 'keyword', - }, - 'checkpoint.incident_extension': { - category: 'checkpoint', - description: 'Format of original data.', - name: 'checkpoint.incident_extension', - type: 'keyword', - }, - 'checkpoint.integrity_av_invoke_type': { - category: 'checkpoint', - description: 'Scan invoke type.', - name: 'checkpoint.integrity_av_invoke_type', - type: 'keyword', - }, - 'checkpoint.malware_family': { - category: 'checkpoint', - description: 'Malware family.', - name: 'checkpoint.malware_family', - type: 'keyword', - }, - 'checkpoint.peer_gateway': { - category: 'checkpoint', - description: 'Main IP of the peer Security Gateway.', - name: 'checkpoint.peer_gateway', - type: 'ip', - }, - 'checkpoint.performance_impact': { - category: 'checkpoint', - description: 'Protection performance impact.', - name: 'checkpoint.performance_impact', - type: 'integer', - }, - 'checkpoint.protection_id': { - category: 'checkpoint', - description: 'Protection malware ID.', - name: 'checkpoint.protection_id', - type: 'keyword', - }, - 'checkpoint.protection_name': { - category: 'checkpoint', - description: 'Specific signature name of the attack.', - name: 'checkpoint.protection_name', - type: 'keyword', - }, - 'checkpoint.protection_type': { - category: 'checkpoint', - description: 'Type of protection used to detect the attack.', - name: 'checkpoint.protection_type', - type: 'keyword', - }, - 'checkpoint.scan_result': { - category: 'checkpoint', - description: 'Scan result.', - name: 'checkpoint.scan_result', - type: 'keyword', - }, - 'checkpoint.sensor_mode': { - category: 'checkpoint', - description: 'Sensor mode.', - name: 'checkpoint.sensor_mode', - type: 'keyword', - }, - 'checkpoint.severity': { - category: 'checkpoint', - description: 'Threat severity.', - name: 'checkpoint.severity', - type: 'keyword', - }, - 'checkpoint.spyware_name': { - category: 'checkpoint', - description: 'Spyware name.', - name: 'checkpoint.spyware_name', - type: 'keyword', - }, - 'checkpoint.spyware_status': { - category: 'checkpoint', - description: 'Spyware status.', - name: 'checkpoint.spyware_status', - type: 'keyword', - }, - 'checkpoint.subs_exp': { - category: 'checkpoint', - description: 'The expiration date of the subscription.', - name: 'checkpoint.subs_exp', - type: 'date', - }, - 'checkpoint.tcp_flags': { - category: 'checkpoint', - description: 'TCP packet flags.', - name: 'checkpoint.tcp_flags', - type: 'keyword', - }, - 'checkpoint.termination_reason': { - category: 'checkpoint', - description: 'Termination reason.', - name: 'checkpoint.termination_reason', - type: 'keyword', - }, - 'checkpoint.update_status': { - category: 'checkpoint', - description: 'Update status.', - name: 'checkpoint.update_status', - type: 'keyword', - }, - 'checkpoint.user_status': { - category: 'checkpoint', - description: 'User response.', - name: 'checkpoint.user_status', - type: 'keyword', - }, - 'checkpoint.uuid': { - category: 'checkpoint', - description: 'External ID.', - name: 'checkpoint.uuid', - type: 'keyword', - }, - 'checkpoint.virus_name': { - category: 'checkpoint', - description: 'Virus name.', - name: 'checkpoint.virus_name', - type: 'keyword', - }, - 'checkpoint.voip_log_type': { - category: 'checkpoint', - description: 'VoIP log types.', - name: 'checkpoint.voip_log_type', - type: 'keyword', - }, - 'cef.extensions.cp_app_risk': { - category: 'cef', - name: 'cef.extensions.cp_app_risk', - type: 'keyword', - }, - 'cef.extensions.cp_severity': { - category: 'cef', - name: 'cef.extensions.cp_severity', - type: 'keyword', - }, - 'cef.extensions.ifname': { - category: 'cef', - name: 'cef.extensions.ifname', - type: 'keyword', - }, - 'cef.extensions.inzone': { - category: 'cef', - name: 'cef.extensions.inzone', - type: 'keyword', - }, - 'cef.extensions.layer_uuid': { - category: 'cef', - name: 'cef.extensions.layer_uuid', - type: 'keyword', - }, - 'cef.extensions.layer_name': { - category: 'cef', - name: 'cef.extensions.layer_name', - type: 'keyword', - }, - 'cef.extensions.logid': { - category: 'cef', - name: 'cef.extensions.logid', - type: 'keyword', - }, - 'cef.extensions.loguid': { - category: 'cef', - name: 'cef.extensions.loguid', - type: 'keyword', - }, - 'cef.extensions.match_id': { - category: 'cef', - name: 'cef.extensions.match_id', - type: 'keyword', - }, - 'cef.extensions.nat_addtnl_rulenum': { - category: 'cef', - name: 'cef.extensions.nat_addtnl_rulenum', - type: 'keyword', - }, - 'cef.extensions.nat_rulenum': { - category: 'cef', - name: 'cef.extensions.nat_rulenum', - type: 'keyword', - }, - 'cef.extensions.origin': { - category: 'cef', - name: 'cef.extensions.origin', - type: 'keyword', - }, - 'cef.extensions.originsicname': { - category: 'cef', - name: 'cef.extensions.originsicname', - type: 'keyword', - }, - 'cef.extensions.outzone': { - category: 'cef', - name: 'cef.extensions.outzone', - type: 'keyword', - }, - 'cef.extensions.parent_rule': { - category: 'cef', - name: 'cef.extensions.parent_rule', - type: 'keyword', - }, - 'cef.extensions.product': { - category: 'cef', - name: 'cef.extensions.product', - type: 'keyword', - }, - 'cef.extensions.rule_action': { - category: 'cef', - name: 'cef.extensions.rule_action', - type: 'keyword', - }, - 'cef.extensions.rule_uid': { - category: 'cef', - name: 'cef.extensions.rule_uid', - type: 'keyword', - }, - 'cef.extensions.sequencenum': { - category: 'cef', - name: 'cef.extensions.sequencenum', - type: 'keyword', - }, - 'cef.extensions.service_id': { - category: 'cef', - name: 'cef.extensions.service_id', - type: 'keyword', - }, - 'cef.extensions.version': { - category: 'cef', - name: 'cef.extensions.version', - type: 'keyword', - }, - 'checkpoint.calc_desc': { - category: 'checkpoint', - description: 'Log description. ', - name: 'checkpoint.calc_desc', - type: 'keyword', - }, - 'checkpoint.dst_country': { - category: 'checkpoint', - description: 'Destination country. ', - name: 'checkpoint.dst_country', - type: 'keyword', - }, - 'checkpoint.dst_user_name': { - category: 'checkpoint', - description: 'Connected user name on the destination IP. ', - name: 'checkpoint.dst_user_name', - type: 'keyword', - }, - 'checkpoint.sys_message': { - category: 'checkpoint', - description: 'System messages ', - name: 'checkpoint.sys_message', - type: 'keyword', - }, - 'checkpoint.logid': { - category: 'checkpoint', - description: 'System messages ', - name: 'checkpoint.logid', - type: 'keyword', - }, - 'checkpoint.failure_impact': { - category: 'checkpoint', - description: 'The impact of update service failure. ', - name: 'checkpoint.failure_impact', - type: 'keyword', - }, - 'checkpoint.id': { - category: 'checkpoint', - description: 'Override application ID. ', - name: 'checkpoint.id', - type: 'integer', - }, - 'checkpoint.information': { - category: 'checkpoint', - description: 'Policy installation status for a specific blade. ', - name: 'checkpoint.information', - type: 'keyword', - }, - 'checkpoint.layer_name': { - category: 'checkpoint', - description: 'Layer name. ', - name: 'checkpoint.layer_name', - type: 'keyword', - }, - 'checkpoint.layer_uuid': { - category: 'checkpoint', - description: 'Layer UUID. ', - name: 'checkpoint.layer_uuid', - type: 'keyword', - }, - 'checkpoint.log_id': { - category: 'checkpoint', - description: 'Unique identity for logs. ', - name: 'checkpoint.log_id', - type: 'integer', - }, - 'checkpoint.origin_sic_name': { - category: 'checkpoint', - description: 'Machine SIC. ', - name: 'checkpoint.origin_sic_name', - type: 'keyword', - }, - 'checkpoint.policy_mgmt': { - category: 'checkpoint', - description: 'Name of the Management Server that manages this Security Gateway. ', - name: 'checkpoint.policy_mgmt', - type: 'keyword', - }, - 'checkpoint.policy_name': { - category: 'checkpoint', - description: 'Name of the last policy that this Security Gateway fetched. ', - name: 'checkpoint.policy_name', - type: 'keyword', - }, - 'checkpoint.protocol': { - category: 'checkpoint', - description: 'Protocol detected on the connection. ', - name: 'checkpoint.protocol', - type: 'keyword', - }, - 'checkpoint.proxy_src_ip': { - category: 'checkpoint', - description: 'Sender source IP (even when using proxy). ', - name: 'checkpoint.proxy_src_ip', - type: 'ip', - }, - 'checkpoint.rule': { - category: 'checkpoint', - description: 'Matched rule number. ', - name: 'checkpoint.rule', - type: 'integer', - }, - 'checkpoint.rule_action': { - category: 'checkpoint', - description: 'Action of the matched rule in the access policy. ', - name: 'checkpoint.rule_action', - type: 'keyword', - }, - 'checkpoint.scan_direction': { - category: 'checkpoint', - description: 'Scan direction. ', - name: 'checkpoint.scan_direction', - type: 'keyword', - }, - 'checkpoint.session_id': { - category: 'checkpoint', - description: 'Log uuid. ', - name: 'checkpoint.session_id', - type: 'keyword', - }, - 'checkpoint.source_os': { - category: 'checkpoint', - description: 'OS which generated the attack. ', - name: 'checkpoint.source_os', - type: 'keyword', - }, - 'checkpoint.src_country': { - category: 'checkpoint', - description: 'Country name, derived from connection source IP address. ', - name: 'checkpoint.src_country', - type: 'keyword', - }, - 'checkpoint.src_user_name': { - category: 'checkpoint', - description: 'User name connected to source IP ', - name: 'checkpoint.src_user_name', - type: 'keyword', - }, - 'checkpoint.ticket_id': { - category: 'checkpoint', - description: 'Unique ID per file. ', - name: 'checkpoint.ticket_id', - type: 'keyword', - }, - 'checkpoint.tls_server_host_name': { - category: 'checkpoint', - description: 'SNI/CN from encrypted TLS connection used by URLF for categorization. ', - name: 'checkpoint.tls_server_host_name', - type: 'keyword', - }, - 'checkpoint.verdict': { - category: 'checkpoint', - description: 'TE engine verdict Possible values: Malicious/Benign/Error. ', - name: 'checkpoint.verdict', - type: 'keyword', - }, - 'checkpoint.user': { - category: 'checkpoint', - description: 'Source user name. ', - name: 'checkpoint.user', - type: 'keyword', - }, - 'checkpoint.vendor_list': { - category: 'checkpoint', - description: 'The vendor name that provided the verdict for a malicious URL. ', - name: 'checkpoint.vendor_list', - type: 'keyword', - }, - 'checkpoint.web_server_type': { - category: 'checkpoint', - description: 'Web server detected in the HTTP response. ', - name: 'checkpoint.web_server_type', - type: 'keyword', - }, - 'checkpoint.client_name': { - category: 'checkpoint', - description: 'Client Application or Software Blade that detected the event. ', - name: 'checkpoint.client_name', - type: 'keyword', - }, - 'checkpoint.client_version': { - category: 'checkpoint', - description: 'Build version of SandBlast Agent client installed on the computer. ', - name: 'checkpoint.client_version', - type: 'keyword', - }, - 'checkpoint.extension_version': { - category: 'checkpoint', - description: 'Build version of the SandBlast Agent browser extension. ', - name: 'checkpoint.extension_version', - type: 'keyword', - }, - 'checkpoint.host_time': { - category: 'checkpoint', - description: 'Local time on the endpoint computer. ', - name: 'checkpoint.host_time', - type: 'keyword', - }, - 'checkpoint.installed_products': { - category: 'checkpoint', - description: 'List of installed Endpoint Software Blades. ', - name: 'checkpoint.installed_products', - type: 'keyword', - }, - 'checkpoint.cc': { - category: 'checkpoint', - description: 'The Carbon Copy address of the email. ', - name: 'checkpoint.cc', - type: 'keyword', - }, - 'checkpoint.parent_process_username': { - category: 'checkpoint', - description: 'Owner username of the parent process of the process that triggered the attack. ', - name: 'checkpoint.parent_process_username', - type: 'keyword', - }, - 'checkpoint.process_username': { - category: 'checkpoint', - description: 'Owner username of the process that triggered the attack. ', - name: 'checkpoint.process_username', - type: 'keyword', - }, - 'checkpoint.audit_status': { - category: 'checkpoint', - description: 'Audit Status. Can be Success or Failure. ', - name: 'checkpoint.audit_status', - type: 'keyword', - }, - 'checkpoint.objecttable': { - category: 'checkpoint', - description: 'Table of affected objects. ', - name: 'checkpoint.objecttable', - type: 'keyword', - }, - 'checkpoint.objecttype': { - category: 'checkpoint', - description: 'The type of the affected object. ', - name: 'checkpoint.objecttype', - type: 'keyword', - }, - 'checkpoint.operation_number': { - category: 'checkpoint', - description: 'The operation nuber. ', - name: 'checkpoint.operation_number', - type: 'keyword', - }, - 'checkpoint.suppressed_logs': { - category: 'checkpoint', - description: - 'Aggregated connections for five minutes on the same source, destination and port. ', - name: 'checkpoint.suppressed_logs', - type: 'integer', - }, - 'checkpoint.blade_name': { - category: 'checkpoint', - description: 'Blade name. ', - name: 'checkpoint.blade_name', - type: 'keyword', - }, - 'checkpoint.status': { - category: 'checkpoint', - description: 'Ok/Warning/Error. ', - name: 'checkpoint.status', - type: 'keyword', - }, - 'checkpoint.short_desc': { - category: 'checkpoint', - description: 'Short description of the process that was executed. ', - name: 'checkpoint.short_desc', - type: 'keyword', - }, - 'checkpoint.long_desc': { - category: 'checkpoint', - description: 'More information on the process (usually describing error reason in failure). ', - name: 'checkpoint.long_desc', - type: 'keyword', - }, - 'checkpoint.scan_hosts_hour': { - category: 'checkpoint', - description: 'Number of unique hosts during the last hour. ', - name: 'checkpoint.scan_hosts_hour', - type: 'integer', - }, - 'checkpoint.scan_hosts_day': { - category: 'checkpoint', - description: 'Number of unique hosts during the last day. ', - name: 'checkpoint.scan_hosts_day', - type: 'integer', - }, - 'checkpoint.scan_hosts_week': { - category: 'checkpoint', - description: 'Number of unique hosts during the last week. ', - name: 'checkpoint.scan_hosts_week', - type: 'integer', - }, - 'checkpoint.unique_detected_hour': { - category: 'checkpoint', - description: 'Detected virus for a specific host during the last hour. ', - name: 'checkpoint.unique_detected_hour', - type: 'integer', - }, - 'checkpoint.unique_detected_day': { - category: 'checkpoint', - description: 'Detected virus for a specific host during the last day. ', - name: 'checkpoint.unique_detected_day', - type: 'integer', - }, - 'checkpoint.unique_detected_week': { - category: 'checkpoint', - description: 'Detected virus for a specific host during the last week. ', - name: 'checkpoint.unique_detected_week', - type: 'integer', - }, - 'checkpoint.scan_mail': { - category: 'checkpoint', - description: 'Number of emails that were scanned by "AB malicious activity" engine. ', - name: 'checkpoint.scan_mail', - type: 'integer', - }, - 'checkpoint.additional_ip': { - category: 'checkpoint', - description: 'DNS host name. ', - name: 'checkpoint.additional_ip', - type: 'keyword', - }, - 'checkpoint.description': { - category: 'checkpoint', - description: 'Additional explanation how the security gateway enforced the connection. ', - name: 'checkpoint.description', - type: 'keyword', - }, - 'checkpoint.email_spam_category': { - category: 'checkpoint', - description: 'Email categories. Possible values: spam/not spam/phishing. ', - name: 'checkpoint.email_spam_category', - type: 'keyword', - }, - 'checkpoint.email_control_analysis': { - category: 'checkpoint', - description: 'Message classification, received from spam vendor engine. ', - name: 'checkpoint.email_control_analysis', - type: 'keyword', - }, - 'checkpoint.scan_results': { - category: 'checkpoint', - description: '"Infected"/description of a failure. ', - name: 'checkpoint.scan_results', - type: 'keyword', - }, - 'checkpoint.original_queue_id': { - category: 'checkpoint', - description: 'Original postfix email queue id. ', - name: 'checkpoint.original_queue_id', - type: 'keyword', - }, - 'checkpoint.risk': { - category: 'checkpoint', - description: 'Risk level we got from the engine. ', - name: 'checkpoint.risk', - type: 'keyword', - }, - 'checkpoint.observable_name': { - category: 'checkpoint', - description: 'IOC observable signature name. ', - name: 'checkpoint.observable_name', - type: 'keyword', - }, - 'checkpoint.observable_id': { - category: 'checkpoint', - description: 'IOC observable signature id. ', - name: 'checkpoint.observable_id', - type: 'keyword', - }, - 'checkpoint.observable_comment': { - category: 'checkpoint', - description: 'IOC observable signature description. ', - name: 'checkpoint.observable_comment', - type: 'keyword', - }, - 'checkpoint.indicator_name': { - category: 'checkpoint', - description: 'IOC indicator name. ', - name: 'checkpoint.indicator_name', - type: 'keyword', - }, - 'checkpoint.indicator_description': { - category: 'checkpoint', - description: 'IOC indicator description. ', - name: 'checkpoint.indicator_description', - type: 'keyword', - }, - 'checkpoint.indicator_reference': { - category: 'checkpoint', - description: 'IOC indicator reference. ', - name: 'checkpoint.indicator_reference', - type: 'keyword', - }, - 'checkpoint.indicator_uuid': { - category: 'checkpoint', - description: 'IOC indicator uuid. ', - name: 'checkpoint.indicator_uuid', - type: 'keyword', - }, - 'checkpoint.app_desc': { - category: 'checkpoint', - description: 'Application description. ', - name: 'checkpoint.app_desc', - type: 'keyword', - }, - 'checkpoint.app_id': { - category: 'checkpoint', - description: 'Application ID. ', - name: 'checkpoint.app_id', - type: 'integer', - }, - 'checkpoint.certificate_resource': { - category: 'checkpoint', - description: 'HTTPS resource Possible values: SNI or domain name (DN). ', - name: 'checkpoint.certificate_resource', - type: 'keyword', - }, - 'checkpoint.certificate_validation': { - category: 'checkpoint', - description: - 'Precise error, describing HTTPS certificate failure under "HTTPS categorize websites" feature. ', - name: 'checkpoint.certificate_validation', - type: 'keyword', - }, - 'checkpoint.browse_time': { - category: 'checkpoint', - description: 'Application session browse time. ', - name: 'checkpoint.browse_time', - type: 'keyword', - }, - 'checkpoint.limit_requested': { - category: 'checkpoint', - description: 'Indicates whether data limit was requested for the session. ', - name: 'checkpoint.limit_requested', - type: 'integer', - }, - 'checkpoint.limit_applied': { - category: 'checkpoint', - description: 'Indicates whether the session was actually date limited. ', - name: 'checkpoint.limit_applied', - type: 'integer', - }, - 'checkpoint.dropped_total': { - category: 'checkpoint', - description: 'Amount of dropped packets (both incoming and outgoing). ', - name: 'checkpoint.dropped_total', - type: 'integer', - }, - 'checkpoint.client_type_os': { - category: 'checkpoint', - description: 'Client OS detected in the HTTP request. ', - name: 'checkpoint.client_type_os', - type: 'keyword', - }, - 'checkpoint.name': { - category: 'checkpoint', - description: 'Application name. ', - name: 'checkpoint.name', - type: 'keyword', - }, - 'checkpoint.properties': { - category: 'checkpoint', - description: 'Application categories. ', - name: 'checkpoint.properties', - type: 'keyword', - }, - 'checkpoint.sig_id': { - category: 'checkpoint', - description: "Application's signature ID which how it was detected by. ", - name: 'checkpoint.sig_id', - type: 'keyword', - }, - 'checkpoint.desc': { - category: 'checkpoint', - description: 'Override application description. ', - name: 'checkpoint.desc', - type: 'keyword', - }, - 'checkpoint.referrer_self_uid': { - category: 'checkpoint', - description: 'UUID of the current log. ', - name: 'checkpoint.referrer_self_uid', - type: 'keyword', - }, - 'checkpoint.referrer_parent_uid': { - category: 'checkpoint', - description: 'Log UUID of the referring application. ', - name: 'checkpoint.referrer_parent_uid', - type: 'keyword', - }, - 'checkpoint.needs_browse_time': { - category: 'checkpoint', - description: 'Browse time required for the connection. ', - name: 'checkpoint.needs_browse_time', - type: 'integer', - }, - 'checkpoint.cluster_info': { - category: 'checkpoint', - description: - 'Cluster information. Possible options: Failover reason/cluster state changes/CP cluster or 3rd party. ', - name: 'checkpoint.cluster_info', - type: 'keyword', - }, - 'checkpoint.sync': { - category: 'checkpoint', - description: 'Sync status and the reason (stable, at risk). ', - name: 'checkpoint.sync', - type: 'keyword', - }, - 'checkpoint.file_direction': { - category: 'checkpoint', - description: 'File direction. Possible options: upload/download. ', - name: 'checkpoint.file_direction', - type: 'keyword', - }, - 'checkpoint.invalid_file_size': { - category: 'checkpoint', - description: 'File_size field is valid only if this field is set to 0. ', - name: 'checkpoint.invalid_file_size', - type: 'integer', - }, - 'checkpoint.top_archive_file_name': { - category: 'checkpoint', - description: 'In case of archive file: the file that was sent/received. ', - name: 'checkpoint.top_archive_file_name', - type: 'keyword', - }, - 'checkpoint.data_type_name': { - category: 'checkpoint', - description: 'Data type in rulebase that was matched. ', - name: 'checkpoint.data_type_name', - type: 'keyword', - }, - 'checkpoint.specific_data_type_name': { - category: 'checkpoint', - description: 'Compound/Group scenario, data type that was matched. ', - name: 'checkpoint.specific_data_type_name', - type: 'keyword', - }, - 'checkpoint.word_list': { - category: 'checkpoint', - description: 'Words matched by data type. ', - name: 'checkpoint.word_list', - type: 'keyword', - }, - 'checkpoint.info': { - category: 'checkpoint', - description: 'Special log message. ', - name: 'checkpoint.info', - type: 'keyword', - }, - 'checkpoint.outgoing_url': { - category: 'checkpoint', - description: 'URL related to this log (for HTTP). ', - name: 'checkpoint.outgoing_url', - type: 'keyword', - }, - 'checkpoint.dlp_rule_name': { - category: 'checkpoint', - description: 'Matched rule name. ', - name: 'checkpoint.dlp_rule_name', - type: 'keyword', - }, - 'checkpoint.dlp_recipients': { - category: 'checkpoint', - description: 'Mail recipients. ', - name: 'checkpoint.dlp_recipients', - type: 'keyword', - }, - 'checkpoint.dlp_subject': { - category: 'checkpoint', - description: 'Mail subject. ', - name: 'checkpoint.dlp_subject', - type: 'keyword', - }, - 'checkpoint.dlp_word_list': { - category: 'checkpoint', - description: 'Phrases matched by data type. ', - name: 'checkpoint.dlp_word_list', - type: 'keyword', - }, - 'checkpoint.dlp_template_score': { - category: 'checkpoint', - description: 'Template data type match score. ', - name: 'checkpoint.dlp_template_score', - type: 'keyword', - }, - 'checkpoint.message_size': { - category: 'checkpoint', - description: 'Mail/post size. ', - name: 'checkpoint.message_size', - type: 'integer', - }, - 'checkpoint.dlp_incident_uid': { - category: 'checkpoint', - description: 'Unique ID of the matched rule. ', - name: 'checkpoint.dlp_incident_uid', - type: 'keyword', - }, - 'checkpoint.dlp_related_incident_uid': { - category: 'checkpoint', - description: 'Other ID related to this one. ', - name: 'checkpoint.dlp_related_incident_uid', - type: 'keyword', - }, - 'checkpoint.dlp_data_type_name': { - category: 'checkpoint', - description: 'Matched data type. ', - name: 'checkpoint.dlp_data_type_name', - type: 'keyword', - }, - 'checkpoint.dlp_data_type_uid': { - category: 'checkpoint', - description: 'Unique ID of the matched data type. ', - name: 'checkpoint.dlp_data_type_uid', - type: 'keyword', - }, - 'checkpoint.dlp_violation_description': { - category: 'checkpoint', - description: 'Violation descriptions described in the rulebase. ', - name: 'checkpoint.dlp_violation_description', - type: 'keyword', - }, - 'checkpoint.dlp_relevant_data_types': { - category: 'checkpoint', - description: 'In case of Compound/Group: the inner data types that were matched. ', - name: 'checkpoint.dlp_relevant_data_types', - type: 'keyword', - }, - 'checkpoint.dlp_action_reason': { - category: 'checkpoint', - description: 'Action chosen reason. ', - name: 'checkpoint.dlp_action_reason', - type: 'keyword', - }, - 'checkpoint.dlp_categories': { - category: 'checkpoint', - description: 'Data type category. ', - name: 'checkpoint.dlp_categories', - type: 'keyword', - }, - 'checkpoint.dlp_transint': { - category: 'checkpoint', - description: 'HTTP/SMTP/FTP. ', - name: 'checkpoint.dlp_transint', - type: 'keyword', - }, - 'checkpoint.duplicate': { - category: 'checkpoint', - description: - 'Log marked as duplicated, when mail is split and the Security Gateway sees it twice. ', - name: 'checkpoint.duplicate', - type: 'keyword', - }, - 'checkpoint.matched_file': { - category: 'checkpoint', - description: 'Unique ID of the matched data type. ', - name: 'checkpoint.matched_file', - type: 'keyword', - }, - 'checkpoint.matched_file_text_segments': { - category: 'checkpoint', - description: 'Fingerprint: number of text segments matched by this traffic. ', - name: 'checkpoint.matched_file_text_segments', - type: 'integer', - }, - 'checkpoint.matched_file_percentage': { - category: 'checkpoint', - description: 'Fingerprint: match percentage of the traffic. ', - name: 'checkpoint.matched_file_percentage', - type: 'integer', - }, - 'checkpoint.dlp_additional_action': { - category: 'checkpoint', - description: 'Watermark/None. ', - name: 'checkpoint.dlp_additional_action', - type: 'keyword', - }, - 'checkpoint.dlp_watermark_profile': { - category: 'checkpoint', - description: 'Watermark which was applied. ', - name: 'checkpoint.dlp_watermark_profile', - type: 'keyword', - }, - 'checkpoint.dlp_repository_id': { - category: 'checkpoint', - description: 'ID of scanned repository. ', - name: 'checkpoint.dlp_repository_id', - type: 'keyword', - }, - 'checkpoint.dlp_repository_root_path': { - category: 'checkpoint', - description: 'Repository path. ', - name: 'checkpoint.dlp_repository_root_path', - type: 'keyword', - }, - 'checkpoint.scan_id': { - category: 'checkpoint', - description: 'Sequential number of scan. ', - name: 'checkpoint.scan_id', - type: 'keyword', - }, - 'checkpoint.special_properties': { - category: 'checkpoint', - description: - "If this field is set to '1' the log will not be shown (in use for monitoring scan progress). ", - name: 'checkpoint.special_properties', - type: 'integer', - }, - 'checkpoint.dlp_repository_total_size': { - category: 'checkpoint', - description: 'Repository size. ', - name: 'checkpoint.dlp_repository_total_size', - type: 'integer', - }, - 'checkpoint.dlp_repository_files_number': { - category: 'checkpoint', - description: 'Number of files in repository. ', - name: 'checkpoint.dlp_repository_files_number', - type: 'integer', - }, - 'checkpoint.dlp_repository_scanned_files_number': { - category: 'checkpoint', - description: 'Number of scanned files in repository. ', - name: 'checkpoint.dlp_repository_scanned_files_number', - type: 'integer', - }, - 'checkpoint.duration': { - category: 'checkpoint', - description: 'Scan duration. ', - name: 'checkpoint.duration', - type: 'keyword', - }, - 'checkpoint.dlp_fingerprint_long_status': { - category: 'checkpoint', - description: 'Scan status - long format. ', - name: 'checkpoint.dlp_fingerprint_long_status', - type: 'keyword', - }, - 'checkpoint.dlp_fingerprint_short_status': { - category: 'checkpoint', - description: 'Scan status - short format. ', - name: 'checkpoint.dlp_fingerprint_short_status', - type: 'keyword', - }, - 'checkpoint.dlp_repository_directories_number': { - category: 'checkpoint', - description: 'Number of directories in repository. ', - name: 'checkpoint.dlp_repository_directories_number', - type: 'integer', - }, - 'checkpoint.dlp_repository_unreachable_directories_number': { - category: 'checkpoint', - description: 'Number of directories the Security Gateway was unable to read. ', - name: 'checkpoint.dlp_repository_unreachable_directories_number', - type: 'integer', - }, - 'checkpoint.dlp_fingerprint_files_number': { - category: 'checkpoint', - description: 'Number of successfully scanned files in repository. ', - name: 'checkpoint.dlp_fingerprint_files_number', - type: 'integer', - }, - 'checkpoint.dlp_repository_skipped_files_number': { - category: 'checkpoint', - description: 'Skipped number of files because of configuration. ', - name: 'checkpoint.dlp_repository_skipped_files_number', - type: 'integer', - }, - 'checkpoint.dlp_repository_scanned_directories_number': { - category: 'checkpoint', - description: 'Amount of directories scanned. ', - name: 'checkpoint.dlp_repository_scanned_directories_number', - type: 'integer', - }, - 'checkpoint.number_of_errors': { - category: 'checkpoint', - description: 'Number of files that were not scanned due to an error. ', - name: 'checkpoint.number_of_errors', - type: 'integer', - }, - 'checkpoint.next_scheduled_scan_date': { - category: 'checkpoint', - description: 'Next scan scheduled time according to time object. ', - name: 'checkpoint.next_scheduled_scan_date', - type: 'keyword', - }, - 'checkpoint.dlp_repository_scanned_total_size': { - category: 'checkpoint', - description: 'Size scanned. ', - name: 'checkpoint.dlp_repository_scanned_total_size', - type: 'integer', - }, - 'checkpoint.dlp_repository_reached_directories_number': { - category: 'checkpoint', - description: 'Number of scanned directories in repository. ', - name: 'checkpoint.dlp_repository_reached_directories_number', - type: 'integer', - }, - 'checkpoint.dlp_repository_not_scanned_directories_percentage': { - category: 'checkpoint', - description: 'Percentage of directories the Security Gateway was unable to read. ', - name: 'checkpoint.dlp_repository_not_scanned_directories_percentage', - type: 'integer', - }, - 'checkpoint.speed': { - category: 'checkpoint', - description: 'Current scan speed. ', - name: 'checkpoint.speed', - type: 'integer', - }, - 'checkpoint.dlp_repository_scan_progress': { - category: 'checkpoint', - description: 'Scan percentage. ', - name: 'checkpoint.dlp_repository_scan_progress', - type: 'integer', - }, - 'checkpoint.sub_policy_name': { - category: 'checkpoint', - description: 'Layer name. ', - name: 'checkpoint.sub_policy_name', - type: 'keyword', - }, - 'checkpoint.sub_policy_uid': { - category: 'checkpoint', - description: 'Layer uid. ', - name: 'checkpoint.sub_policy_uid', - type: 'keyword', - }, - 'checkpoint.fw_message': { - category: 'checkpoint', - description: 'Used for various firewall errors. ', - name: 'checkpoint.fw_message', - type: 'keyword', - }, - 'checkpoint.message': { - category: 'checkpoint', - description: 'ISP link has failed. ', - name: 'checkpoint.message', - type: 'keyword', - }, - 'checkpoint.isp_link': { - category: 'checkpoint', - description: 'Name of ISP link. ', - name: 'checkpoint.isp_link', - type: 'keyword', - }, - 'checkpoint.fw_subproduct': { - category: 'checkpoint', - description: 'Can be vpn/non vpn. ', - name: 'checkpoint.fw_subproduct', - type: 'keyword', - }, - 'checkpoint.sctp_error': { - category: 'checkpoint', - description: 'Error information, what caused sctp to fail on out_of_state. ', - name: 'checkpoint.sctp_error', - type: 'keyword', - }, - 'checkpoint.chunk_type': { - category: 'checkpoint', - description: 'Chunck of the sctp stream. ', - name: 'checkpoint.chunk_type', - type: 'keyword', - }, - 'checkpoint.sctp_association_state': { - category: 'checkpoint', - description: 'The bad state you were trying to update to. ', - name: 'checkpoint.sctp_association_state', - type: 'keyword', - }, - 'checkpoint.tcp_packet_out_of_state': { - category: 'checkpoint', - description: 'State violation. ', - name: 'checkpoint.tcp_packet_out_of_state', - type: 'keyword', - }, - 'checkpoint.connectivity_level': { - category: 'checkpoint', - description: 'Log for a new connection in wire mode. ', - name: 'checkpoint.connectivity_level', - type: 'keyword', - }, - 'checkpoint.ip_option': { - category: 'checkpoint', - description: 'IP option that was dropped. ', - name: 'checkpoint.ip_option', - type: 'integer', - }, - 'checkpoint.tcp_state': { - category: 'checkpoint', - description: 'Log reinting a tcp state change. ', - name: 'checkpoint.tcp_state', - type: 'keyword', - }, - 'checkpoint.expire_time': { - category: 'checkpoint', - description: 'Connection closing time. ', - name: 'checkpoint.expire_time', - type: 'keyword', - }, - 'checkpoint.rpc_prog': { - category: 'checkpoint', - description: 'Log for new RPC state - prog values. ', - name: 'checkpoint.rpc_prog', - type: 'integer', - }, - 'checkpoint.dce-rpc_interface_uuid': { - category: 'checkpoint', - description: 'Log for new RPC state - UUID values ', - name: 'checkpoint.dce-rpc_interface_uuid', - type: 'keyword', - }, - 'checkpoint.elapsed': { - category: 'checkpoint', - description: 'Time passed since start time. ', - name: 'checkpoint.elapsed', - type: 'keyword', - }, - 'checkpoint.icmp': { - category: 'checkpoint', - description: 'Number of packets, received by the client. ', - name: 'checkpoint.icmp', - type: 'keyword', - }, - 'checkpoint.capture_uuid': { - category: 'checkpoint', - description: 'UUID generated for the capture. Used when enabling the capture when logging. ', - name: 'checkpoint.capture_uuid', - type: 'keyword', - }, - 'checkpoint.diameter_app_ID': { - category: 'checkpoint', - description: 'The ID of diameter application. ', - name: 'checkpoint.diameter_app_ID', - type: 'integer', - }, - 'checkpoint.diameter_cmd_code': { - category: 'checkpoint', - description: 'Diameter not allowed application command id. ', - name: 'checkpoint.diameter_cmd_code', - type: 'integer', - }, - 'checkpoint.diameter_msg_type': { - category: 'checkpoint', - description: 'Diameter message type. ', - name: 'checkpoint.diameter_msg_type', - type: 'keyword', - }, - 'checkpoint.cp_message': { - category: 'checkpoint', - description: 'Used to log a general message. ', - name: 'checkpoint.cp_message', - type: 'integer', - }, - 'checkpoint.log_delay': { - category: 'checkpoint', - description: 'Time left before deleting template. ', - name: 'checkpoint.log_delay', - type: 'integer', - }, - 'checkpoint.attack_status': { - category: 'checkpoint', - description: 'In case of a malicious event on an endpoint computer, the status of the attack. ', - name: 'checkpoint.attack_status', - type: 'keyword', - }, - 'checkpoint.impacted_files': { - category: 'checkpoint', - description: - 'In case of an infection on an endpoint computer, the list of files that the malware impacted. ', - name: 'checkpoint.impacted_files', - type: 'keyword', - }, - 'checkpoint.remediated_files': { - category: 'checkpoint', - description: - 'In case of an infection and a successful cleaning of that infection, this is a list of remediated files on the computer. ', - name: 'checkpoint.remediated_files', - type: 'keyword', - }, - 'checkpoint.triggered_by': { - category: 'checkpoint', - description: - 'The name of the mechanism that triggered the Software Blade to enforce a protection. ', - name: 'checkpoint.triggered_by', - type: 'keyword', - }, - 'checkpoint.https_inspection_rule_id': { - category: 'checkpoint', - description: 'ID of the matched rule. ', - name: 'checkpoint.https_inspection_rule_id', - type: 'keyword', - }, - 'checkpoint.https_inspection_rule_name': { - category: 'checkpoint', - description: 'Name of the matched rule. ', - name: 'checkpoint.https_inspection_rule_name', - type: 'keyword', - }, - 'checkpoint.app_properties': { - category: 'checkpoint', - description: 'List of all found categories. ', - name: 'checkpoint.app_properties', - type: 'keyword', - }, - 'checkpoint.https_validation': { - category: 'checkpoint', - description: 'Precise error, describing HTTPS inspection failure. ', - name: 'checkpoint.https_validation', - type: 'keyword', - }, - 'checkpoint.https_inspection_action': { - category: 'checkpoint', - description: 'HTTPS inspection action (Inspect/Bypass/Error). ', - name: 'checkpoint.https_inspection_action', - type: 'keyword', - }, - 'checkpoint.icap_service_id': { - category: 'checkpoint', - description: 'Service ID, can work with multiple servers, treated as services. ', - name: 'checkpoint.icap_service_id', - type: 'integer', - }, - 'checkpoint.icap_server_name': { - category: 'checkpoint', - description: 'Server name. ', - name: 'checkpoint.icap_server_name', - type: 'keyword', - }, - 'checkpoint.internal_error': { - category: 'checkpoint', - description: 'Internal error, for troubleshooting ', - name: 'checkpoint.internal_error', - type: 'keyword', - }, - 'checkpoint.icap_more_info': { - category: 'checkpoint', - description: 'Free text for verdict. ', - name: 'checkpoint.icap_more_info', - type: 'integer', - }, - 'checkpoint.reply_status': { - category: 'checkpoint', - description: 'ICAP reply status code, e.g. 200 or 204. ', - name: 'checkpoint.reply_status', - type: 'integer', - }, - 'checkpoint.icap_server_service': { - category: 'checkpoint', - description: 'Service name, as given in the ICAP URI ', - name: 'checkpoint.icap_server_service', - type: 'keyword', - }, - 'checkpoint.mirror_and_decrypt_type': { - category: 'checkpoint', - description: - 'Information about decrypt and forward. Possible values: Mirror only, Decrypt and mirror, Partial mirroring (HTTPS inspection Bypass). ', - name: 'checkpoint.mirror_and_decrypt_type', - type: 'keyword', - }, - 'checkpoint.interface_name': { - category: 'checkpoint', - description: 'Designated interface for mirror And decrypt. ', - name: 'checkpoint.interface_name', - type: 'keyword', - }, - 'checkpoint.session_uid': { - category: 'checkpoint', - description: 'HTTP session-id. ', - name: 'checkpoint.session_uid', - type: 'keyword', - }, - 'checkpoint.broker_publisher': { - category: 'checkpoint', - description: 'IP address of the broker publisher who shared the session information. ', - name: 'checkpoint.broker_publisher', - type: 'ip', - }, - 'checkpoint.src_user_dn': { - category: 'checkpoint', - description: 'User distinguished name connected to source IP. ', - name: 'checkpoint.src_user_dn', - type: 'keyword', - }, - 'checkpoint.proxy_user_name': { - category: 'checkpoint', - description: 'User name connected to proxy IP. ', - name: 'checkpoint.proxy_user_name', - type: 'keyword', - }, - 'checkpoint.proxy_machine_name': { - category: 'checkpoint', - description: 'Machine name connected to proxy IP. ', - name: 'checkpoint.proxy_machine_name', - type: 'integer', - }, - 'checkpoint.proxy_user_dn': { - category: 'checkpoint', - description: 'User distinguished name connected to proxy IP. ', - name: 'checkpoint.proxy_user_dn', - type: 'keyword', - }, - 'checkpoint.query': { - category: 'checkpoint', - description: 'DNS query. ', - name: 'checkpoint.query', - type: 'keyword', - }, - 'checkpoint.dns_query': { - category: 'checkpoint', - description: 'DNS query. ', - name: 'checkpoint.dns_query', - type: 'keyword', - }, - 'checkpoint.inspection_item': { - category: 'checkpoint', - description: 'Blade element performed inspection. ', - name: 'checkpoint.inspection_item', - type: 'keyword', - }, - 'checkpoint.inspection_category': { - category: 'checkpoint', - description: 'Inspection category: protocol anomaly, signature etc. ', - name: 'checkpoint.inspection_category', - type: 'keyword', - }, - 'checkpoint.inspection_profile': { - category: 'checkpoint', - description: 'Profile which the activated protection belongs to. ', - name: 'checkpoint.inspection_profile', - type: 'keyword', - }, - 'checkpoint.summary': { - category: 'checkpoint', - description: 'Summary message of a non-compliant DNS traffic drops or detects. ', - name: 'checkpoint.summary', - type: 'keyword', - }, - 'checkpoint.question_rdata': { - category: 'checkpoint', - description: 'List of question records domains. ', - name: 'checkpoint.question_rdata', - type: 'keyword', - }, - 'checkpoint.answer_rdata': { - category: 'checkpoint', - description: 'List of answer resource records to the questioned domains. ', - name: 'checkpoint.answer_rdata', - type: 'keyword', - }, - 'checkpoint.authority_rdata': { - category: 'checkpoint', - description: 'List of authoritative servers. ', - name: 'checkpoint.authority_rdata', - type: 'keyword', - }, - 'checkpoint.additional_rdata': { - category: 'checkpoint', - description: 'List of additional resource records. ', - name: 'checkpoint.additional_rdata', - type: 'keyword', - }, - 'checkpoint.files_names': { - category: 'checkpoint', - description: 'List of files requested by FTP. ', - name: 'checkpoint.files_names', - type: 'keyword', - }, - 'checkpoint.ftp_user': { - category: 'checkpoint', - description: 'FTP username. ', - name: 'checkpoint.ftp_user', - type: 'keyword', - }, - 'checkpoint.mime_from': { - category: 'checkpoint', - description: "Sender's address. ", - name: 'checkpoint.mime_from', - type: 'keyword', - }, - 'checkpoint.mime_to': { - category: 'checkpoint', - description: 'List of receiver address. ', - name: 'checkpoint.mime_to', - type: 'keyword', - }, - 'checkpoint.bcc': { - category: 'checkpoint', - description: 'List of BCC addresses. ', - name: 'checkpoint.bcc', - type: 'keyword', - }, - 'checkpoint.content_type': { - category: 'checkpoint', - description: - 'Mail content type. Possible values: application/msword, text/html, image/gif etc. ', - name: 'checkpoint.content_type', - type: 'keyword', - }, - 'checkpoint.user_agent': { - category: 'checkpoint', - description: 'String identifying requesting software user agent. ', - name: 'checkpoint.user_agent', - type: 'keyword', - }, - 'checkpoint.referrer': { - category: 'checkpoint', - description: 'Referrer HTTP request header, previous web page address. ', - name: 'checkpoint.referrer', - type: 'keyword', - }, - 'checkpoint.http_location': { - category: 'checkpoint', - description: 'Response header, indicates the URL to redirect a page to. ', - name: 'checkpoint.http_location', - type: 'keyword', - }, - 'checkpoint.content_disposition': { - category: 'checkpoint', - description: 'Indicates how the content is expected to be displayed inline in the browser. ', - name: 'checkpoint.content_disposition', - type: 'keyword', - }, - 'checkpoint.via': { - category: 'checkpoint', - description: - 'Via header is added by proxies for tracking purposes to avoid sending reqests in loop. ', - name: 'checkpoint.via', - type: 'keyword', - }, - 'checkpoint.http_server': { - category: 'checkpoint', - description: - 'Server HTTP header value, contains information about the software used by the origin server, which handles the request. ', - name: 'checkpoint.http_server', - type: 'keyword', - }, - 'checkpoint.content_length': { - category: 'checkpoint', - description: 'Indicates the size of the entity-body of the HTTP header. ', - name: 'checkpoint.content_length', - type: 'keyword', - }, - 'checkpoint.authorization': { - category: 'checkpoint', - description: 'Authorization HTTP header value. ', - name: 'checkpoint.authorization', - type: 'keyword', - }, - 'checkpoint.http_host': { - category: 'checkpoint', - description: 'Domain name of the server that the HTTP request is sent to. ', - name: 'checkpoint.http_host', - type: 'keyword', - }, - 'checkpoint.inspection_settings_log': { - category: 'checkpoint', - description: 'Indicats that the log was released by inspection settings. ', - name: 'checkpoint.inspection_settings_log', - type: 'keyword', - }, - 'checkpoint.cvpn_resource': { - category: 'checkpoint', - description: 'Mobile Access application. ', - name: 'checkpoint.cvpn_resource', - type: 'keyword', - }, - 'checkpoint.cvpn_category': { - category: 'checkpoint', - description: 'Mobile Access application type. ', - name: 'checkpoint.cvpn_category', - type: 'keyword', - }, - 'checkpoint.url': { - category: 'checkpoint', - description: 'Translated URL. ', - name: 'checkpoint.url', - type: 'keyword', - }, - 'checkpoint.reject_id': { - category: 'checkpoint', - description: - 'A reject ID that corresponds to the one presented in the Mobile Access error page. ', - name: 'checkpoint.reject_id', - type: 'keyword', - }, - 'checkpoint.fs-proto': { - category: 'checkpoint', - description: 'The file share protocol used in mobile acess file share application. ', - name: 'checkpoint.fs-proto', - type: 'keyword', - }, - 'checkpoint.app_package': { - category: 'checkpoint', - description: 'Unique identifier of the application on the protected mobile device. ', - name: 'checkpoint.app_package', - type: 'keyword', - }, - 'checkpoint.appi_name': { - category: 'checkpoint', - description: 'Name of application downloaded on the protected mobile device. ', - name: 'checkpoint.appi_name', - type: 'keyword', - }, - 'checkpoint.app_repackaged': { - category: 'checkpoint', - description: - 'Indicates whether the original application was repackage not by the official developer. ', - name: 'checkpoint.app_repackaged', - type: 'keyword', - }, - 'checkpoint.app_sid_id': { - category: 'checkpoint', - description: 'Unique SHA identifier of a mobile application. ', - name: 'checkpoint.app_sid_id', - type: 'keyword', - }, - 'checkpoint.app_version': { - category: 'checkpoint', - description: 'Version of the application downloaded on the protected mobile device. ', - name: 'checkpoint.app_version', - type: 'keyword', - }, - 'checkpoint.developer_certificate_name': { - category: 'checkpoint', - description: - "Name of the developer's certificate that was used to sign the mobile application. ", - name: 'checkpoint.developer_certificate_name', - type: 'keyword', - }, - 'checkpoint.email_message_id': { - category: 'checkpoint', - description: 'Email session id (uniqe ID of the mail). ', - name: 'checkpoint.email_message_id', - type: 'keyword', - }, - 'checkpoint.email_queue_id': { - category: 'checkpoint', - description: 'Postfix email queue id. ', - name: 'checkpoint.email_queue_id', - type: 'keyword', - }, - 'checkpoint.email_queue_name': { - category: 'checkpoint', - description: 'Postfix email queue name. ', - name: 'checkpoint.email_queue_name', - type: 'keyword', - }, - 'checkpoint.file_name': { - category: 'checkpoint', - description: 'Malicious file name. ', - name: 'checkpoint.file_name', - type: 'keyword', - }, - 'checkpoint.failure_reason': { - category: 'checkpoint', - description: 'MTA failure description. ', - name: 'checkpoint.failure_reason', - type: 'keyword', - }, - 'checkpoint.email_headers': { - category: 'checkpoint', - description: 'String containing all the email headers. ', - name: 'checkpoint.email_headers', - type: 'keyword', - }, - 'checkpoint.arrival_time': { - category: 'checkpoint', - description: 'Email arrival timestamp. ', - name: 'checkpoint.arrival_time', - type: 'keyword', - }, - 'checkpoint.email_status': { - category: 'checkpoint', - description: - "Describes the email's state. Possible options: delivered, deferred, skipped, bounced, hold, new, scan_started, scan_ended ", - name: 'checkpoint.email_status', - type: 'keyword', - }, - 'checkpoint.status_update': { - category: 'checkpoint', - description: 'Last time log was updated. ', - name: 'checkpoint.status_update', - type: 'keyword', - }, - 'checkpoint.delivery_time': { - category: 'checkpoint', - description: 'Timestamp of when email was delivered (MTA finished handling the email. ', - name: 'checkpoint.delivery_time', - type: 'keyword', - }, - 'checkpoint.links_num': { - category: 'checkpoint', - description: 'Number of links in the mail. ', - name: 'checkpoint.links_num', - type: 'integer', - }, - 'checkpoint.attachments_num': { - category: 'checkpoint', - description: 'Number of attachments in the mail. ', - name: 'checkpoint.attachments_num', - type: 'integer', - }, - 'checkpoint.email_content': { - category: 'checkpoint', - description: - 'Mail contents. Possible options: attachments/links & attachments/links/text only. ', - name: 'checkpoint.email_content', - type: 'keyword', - }, - 'checkpoint.allocated_ports': { - category: 'checkpoint', - description: 'Amount of allocated ports. ', - name: 'checkpoint.allocated_ports', - type: 'integer', - }, - 'checkpoint.capacity': { - category: 'checkpoint', - description: 'Capacity of the ports. ', - name: 'checkpoint.capacity', - type: 'integer', - }, - 'checkpoint.ports_usage': { - category: 'checkpoint', - description: 'Percentage of allocated ports. ', - name: 'checkpoint.ports_usage', - type: 'integer', - }, - 'checkpoint.nat_exhausted_pool': { - category: 'checkpoint', - description: '4-tuple of an exhausted pool. ', - name: 'checkpoint.nat_exhausted_pool', - type: 'keyword', - }, - 'checkpoint.nat_rulenum': { - category: 'checkpoint', - description: 'NAT rulebase first matched rule. ', - name: 'checkpoint.nat_rulenum', - type: 'integer', - }, - 'checkpoint.nat_addtnl_rulenum': { - category: 'checkpoint', - description: - 'When matching 2 automatic rules , second rule match will be shown otherwise field will be 0. ', - name: 'checkpoint.nat_addtnl_rulenum', - type: 'integer', - }, - 'checkpoint.message_info': { - category: 'checkpoint', - description: 'Used for information messages, for example:NAT connection has ended. ', - name: 'checkpoint.message_info', - type: 'keyword', - }, - 'checkpoint.nat46': { - category: 'checkpoint', - description: 'NAT 46 status, in most cases "enabled". ', - name: 'checkpoint.nat46', - type: 'keyword', - }, - 'checkpoint.end_time': { - category: 'checkpoint', - description: 'TCP connection end time. ', - name: 'checkpoint.end_time', - type: 'keyword', - }, - 'checkpoint.tcp_end_reason': { - category: 'checkpoint', - description: 'Reason for TCP connection closure. ', - name: 'checkpoint.tcp_end_reason', - type: 'keyword', - }, - 'checkpoint.cgnet': { - category: 'checkpoint', - description: 'Describes NAT allocation for specific subscriber. ', - name: 'checkpoint.cgnet', - type: 'keyword', - }, - 'checkpoint.subscriber': { - category: 'checkpoint', - description: 'Source IP before CGNAT. ', - name: 'checkpoint.subscriber', - type: 'ip', - }, - 'checkpoint.hide_ip': { - category: 'checkpoint', - description: 'Source IP which will be used after CGNAT. ', - name: 'checkpoint.hide_ip', - type: 'ip', - }, - 'checkpoint.int_start': { - category: 'checkpoint', - description: 'Subscriber start int which will be used for NAT. ', - name: 'checkpoint.int_start', - type: 'integer', - }, - 'checkpoint.int_end': { - category: 'checkpoint', - description: 'Subscriber end int which will be used for NAT. ', - name: 'checkpoint.int_end', - type: 'integer', - }, - 'checkpoint.packet_amount': { - category: 'checkpoint', - description: 'Amount of packets dropped. ', - name: 'checkpoint.packet_amount', - type: 'integer', - }, - 'checkpoint.monitor_reason': { - category: 'checkpoint', - description: 'Aggregated logs of monitored packets. ', - name: 'checkpoint.monitor_reason', - type: 'keyword', - }, - 'checkpoint.drops_amount': { - category: 'checkpoint', - description: 'Amount of multicast packets dropped. ', - name: 'checkpoint.drops_amount', - type: 'integer', - }, - 'checkpoint.securexl_message': { - category: 'checkpoint', - description: - 'Two options for a SecureXL message: 1. Missed accounting records after heavy load on logging system. 2. FW log message regarding a packet drop. ', - name: 'checkpoint.securexl_message', - type: 'keyword', - }, - 'checkpoint.conns_amount': { - category: 'checkpoint', - description: 'Connections amount of aggregated log info. ', - name: 'checkpoint.conns_amount', - type: 'integer', - }, - 'checkpoint.scope': { - category: 'checkpoint', - description: 'IP related to the attack. ', - name: 'checkpoint.scope', - type: 'keyword', - }, - 'checkpoint.analyzed_on': { - category: 'checkpoint', - description: 'Check Point ThreatCloud / emulator name. ', - name: 'checkpoint.analyzed_on', - type: 'keyword', - }, - 'checkpoint.detected_on': { - category: 'checkpoint', - description: 'System and applications version the file was emulated on. ', - name: 'checkpoint.detected_on', - type: 'keyword', - }, - 'checkpoint.dropped_file_name': { - category: 'checkpoint', - description: 'List of names dropped from the original file. ', - name: 'checkpoint.dropped_file_name', - type: 'keyword', - }, - 'checkpoint.dropped_file_type': { - category: 'checkpoint', - description: 'List of file types dropped from the original file. ', - name: 'checkpoint.dropped_file_type', - type: 'keyword', - }, - 'checkpoint.dropped_file_hash': { - category: 'checkpoint', - description: 'List of file hashes dropped from the original file. ', - name: 'checkpoint.dropped_file_hash', - type: 'keyword', - }, - 'checkpoint.dropped_file_verdict': { - category: 'checkpoint', - description: 'List of file verdics dropped from the original file. ', - name: 'checkpoint.dropped_file_verdict', - type: 'keyword', - }, - 'checkpoint.emulated_on': { - category: 'checkpoint', - description: 'Images the files were emulated on. ', - name: 'checkpoint.emulated_on', - type: 'keyword', - }, - 'checkpoint.extracted_file_type': { - category: 'checkpoint', - description: 'Types of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_type', - type: 'keyword', - }, - 'checkpoint.extracted_file_names': { - category: 'checkpoint', - description: 'Names of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_names', - type: 'keyword', - }, - 'checkpoint.extracted_file_hash': { - category: 'checkpoint', - description: 'Archive hash in case of extracted files. ', - name: 'checkpoint.extracted_file_hash', - type: 'keyword', - }, - 'checkpoint.extracted_file_verdict': { - category: 'checkpoint', - description: 'Verdict of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_verdict', - type: 'keyword', - }, - 'checkpoint.extracted_file_uid': { - category: 'checkpoint', - description: 'UID of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_uid', - type: 'keyword', - }, - 'checkpoint.mitre_initial_access': { - category: 'checkpoint', - description: 'The adversary is trying to break into your network. ', - name: 'checkpoint.mitre_initial_access', - type: 'keyword', - }, - 'checkpoint.mitre_execution': { - category: 'checkpoint', - description: 'The adversary is trying to run malicious code. ', - name: 'checkpoint.mitre_execution', - type: 'keyword', - }, - 'checkpoint.mitre_persistence': { - category: 'checkpoint', - description: 'The adversary is trying to maintain his foothold. ', - name: 'checkpoint.mitre_persistence', - type: 'keyword', - }, - 'checkpoint.mitre_privilege_escalation': { - category: 'checkpoint', - description: 'The adversary is trying to gain higher-level permissions. ', - name: 'checkpoint.mitre_privilege_escalation', - type: 'keyword', - }, - 'checkpoint.mitre_defense_evasion': { - category: 'checkpoint', - description: 'The adversary is trying to avoid being detected. ', - name: 'checkpoint.mitre_defense_evasion', - type: 'keyword', - }, - 'checkpoint.mitre_credential_access': { - category: 'checkpoint', - description: 'The adversary is trying to steal account names and passwords. ', - name: 'checkpoint.mitre_credential_access', - type: 'keyword', - }, - 'checkpoint.mitre_discovery': { - category: 'checkpoint', - description: 'The adversary is trying to expose information about your environment. ', - name: 'checkpoint.mitre_discovery', - type: 'keyword', - }, - 'checkpoint.mitre_lateral_movement': { - category: 'checkpoint', - description: 'The adversary is trying to explore your environment. ', - name: 'checkpoint.mitre_lateral_movement', - type: 'keyword', - }, - 'checkpoint.mitre_collection': { - category: 'checkpoint', - description: 'The adversary is trying to collect data of interest to achieve his goal. ', - name: 'checkpoint.mitre_collection', - type: 'keyword', - }, - 'checkpoint.mitre_command_and_control': { - category: 'checkpoint', - description: - 'The adversary is trying to communicate with compromised systems in order to control them. ', - name: 'checkpoint.mitre_command_and_control', - type: 'keyword', - }, - 'checkpoint.mitre_exfiltration': { - category: 'checkpoint', - description: 'The adversary is trying to steal data. ', - name: 'checkpoint.mitre_exfiltration', - type: 'keyword', - }, - 'checkpoint.mitre_impact': { - category: 'checkpoint', - description: - 'The adversary is trying to manipulate, interrupt, or destroy your systems and data. ', - name: 'checkpoint.mitre_impact', - type: 'keyword', - }, - 'checkpoint.parent_file_hash': { - category: 'checkpoint', - description: "Archive's hash in case of extracted files. ", - name: 'checkpoint.parent_file_hash', - type: 'keyword', - }, - 'checkpoint.parent_file_name': { - category: 'checkpoint', - description: "Archive's name in case of extracted files. ", - name: 'checkpoint.parent_file_name', - type: 'keyword', - }, - 'checkpoint.parent_file_uid': { - category: 'checkpoint', - description: "Archive's UID in case of extracted files. ", - name: 'checkpoint.parent_file_uid', - type: 'keyword', - }, - 'checkpoint.similiar_iocs': { - category: 'checkpoint', - description: 'Other IoCs similar to the ones found, related to the malicious file. ', - name: 'checkpoint.similiar_iocs', - type: 'keyword', - }, - 'checkpoint.similar_hashes': { - category: 'checkpoint', - description: 'Hashes found similar to the malicious file. ', - name: 'checkpoint.similar_hashes', - type: 'keyword', - }, - 'checkpoint.similar_strings': { - category: 'checkpoint', - description: 'Strings found similar to the malicious file. ', - name: 'checkpoint.similar_strings', - type: 'keyword', - }, - 'checkpoint.similar_communication': { - category: 'checkpoint', - description: 'Network action found similar to the malicious file. ', - name: 'checkpoint.similar_communication', - type: 'keyword', - }, - 'checkpoint.te_verdict_determined_by': { - category: 'checkpoint', - description: 'Emulators determined file verdict. ', - name: 'checkpoint.te_verdict_determined_by', - type: 'keyword', - }, - 'checkpoint.packet_capture_unique_id': { - category: 'checkpoint', - description: 'Identifier of the packet capture files. ', - name: 'checkpoint.packet_capture_unique_id', - type: 'keyword', - }, - 'checkpoint.total_attachments': { - category: 'checkpoint', - description: 'The number of attachments in an email. ', - name: 'checkpoint.total_attachments', - type: 'integer', - }, - 'checkpoint.additional_info': { - category: 'checkpoint', - description: 'ID of original file/mail which are sent by admin. ', - name: 'checkpoint.additional_info', - type: 'keyword', - }, - 'checkpoint.content_risk': { - category: 'checkpoint', - description: 'File risk. ', - name: 'checkpoint.content_risk', - type: 'integer', - }, - 'checkpoint.operation': { - category: 'checkpoint', - description: 'Operation made by Threat Extraction. ', - name: 'checkpoint.operation', - type: 'keyword', - }, - 'checkpoint.scrubbed_content': { - category: 'checkpoint', - description: 'Active content that was found. ', - name: 'checkpoint.scrubbed_content', - type: 'keyword', - }, - 'checkpoint.scrub_time': { - category: 'checkpoint', - description: 'Extraction process duration. ', - name: 'checkpoint.scrub_time', - type: 'keyword', - }, - 'checkpoint.scrub_download_time': { - category: 'checkpoint', - description: 'File download time from resource. ', - name: 'checkpoint.scrub_download_time', - type: 'keyword', - }, - 'checkpoint.scrub_total_time': { - category: 'checkpoint', - description: 'Threat extraction total file handling time. ', - name: 'checkpoint.scrub_total_time', - type: 'keyword', - }, - 'checkpoint.scrub_activity': { - category: 'checkpoint', - description: 'The result of the extraction ', - name: 'checkpoint.scrub_activity', - type: 'keyword', - }, - 'checkpoint.watermark': { - category: 'checkpoint', - description: 'Reports whether watermark is added to the cleaned file. ', - name: 'checkpoint.watermark', - type: 'keyword', - }, - 'checkpoint.source_object': { - category: 'checkpoint', - description: 'Matched object name on source column. ', - name: 'checkpoint.source_object', - type: 'keyword', - }, - 'checkpoint.destination_object': { - category: 'checkpoint', - description: 'Matched object name on destination column. ', - name: 'checkpoint.destination_object', - type: 'keyword', - }, - 'checkpoint.drop_reason': { - category: 'checkpoint', - description: 'Drop reason description. ', - name: 'checkpoint.drop_reason', - type: 'keyword', - }, - 'checkpoint.hit': { - category: 'checkpoint', - description: 'Number of hits on a rule. ', - name: 'checkpoint.hit', - type: 'integer', - }, - 'checkpoint.rulebase_id': { - category: 'checkpoint', - description: 'Layer number. ', - name: 'checkpoint.rulebase_id', - type: 'integer', - }, - 'checkpoint.first_hit_time': { - category: 'checkpoint', - description: 'First hit time in current interval. ', - name: 'checkpoint.first_hit_time', - type: 'integer', - }, - 'checkpoint.last_hit_time': { - category: 'checkpoint', - description: 'Last hit time in current interval. ', - name: 'checkpoint.last_hit_time', - type: 'integer', - }, - 'checkpoint.rematch_info': { - category: 'checkpoint', - description: - 'Information sent when old connections cannot be matched during policy installation. ', - name: 'checkpoint.rematch_info', - type: 'keyword', - }, - 'checkpoint.last_rematch_time': { - category: 'checkpoint', - description: 'Connection rematched time. ', - name: 'checkpoint.last_rematch_time', - type: 'keyword', - }, - 'checkpoint.action_reason': { - category: 'checkpoint', - description: 'Connection drop reason. ', - name: 'checkpoint.action_reason', - type: 'integer', - }, - 'checkpoint.action_reason_msg': { - category: 'checkpoint', - description: 'Connection drop reason message. ', - name: 'checkpoint.action_reason_msg', - type: 'keyword', - }, - 'checkpoint.c_bytes': { - category: 'checkpoint', - description: 'Boolean value indicates whether bytes sent from the client side are used. ', - name: 'checkpoint.c_bytes', - type: 'integer', - }, - 'checkpoint.context_num': { - category: 'checkpoint', - description: 'Serial number of the log for a specific connection. ', - name: 'checkpoint.context_num', - type: 'integer', - }, - 'checkpoint.match_id': { - category: 'checkpoint', - description: 'Private key of the rule ', - name: 'checkpoint.match_id', - type: 'integer', - }, - 'checkpoint.alert': { - category: 'checkpoint', - description: 'Alert level of matched rule (for connection logs). ', - name: 'checkpoint.alert', - type: 'keyword', - }, - 'checkpoint.parent_rule': { - category: 'checkpoint', - description: 'Parent rule number, in case of inline layer. ', - name: 'checkpoint.parent_rule', - type: 'integer', - }, - 'checkpoint.match_fk': { - category: 'checkpoint', - description: 'Rule number. ', - name: 'checkpoint.match_fk', - type: 'integer', - }, - 'checkpoint.dropped_outgoing': { - category: 'checkpoint', - description: 'Number of outgoing bytes dropped when using UP-limit feature. ', - name: 'checkpoint.dropped_outgoing', - type: 'integer', - }, - 'checkpoint.dropped_incoming': { - category: 'checkpoint', - description: 'Number of incoming bytes dropped when using UP-limit feature. ', - name: 'checkpoint.dropped_incoming', - type: 'integer', - }, - 'checkpoint.media_type': { - category: 'checkpoint', - description: 'Media used (audio, video, etc.) ', - name: 'checkpoint.media_type', - type: 'keyword', - }, - 'checkpoint.sip_reason': { - category: 'checkpoint', - description: "Explains why 'source_ip' isn't allowed to redirect (handover). ", - name: 'checkpoint.sip_reason', - type: 'keyword', - }, - 'checkpoint.voip_method': { - category: 'checkpoint', - description: 'Registration request. ', - name: 'checkpoint.voip_method', - type: 'keyword', - }, - 'checkpoint.registered_ip-phones': { - category: 'checkpoint', - description: 'Registered IP-Phones. ', - name: 'checkpoint.registered_ip-phones', - type: 'keyword', - }, - 'checkpoint.voip_reg_user_type': { - category: 'checkpoint', - description: 'Registered IP-Phone type. ', - name: 'checkpoint.voip_reg_user_type', - type: 'keyword', - }, - 'checkpoint.voip_call_id': { - category: 'checkpoint', - description: 'Call-ID. ', - name: 'checkpoint.voip_call_id', - type: 'keyword', - }, - 'checkpoint.voip_reg_int': { - category: 'checkpoint', - description: 'Registration port. ', - name: 'checkpoint.voip_reg_int', - type: 'integer', - }, - 'checkpoint.voip_reg_ipp': { - category: 'checkpoint', - description: 'Registration IP protocol. ', - name: 'checkpoint.voip_reg_ipp', - type: 'integer', - }, - 'checkpoint.voip_reg_period': { - category: 'checkpoint', - description: 'Registration period. ', - name: 'checkpoint.voip_reg_period', - type: 'integer', - }, - 'checkpoint.src_phone_number': { - category: 'checkpoint', - description: 'Source IP-Phone. ', - name: 'checkpoint.src_phone_number', - type: 'keyword', - }, - 'checkpoint.voip_from_user_type': { - category: 'checkpoint', - description: 'Source IP-Phone type. ', - name: 'checkpoint.voip_from_user_type', - type: 'keyword', - }, - 'checkpoint.voip_to_user_type': { - category: 'checkpoint', - description: 'Destination IP-Phone type. ', - name: 'checkpoint.voip_to_user_type', - type: 'keyword', - }, - 'checkpoint.voip_call_dir': { - category: 'checkpoint', - description: 'Call direction: in/out. ', - name: 'checkpoint.voip_call_dir', - type: 'keyword', - }, - 'checkpoint.voip_call_state': { - category: 'checkpoint', - description: 'Call state. Possible values: in/out. ', - name: 'checkpoint.voip_call_state', - type: 'keyword', - }, - 'checkpoint.voip_call_term_time': { - category: 'checkpoint', - description: 'Call termination time stamp. ', - name: 'checkpoint.voip_call_term_time', - type: 'keyword', - }, - 'checkpoint.voip_duration': { - category: 'checkpoint', - description: 'Call duration (seconds). ', - name: 'checkpoint.voip_duration', - type: 'keyword', - }, - 'checkpoint.voip_media_port': { - category: 'checkpoint', - description: 'Media int. ', - name: 'checkpoint.voip_media_port', - type: 'keyword', - }, - 'checkpoint.voip_media_ipp': { - category: 'checkpoint', - description: 'Media IP protocol. ', - name: 'checkpoint.voip_media_ipp', - type: 'keyword', - }, - 'checkpoint.voip_est_codec': { - category: 'checkpoint', - description: 'Estimated codec. ', - name: 'checkpoint.voip_est_codec', - type: 'keyword', - }, - 'checkpoint.voip_exp': { - category: 'checkpoint', - description: 'Expiration. ', - name: 'checkpoint.voip_exp', - type: 'integer', - }, - 'checkpoint.voip_attach_sz': { - category: 'checkpoint', - description: 'Attachment size. ', - name: 'checkpoint.voip_attach_sz', - type: 'integer', - }, - 'checkpoint.voip_attach_action_info': { - category: 'checkpoint', - description: 'Attachment action Info. ', - name: 'checkpoint.voip_attach_action_info', - type: 'keyword', - }, - 'checkpoint.voip_media_codec': { - category: 'checkpoint', - description: 'Estimated codec. ', - name: 'checkpoint.voip_media_codec', - type: 'keyword', - }, - 'checkpoint.voip_reject_reason': { - category: 'checkpoint', - description: 'Reject reason. ', - name: 'checkpoint.voip_reject_reason', - type: 'keyword', - }, - 'checkpoint.voip_reason_info': { - category: 'checkpoint', - description: 'Information. ', - name: 'checkpoint.voip_reason_info', - type: 'keyword', - }, - 'checkpoint.voip_config': { - category: 'checkpoint', - description: 'Configuration. ', - name: 'checkpoint.voip_config', - type: 'keyword', - }, - 'checkpoint.voip_reg_server': { - category: 'checkpoint', - description: 'Registrar server IP address. ', - name: 'checkpoint.voip_reg_server', - type: 'ip', - }, - 'checkpoint.scv_user': { - category: 'checkpoint', - description: 'Username whose packets are dropped on SCV. ', - name: 'checkpoint.scv_user', - type: 'keyword', - }, - 'checkpoint.scv_message_info': { - category: 'checkpoint', - description: 'Drop reason. ', - name: 'checkpoint.scv_message_info', - type: 'keyword', - }, - 'checkpoint.ppp': { - category: 'checkpoint', - description: 'Authentication status. ', - name: 'checkpoint.ppp', - type: 'keyword', - }, - 'checkpoint.scheme': { - category: 'checkpoint', - description: 'Describes the scheme used for the log. ', - name: 'checkpoint.scheme', - type: 'keyword', - }, - 'checkpoint.machine': { - category: 'checkpoint', - description: 'L2TP machine which triggered the log and the log refers to it. ', - name: 'checkpoint.machine', - type: 'keyword', - }, - 'checkpoint.vpn_feature_name': { - category: 'checkpoint', - description: 'L2TP /IKE / Link Selection. ', - name: 'checkpoint.vpn_feature_name', - type: 'keyword', - }, - 'checkpoint.reject_category': { - category: 'checkpoint', - description: 'Authentication failure reason. ', - name: 'checkpoint.reject_category', - type: 'keyword', - }, - 'checkpoint.peer_ip_probing_status_update': { - category: 'checkpoint', - description: 'IP address response status. ', - name: 'checkpoint.peer_ip_probing_status_update', - type: 'keyword', - }, - 'checkpoint.peer_ip': { - category: 'checkpoint', - description: 'IP address which the client connects to. ', - name: 'checkpoint.peer_ip', - type: 'keyword', - }, - 'checkpoint.link_probing_status_update': { - category: 'checkpoint', - description: 'IP address response status. ', - name: 'checkpoint.link_probing_status_update', - type: 'keyword', - }, - 'checkpoint.source_interface': { - category: 'checkpoint', - description: 'External Interface name for source interface or Null if not found. ', - name: 'checkpoint.source_interface', - type: 'keyword', - }, - 'checkpoint.next_hop_ip': { - category: 'checkpoint', - description: 'Next hop IP address. ', - name: 'checkpoint.next_hop_ip', - type: 'keyword', - }, - 'checkpoint.srckeyid': { - category: 'checkpoint', - description: 'Initiator Spi ID. ', - name: 'checkpoint.srckeyid', - type: 'keyword', - }, - 'checkpoint.dstkeyid': { - category: 'checkpoint', - description: 'Responder Spi ID. ', - name: 'checkpoint.dstkeyid', - type: 'keyword', - }, - 'checkpoint.encryption_failure': { - category: 'checkpoint', - description: 'Message indicating why the encryption failed. ', - name: 'checkpoint.encryption_failure', - type: 'keyword', - }, - 'checkpoint.ike_ids': { - category: 'checkpoint', - description: 'All QM ids. ', - name: 'checkpoint.ike_ids', - type: 'keyword', - }, - 'checkpoint.community': { - category: 'checkpoint', - description: 'Community name for the IPSec key and the use of the IKEv. ', - name: 'checkpoint.community', - type: 'keyword', - }, - 'checkpoint.ike': { - category: 'checkpoint', - description: 'IKEMode (PHASE1, PHASE2, etc..). ', - name: 'checkpoint.ike', - type: 'keyword', - }, - 'checkpoint.cookieI': { - category: 'checkpoint', - description: 'Initiator cookie. ', - name: 'checkpoint.cookieI', - type: 'keyword', - }, - 'checkpoint.cookieR': { - category: 'checkpoint', - description: 'Responder cookie. ', - name: 'checkpoint.cookieR', - type: 'keyword', - }, - 'checkpoint.msgid': { - category: 'checkpoint', - description: 'Message ID. ', - name: 'checkpoint.msgid', - type: 'keyword', - }, - 'checkpoint.methods': { - category: 'checkpoint', - description: 'IPSEc methods. ', - name: 'checkpoint.methods', - type: 'keyword', - }, - 'checkpoint.connection_uid': { - category: 'checkpoint', - description: 'Calculation of md5 of the IP and user name as UID. ', - name: 'checkpoint.connection_uid', - type: 'keyword', - }, - 'checkpoint.site_name': { - category: 'checkpoint', - description: 'Site name. ', - name: 'checkpoint.site_name', - type: 'keyword', - }, - 'checkpoint.esod_rule_name': { - category: 'checkpoint', - description: 'Unknown rule name. ', - name: 'checkpoint.esod_rule_name', - type: 'keyword', - }, - 'checkpoint.esod_rule_action': { - category: 'checkpoint', - description: 'Unknown rule action. ', - name: 'checkpoint.esod_rule_action', - type: 'keyword', - }, - 'checkpoint.esod_rule_type': { - category: 'checkpoint', - description: 'Unknown rule type. ', - name: 'checkpoint.esod_rule_type', - type: 'keyword', - }, - 'checkpoint.esod_noncompliance_reason': { - category: 'checkpoint', - description: 'Non-compliance reason. ', - name: 'checkpoint.esod_noncompliance_reason', - type: 'keyword', - }, - 'checkpoint.esod_associated_policies': { - category: 'checkpoint', - description: 'Associated policies. ', - name: 'checkpoint.esod_associated_policies', - type: 'keyword', - }, - 'checkpoint.spyware_type': { - category: 'checkpoint', - description: 'Spyware type. ', - name: 'checkpoint.spyware_type', - type: 'keyword', - }, - 'checkpoint.anti_virus_type': { - category: 'checkpoint', - description: 'Anti virus type. ', - name: 'checkpoint.anti_virus_type', - type: 'keyword', - }, - 'checkpoint.end_user_firewall_type': { - category: 'checkpoint', - description: 'End user firewall type. ', - name: 'checkpoint.end_user_firewall_type', - type: 'keyword', - }, - 'checkpoint.esod_scan_status': { - category: 'checkpoint', - description: 'Scan failed. ', - name: 'checkpoint.esod_scan_status', - type: 'keyword', - }, - 'checkpoint.esod_access_status': { - category: 'checkpoint', - description: 'Access denied. ', - name: 'checkpoint.esod_access_status', - type: 'keyword', - }, - 'checkpoint.client_type': { - category: 'checkpoint', - description: 'Endpoint Connect. ', - name: 'checkpoint.client_type', - type: 'keyword', - }, - 'checkpoint.precise_error': { - category: 'checkpoint', - description: 'HTTP parser error. ', - name: 'checkpoint.precise_error', - type: 'keyword', - }, - 'checkpoint.method': { - category: 'checkpoint', - description: 'HTTP method. ', - name: 'checkpoint.method', - type: 'keyword', - }, - 'checkpoint.trusted_domain': { - category: 'checkpoint', - description: 'In case of phishing event, the domain, which the attacker was impersonating. ', - name: 'checkpoint.trusted_domain', - type: 'keyword', - }, - 'cisco.amp.timestamp_nanoseconds': { - category: 'cisco', - description: 'The timestamp in Epoch nanoseconds. ', - name: 'cisco.amp.timestamp_nanoseconds', - type: 'date', - }, - 'cisco.amp.event_type_id': { - category: 'cisco', - description: 'A sub ID of the event, depending on event type. ', - name: 'cisco.amp.event_type_id', - type: 'keyword', - }, - 'cisco.amp.detection': { - category: 'cisco', - description: 'The name of the malware detected. ', - name: 'cisco.amp.detection', - type: 'keyword', - }, - 'cisco.amp.detection_id': { - category: 'cisco', - description: 'The ID of the detection. ', - name: 'cisco.amp.detection_id', - type: 'keyword', - }, - 'cisco.amp.connector_guid': { - category: 'cisco', - description: 'The GUID of the connector sending information to AMP. ', - name: 'cisco.amp.connector_guid', - type: 'keyword', - }, - 'cisco.amp.group_guids': { - category: 'cisco', - description: 'An array of group GUIDS related to the connector sending information to AMP. ', - name: 'cisco.amp.group_guids', - type: 'keyword', - }, - 'cisco.amp.vulnerabilities': { - category: 'cisco', - description: 'An array of related vulnerabilities to the malicious event. ', - name: 'cisco.amp.vulnerabilities', - type: 'flattened', - }, - 'cisco.amp.scan.description': { - category: 'cisco', - description: - 'Description of an event related to a scan being initiated, for example the specific directory name. ', - name: 'cisco.amp.scan.description', - type: 'keyword', - }, - 'cisco.amp.scan.clean': { - category: 'cisco', - description: 'Boolean value if a scanned file was clean or not. ', - name: 'cisco.amp.scan.clean', - type: 'boolean', - }, - 'cisco.amp.scan.scanned_files': { - category: 'cisco', - description: 'Count of files scanned in a directory. ', - name: 'cisco.amp.scan.scanned_files', - type: 'long', - }, - 'cisco.amp.scan.scanned_processes': { - category: 'cisco', - description: 'Count of processes scanned related to a single scan event. ', - name: 'cisco.amp.scan.scanned_processes', - type: 'long', - }, - 'cisco.amp.scan.scanned_paths': { - category: 'cisco', - description: 'Count of different directories scanned related to a single scan event. ', - name: 'cisco.amp.scan.scanned_paths', - type: 'long', - }, - 'cisco.amp.scan.malicious_detections': { - category: 'cisco', - description: 'Count of malicious files or documents detected related to a single scan event. ', - name: 'cisco.amp.scan.malicious_detections', - type: 'long', - }, - 'cisco.amp.computer.connector_guid': { - category: 'cisco', - description: - 'The GUID of the connector, similar to top level connector_guid, but unique if multiple connectors are involved. ', - name: 'cisco.amp.computer.connector_guid', - type: 'keyword', - }, - 'cisco.amp.computer.external_ip': { - category: 'cisco', - description: 'The external IP of the related host. ', - name: 'cisco.amp.computer.external_ip', - type: 'ip', - }, - 'cisco.amp.computer.active': { - category: 'cisco', - description: 'If the current endpoint is active or not. ', - name: 'cisco.amp.computer.active', - type: 'boolean', - }, - 'cisco.amp.computer.network_addresses': { - category: 'cisco', - description: 'All network interface information on the related host. ', - name: 'cisco.amp.computer.network_addresses', - type: 'flattened', - }, - 'cisco.amp.file.disposition': { - category: 'cisco', - description: 'Categorization of file, for example "Malicious" or "Clean". ', - name: 'cisco.amp.file.disposition', - type: 'keyword', - }, - 'cisco.amp.network_info.disposition': { - category: 'cisco', - description: - 'Categorization of a network event related to a file, for example "Malicious" or "Clean". ', - name: 'cisco.amp.network_info.disposition', - type: 'keyword', - }, - 'cisco.amp.network_info.nfm.direction': { - category: 'cisco', - description: 'The current direction based on source and destination IP. ', - name: 'cisco.amp.network_info.nfm.direction', - type: 'keyword', - }, - 'cisco.amp.related.mac': { - category: 'cisco', - description: 'An array of all related MAC addresses. ', - name: 'cisco.amp.related.mac', - type: 'keyword', - }, - 'cisco.amp.related.cve': { - category: 'cisco', - description: 'An array of all related MAC addresses. ', - name: 'cisco.amp.related.cve', - type: 'keyword', - }, - 'cisco.amp.cloud_ioc.description': { - category: 'cisco', - description: 'Description of the related IOC for specific IOC events from AMP. ', - name: 'cisco.amp.cloud_ioc.description', - type: 'keyword', - }, - 'cisco.amp.cloud_ioc.short_description': { - category: 'cisco', - description: 'Short description of the related IOC for specific IOC events from AMP. ', - name: 'cisco.amp.cloud_ioc.short_description', - type: 'keyword', - }, - 'cisco.amp.network_info.parent.disposition': { - category: 'cisco', - description: 'Categorization of a IOC for example "Malicious" or "Clean". ', - name: 'cisco.amp.network_info.parent.disposition', - type: 'keyword', - }, - 'cisco.amp.network_info.parent.identity.md5': { - category: 'cisco', - description: 'MD5 hash of the related IOC. ', - name: 'cisco.amp.network_info.parent.identity.md5', - type: 'keyword', - }, - 'cisco.amp.network_info.parent.identity.sha1': { - category: 'cisco', - description: 'SHA1 hash of the related IOC. ', - name: 'cisco.amp.network_info.parent.identity.sha1', - type: 'keyword', - }, - 'cisco.amp.network_info.parent.identify.sha256': { - category: 'cisco', - description: 'SHA256 hash of the related IOC. ', - name: 'cisco.amp.network_info.parent.identify.sha256', - type: 'keyword', - }, - 'cisco.amp.file.archived_file.disposition': { - category: 'cisco', - description: - 'Categorization of a file archive related to a file, for example "Malicious" or "Clean". ', - name: 'cisco.amp.file.archived_file.disposition', - type: 'keyword', - }, - 'cisco.amp.file.archived_file.identity.md5': { - category: 'cisco', - description: 'MD5 hash of the archived file related to the malicious event. ', - name: 'cisco.amp.file.archived_file.identity.md5', - type: 'keyword', - }, - 'cisco.amp.file.archived_file.identity.sha1': { - category: 'cisco', - description: 'SHA1 hash of the archived file related to the malicious event. ', - name: 'cisco.amp.file.archived_file.identity.sha1', - type: 'keyword', - }, - 'cisco.amp.file.archived_file.identity.sha256': { - category: 'cisco', - description: 'SHA256 hash of the archived file related to the malicious event. ', - name: 'cisco.amp.file.archived_file.identity.sha256', - type: 'keyword', - }, - 'cisco.amp.file.attack_details.application': { - category: 'cisco', - description: 'The application name related to Exploit Prevention events. ', - name: 'cisco.amp.file.attack_details.application', - type: 'keyword', - }, - 'cisco.amp.file.attack_details.attacked_module': { - category: 'cisco', - description: - 'Path to the executable or dll that was attacked and detected by Exploit Prevention. ', - name: 'cisco.amp.file.attack_details.attacked_module', - type: 'keyword', - }, - 'cisco.amp.file.attack_details.base_address': { - category: 'cisco', - description: 'The base memory address related to the exploit detected. ', - name: 'cisco.amp.file.attack_details.base_address', - type: 'keyword', - }, - 'cisco.amp.file.attack_details.suspicious_files': { - category: 'cisco', - description: 'An array of related files when an attack is detected by Exploit Prevention. ', - name: 'cisco.amp.file.attack_details.suspicious_files', - type: 'keyword', - }, - 'cisco.amp.file.parent.disposition': { - category: 'cisco', - description: 'Categorization of parrent, for example "Malicious" or "Clean". ', - name: 'cisco.amp.file.parent.disposition', - type: 'keyword', - }, - 'cisco.amp.error.description': { - category: 'cisco', - description: 'Description of an endpoint error event. ', - name: 'cisco.amp.error.description', - type: 'keyword', - }, - 'cisco.amp.error.error_code': { - category: 'cisco', - description: 'The error code describing the related error event. ', - name: 'cisco.amp.error.error_code', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.severity': { - category: 'cisco', - description: - 'Severity result of the threat hunt registered to the malicious event. Can be Low-Critical. ', - name: 'cisco.amp.threat_hunting.severity', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_report_guid': { - category: 'cisco', - description: 'The GUID of the related threat hunting report. ', - name: 'cisco.amp.threat_hunting.incident_report_guid', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_hunt_guid': { - category: 'cisco', - description: 'The GUID of the related investigation tracking issue. ', - name: 'cisco.amp.threat_hunting.incident_hunt_guid', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_title': { - category: 'cisco', - description: 'Title of the incident related to the threat hunting activity. ', - name: 'cisco.amp.threat_hunting.incident_title', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_summary': { - category: 'cisco', - description: 'Summary of the outcome on the threat hunting activity. ', - name: 'cisco.amp.threat_hunting.incident_summary', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_remediation': { - category: 'cisco', - description: 'Recommendations to resolve the vulnerability or exploited host. ', - name: 'cisco.amp.threat_hunting.incident_remediation', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_id': { - category: 'cisco', - description: 'The id of the related incident for the threat hunting activity. ', - name: 'cisco.amp.threat_hunting.incident_id', - type: 'keyword', - }, - 'cisco.amp.threat_hunting.incident_end_time': { - category: 'cisco', - description: 'When the threat hunt finalized or closed. ', - name: 'cisco.amp.threat_hunting.incident_end_time', - type: 'date', - }, - 'cisco.amp.threat_hunting.incident_start_time': { - category: 'cisco', - description: 'When the threat hunt was initiated. ', - name: 'cisco.amp.threat_hunting.incident_start_time', - type: 'date', - }, - 'cisco.amp.file.attack_details.indicators': { - category: 'cisco', - description: - 'Different indicator types that matches the exploit detected, for example different MITRE tactics. ', - name: 'cisco.amp.file.attack_details.indicators', - type: 'flattened', - }, - 'cisco.amp.threat_hunting.tactics': { - category: 'cisco', - description: 'List of all MITRE tactics related to the incident found. ', - name: 'cisco.amp.threat_hunting.tactics', - type: 'flattened', - }, - 'cisco.amp.threat_hunting.techniques': { - category: 'cisco', - description: 'List of all MITRE techniques related to the incident found. ', - name: 'cisco.amp.threat_hunting.techniques', - type: 'flattened', - }, - 'cisco.amp.tactics': { - category: 'cisco', - description: 'List of all MITRE tactics related to the incident found. ', - name: 'cisco.amp.tactics', - type: 'flattened', - }, - 'cisco.amp.mitre_tactics': { - category: 'cisco', - description: "Array of all related mitre tactic ID's ", - name: 'cisco.amp.mitre_tactics', - type: 'keyword', - }, - 'cisco.amp.techniques': { - category: 'cisco', - description: 'List of all MITRE techniques related to the incident found. ', - name: 'cisco.amp.techniques', - type: 'flattened', - }, - 'cisco.amp.mitre_techniques': { - category: 'cisco', - description: "Array of all related mitre technique ID's ", - name: 'cisco.amp.mitre_techniques', - type: 'keyword', - }, - 'cisco.amp.command_line.arguments': { - category: 'cisco', - description: 'The CLI arguments related to the Cloud Threat IOC reported by Cisco. ', - name: 'cisco.amp.command_line.arguments', - type: 'keyword', - }, - 'cisco.amp.bp_data': { - category: 'cisco', - description: 'Endpoint isolation information ', - name: 'cisco.amp.bp_data', - type: 'flattened', - }, - 'cisco.asa.message_id': { - category: 'cisco', - description: 'The Cisco ASA message identifier. ', - name: 'cisco.asa.message_id', - type: 'keyword', - }, - 'cisco.asa.suffix': { - category: 'cisco', - description: 'Optional suffix after %ASA identifier. ', - example: 'session', - name: 'cisco.asa.suffix', - type: 'keyword', - }, - 'cisco.asa.source_interface': { - category: 'cisco', - description: 'Source interface for the flow or event. ', - name: 'cisco.asa.source_interface', - type: 'keyword', - }, - 'cisco.asa.destination_interface': { - category: 'cisco', - description: 'Destination interface for the flow or event. ', - name: 'cisco.asa.destination_interface', - type: 'keyword', - }, - 'cisco.asa.rule_name': { - category: 'cisco', - description: 'Name of the Access Control List rule that matched this event. ', - name: 'cisco.asa.rule_name', - type: 'keyword', - }, - 'cisco.asa.source_username': { - category: 'cisco', - description: 'Name of the user that is the source for this event. ', - name: 'cisco.asa.source_username', - type: 'keyword', - }, - 'cisco.asa.destination_username': { - category: 'cisco', - description: 'Name of the user that is the destination for this event. ', - name: 'cisco.asa.destination_username', - type: 'keyword', - }, - 'cisco.asa.mapped_source_ip': { - category: 'cisco', - description: 'The translated source IP address. ', - name: 'cisco.asa.mapped_source_ip', - type: 'ip', - }, - 'cisco.asa.mapped_source_host': { - category: 'cisco', - description: 'The translated source host. ', - name: 'cisco.asa.mapped_source_host', - type: 'keyword', - }, - 'cisco.asa.mapped_source_port': { - category: 'cisco', - description: 'The translated source port. ', - name: 'cisco.asa.mapped_source_port', - type: 'long', - }, - 'cisco.asa.mapped_destination_ip': { - category: 'cisco', - description: 'The translated destination IP address. ', - name: 'cisco.asa.mapped_destination_ip', - type: 'ip', - }, - 'cisco.asa.mapped_destination_host': { - category: 'cisco', - description: 'The translated destination host. ', - name: 'cisco.asa.mapped_destination_host', - type: 'keyword', - }, - 'cisco.asa.mapped_destination_port': { - category: 'cisco', - description: 'The translated destination port. ', - name: 'cisco.asa.mapped_destination_port', - type: 'long', - }, - 'cisco.asa.threat_level': { - category: 'cisco', - description: - 'Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. ', - name: 'cisco.asa.threat_level', - type: 'keyword', - }, - 'cisco.asa.threat_category': { - category: 'cisco', - description: - 'Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. ', - name: 'cisco.asa.threat_category', - type: 'keyword', - }, - 'cisco.asa.connection_id': { - category: 'cisco', - description: 'Unique identifier for a flow. ', - name: 'cisco.asa.connection_id', - type: 'keyword', - }, - 'cisco.asa.icmp_type': { - category: 'cisco', - description: 'ICMP type. ', - name: 'cisco.asa.icmp_type', - type: 'short', - }, - 'cisco.asa.icmp_code': { - category: 'cisco', - description: 'ICMP code. ', - name: 'cisco.asa.icmp_code', - type: 'short', - }, - 'cisco.asa.connection_type': { - category: 'cisco', - description: 'The VPN connection type ', - name: 'cisco.asa.connection_type', - type: 'keyword', - }, - 'cisco.asa.dap_records': { - category: 'cisco', - description: 'The assigned DAP records ', - name: 'cisco.asa.dap_records', - type: 'keyword', - }, - 'cisco.asa.command_line_arguments': { - category: 'cisco', - description: 'The command line arguments logged by the local audit log ', - name: 'cisco.asa.command_line_arguments', - type: 'keyword', - }, - 'cisco.asa.assigned_ip': { - category: 'cisco', - description: 'The IP address assigned to a VPN client successfully connecting ', - name: 'cisco.asa.assigned_ip', - type: 'ip', - }, - 'cisco.asa.privilege.old': { - category: 'cisco', - description: 'When a users privilege is changed this is the old value ', - name: 'cisco.asa.privilege.old', - type: 'keyword', - }, - 'cisco.asa.privilege.new': { - category: 'cisco', - description: 'When a users privilege is changed this is the new value ', - name: 'cisco.asa.privilege.new', - type: 'keyword', - }, - 'cisco.asa.burst.object': { - category: 'cisco', - description: 'The related object for burst warnings ', - name: 'cisco.asa.burst.object', - type: 'keyword', - }, - 'cisco.asa.burst.id': { - category: 'cisco', - description: 'The related rate ID for burst warnings ', - name: 'cisco.asa.burst.id', - type: 'keyword', - }, - 'cisco.asa.burst.current_rate': { - category: 'cisco', - description: 'The current burst rate seen ', - name: 'cisco.asa.burst.current_rate', - type: 'keyword', - }, - 'cisco.asa.burst.configured_rate': { - category: 'cisco', - description: 'The current configured burst rate ', - name: 'cisco.asa.burst.configured_rate', - type: 'keyword', - }, - 'cisco.asa.burst.avg_rate': { - category: 'cisco', - description: 'The current average burst rate seen ', - name: 'cisco.asa.burst.avg_rate', - type: 'keyword', - }, - 'cisco.asa.burst.configured_avg_rate': { - category: 'cisco', - description: 'The current configured average burst rate allowed ', - name: 'cisco.asa.burst.configured_avg_rate', - type: 'keyword', - }, - 'cisco.asa.burst.cumulative_count': { - category: 'cisco', - description: 'The total count of burst rate hits since the object was created or cleared ', - name: 'cisco.asa.burst.cumulative_count', - type: 'keyword', - }, - 'cisco.asa.termination_user': { - category: 'cisco', - description: 'AAA name of user requesting termination ', - name: 'cisco.asa.termination_user', - type: 'keyword', - }, - 'cisco.asa.webvpn.group_name': { - category: 'cisco', - description: 'The WebVPN group name the user belongs to ', - name: 'cisco.asa.webvpn.group_name', - type: 'keyword', - }, - 'cisco.ftd.message_id': { - category: 'cisco', - description: 'The Cisco FTD message identifier. ', - name: 'cisco.ftd.message_id', - type: 'keyword', - }, - 'cisco.ftd.suffix': { - category: 'cisco', - description: 'Optional suffix after %FTD identifier. ', - example: 'session', - name: 'cisco.ftd.suffix', - type: 'keyword', - }, - 'cisco.ftd.source_interface': { - category: 'cisco', - description: 'Source interface for the flow or event. ', - name: 'cisco.ftd.source_interface', - type: 'keyword', - }, - 'cisco.ftd.destination_interface': { - category: 'cisco', - description: 'Destination interface for the flow or event. ', - name: 'cisco.ftd.destination_interface', - type: 'keyword', - }, - 'cisco.ftd.rule_name': { - category: 'cisco', - description: 'Name of the Access Control List rule that matched this event. ', - name: 'cisco.ftd.rule_name', - type: 'keyword', - }, - 'cisco.ftd.source_username': { - category: 'cisco', - description: 'Name of the user that is the source for this event. ', - name: 'cisco.ftd.source_username', - type: 'keyword', - }, - 'cisco.ftd.destination_username': { - category: 'cisco', - description: 'Name of the user that is the destination for this event. ', - name: 'cisco.ftd.destination_username', - type: 'keyword', - }, - 'cisco.ftd.mapped_source_ip': { - category: 'cisco', - description: 'The translated source IP address. Use ECS source.nat.ip. ', - name: 'cisco.ftd.mapped_source_ip', - type: 'ip', - }, - 'cisco.ftd.mapped_source_host': { - category: 'cisco', - description: 'The translated source host. ', - name: 'cisco.ftd.mapped_source_host', - type: 'keyword', - }, - 'cisco.ftd.mapped_source_port': { - category: 'cisco', - description: 'The translated source port. Use ECS source.nat.port. ', - name: 'cisco.ftd.mapped_source_port', - type: 'long', - }, - 'cisco.ftd.mapped_destination_ip': { - category: 'cisco', - description: 'The translated destination IP address. Use ECS destination.nat.ip. ', - name: 'cisco.ftd.mapped_destination_ip', - type: 'ip', - }, - 'cisco.ftd.mapped_destination_host': { - category: 'cisco', - description: 'The translated destination host. ', - name: 'cisco.ftd.mapped_destination_host', - type: 'keyword', - }, - 'cisco.ftd.mapped_destination_port': { - category: 'cisco', - description: 'The translated destination port. Use ECS destination.nat.port. ', - name: 'cisco.ftd.mapped_destination_port', - type: 'long', - }, - 'cisco.ftd.threat_level': { - category: 'cisco', - description: - 'Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. ', - name: 'cisco.ftd.threat_level', - type: 'keyword', - }, - 'cisco.ftd.threat_category': { - category: 'cisco', - description: - 'Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. ', - name: 'cisco.ftd.threat_category', - type: 'keyword', - }, - 'cisco.ftd.connection_id': { - category: 'cisco', - description: 'Unique identifier for a flow. ', - name: 'cisco.ftd.connection_id', - type: 'keyword', - }, - 'cisco.ftd.icmp_type': { - category: 'cisco', - description: 'ICMP type. ', - name: 'cisco.ftd.icmp_type', - type: 'short', - }, - 'cisco.ftd.icmp_code': { - category: 'cisco', - description: 'ICMP code. ', - name: 'cisco.ftd.icmp_code', - type: 'short', - }, - 'cisco.ftd.security': { - category: 'cisco', - description: 'Raw fields for Security Events.', - name: 'cisco.ftd.security', - type: 'object', - }, - 'cisco.ftd.connection_type': { - category: 'cisco', - description: 'The VPN connection type ', - name: 'cisco.ftd.connection_type', - type: 'keyword', - }, - 'cisco.ftd.dap_records': { - category: 'cisco', - description: 'The assigned DAP records ', - name: 'cisco.ftd.dap_records', - type: 'keyword', - }, - 'cisco.ftd.termination_user': { - category: 'cisco', - description: 'AAA name of user requesting termination ', - name: 'cisco.ftd.termination_user', - type: 'keyword', - }, - 'cisco.ftd.webvpn.group_name': { - category: 'cisco', - description: 'The WebVPN group name the user belongs to ', - name: 'cisco.ftd.webvpn.group_name', - type: 'keyword', - }, - 'cisco.ios.access_list': { - category: 'cisco', - description: 'Name of the IP access list. ', - name: 'cisco.ios.access_list', - type: 'keyword', - }, - 'cisco.ios.facility': { - category: 'cisco', - description: - 'The facility to which the message refers (for example, SNMP, SYS, and so forth). A facility can be a hardware device, a protocol, or a module of the system software. It denotes the source or the cause of the system message. ', - example: 'SEC', - name: 'cisco.ios.facility', - type: 'keyword', - }, - 'cisco.umbrella.identities': { - category: 'cisco', - description: 'An array of the different identities related to the event. ', - name: 'cisco.umbrella.identities', - type: 'keyword', - }, - 'cisco.umbrella.categories': { - category: 'cisco', - description: 'The security or content categories that the destination matches. ', - name: 'cisco.umbrella.categories', - type: 'keyword', - }, - 'cisco.umbrella.policy_identity_type': { - category: 'cisco', - description: - 'The first identity type matched with this request. Available in version 3 and above. ', - name: 'cisco.umbrella.policy_identity_type', - type: 'keyword', - }, - 'cisco.umbrella.identity_types': { - category: 'cisco', - description: - 'The type of identity that made the request. For example, Roaming Computer or Network. ', - name: 'cisco.umbrella.identity_types', - type: 'keyword', - }, - 'cisco.umbrella.blocked_categories': { - category: 'cisco', - description: - 'The categories that resulted in the destination being blocked. Available in version 4 and above. ', - name: 'cisco.umbrella.blocked_categories', - type: 'keyword', - }, - 'cisco.umbrella.content_type': { - category: 'cisco', - description: 'The type of web content, typically text/html. ', - name: 'cisco.umbrella.content_type', - type: 'keyword', - }, - 'cisco.umbrella.sha_sha256': { - category: 'cisco', - description: 'Hex digest of the response content. ', - name: 'cisco.umbrella.sha_sha256', - type: 'keyword', - }, - 'cisco.umbrella.av_detections': { - category: 'cisco', - description: 'The detection name according to the antivirus engine used in file inspection. ', - name: 'cisco.umbrella.av_detections', - type: 'keyword', - }, - 'cisco.umbrella.puas': { - category: 'cisco', - description: - 'A list of all potentially unwanted application (PUA) results for the proxied file as returned by the antivirus scanner. ', - name: 'cisco.umbrella.puas', - type: 'keyword', - }, - 'cisco.umbrella.amp_disposition': { - category: 'cisco', - description: - 'The status of the files proxied and scanned by Cisco Advanced Malware Protection (AMP) as part of the Umbrella File Inspection feature; can be Clean, Malicious or Unknown. ', - name: 'cisco.umbrella.amp_disposition', - type: 'keyword', - }, - 'cisco.umbrella.amp_malware_name': { - category: 'cisco', - description: 'If Malicious, the name of the malware according to AMP. ', - name: 'cisco.umbrella.amp_malware_name', - type: 'keyword', - }, - 'cisco.umbrella.amp_score': { - category: 'cisco', - description: - 'The score of the malware from AMP. This field is not currently used and will be blank. ', - name: 'cisco.umbrella.amp_score', - type: 'keyword', - }, - 'cisco.umbrella.datacenter': { - category: 'cisco', - description: 'The name of the Umbrella Data Center that processed the user-generated traffic. ', - name: 'cisco.umbrella.datacenter', - type: 'keyword', - }, - 'cisco.umbrella.origin_id': { - category: 'cisco', - description: 'The unique identity of the network tunnel. ', - name: 'cisco.umbrella.origin_id', - type: 'keyword', - }, - 'coredns.id': { - category: 'coredns', - description: 'id of the DNS transaction ', - name: 'coredns.id', - type: 'keyword', - }, - 'coredns.query.size': { - category: 'coredns', - description: 'size of the DNS query ', - name: 'coredns.query.size', - type: 'integer', - format: 'bytes', - }, - 'coredns.query.class': { - category: 'coredns', - description: 'DNS query class ', - name: 'coredns.query.class', - type: 'keyword', - }, - 'coredns.query.name': { - category: 'coredns', - description: 'DNS query name ', - name: 'coredns.query.name', - type: 'keyword', - }, - 'coredns.query.type': { - category: 'coredns', - description: 'DNS query type ', - name: 'coredns.query.type', - type: 'keyword', - }, - 'coredns.response.code': { - category: 'coredns', - description: 'DNS response code ', - name: 'coredns.response.code', - type: 'keyword', - }, - 'coredns.response.flags': { - category: 'coredns', - description: 'DNS response flags ', - name: 'coredns.response.flags', - type: 'keyword', - }, - 'coredns.response.size': { - category: 'coredns', - description: 'size of the DNS response ', - name: 'coredns.response.size', - type: 'integer', - format: 'bytes', - }, - 'coredns.dnssec_ok': { - category: 'coredns', - description: 'dnssec flag ', - name: 'coredns.dnssec_ok', - type: 'boolean', - }, - 'crowdstrike.metadata.eventType': { - category: 'crowdstrike', - description: - 'DetectionSummaryEvent, FirewallMatchEvent, IncidentSummaryEvent, RemoteResponseSessionStartEvent, RemoteResponseSessionEndEvent, AuthActivityAuditEvent, or UserActivityAuditEvent ', - name: 'crowdstrike.metadata.eventType', - type: 'keyword', - }, - 'crowdstrike.metadata.eventCreationTime': { - category: 'crowdstrike', - description: 'The time this event occurred on the endpoint in UTC UNIX_MS format. ', - name: 'crowdstrike.metadata.eventCreationTime', - type: 'date', - }, - 'crowdstrike.metadata.offset': { - category: 'crowdstrike', - description: - 'Offset number that tracks the location of the event in stream. This is used to identify unique detection events. ', - name: 'crowdstrike.metadata.offset', - type: 'integer', - }, - 'crowdstrike.metadata.customerIDString': { - category: 'crowdstrike', - description: 'Customer identifier ', - name: 'crowdstrike.metadata.customerIDString', - type: 'keyword', - }, - 'crowdstrike.metadata.version': { - category: 'crowdstrike', - description: 'Schema version ', - name: 'crowdstrike.metadata.version', - type: 'keyword', - }, - 'crowdstrike.event.ProcessStartTime': { - category: 'crowdstrike', - description: 'The process start time in UTC UNIX_MS format. ', - name: 'crowdstrike.event.ProcessStartTime', - type: 'date', - }, - 'crowdstrike.event.ProcessEndTime': { - category: 'crowdstrike', - description: 'The process termination time in UTC UNIX_MS format. ', - name: 'crowdstrike.event.ProcessEndTime', - type: 'date', - }, - 'crowdstrike.event.ProcessId': { - category: 'crowdstrike', - description: 'Process ID related to the detection. ', - name: 'crowdstrike.event.ProcessId', - type: 'integer', - }, - 'crowdstrike.event.ParentProcessId': { - category: 'crowdstrike', - description: 'Parent process ID related to the detection. ', - name: 'crowdstrike.event.ParentProcessId', - type: 'integer', - }, - 'crowdstrike.event.ComputerName': { - category: 'crowdstrike', - description: 'Name of the computer where the detection occurred. ', - name: 'crowdstrike.event.ComputerName', - type: 'keyword', - }, - 'crowdstrike.event.UserName': { - category: 'crowdstrike', - description: 'User name associated with the detection. ', - name: 'crowdstrike.event.UserName', - type: 'keyword', - }, - 'crowdstrike.event.DetectName': { - category: 'crowdstrike', - description: 'Name of the detection. ', - name: 'crowdstrike.event.DetectName', - type: 'keyword', - }, - 'crowdstrike.event.DetectDescription': { - category: 'crowdstrike', - description: 'Description of the detection. ', - name: 'crowdstrike.event.DetectDescription', - type: 'keyword', - }, - 'crowdstrike.event.Severity': { - category: 'crowdstrike', - description: 'Severity score of the detection. ', - name: 'crowdstrike.event.Severity', - type: 'integer', - }, - 'crowdstrike.event.SeverityName': { - category: 'crowdstrike', - description: 'Severity score text. ', - name: 'crowdstrike.event.SeverityName', - type: 'keyword', - }, - 'crowdstrike.event.FileName': { - category: 'crowdstrike', - description: 'File name of the associated process for the detection. ', - name: 'crowdstrike.event.FileName', - type: 'keyword', - }, - 'crowdstrike.event.FilePath': { - category: 'crowdstrike', - description: 'Path of the executable associated with the detection. ', - name: 'crowdstrike.event.FilePath', - type: 'keyword', - }, - 'crowdstrike.event.CommandLine': { - category: 'crowdstrike', - description: 'Executable path with command line arguments. ', - name: 'crowdstrike.event.CommandLine', - type: 'keyword', - }, - 'crowdstrike.event.SHA1String': { - category: 'crowdstrike', - description: 'SHA1 sum of the executable associated with the detection. ', - name: 'crowdstrike.event.SHA1String', - type: 'keyword', - }, - 'crowdstrike.event.SHA256String': { - category: 'crowdstrike', - description: 'SHA256 sum of the executable associated with the detection. ', - name: 'crowdstrike.event.SHA256String', - type: 'keyword', - }, - 'crowdstrike.event.MD5String': { - category: 'crowdstrike', - description: 'MD5 sum of the executable associated with the detection. ', - name: 'crowdstrike.event.MD5String', - type: 'keyword', - }, - 'crowdstrike.event.MachineDomain': { - category: 'crowdstrike', - description: 'Domain for the machine associated with the detection. ', - name: 'crowdstrike.event.MachineDomain', - type: 'keyword', - }, - 'crowdstrike.event.FalconHostLink': { - category: 'crowdstrike', - description: 'URL to view the detection in Falcon. ', - name: 'crowdstrike.event.FalconHostLink', - type: 'keyword', - }, - 'crowdstrike.event.SensorId': { - category: 'crowdstrike', - description: 'Unique ID associated with the Falcon sensor. ', - name: 'crowdstrike.event.SensorId', - type: 'keyword', - }, - 'crowdstrike.event.DetectId': { - category: 'crowdstrike', - description: 'Unique ID associated with the detection. ', - name: 'crowdstrike.event.DetectId', - type: 'keyword', - }, - 'crowdstrike.event.LocalIP': { - category: 'crowdstrike', - description: 'IP address of the host associated with the detection. ', - name: 'crowdstrike.event.LocalIP', - type: 'keyword', - }, - 'crowdstrike.event.MACAddress': { - category: 'crowdstrike', - description: 'MAC address of the host associated with the detection. ', - name: 'crowdstrike.event.MACAddress', - type: 'keyword', - }, - 'crowdstrike.event.Tactic': { - category: 'crowdstrike', - description: 'MITRE tactic category of the detection. ', - name: 'crowdstrike.event.Tactic', - type: 'keyword', - }, - 'crowdstrike.event.Technique': { - category: 'crowdstrike', - description: 'MITRE technique category of the detection. ', - name: 'crowdstrike.event.Technique', - type: 'keyword', - }, - 'crowdstrike.event.Objective': { - category: 'crowdstrike', - description: 'Method of detection. ', - name: 'crowdstrike.event.Objective', - type: 'keyword', - }, - 'crowdstrike.event.PatternDispositionDescription': { - category: 'crowdstrike', - description: 'Action taken by Falcon. ', - name: 'crowdstrike.event.PatternDispositionDescription', - type: 'keyword', - }, - 'crowdstrike.event.PatternDispositionValue': { - category: 'crowdstrike', - description: 'Unique ID associated with action taken. ', - name: 'crowdstrike.event.PatternDispositionValue', - type: 'integer', - }, - 'crowdstrike.event.PatternDispositionFlags': { - category: 'crowdstrike', - description: 'Flags indicating actions taken. ', - name: 'crowdstrike.event.PatternDispositionFlags', - type: 'object', - }, - 'crowdstrike.event.State': { - category: 'crowdstrike', - description: 'Whether the incident summary is open and ongoing or closed. ', - name: 'crowdstrike.event.State', - type: 'keyword', - }, - 'crowdstrike.event.IncidentStartTime': { - category: 'crowdstrike', - description: 'Start time for the incident in UTC UNIX format. ', - name: 'crowdstrike.event.IncidentStartTime', - type: 'date', - }, - 'crowdstrike.event.IncidentEndTime': { - category: 'crowdstrike', - description: 'End time for the incident in UTC UNIX format. ', - name: 'crowdstrike.event.IncidentEndTime', - type: 'date', - }, - 'crowdstrike.event.FineScore': { - category: 'crowdstrike', - description: 'Score for incident. ', - name: 'crowdstrike.event.FineScore', - type: 'float', - }, - 'crowdstrike.event.UserId': { - category: 'crowdstrike', - description: 'Email address or user ID associated with the event. ', - name: 'crowdstrike.event.UserId', - type: 'keyword', - }, - 'crowdstrike.event.UserIp': { - category: 'crowdstrike', - description: 'IP address associated with the user. ', - name: 'crowdstrike.event.UserIp', - type: 'keyword', - }, - 'crowdstrike.event.OperationName': { - category: 'crowdstrike', - description: 'Event subtype. ', - name: 'crowdstrike.event.OperationName', - type: 'keyword', - }, - 'crowdstrike.event.ServiceName': { - category: 'crowdstrike', - description: 'Service associated with this event. ', - name: 'crowdstrike.event.ServiceName', - type: 'keyword', - }, - 'crowdstrike.event.Success': { - category: 'crowdstrike', - description: 'Indicator of whether or not this event was successful. ', - name: 'crowdstrike.event.Success', - type: 'boolean', - }, - 'crowdstrike.event.UTCTimestamp': { - category: 'crowdstrike', - description: 'Timestamp associated with this event in UTC UNIX format. ', - name: 'crowdstrike.event.UTCTimestamp', - type: 'date', - }, - 'crowdstrike.event.AuditKeyValues': { - category: 'crowdstrike', - description: 'Fields that were changed in this event. ', - name: 'crowdstrike.event.AuditKeyValues', - type: 'nested', - }, - 'crowdstrike.event.ExecutablesWritten': { - category: 'crowdstrike', - description: 'Detected executables written to disk by a process. ', - name: 'crowdstrike.event.ExecutablesWritten', - type: 'nested', - }, - 'crowdstrike.event.SessionId': { - category: 'crowdstrike', - description: 'Session ID of the remote response session. ', - name: 'crowdstrike.event.SessionId', - type: 'keyword', - }, - 'crowdstrike.event.HostnameField': { - category: 'crowdstrike', - description: 'Host name of the machine for the remote session. ', - name: 'crowdstrike.event.HostnameField', - type: 'keyword', - }, - 'crowdstrike.event.StartTimestamp': { - category: 'crowdstrike', - description: 'Start time for the remote session in UTC UNIX format. ', - name: 'crowdstrike.event.StartTimestamp', - type: 'date', - }, - 'crowdstrike.event.EndTimestamp': { - category: 'crowdstrike', - description: 'End time for the remote session in UTC UNIX format. ', - name: 'crowdstrike.event.EndTimestamp', - type: 'date', - }, - 'crowdstrike.event.LateralMovement': { - category: 'crowdstrike', - description: 'Lateral movement field for incident. ', - name: 'crowdstrike.event.LateralMovement', - type: 'long', - }, - 'crowdstrike.event.ParentImageFileName': { - category: 'crowdstrike', - description: 'Path to the parent process. ', - name: 'crowdstrike.event.ParentImageFileName', - type: 'keyword', - }, - 'crowdstrike.event.ParentCommandLine': { - category: 'crowdstrike', - description: 'Parent process command line arguments. ', - name: 'crowdstrike.event.ParentCommandLine', - type: 'keyword', - }, - 'crowdstrike.event.GrandparentImageFileName': { - category: 'crowdstrike', - description: 'Path to the grandparent process. ', - name: 'crowdstrike.event.GrandparentImageFileName', - type: 'keyword', - }, - 'crowdstrike.event.GrandparentCommandLine': { - category: 'crowdstrike', - description: 'Grandparent process command line arguments. ', - name: 'crowdstrike.event.GrandparentCommandLine', - type: 'keyword', - }, - 'crowdstrike.event.IOCType': { - category: 'crowdstrike', - description: 'CrowdStrike type for indicator of compromise. ', - name: 'crowdstrike.event.IOCType', - type: 'keyword', - }, - 'crowdstrike.event.IOCValue': { - category: 'crowdstrike', - description: 'CrowdStrike value for indicator of compromise. ', - name: 'crowdstrike.event.IOCValue', - type: 'keyword', - }, - 'crowdstrike.event.CustomerId': { - category: 'crowdstrike', - description: 'Customer identifier. ', - name: 'crowdstrike.event.CustomerId', - type: 'keyword', - }, - 'crowdstrike.event.DeviceId': { - category: 'crowdstrike', - description: 'Device on which the event occurred. ', - name: 'crowdstrike.event.DeviceId', - type: 'keyword', - }, - 'crowdstrike.event.Ipv': { - category: 'crowdstrike', - description: 'Protocol for network request. ', - name: 'crowdstrike.event.Ipv', - type: 'keyword', - }, - 'crowdstrike.event.ConnectionDirection': { - category: 'crowdstrike', - description: 'Direction for network connection. ', - name: 'crowdstrike.event.ConnectionDirection', - type: 'keyword', - }, - 'crowdstrike.event.EventType': { - category: 'crowdstrike', - description: 'CrowdStrike provided event type. ', - name: 'crowdstrike.event.EventType', - type: 'keyword', - }, - 'crowdstrike.event.HostName': { - category: 'crowdstrike', - description: 'Host name of the local machine. ', - name: 'crowdstrike.event.HostName', - type: 'keyword', - }, - 'crowdstrike.event.ICMPCode': { - category: 'crowdstrike', - description: 'RFC2780 ICMP Code field. ', - name: 'crowdstrike.event.ICMPCode', - type: 'keyword', - }, - 'crowdstrike.event.ICMPType': { - category: 'crowdstrike', - description: 'RFC2780 ICMP Type field. ', - name: 'crowdstrike.event.ICMPType', - type: 'keyword', - }, - 'crowdstrike.event.ImageFileName': { - category: 'crowdstrike', - description: 'File name of the associated process for the detection. ', - name: 'crowdstrike.event.ImageFileName', - type: 'keyword', - }, - 'crowdstrike.event.PID': { - category: 'crowdstrike', - description: 'Associated process id for the detection. ', - name: 'crowdstrike.event.PID', - type: 'long', - }, - 'crowdstrike.event.LocalAddress': { - category: 'crowdstrike', - description: 'IP address of local machine. ', - name: 'crowdstrike.event.LocalAddress', - type: 'ip', - }, - 'crowdstrike.event.LocalPort': { - category: 'crowdstrike', - description: 'Port of local machine. ', - name: 'crowdstrike.event.LocalPort', - type: 'long', - }, - 'crowdstrike.event.RemoteAddress': { - category: 'crowdstrike', - description: 'IP address of remote machine. ', - name: 'crowdstrike.event.RemoteAddress', - type: 'ip', - }, - 'crowdstrike.event.RemotePort': { - category: 'crowdstrike', - description: 'Port of remote machine. ', - name: 'crowdstrike.event.RemotePort', - type: 'long', - }, - 'crowdstrike.event.RuleAction': { - category: 'crowdstrike', - description: 'Firewall rule action. ', - name: 'crowdstrike.event.RuleAction', - type: 'keyword', - }, - 'crowdstrike.event.RuleDescription': { - category: 'crowdstrike', - description: 'Firewall rule description. ', - name: 'crowdstrike.event.RuleDescription', - type: 'keyword', - }, - 'crowdstrike.event.RuleFamilyID': { - category: 'crowdstrike', - description: 'Firewall rule family id. ', - name: 'crowdstrike.event.RuleFamilyID', - type: 'keyword', - }, - 'crowdstrike.event.RuleGroupName': { - category: 'crowdstrike', - description: 'Firewall rule group name. ', - name: 'crowdstrike.event.RuleGroupName', - type: 'keyword', - }, - 'crowdstrike.event.RuleName': { - category: 'crowdstrike', - description: 'Firewall rule name. ', - name: 'crowdstrike.event.RuleName', - type: 'keyword', - }, - 'crowdstrike.event.RuleId': { - category: 'crowdstrike', - description: 'Firewall rule id. ', - name: 'crowdstrike.event.RuleId', - type: 'keyword', - }, - 'crowdstrike.event.MatchCount': { - category: 'crowdstrike', - description: 'Number of firewall rule matches. ', - name: 'crowdstrike.event.MatchCount', - type: 'long', - }, - 'crowdstrike.event.MatchCountSinceLastReport': { - category: 'crowdstrike', - description: 'Number of firewall rule matches since the last report. ', - name: 'crowdstrike.event.MatchCountSinceLastReport', - type: 'long', - }, - 'crowdstrike.event.Timestamp': { - category: 'crowdstrike', - description: 'Firewall rule triggered timestamp. ', - name: 'crowdstrike.event.Timestamp', - type: 'date', - }, - 'crowdstrike.event.Flags.Audit': { - category: 'crowdstrike', - description: 'CrowdStrike audit flag. ', - name: 'crowdstrike.event.Flags.Audit', - type: 'boolean', - }, - 'crowdstrike.event.Flags.Log': { - category: 'crowdstrike', - description: 'CrowdStrike log flag. ', - name: 'crowdstrike.event.Flags.Log', - type: 'boolean', - }, - 'crowdstrike.event.Flags.Monitor': { - category: 'crowdstrike', - description: 'CrowdStrike monitor flag. ', - name: 'crowdstrike.event.Flags.Monitor', - type: 'boolean', - }, - 'crowdstrike.event.Protocol': { - category: 'crowdstrike', - description: 'CrowdStrike provided protocol. ', - name: 'crowdstrike.event.Protocol', - type: 'keyword', - }, - 'crowdstrike.event.NetworkProfile': { - category: 'crowdstrike', - description: 'CrowdStrike network profile. ', - name: 'crowdstrike.event.NetworkProfile', - type: 'keyword', - }, - 'crowdstrike.event.PolicyName': { - category: 'crowdstrike', - description: 'CrowdStrike policy name. ', - name: 'crowdstrike.event.PolicyName', - type: 'keyword', - }, - 'crowdstrike.event.PolicyID': { - category: 'crowdstrike', - description: 'CrowdStrike policy id. ', - name: 'crowdstrike.event.PolicyID', - type: 'keyword', - }, - 'crowdstrike.event.Status': { - category: 'crowdstrike', - description: 'CrowdStrike status. ', - name: 'crowdstrike.event.Status', - type: 'keyword', - }, - 'crowdstrike.event.TreeID': { - category: 'crowdstrike', - description: 'CrowdStrike tree id. ', - name: 'crowdstrike.event.TreeID', - type: 'keyword', - }, - 'crowdstrike.event.Commands': { - category: 'crowdstrike', - description: 'Commands run in a remote session. ', - name: 'crowdstrike.event.Commands', - type: 'keyword', - }, - 'cyberarkpas.audit.action': { - category: 'cyberarkpas', - description: 'A description of the audit record.', - name: 'cyberarkpas.audit.action', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.address': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.address', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.cpm_disabled': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.cpm_disabled', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.cpm_error_details': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.cpm_error_details', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.cpm_status': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.cpm_status', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.creation_method': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.creation_method', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.customer': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.customer', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.database': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.database', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.device_type': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.device_type', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.dual_account_status': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.dual_account_status', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.group_name': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.group_name', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.in_process': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.in_process', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.index': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.index', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.last_fail_date': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.last_fail_date', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.last_success_change': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.last_success_change', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.last_success_reconciliation': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.last_success_reconciliation', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.last_success_verification': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.last_success_verification', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.last_task': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.last_task', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.logon_domain': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.logon_domain', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.policy_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.policy_id', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.port': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.port', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.privcloud': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.privcloud', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.reset_immediately': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.reset_immediately', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.retries_count': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.retries_count', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.sequence_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.sequence_id', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.tags': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.tags', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.user_dn': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.user_dn', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.user_name': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.user_name', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.virtual_username': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.virtual_username', - type: 'keyword', - }, - 'cyberarkpas.audit.ca_properties.other': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.ca_properties.other', - type: 'flattened', - }, - 'cyberarkpas.audit.category': { - category: 'cyberarkpas', - description: 'The category name (for category-related operations).', - name: 'cyberarkpas.audit.category', - type: 'keyword', - }, - 'cyberarkpas.audit.desc': { - category: 'cyberarkpas', - description: 'A static value that displays a description of the audit codes.', - name: 'cyberarkpas.audit.desc', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.ad_process_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.ad_process_id', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.ad_process_name': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.ad_process_name', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.application_type': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.application_type', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.command': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.command', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.connection_component_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.connection_component_id', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.dst_host': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.dst_host', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.logon_account': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.logon_account', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.managed_account': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.managed_account', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.process_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.process_id', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.process_name': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.process_name', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.protocol': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.protocol', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.psmid': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.psmid', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.session_duration': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.session_duration', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.session_id': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.session_id', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.src_host': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.src_host', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.username': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.username', - type: 'keyword', - }, - 'cyberarkpas.audit.extra_details.other': { - category: 'cyberarkpas', - name: 'cyberarkpas.audit.extra_details.other', - type: 'flattened', - }, - 'cyberarkpas.audit.file': { - category: 'cyberarkpas', - description: 'The name of the target file.', - name: 'cyberarkpas.audit.file', - type: 'keyword', - }, - 'cyberarkpas.audit.gateway_station': { - category: 'cyberarkpas', - description: 'The IP of the web application machine (PVWA).', - name: 'cyberarkpas.audit.gateway_station', - type: 'ip', - }, - 'cyberarkpas.audit.hostname': { - category: 'cyberarkpas', - description: 'The hostname, in upper case.', - example: 'MY-COMPUTER', - name: 'cyberarkpas.audit.hostname', - type: 'keyword', - }, - 'cyberarkpas.audit.iso_timestamp': { - category: 'cyberarkpas', - description: 'The timestamp, in ISO Timestamp format (RFC 3339).', - example: '"2013-06-25T10:47:19.000Z"', - name: 'cyberarkpas.audit.iso_timestamp', - type: 'date', - }, - 'cyberarkpas.audit.issuer': { - category: 'cyberarkpas', - description: - 'The Vault user who wrote the audit. This is usually the user who performed the operation.', - name: 'cyberarkpas.audit.issuer', - type: 'keyword', - }, - 'cyberarkpas.audit.location': { - category: 'cyberarkpas', - description: 'The target Location (for Location operations).', - name: 'cyberarkpas.audit.location', - type: 'keyword', - }, - 'cyberarkpas.audit.message': { - category: 'cyberarkpas', - description: 'A description of the audit records (same information as in the Desc field).', - name: 'cyberarkpas.audit.message', - type: 'keyword', - }, - 'cyberarkpas.audit.message_id': { - category: 'cyberarkpas', - description: 'The code ID of the audit records.', - name: 'cyberarkpas.audit.message_id', - type: 'keyword', - }, - 'cyberarkpas.audit.product': { - category: 'cyberarkpas', - description: 'A static value that represents the product.', - name: 'cyberarkpas.audit.product', - type: 'keyword', - }, - 'cyberarkpas.audit.pvwa_details': { - category: 'cyberarkpas', - description: 'Specific details of the PVWA audit records.', - name: 'cyberarkpas.audit.pvwa_details', - type: 'flattened', - }, - 'cyberarkpas.audit.raw': { - category: 'cyberarkpas', - description: - 'Raw XML for the original audit record. Only present when XSLT file has debugging enabled. ', - name: 'cyberarkpas.audit.raw', - type: 'keyword', - }, - 'cyberarkpas.audit.reason': { - category: 'cyberarkpas', - description: 'The reason entered by the user.', - name: 'cyberarkpas.audit.reason', - type: 'text', - }, - 'cyberarkpas.audit.rfc5424': { - category: 'cyberarkpas', - description: 'Whether the syslog format complies with RFC5424.', - example: 'yes', - name: 'cyberarkpas.audit.rfc5424', - type: 'boolean', - }, - 'cyberarkpas.audit.safe': { - category: 'cyberarkpas', - description: 'The name of the target Safe.', - name: 'cyberarkpas.audit.safe', - type: 'keyword', - }, - 'cyberarkpas.audit.severity': { - category: 'cyberarkpas', - description: 'The severity of the audit records.', - name: 'cyberarkpas.audit.severity', - type: 'keyword', - }, - 'cyberarkpas.audit.source_user': { - category: 'cyberarkpas', - description: 'The name of the Vault user who performed the operation.', - name: 'cyberarkpas.audit.source_user', - type: 'keyword', - }, - 'cyberarkpas.audit.station': { - category: 'cyberarkpas', - description: - 'The IP from where the operation was performed. For PVWA sessions, this will be the real client machine IP.', - name: 'cyberarkpas.audit.station', - type: 'ip', - }, - 'cyberarkpas.audit.target_user': { - category: 'cyberarkpas', - description: 'The name of the Vault user on which the operation was performed.', - name: 'cyberarkpas.audit.target_user', - type: 'keyword', - }, - 'cyberarkpas.audit.timestamp': { - category: 'cyberarkpas', - description: 'The timestamp, in MMM DD HH:MM:SS format.', - example: 'Jun 25 10:47:19', - name: 'cyberarkpas.audit.timestamp', - type: 'keyword', - }, - 'cyberarkpas.audit.vendor': { - category: 'cyberarkpas', - description: 'A static value that represents the vendor.', - name: 'cyberarkpas.audit.vendor', - type: 'keyword', - }, - 'cyberarkpas.audit.version': { - category: 'cyberarkpas', - description: 'A static value that represents the version of the Vault.', - name: 'cyberarkpas.audit.version', - type: 'keyword', - }, - 'envoyproxy.log_type': { - category: 'envoyproxy', - description: 'Envoy log type, normally ACCESS ', - name: 'envoyproxy.log_type', - type: 'keyword', - }, - 'envoyproxy.response_flags': { - category: 'envoyproxy', - description: 'Response flags ', - name: 'envoyproxy.response_flags', - type: 'keyword', - }, - 'envoyproxy.upstream_service_time': { - category: 'envoyproxy', - description: 'Upstream service time in nanoseconds ', - name: 'envoyproxy.upstream_service_time', - type: 'long', - format: 'duration', - }, - 'envoyproxy.request_id': { - category: 'envoyproxy', - description: 'ID of the request ', - name: 'envoyproxy.request_id', - type: 'keyword', - }, - 'envoyproxy.authority': { - category: 'envoyproxy', - description: 'Envoy proxy authority field ', - name: 'envoyproxy.authority', - type: 'keyword', - }, - 'envoyproxy.proxy_type': { - category: 'envoyproxy', - description: 'Envoy proxy type, tcp or http ', - name: 'envoyproxy.proxy_type', - type: 'keyword', - }, - 'fortinet.file.hash.crc32': { - category: 'fortinet', - description: 'CRC32 Hash of file ', - name: 'fortinet.file.hash.crc32', - type: 'keyword', - }, - 'fortinet.firewall.acct_stat': { - category: 'fortinet', - description: 'Accounting state (RADIUS) ', - name: 'fortinet.firewall.acct_stat', - type: 'keyword', - }, - 'fortinet.firewall.acktime': { - category: 'fortinet', - description: 'Alarm Acknowledge Time ', - name: 'fortinet.firewall.acktime', - type: 'keyword', - }, - 'fortinet.firewall.act': { - category: 'fortinet', - description: 'Action ', - name: 'fortinet.firewall.act', - type: 'keyword', - }, - 'fortinet.firewall.action': { - category: 'fortinet', - description: 'Status of the session ', - name: 'fortinet.firewall.action', - type: 'keyword', - }, - 'fortinet.firewall.activity': { - category: 'fortinet', - description: 'HA activity message ', - name: 'fortinet.firewall.activity', - type: 'keyword', - }, - 'fortinet.firewall.addr': { - category: 'fortinet', - description: 'IP Address ', - name: 'fortinet.firewall.addr', - type: 'ip', - }, - 'fortinet.firewall.addr_type': { - category: 'fortinet', - description: 'Address Type ', - name: 'fortinet.firewall.addr_type', - type: 'keyword', - }, - 'fortinet.firewall.addrgrp': { - category: 'fortinet', - description: 'Address Group ', - name: 'fortinet.firewall.addrgrp', - type: 'keyword', - }, - 'fortinet.firewall.adgroup': { - category: 'fortinet', - description: 'AD Group Name ', - name: 'fortinet.firewall.adgroup', - type: 'keyword', - }, - 'fortinet.firewall.admin': { - category: 'fortinet', - description: 'Admin User ', - name: 'fortinet.firewall.admin', - type: 'keyword', - }, - 'fortinet.firewall.age': { - category: 'fortinet', - description: 'Time in seconds - time passed since last seen ', - name: 'fortinet.firewall.age', - type: 'integer', - }, - 'fortinet.firewall.agent': { - category: 'fortinet', - description: 'User agent - eg. agent="Mozilla/5.0" ', - name: 'fortinet.firewall.agent', - type: 'keyword', - }, - 'fortinet.firewall.alarmid': { - category: 'fortinet', - description: 'Alarm ID ', - name: 'fortinet.firewall.alarmid', - type: 'integer', - }, - 'fortinet.firewall.alert': { - category: 'fortinet', - description: 'Alert ', - name: 'fortinet.firewall.alert', - type: 'keyword', - }, - 'fortinet.firewall.analyticscksum': { - category: 'fortinet', - description: 'The checksum of the file submitted for analytics ', - name: 'fortinet.firewall.analyticscksum', - type: 'keyword', - }, - 'fortinet.firewall.analyticssubmit': { - category: 'fortinet', - description: 'The flag for analytics submission ', - name: 'fortinet.firewall.analyticssubmit', - type: 'keyword', - }, - 'fortinet.firewall.ap': { - category: 'fortinet', - description: 'Access Point ', - name: 'fortinet.firewall.ap', - type: 'keyword', - }, - 'fortinet.firewall.app-type': { - category: 'fortinet', - description: 'Address Type ', - name: 'fortinet.firewall.app-type', - type: 'keyword', - }, - 'fortinet.firewall.appact': { - category: 'fortinet', - description: 'The security action from app control ', - name: 'fortinet.firewall.appact', - type: 'keyword', - }, - 'fortinet.firewall.appid': { - category: 'fortinet', - description: 'Application ID ', - name: 'fortinet.firewall.appid', - type: 'integer', - }, - 'fortinet.firewall.applist': { - category: 'fortinet', - description: 'Application Control profile ', - name: 'fortinet.firewall.applist', - type: 'keyword', - }, - 'fortinet.firewall.apprisk': { - category: 'fortinet', - description: 'Application Risk Level ', - name: 'fortinet.firewall.apprisk', - type: 'keyword', - }, - 'fortinet.firewall.apscan': { - category: 'fortinet', - description: 'The name of the AP, which scanned and detected the rogue AP ', - name: 'fortinet.firewall.apscan', - type: 'keyword', - }, - 'fortinet.firewall.apsn': { - category: 'fortinet', - description: 'Access Point ', - name: 'fortinet.firewall.apsn', - type: 'keyword', - }, - 'fortinet.firewall.apstatus': { - category: 'fortinet', - description: 'Access Point status ', - name: 'fortinet.firewall.apstatus', - type: 'keyword', - }, - 'fortinet.firewall.aptype': { - category: 'fortinet', - description: 'Access Point type ', - name: 'fortinet.firewall.aptype', - type: 'keyword', - }, - 'fortinet.firewall.assigned': { - category: 'fortinet', - description: 'Assigned IP Address ', - name: 'fortinet.firewall.assigned', - type: 'ip', - }, - 'fortinet.firewall.assignip': { - category: 'fortinet', - description: 'Assigned IP Address ', - name: 'fortinet.firewall.assignip', - type: 'ip', - }, - 'fortinet.firewall.attachment': { - category: 'fortinet', - description: 'The flag for email attachement ', - name: 'fortinet.firewall.attachment', - type: 'keyword', - }, - 'fortinet.firewall.attack': { - category: 'fortinet', - description: 'Attack Name ', - name: 'fortinet.firewall.attack', - type: 'keyword', - }, - 'fortinet.firewall.attackcontext': { - category: 'fortinet', - description: 'The trigger patterns and the packetdata with base64 encoding ', - name: 'fortinet.firewall.attackcontext', - type: 'keyword', - }, - 'fortinet.firewall.attackcontextid': { - category: 'fortinet', - description: 'Attack context id / total ', - name: 'fortinet.firewall.attackcontextid', - type: 'keyword', - }, - 'fortinet.firewall.attackid': { - category: 'fortinet', - description: 'Attack ID ', - name: 'fortinet.firewall.attackid', - type: 'integer', - }, - 'fortinet.firewall.auditid': { - category: 'fortinet', - description: 'Audit ID ', - name: 'fortinet.firewall.auditid', - type: 'long', - }, - 'fortinet.firewall.auditscore': { - category: 'fortinet', - description: 'The Audit Score ', - name: 'fortinet.firewall.auditscore', - type: 'keyword', - }, - 'fortinet.firewall.audittime': { - category: 'fortinet', - description: 'The time of the audit ', - name: 'fortinet.firewall.audittime', - type: 'long', - }, - 'fortinet.firewall.authgrp': { - category: 'fortinet', - description: 'Authorization Group ', - name: 'fortinet.firewall.authgrp', - type: 'keyword', - }, - 'fortinet.firewall.authid': { - category: 'fortinet', - description: 'Authentication ID ', - name: 'fortinet.firewall.authid', - type: 'keyword', - }, - 'fortinet.firewall.authproto': { - category: 'fortinet', - description: 'The protocol that initiated the authentication ', - name: 'fortinet.firewall.authproto', - type: 'keyword', - }, - 'fortinet.firewall.authserver': { - category: 'fortinet', - description: 'Authentication server ', - name: 'fortinet.firewall.authserver', - type: 'keyword', - }, - 'fortinet.firewall.bandwidth': { - category: 'fortinet', - description: 'Bandwidth ', - name: 'fortinet.firewall.bandwidth', - type: 'keyword', - }, - 'fortinet.firewall.banned_rule': { - category: 'fortinet', - description: 'NAC quarantine Banned Rule Name ', - name: 'fortinet.firewall.banned_rule', - type: 'keyword', - }, - 'fortinet.firewall.banned_src': { - category: 'fortinet', - description: 'NAC quarantine Banned Source IP ', - name: 'fortinet.firewall.banned_src', - type: 'keyword', - }, - 'fortinet.firewall.banword': { - category: 'fortinet', - description: 'Banned word ', - name: 'fortinet.firewall.banword', - type: 'keyword', - }, - 'fortinet.firewall.botnetdomain': { - category: 'fortinet', - description: 'Botnet Domain Name ', - name: 'fortinet.firewall.botnetdomain', - type: 'keyword', - }, - 'fortinet.firewall.botnetip': { - category: 'fortinet', - description: 'Botnet IP Address ', - name: 'fortinet.firewall.botnetip', - type: 'ip', - }, - 'fortinet.firewall.bssid': { - category: 'fortinet', - description: 'Service Set ID ', - name: 'fortinet.firewall.bssid', - type: 'keyword', - }, - 'fortinet.firewall.call_id': { - category: 'fortinet', - description: 'Caller ID ', - name: 'fortinet.firewall.call_id', - type: 'keyword', - }, - 'fortinet.firewall.carrier_ep': { - category: 'fortinet', - description: 'The FortiOS Carrier end-point identification ', - name: 'fortinet.firewall.carrier_ep', - type: 'keyword', - }, - 'fortinet.firewall.cat': { - category: 'fortinet', - description: 'DNS category ID ', - name: 'fortinet.firewall.cat', - type: 'integer', - }, - 'fortinet.firewall.category': { - category: 'fortinet', - description: 'Authentication category ', - name: 'fortinet.firewall.category', - type: 'keyword', - }, - 'fortinet.firewall.cc': { - category: 'fortinet', - description: 'CC Email Address ', - name: 'fortinet.firewall.cc', - type: 'keyword', - }, - 'fortinet.firewall.cdrcontent': { - category: 'fortinet', - description: 'Cdrcontent ', - name: 'fortinet.firewall.cdrcontent', - type: 'keyword', - }, - 'fortinet.firewall.centralnatid': { - category: 'fortinet', - description: 'Central NAT ID ', - name: 'fortinet.firewall.centralnatid', - type: 'integer', - }, - 'fortinet.firewall.cert': { - category: 'fortinet', - description: 'Certificate ', - name: 'fortinet.firewall.cert', - type: 'keyword', - }, - 'fortinet.firewall.cert-type': { - category: 'fortinet', - description: 'Certificate type ', - name: 'fortinet.firewall.cert-type', - type: 'keyword', - }, - 'fortinet.firewall.certhash': { - category: 'fortinet', - description: 'Certificate hash ', - name: 'fortinet.firewall.certhash', - type: 'keyword', - }, - 'fortinet.firewall.cfgattr': { - category: 'fortinet', - description: 'Configuration attribute ', - name: 'fortinet.firewall.cfgattr', - type: 'keyword', - }, - 'fortinet.firewall.cfgobj': { - category: 'fortinet', - description: 'Configuration object ', - name: 'fortinet.firewall.cfgobj', - type: 'keyword', - }, - 'fortinet.firewall.cfgpath': { - category: 'fortinet', - description: 'Configuration path ', - name: 'fortinet.firewall.cfgpath', - type: 'keyword', - }, - 'fortinet.firewall.cfgtid': { - category: 'fortinet', - description: 'Configuration transaction ID ', - name: 'fortinet.firewall.cfgtid', - type: 'keyword', - }, - 'fortinet.firewall.cfgtxpower': { - category: 'fortinet', - description: 'Configuration TX power ', - name: 'fortinet.firewall.cfgtxpower', - type: 'integer', - }, - 'fortinet.firewall.channel': { - category: 'fortinet', - description: 'Wireless Channel ', - name: 'fortinet.firewall.channel', - type: 'integer', - }, - 'fortinet.firewall.channeltype': { - category: 'fortinet', - description: 'SSH channel type ', - name: 'fortinet.firewall.channeltype', - type: 'keyword', - }, - 'fortinet.firewall.chassisid': { - category: 'fortinet', - description: 'Chassis ID ', - name: 'fortinet.firewall.chassisid', - type: 'integer', - }, - 'fortinet.firewall.checksum': { - category: 'fortinet', - description: 'The checksum of the scanned file ', - name: 'fortinet.firewall.checksum', - type: 'keyword', - }, - 'fortinet.firewall.chgheaders': { - category: 'fortinet', - description: 'HTTP Headers ', - name: 'fortinet.firewall.chgheaders', - type: 'keyword', - }, - 'fortinet.firewall.cldobjid': { - category: 'fortinet', - description: 'Connector object ID ', - name: 'fortinet.firewall.cldobjid', - type: 'keyword', - }, - 'fortinet.firewall.client_addr': { - category: 'fortinet', - description: 'Wifi client address ', - name: 'fortinet.firewall.client_addr', - type: 'keyword', - }, - 'fortinet.firewall.cloudaction': { - category: 'fortinet', - description: 'Cloud Action ', - name: 'fortinet.firewall.cloudaction', - type: 'keyword', - }, - 'fortinet.firewall.clouduser': { - category: 'fortinet', - description: 'Cloud User ', - name: 'fortinet.firewall.clouduser', - type: 'keyword', - }, - 'fortinet.firewall.column': { - category: 'fortinet', - description: 'VOIP Column ', - name: 'fortinet.firewall.column', - type: 'integer', - }, - 'fortinet.firewall.command': { - category: 'fortinet', - description: 'CLI Command ', - name: 'fortinet.firewall.command', - type: 'keyword', - }, - 'fortinet.firewall.community': { - category: 'fortinet', - description: 'SNMP Community ', - name: 'fortinet.firewall.community', - type: 'keyword', - }, - 'fortinet.firewall.configcountry': { - category: 'fortinet', - description: 'Configuration country ', - name: 'fortinet.firewall.configcountry', - type: 'keyword', - }, - 'fortinet.firewall.connection_type': { - category: 'fortinet', - description: 'FortiClient Connection Type ', - name: 'fortinet.firewall.connection_type', - type: 'keyword', - }, - 'fortinet.firewall.conserve': { - category: 'fortinet', - description: 'Flag for conserve mode ', - name: 'fortinet.firewall.conserve', - type: 'keyword', - }, - 'fortinet.firewall.constraint': { - category: 'fortinet', - description: 'WAF http protocol restrictions ', - name: 'fortinet.firewall.constraint', - type: 'keyword', - }, - 'fortinet.firewall.contentdisarmed': { - category: 'fortinet', - description: 'Email scanned content ', - name: 'fortinet.firewall.contentdisarmed', - type: 'keyword', - }, - 'fortinet.firewall.contenttype': { - category: 'fortinet', - description: 'Content Type from HTTP header ', - name: 'fortinet.firewall.contenttype', - type: 'keyword', - }, - 'fortinet.firewall.cookies': { - category: 'fortinet', - description: 'VPN Cookie ', - name: 'fortinet.firewall.cookies', - type: 'keyword', - }, - 'fortinet.firewall.count': { - category: 'fortinet', - description: 'Counts of action type ', - name: 'fortinet.firewall.count', - type: 'integer', - }, - 'fortinet.firewall.countapp': { - category: 'fortinet', - description: 'Number of App Ctrl logs associated with the session ', - name: 'fortinet.firewall.countapp', - type: 'integer', - }, - 'fortinet.firewall.countav': { - category: 'fortinet', - description: 'Number of AV logs associated with the session ', - name: 'fortinet.firewall.countav', - type: 'integer', - }, - 'fortinet.firewall.countcifs': { - category: 'fortinet', - description: 'Number of CIFS logs associated with the session ', - name: 'fortinet.firewall.countcifs', - type: 'integer', - }, - 'fortinet.firewall.countdlp': { - category: 'fortinet', - description: 'Number of DLP logs associated with the session ', - name: 'fortinet.firewall.countdlp', - type: 'integer', - }, - 'fortinet.firewall.countdns': { - category: 'fortinet', - description: 'Number of DNS logs associated with the session ', - name: 'fortinet.firewall.countdns', - type: 'integer', - }, - 'fortinet.firewall.countemail': { - category: 'fortinet', - description: 'Number of email logs associated with the session ', - name: 'fortinet.firewall.countemail', - type: 'integer', - }, - 'fortinet.firewall.countff': { - category: 'fortinet', - description: 'Number of ff logs associated with the session ', - name: 'fortinet.firewall.countff', - type: 'integer', - }, - 'fortinet.firewall.countips': { - category: 'fortinet', - description: 'Number of IPS logs associated with the session ', - name: 'fortinet.firewall.countips', - type: 'integer', - }, - 'fortinet.firewall.countssh': { - category: 'fortinet', - description: 'Number of SSH logs associated with the session ', - name: 'fortinet.firewall.countssh', - type: 'integer', - }, - 'fortinet.firewall.countssl': { - category: 'fortinet', - description: 'Number of SSL logs associated with the session ', - name: 'fortinet.firewall.countssl', - type: 'integer', - }, - 'fortinet.firewall.countwaf': { - category: 'fortinet', - description: 'Number of WAF logs associated with the session ', - name: 'fortinet.firewall.countwaf', - type: 'integer', - }, - 'fortinet.firewall.countweb': { - category: 'fortinet', - description: 'Number of Web filter logs associated with the session ', - name: 'fortinet.firewall.countweb', - type: 'integer', - }, - 'fortinet.firewall.cpu': { - category: 'fortinet', - description: 'CPU Usage ', - name: 'fortinet.firewall.cpu', - type: 'integer', - }, - 'fortinet.firewall.craction': { - category: 'fortinet', - description: 'Client Reputation Action ', - name: 'fortinet.firewall.craction', - type: 'integer', - }, - 'fortinet.firewall.criticalcount': { - category: 'fortinet', - description: 'Number of critical ratings ', - name: 'fortinet.firewall.criticalcount', - type: 'integer', - }, - 'fortinet.firewall.crl': { - category: 'fortinet', - description: 'Client Reputation Level ', - name: 'fortinet.firewall.crl', - type: 'keyword', - }, - 'fortinet.firewall.crlevel': { - category: 'fortinet', - description: 'Client Reputation Level ', - name: 'fortinet.firewall.crlevel', - type: 'keyword', - }, - 'fortinet.firewall.crscore': { - category: 'fortinet', - description: 'Some description ', - name: 'fortinet.firewall.crscore', - type: 'integer', - }, - 'fortinet.firewall.cveid': { - category: 'fortinet', - description: 'CVE ID ', - name: 'fortinet.firewall.cveid', - type: 'keyword', - }, - 'fortinet.firewall.daemon': { - category: 'fortinet', - description: 'Daemon name ', - name: 'fortinet.firewall.daemon', - type: 'keyword', - }, - 'fortinet.firewall.datarange': { - category: 'fortinet', - description: 'Data range for reports ', - name: 'fortinet.firewall.datarange', - type: 'keyword', - }, - 'fortinet.firewall.date': { - category: 'fortinet', - description: 'Date ', - name: 'fortinet.firewall.date', - type: 'keyword', - }, - 'fortinet.firewall.ddnsserver': { - category: 'fortinet', - description: 'DDNS server ', - name: 'fortinet.firewall.ddnsserver', - type: 'ip', - }, - 'fortinet.firewall.desc': { - category: 'fortinet', - description: 'Description ', - name: 'fortinet.firewall.desc', - type: 'keyword', - }, - 'fortinet.firewall.detectionmethod': { - category: 'fortinet', - description: 'Detection method ', - name: 'fortinet.firewall.detectionmethod', - type: 'keyword', - }, - 'fortinet.firewall.devcategory': { - category: 'fortinet', - description: 'Device category ', - name: 'fortinet.firewall.devcategory', - type: 'keyword', - }, - 'fortinet.firewall.devintfname': { - category: 'fortinet', - description: 'HA device Interface Name ', - name: 'fortinet.firewall.devintfname', - type: 'keyword', - }, - 'fortinet.firewall.devtype': { - category: 'fortinet', - description: 'Device type ', - name: 'fortinet.firewall.devtype', - type: 'keyword', - }, - 'fortinet.firewall.dhcp_msg': { - category: 'fortinet', - description: 'DHCP Message ', - name: 'fortinet.firewall.dhcp_msg', - type: 'keyword', - }, - 'fortinet.firewall.dintf': { - category: 'fortinet', - description: 'Destination interface ', - name: 'fortinet.firewall.dintf', - type: 'keyword', - }, - 'fortinet.firewall.disk': { - category: 'fortinet', - description: 'Assosciated disk ', - name: 'fortinet.firewall.disk', - type: 'keyword', - }, - 'fortinet.firewall.disklograte': { - category: 'fortinet', - description: 'Disk logging rate ', - name: 'fortinet.firewall.disklograte', - type: 'long', - }, - 'fortinet.firewall.dlpextra': { - category: 'fortinet', - description: 'DLP extra information ', - name: 'fortinet.firewall.dlpextra', - type: 'keyword', - }, - 'fortinet.firewall.docsource': { - category: 'fortinet', - description: 'DLP fingerprint document source ', - name: 'fortinet.firewall.docsource', - type: 'keyword', - }, - 'fortinet.firewall.domainctrlauthstate': { - category: 'fortinet', - description: 'CIFS domain auth state ', - name: 'fortinet.firewall.domainctrlauthstate', - type: 'integer', - }, - 'fortinet.firewall.domainctrlauthtype': { - category: 'fortinet', - description: 'CIFS domain auth type ', - name: 'fortinet.firewall.domainctrlauthtype', - type: 'integer', - }, - 'fortinet.firewall.domainctrldomain': { - category: 'fortinet', - description: 'CIFS domain auth domain ', - name: 'fortinet.firewall.domainctrldomain', - type: 'keyword', - }, - 'fortinet.firewall.domainctrlip': { - category: 'fortinet', - description: 'CIFS Domain IP ', - name: 'fortinet.firewall.domainctrlip', - type: 'ip', - }, - 'fortinet.firewall.domainctrlname': { - category: 'fortinet', - description: 'CIFS Domain name ', - name: 'fortinet.firewall.domainctrlname', - type: 'keyword', - }, - 'fortinet.firewall.domainctrlprotocoltype': { - category: 'fortinet', - description: 'CIFS Domain connection protocol ', - name: 'fortinet.firewall.domainctrlprotocoltype', - type: 'integer', - }, - 'fortinet.firewall.domainctrlusername': { - category: 'fortinet', - description: 'CIFS Domain username ', - name: 'fortinet.firewall.domainctrlusername', - type: 'keyword', - }, - 'fortinet.firewall.domainfilteridx': { - category: 'fortinet', - description: 'Domain filter ID ', - name: 'fortinet.firewall.domainfilteridx', - type: 'integer', - }, - 'fortinet.firewall.domainfilterlist': { - category: 'fortinet', - description: 'Domain filter name ', - name: 'fortinet.firewall.domainfilterlist', - type: 'keyword', - }, - 'fortinet.firewall.ds': { - category: 'fortinet', - description: 'Direction with distribution system ', - name: 'fortinet.firewall.ds', - type: 'keyword', - }, - 'fortinet.firewall.dst_int': { - category: 'fortinet', - description: 'Destination interface ', - name: 'fortinet.firewall.dst_int', - type: 'keyword', - }, - 'fortinet.firewall.dstintfrole': { - category: 'fortinet', - description: 'Destination interface role ', - name: 'fortinet.firewall.dstintfrole', - type: 'keyword', - }, - 'fortinet.firewall.dstcountry': { - category: 'fortinet', - description: 'Destination country ', - name: 'fortinet.firewall.dstcountry', - type: 'keyword', - }, - 'fortinet.firewall.dstdevcategory': { - category: 'fortinet', - description: 'Destination device category ', - name: 'fortinet.firewall.dstdevcategory', - type: 'keyword', - }, - 'fortinet.firewall.dstdevtype': { - category: 'fortinet', - description: 'Destination device type ', - name: 'fortinet.firewall.dstdevtype', - type: 'keyword', - }, - 'fortinet.firewall.dstfamily': { - category: 'fortinet', - description: 'Destination OS family ', - name: 'fortinet.firewall.dstfamily', - type: 'keyword', - }, - 'fortinet.firewall.dsthwvendor': { - category: 'fortinet', - description: 'Destination HW vendor ', - name: 'fortinet.firewall.dsthwvendor', - type: 'keyword', - }, - 'fortinet.firewall.dsthwversion': { - category: 'fortinet', - description: 'Destination HW version ', - name: 'fortinet.firewall.dsthwversion', - type: 'keyword', - }, - 'fortinet.firewall.dstinetsvc': { - category: 'fortinet', - description: 'Destination interface service ', - name: 'fortinet.firewall.dstinetsvc', - type: 'keyword', - }, - 'fortinet.firewall.dstosname': { - category: 'fortinet', - description: 'Destination OS name ', - name: 'fortinet.firewall.dstosname', - type: 'keyword', - }, - 'fortinet.firewall.dstosversion': { - category: 'fortinet', - description: 'Destination OS version ', - name: 'fortinet.firewall.dstosversion', - type: 'keyword', - }, - 'fortinet.firewall.dstserver': { - category: 'fortinet', - description: 'Destination server ', - name: 'fortinet.firewall.dstserver', - type: 'integer', - }, - 'fortinet.firewall.dstssid': { - category: 'fortinet', - description: 'Destination SSID ', - name: 'fortinet.firewall.dstssid', - type: 'keyword', - }, - 'fortinet.firewall.dstswversion': { - category: 'fortinet', - description: 'Destination software version ', - name: 'fortinet.firewall.dstswversion', - type: 'keyword', - }, - 'fortinet.firewall.dstunauthusersource': { - category: 'fortinet', - description: 'Destination unauthenticated source ', - name: 'fortinet.firewall.dstunauthusersource', - type: 'keyword', - }, - 'fortinet.firewall.dstuuid': { - category: 'fortinet', - description: 'UUID of the Destination IP address ', - name: 'fortinet.firewall.dstuuid', - type: 'keyword', - }, - 'fortinet.firewall.duid': { - category: 'fortinet', - description: 'DHCP UID ', - name: 'fortinet.firewall.duid', - type: 'keyword', - }, - 'fortinet.firewall.eapolcnt': { - category: 'fortinet', - description: 'EAPOL packet count ', - name: 'fortinet.firewall.eapolcnt', - type: 'integer', - }, - 'fortinet.firewall.eapoltype': { - category: 'fortinet', - description: 'EAPOL packet type ', - name: 'fortinet.firewall.eapoltype', - type: 'keyword', - }, - 'fortinet.firewall.encrypt': { - category: 'fortinet', - description: 'Whether the packet is encrypted or not ', - name: 'fortinet.firewall.encrypt', - type: 'integer', - }, - 'fortinet.firewall.encryption': { - category: 'fortinet', - description: 'Encryption method ', - name: 'fortinet.firewall.encryption', - type: 'keyword', - }, - 'fortinet.firewall.epoch': { - category: 'fortinet', - description: 'Epoch used for locating file ', - name: 'fortinet.firewall.epoch', - type: 'integer', - }, - 'fortinet.firewall.espauth': { - category: 'fortinet', - description: 'ESP Authentication ', - name: 'fortinet.firewall.espauth', - type: 'keyword', - }, - 'fortinet.firewall.esptransform': { - category: 'fortinet', - description: 'ESP Transform ', - name: 'fortinet.firewall.esptransform', - type: 'keyword', - }, - 'fortinet.firewall.eventtype': { - category: 'fortinet', - description: 'UTM Event Type ', - name: 'fortinet.firewall.eventtype', - type: 'keyword', - }, - 'fortinet.firewall.exch': { - category: 'fortinet', - description: 'Mail Exchanges from DNS response answer section ', - name: 'fortinet.firewall.exch', - type: 'keyword', - }, - 'fortinet.firewall.exchange': { - category: 'fortinet', - description: 'Mail Exchanges from DNS response answer section ', - name: 'fortinet.firewall.exchange', - type: 'keyword', - }, - 'fortinet.firewall.expectedsignature': { - category: 'fortinet', - description: 'Expected SSL signature ', - name: 'fortinet.firewall.expectedsignature', - type: 'keyword', - }, - 'fortinet.firewall.expiry': { - category: 'fortinet', - description: 'FortiGuard override expiry timestamp ', - name: 'fortinet.firewall.expiry', - type: 'keyword', - }, - 'fortinet.firewall.fams_pause': { - category: 'fortinet', - description: 'Fortinet Analysis and Management Service Pause ', - name: 'fortinet.firewall.fams_pause', - type: 'integer', - }, - 'fortinet.firewall.fazlograte': { - category: 'fortinet', - description: 'FortiAnalyzer Logging Rate ', - name: 'fortinet.firewall.fazlograte', - type: 'long', - }, - 'fortinet.firewall.fctemssn': { - category: 'fortinet', - description: 'FortiClient Endpoint SSN ', - name: 'fortinet.firewall.fctemssn', - type: 'keyword', - }, - 'fortinet.firewall.fctuid': { - category: 'fortinet', - description: 'FortiClient UID ', - name: 'fortinet.firewall.fctuid', - type: 'keyword', - }, - 'fortinet.firewall.field': { - category: 'fortinet', - description: 'NTP status field ', - name: 'fortinet.firewall.field', - type: 'keyword', - }, - 'fortinet.firewall.filefilter': { - category: 'fortinet', - description: 'The filter used to identify the affected file ', - name: 'fortinet.firewall.filefilter', - type: 'keyword', - }, - 'fortinet.firewall.filehashsrc': { - category: 'fortinet', - description: 'Filehash source ', - name: 'fortinet.firewall.filehashsrc', - type: 'keyword', - }, - 'fortinet.firewall.filtercat': { - category: 'fortinet', - description: 'DLP filter category ', - name: 'fortinet.firewall.filtercat', - type: 'keyword', - }, - 'fortinet.firewall.filteridx': { - category: 'fortinet', - description: 'DLP filter ID ', - name: 'fortinet.firewall.filteridx', - type: 'integer', - }, - 'fortinet.firewall.filtername': { - category: 'fortinet', - description: 'DLP rule name ', - name: 'fortinet.firewall.filtername', - type: 'keyword', - }, - 'fortinet.firewall.filtertype': { - category: 'fortinet', - description: 'DLP filter type ', - name: 'fortinet.firewall.filtertype', - type: 'keyword', - }, - 'fortinet.firewall.fortiguardresp': { - category: 'fortinet', - description: 'Antispam ESP value ', - name: 'fortinet.firewall.fortiguardresp', - type: 'keyword', - }, - 'fortinet.firewall.forwardedfor': { - category: 'fortinet', - description: 'Email address forwarded ', - name: 'fortinet.firewall.forwardedfor', - type: 'keyword', - }, - 'fortinet.firewall.fqdn': { - category: 'fortinet', - description: 'FQDN ', - name: 'fortinet.firewall.fqdn', - type: 'keyword', - }, - 'fortinet.firewall.frametype': { - category: 'fortinet', - description: 'Wireless frametype ', - name: 'fortinet.firewall.frametype', - type: 'keyword', - }, - 'fortinet.firewall.freediskstorage': { - category: 'fortinet', - description: 'Free disk integer ', - name: 'fortinet.firewall.freediskstorage', - type: 'integer', - }, - 'fortinet.firewall.from': { - category: 'fortinet', - description: 'From email address ', - name: 'fortinet.firewall.from', - type: 'keyword', - }, - 'fortinet.firewall.from_vcluster': { - category: 'fortinet', - description: 'Source virtual cluster number ', - name: 'fortinet.firewall.from_vcluster', - type: 'integer', - }, - 'fortinet.firewall.fsaverdict': { - category: 'fortinet', - description: 'FSA verdict ', - name: 'fortinet.firewall.fsaverdict', - type: 'keyword', - }, - 'fortinet.firewall.fwserver_name': { - category: 'fortinet', - description: 'Web proxy server name ', - name: 'fortinet.firewall.fwserver_name', - type: 'keyword', - }, - 'fortinet.firewall.gateway': { - category: 'fortinet', - description: 'Gateway ip address for PPPoE status report ', - name: 'fortinet.firewall.gateway', - type: 'ip', - }, - 'fortinet.firewall.green': { - category: 'fortinet', - description: 'Memory status ', - name: 'fortinet.firewall.green', - type: 'keyword', - }, - 'fortinet.firewall.groupid': { - category: 'fortinet', - description: 'User Group ID ', - name: 'fortinet.firewall.groupid', - type: 'integer', - }, - 'fortinet.firewall.ha-prio': { - category: 'fortinet', - description: 'HA Priority ', - name: 'fortinet.firewall.ha-prio', - type: 'integer', - }, - 'fortinet.firewall.ha_group': { - category: 'fortinet', - description: 'HA Group ', - name: 'fortinet.firewall.ha_group', - type: 'keyword', - }, - 'fortinet.firewall.ha_role': { - category: 'fortinet', - description: 'HA Role ', - name: 'fortinet.firewall.ha_role', - type: 'keyword', - }, - 'fortinet.firewall.handshake': { - category: 'fortinet', - description: 'SSL Handshake ', - name: 'fortinet.firewall.handshake', - type: 'keyword', - }, - 'fortinet.firewall.hash': { - category: 'fortinet', - description: 'Hash value of downloaded file ', - name: 'fortinet.firewall.hash', - type: 'keyword', - }, - 'fortinet.firewall.hbdn_reason': { - category: 'fortinet', - description: 'Heartbeat down reason ', - name: 'fortinet.firewall.hbdn_reason', - type: 'keyword', - }, - 'fortinet.firewall.highcount': { - category: 'fortinet', - description: 'Highcount fabric summary ', - name: 'fortinet.firewall.highcount', - type: 'integer', - }, - 'fortinet.firewall.host': { - category: 'fortinet', - description: 'Hostname ', - name: 'fortinet.firewall.host', - type: 'keyword', - }, - 'fortinet.firewall.iaid': { - category: 'fortinet', - description: 'DHCPv6 id ', - name: 'fortinet.firewall.iaid', - type: 'keyword', - }, - 'fortinet.firewall.icmpcode': { - category: 'fortinet', - description: 'Destination Port of the ICMP message ', - name: 'fortinet.firewall.icmpcode', - type: 'keyword', - }, - 'fortinet.firewall.icmpid': { - category: 'fortinet', - description: 'Source port of the ICMP message ', - name: 'fortinet.firewall.icmpid', - type: 'keyword', - }, - 'fortinet.firewall.icmptype': { - category: 'fortinet', - description: 'The type of ICMP message ', - name: 'fortinet.firewall.icmptype', - type: 'keyword', - }, - 'fortinet.firewall.identifier': { - category: 'fortinet', - description: 'Network traffic identifier ', - name: 'fortinet.firewall.identifier', - type: 'integer', - }, - 'fortinet.firewall.in_spi': { - category: 'fortinet', - description: 'IPSEC inbound SPI ', - name: 'fortinet.firewall.in_spi', - type: 'keyword', - }, - 'fortinet.firewall.incidentserialno': { - category: 'fortinet', - description: 'Incident serial number ', - name: 'fortinet.firewall.incidentserialno', - type: 'integer', - }, - 'fortinet.firewall.infected': { - category: 'fortinet', - description: 'Infected MMS ', - name: 'fortinet.firewall.infected', - type: 'integer', - }, - 'fortinet.firewall.infectedfilelevel': { - category: 'fortinet', - description: 'DLP infected file level ', - name: 'fortinet.firewall.infectedfilelevel', - type: 'integer', - }, - 'fortinet.firewall.informationsource': { - category: 'fortinet', - description: 'Information source ', - name: 'fortinet.firewall.informationsource', - type: 'keyword', - }, - 'fortinet.firewall.init': { - category: 'fortinet', - description: 'IPSEC init stage ', - name: 'fortinet.firewall.init', - type: 'keyword', - }, - 'fortinet.firewall.initiator': { - category: 'fortinet', - description: 'Original login user name for Fortiguard override ', - name: 'fortinet.firewall.initiator', - type: 'keyword', - }, - 'fortinet.firewall.interface': { - category: 'fortinet', - description: 'Related interface ', - name: 'fortinet.firewall.interface', - type: 'keyword', - }, - 'fortinet.firewall.intf': { - category: 'fortinet', - description: 'Related interface ', - name: 'fortinet.firewall.intf', - type: 'keyword', - }, - 'fortinet.firewall.invalidmac': { - category: 'fortinet', - description: 'The MAC address with invalid OUI ', - name: 'fortinet.firewall.invalidmac', - type: 'keyword', - }, - 'fortinet.firewall.ip': { - category: 'fortinet', - description: 'Related IP ', - name: 'fortinet.firewall.ip', - type: 'ip', - }, - 'fortinet.firewall.iptype': { - category: 'fortinet', - description: 'Related IP type ', - name: 'fortinet.firewall.iptype', - type: 'keyword', - }, - 'fortinet.firewall.keyword': { - category: 'fortinet', - description: 'Keyword used for search ', - name: 'fortinet.firewall.keyword', - type: 'keyword', - }, - 'fortinet.firewall.kind': { - category: 'fortinet', - description: 'VOIP kind ', - name: 'fortinet.firewall.kind', - type: 'keyword', - }, - 'fortinet.firewall.lanin': { - category: 'fortinet', - description: 'LAN incoming traffic in bytes ', - name: 'fortinet.firewall.lanin', - type: 'long', - }, - 'fortinet.firewall.lanout': { - category: 'fortinet', - description: 'LAN outbound traffic in bytes ', - name: 'fortinet.firewall.lanout', - type: 'long', - }, - 'fortinet.firewall.lease': { - category: 'fortinet', - description: 'DHCP lease ', - name: 'fortinet.firewall.lease', - type: 'integer', - }, - 'fortinet.firewall.license_limit': { - category: 'fortinet', - description: 'Maximum Number of FortiClients for the License ', - name: 'fortinet.firewall.license_limit', - type: 'keyword', - }, - 'fortinet.firewall.limit': { - category: 'fortinet', - description: 'Virtual Domain Resource Limit ', - name: 'fortinet.firewall.limit', - type: 'integer', - }, - 'fortinet.firewall.line': { - category: 'fortinet', - description: 'VOIP line ', - name: 'fortinet.firewall.line', - type: 'keyword', - }, - 'fortinet.firewall.live': { - category: 'fortinet', - description: 'Time in seconds ', - name: 'fortinet.firewall.live', - type: 'integer', - }, - 'fortinet.firewall.local': { - category: 'fortinet', - description: 'Local IP for a PPPD Connection ', - name: 'fortinet.firewall.local', - type: 'ip', - }, - 'fortinet.firewall.log': { - category: 'fortinet', - description: 'Log message ', - name: 'fortinet.firewall.log', - type: 'keyword', - }, - 'fortinet.firewall.login': { - category: 'fortinet', - description: 'SSH login ', - name: 'fortinet.firewall.login', - type: 'keyword', - }, - 'fortinet.firewall.lowcount': { - category: 'fortinet', - description: 'Fabric lowcount ', - name: 'fortinet.firewall.lowcount', - type: 'integer', - }, - 'fortinet.firewall.mac': { - category: 'fortinet', - description: 'DHCP mac address ', - name: 'fortinet.firewall.mac', - type: 'keyword', - }, - 'fortinet.firewall.malform_data': { - category: 'fortinet', - description: 'VOIP malformed data ', - name: 'fortinet.firewall.malform_data', - type: 'integer', - }, - 'fortinet.firewall.malform_desc': { - category: 'fortinet', - description: 'VOIP malformed data description ', - name: 'fortinet.firewall.malform_desc', - type: 'keyword', - }, - 'fortinet.firewall.manuf': { - category: 'fortinet', - description: 'Manufacturer name ', - name: 'fortinet.firewall.manuf', - type: 'keyword', - }, - 'fortinet.firewall.masterdstmac': { - category: 'fortinet', - description: 'Master mac address for a host with multiple network interfaces ', - name: 'fortinet.firewall.masterdstmac', - type: 'keyword', - }, - 'fortinet.firewall.mastersrcmac': { - category: 'fortinet', - description: 'The master MAC address for a host that has multiple network interfaces ', - name: 'fortinet.firewall.mastersrcmac', - type: 'keyword', - }, - 'fortinet.firewall.mediumcount': { - category: 'fortinet', - description: 'Fabric medium count ', - name: 'fortinet.firewall.mediumcount', - type: 'integer', - }, - 'fortinet.firewall.mem': { - category: 'fortinet', - description: 'Memory usage system statistics ', - name: 'fortinet.firewall.mem', - type: 'integer', - }, - 'fortinet.firewall.meshmode': { - category: 'fortinet', - description: 'Wireless mesh mode ', - name: 'fortinet.firewall.meshmode', - type: 'keyword', - }, - 'fortinet.firewall.message_type': { - category: 'fortinet', - description: 'VOIP message type ', - name: 'fortinet.firewall.message_type', - type: 'keyword', - }, - 'fortinet.firewall.method': { - category: 'fortinet', - description: 'HTTP method ', - name: 'fortinet.firewall.method', - type: 'keyword', - }, - 'fortinet.firewall.mgmtcnt': { - category: 'fortinet', - description: 'The number of unauthorized client flooding managemet frames ', - name: 'fortinet.firewall.mgmtcnt', - type: 'integer', - }, - 'fortinet.firewall.mode': { - category: 'fortinet', - description: 'IPSEC mode ', - name: 'fortinet.firewall.mode', - type: 'keyword', - }, - 'fortinet.firewall.module': { - category: 'fortinet', - description: 'PCI-DSS module ', - name: 'fortinet.firewall.module', - type: 'keyword', - }, - 'fortinet.firewall.monitor-name': { - category: 'fortinet', - description: 'Health Monitor Name ', - name: 'fortinet.firewall.monitor-name', - type: 'keyword', - }, - 'fortinet.firewall.monitor-type': { - category: 'fortinet', - description: 'Health Monitor Type ', - name: 'fortinet.firewall.monitor-type', - type: 'keyword', - }, - 'fortinet.firewall.mpsk': { - category: 'fortinet', - description: 'Wireless MPSK ', - name: 'fortinet.firewall.mpsk', - type: 'keyword', - }, - 'fortinet.firewall.msgproto': { - category: 'fortinet', - description: 'Message Protocol Number ', - name: 'fortinet.firewall.msgproto', - type: 'keyword', - }, - 'fortinet.firewall.mtu': { - category: 'fortinet', - description: 'Max Transmission Unit Value ', - name: 'fortinet.firewall.mtu', - type: 'integer', - }, - 'fortinet.firewall.name': { - category: 'fortinet', - description: 'Name ', - name: 'fortinet.firewall.name', - type: 'keyword', - }, - 'fortinet.firewall.nat': { - category: 'fortinet', - description: 'NAT IP Address ', - name: 'fortinet.firewall.nat', - type: 'keyword', - }, - 'fortinet.firewall.netid': { - category: 'fortinet', - description: 'Connector NetID ', - name: 'fortinet.firewall.netid', - type: 'keyword', - }, - 'fortinet.firewall.new_status': { - category: 'fortinet', - description: 'New status on user change ', - name: 'fortinet.firewall.new_status', - type: 'keyword', - }, - 'fortinet.firewall.new_value': { - category: 'fortinet', - description: 'New Virtual Domain Name ', - name: 'fortinet.firewall.new_value', - type: 'keyword', - }, - 'fortinet.firewall.newchannel': { - category: 'fortinet', - description: 'New Channel Number ', - name: 'fortinet.firewall.newchannel', - type: 'integer', - }, - 'fortinet.firewall.newchassisid': { - category: 'fortinet', - description: 'New Chassis ID ', - name: 'fortinet.firewall.newchassisid', - type: 'integer', - }, - 'fortinet.firewall.newslot': { - category: 'fortinet', - description: 'New Slot Number ', - name: 'fortinet.firewall.newslot', - type: 'integer', - }, - 'fortinet.firewall.nextstat': { - category: 'fortinet', - description: 'Time interval in seconds for the next statistics. ', - name: 'fortinet.firewall.nextstat', - type: 'integer', - }, - 'fortinet.firewall.nf_type': { - category: 'fortinet', - description: 'Notification Type ', - name: 'fortinet.firewall.nf_type', - type: 'keyword', - }, - 'fortinet.firewall.noise': { - category: 'fortinet', - description: 'Wifi Noise ', - name: 'fortinet.firewall.noise', - type: 'integer', - }, - 'fortinet.firewall.old_status': { - category: 'fortinet', - description: 'Original Status ', - name: 'fortinet.firewall.old_status', - type: 'keyword', - }, - 'fortinet.firewall.old_value': { - category: 'fortinet', - description: 'Original Virtual Domain name ', - name: 'fortinet.firewall.old_value', - type: 'keyword', - }, - 'fortinet.firewall.oldchannel': { - category: 'fortinet', - description: 'Original channel ', - name: 'fortinet.firewall.oldchannel', - type: 'integer', - }, - 'fortinet.firewall.oldchassisid': { - category: 'fortinet', - description: 'Original Chassis Number ', - name: 'fortinet.firewall.oldchassisid', - type: 'integer', - }, - 'fortinet.firewall.oldslot': { - category: 'fortinet', - description: 'Original Slot Number ', - name: 'fortinet.firewall.oldslot', - type: 'integer', - }, - 'fortinet.firewall.oldsn': { - category: 'fortinet', - description: 'Old Serial number ', - name: 'fortinet.firewall.oldsn', - type: 'keyword', - }, - 'fortinet.firewall.oldwprof': { - category: 'fortinet', - description: 'Old Web Filter Profile ', - name: 'fortinet.firewall.oldwprof', - type: 'keyword', - }, - 'fortinet.firewall.onwire': { - category: 'fortinet', - description: 'A flag to indicate if the AP is onwire or not ', - name: 'fortinet.firewall.onwire', - type: 'keyword', - }, - 'fortinet.firewall.opercountry': { - category: 'fortinet', - description: 'Operating Country ', - name: 'fortinet.firewall.opercountry', - type: 'keyword', - }, - 'fortinet.firewall.opertxpower': { - category: 'fortinet', - description: 'Operating TX power ', - name: 'fortinet.firewall.opertxpower', - type: 'integer', - }, - 'fortinet.firewall.osname': { - category: 'fortinet', - description: 'Operating System name ', - name: 'fortinet.firewall.osname', - type: 'keyword', - }, - 'fortinet.firewall.osversion': { - category: 'fortinet', - description: 'Operating System version ', - name: 'fortinet.firewall.osversion', - type: 'keyword', - }, - 'fortinet.firewall.out_spi': { - category: 'fortinet', - description: 'Out SPI ', - name: 'fortinet.firewall.out_spi', - type: 'keyword', - }, - 'fortinet.firewall.outintf': { - category: 'fortinet', - description: 'Out interface ', - name: 'fortinet.firewall.outintf', - type: 'keyword', - }, - 'fortinet.firewall.passedcount': { - category: 'fortinet', - description: 'Fabric passed count ', - name: 'fortinet.firewall.passedcount', - type: 'integer', - }, - 'fortinet.firewall.passwd': { - category: 'fortinet', - description: 'Changed user password information ', - name: 'fortinet.firewall.passwd', - type: 'keyword', - }, - 'fortinet.firewall.path': { - category: 'fortinet', - description: 'Path of looped configuration for security fabric ', - name: 'fortinet.firewall.path', - type: 'keyword', - }, - 'fortinet.firewall.peer': { - category: 'fortinet', - description: 'WAN optimization peer ', - name: 'fortinet.firewall.peer', - type: 'keyword', - }, - 'fortinet.firewall.peer_notif': { - category: 'fortinet', - description: 'VPN peer notification ', - name: 'fortinet.firewall.peer_notif', - type: 'keyword', - }, - 'fortinet.firewall.phase2_name': { - category: 'fortinet', - description: 'VPN phase2 name ', - name: 'fortinet.firewall.phase2_name', - type: 'keyword', - }, - 'fortinet.firewall.phone': { - category: 'fortinet', - description: 'VOIP Phone ', - name: 'fortinet.firewall.phone', - type: 'keyword', - }, - 'fortinet.firewall.pid': { - category: 'fortinet', - description: 'Process ID ', - name: 'fortinet.firewall.pid', - type: 'integer', - }, - 'fortinet.firewall.policytype': { - category: 'fortinet', - description: 'Policy Type ', - name: 'fortinet.firewall.policytype', - type: 'keyword', - }, - 'fortinet.firewall.poolname': { - category: 'fortinet', - description: 'IP Pool name ', - name: 'fortinet.firewall.poolname', - type: 'keyword', - }, - 'fortinet.firewall.port': { - category: 'fortinet', - description: 'Log upload error port ', - name: 'fortinet.firewall.port', - type: 'integer', - }, - 'fortinet.firewall.portbegin': { - category: 'fortinet', - description: 'IP Pool port number to begin ', - name: 'fortinet.firewall.portbegin', - type: 'integer', - }, - 'fortinet.firewall.portend': { - category: 'fortinet', - description: 'IP Pool port number to end ', - name: 'fortinet.firewall.portend', - type: 'integer', - }, - 'fortinet.firewall.probeproto': { - category: 'fortinet', - description: 'Link Monitor Probe Protocol ', - name: 'fortinet.firewall.probeproto', - type: 'keyword', - }, - 'fortinet.firewall.process': { - category: 'fortinet', - description: 'URL Filter process ', - name: 'fortinet.firewall.process', - type: 'keyword', - }, - 'fortinet.firewall.processtime': { - category: 'fortinet', - description: 'Process time for reports ', - name: 'fortinet.firewall.processtime', - type: 'integer', - }, - 'fortinet.firewall.profile': { - category: 'fortinet', - description: 'Profile Name ', - name: 'fortinet.firewall.profile', - type: 'keyword', - }, - 'fortinet.firewall.profile_vd': { - category: 'fortinet', - description: 'Virtual Domain Name ', - name: 'fortinet.firewall.profile_vd', - type: 'keyword', - }, - 'fortinet.firewall.profilegroup': { - category: 'fortinet', - description: 'Profile Group Name ', - name: 'fortinet.firewall.profilegroup', - type: 'keyword', - }, - 'fortinet.firewall.profiletype': { - category: 'fortinet', - description: 'Profile Type ', - name: 'fortinet.firewall.profiletype', - type: 'keyword', - }, - 'fortinet.firewall.qtypeval': { - category: 'fortinet', - description: 'DNS question type value ', - name: 'fortinet.firewall.qtypeval', - type: 'integer', - }, - 'fortinet.firewall.quarskip': { - category: 'fortinet', - description: 'Quarantine skip explanation ', - name: 'fortinet.firewall.quarskip', - type: 'keyword', - }, - 'fortinet.firewall.quotaexceeded': { - category: 'fortinet', - description: 'If quota has been exceeded ', - name: 'fortinet.firewall.quotaexceeded', - type: 'keyword', - }, - 'fortinet.firewall.quotamax': { - category: 'fortinet', - description: 'Maximum quota allowed - in seconds if time-based - in bytes if traffic-based ', - name: 'fortinet.firewall.quotamax', - type: 'long', - }, - 'fortinet.firewall.quotatype': { - category: 'fortinet', - description: 'Quota type ', - name: 'fortinet.firewall.quotatype', - type: 'keyword', - }, - 'fortinet.firewall.quotaused': { - category: 'fortinet', - description: 'Quota used - in seconds if time-based - in bytes if trafficbased) ', - name: 'fortinet.firewall.quotaused', - type: 'long', - }, - 'fortinet.firewall.radioband': { - category: 'fortinet', - description: 'Radio band ', - name: 'fortinet.firewall.radioband', - type: 'keyword', - }, - 'fortinet.firewall.radioid': { - category: 'fortinet', - description: 'Radio ID ', - name: 'fortinet.firewall.radioid', - type: 'integer', - }, - 'fortinet.firewall.radioidclosest': { - category: 'fortinet', - description: 'Radio ID on the AP closest the rogue AP ', - name: 'fortinet.firewall.radioidclosest', - type: 'integer', - }, - 'fortinet.firewall.radioiddetected': { - category: 'fortinet', - description: 'Radio ID on the AP which detected the rogue AP ', - name: 'fortinet.firewall.radioiddetected', - type: 'integer', - }, - 'fortinet.firewall.rate': { - category: 'fortinet', - description: 'Wireless rogue rate value ', - name: 'fortinet.firewall.rate', - type: 'keyword', - }, - 'fortinet.firewall.rawdata': { - category: 'fortinet', - description: 'Raw data value ', - name: 'fortinet.firewall.rawdata', - type: 'keyword', - }, - 'fortinet.firewall.rawdataid': { - category: 'fortinet', - description: 'Raw data ID ', - name: 'fortinet.firewall.rawdataid', - type: 'keyword', - }, - 'fortinet.firewall.rcvddelta': { - category: 'fortinet', - description: 'Received bytes delta ', - name: 'fortinet.firewall.rcvddelta', - type: 'keyword', - }, - 'fortinet.firewall.reason': { - category: 'fortinet', - description: 'Alert reason ', - name: 'fortinet.firewall.reason', - type: 'keyword', - }, - 'fortinet.firewall.received': { - category: 'fortinet', - description: 'Server key exchange received ', - name: 'fortinet.firewall.received', - type: 'integer', - }, - 'fortinet.firewall.receivedsignature': { - category: 'fortinet', - description: 'Server key exchange received signature ', - name: 'fortinet.firewall.receivedsignature', - type: 'keyword', - }, - 'fortinet.firewall.red': { - category: 'fortinet', - description: 'Memory information in red ', - name: 'fortinet.firewall.red', - type: 'keyword', - }, - 'fortinet.firewall.referralurl': { - category: 'fortinet', - description: 'Web filter referralurl ', - name: 'fortinet.firewall.referralurl', - type: 'keyword', - }, - 'fortinet.firewall.remote': { - category: 'fortinet', - description: 'Remote PPP IP address ', - name: 'fortinet.firewall.remote', - type: 'ip', - }, - 'fortinet.firewall.remotewtptime': { - category: 'fortinet', - description: 'Remote Wifi Radius authentication time ', - name: 'fortinet.firewall.remotewtptime', - type: 'keyword', - }, - 'fortinet.firewall.reporttype': { - category: 'fortinet', - description: 'Report type ', - name: 'fortinet.firewall.reporttype', - type: 'keyword', - }, - 'fortinet.firewall.reqtype': { - category: 'fortinet', - description: 'Request type ', - name: 'fortinet.firewall.reqtype', - type: 'keyword', - }, - 'fortinet.firewall.request_name': { - category: 'fortinet', - description: 'VOIP request name ', - name: 'fortinet.firewall.request_name', - type: 'keyword', - }, - 'fortinet.firewall.result': { - category: 'fortinet', - description: 'VPN phase result ', - name: 'fortinet.firewall.result', - type: 'keyword', - }, - 'fortinet.firewall.role': { - category: 'fortinet', - description: 'VPN Phase 2 role ', - name: 'fortinet.firewall.role', - type: 'keyword', - }, - 'fortinet.firewall.rssi': { - category: 'fortinet', - description: 'Received signal strength indicator ', - name: 'fortinet.firewall.rssi', - type: 'integer', - }, - 'fortinet.firewall.rsso_key': { - category: 'fortinet', - description: 'RADIUS SSO attribute value ', - name: 'fortinet.firewall.rsso_key', - type: 'keyword', - }, - 'fortinet.firewall.ruledata': { - category: 'fortinet', - description: 'Rule data ', - name: 'fortinet.firewall.ruledata', - type: 'keyword', - }, - 'fortinet.firewall.ruletype': { - category: 'fortinet', - description: 'Rule type ', - name: 'fortinet.firewall.ruletype', - type: 'keyword', - }, - 'fortinet.firewall.scanned': { - category: 'fortinet', - description: 'Number of Scanned MMSs ', - name: 'fortinet.firewall.scanned', - type: 'integer', - }, - 'fortinet.firewall.scantime': { - category: 'fortinet', - description: 'Scanned time ', - name: 'fortinet.firewall.scantime', - type: 'long', - }, - 'fortinet.firewall.scope': { - category: 'fortinet', - description: 'FortiGuard Override Scope ', - name: 'fortinet.firewall.scope', - type: 'keyword', - }, - 'fortinet.firewall.security': { - category: 'fortinet', - description: 'Wireless rogue security ', - name: 'fortinet.firewall.security', - type: 'keyword', - }, - 'fortinet.firewall.sensitivity': { - category: 'fortinet', - description: 'Sensitivity for document fingerprint ', - name: 'fortinet.firewall.sensitivity', - type: 'keyword', - }, - 'fortinet.firewall.sensor': { - category: 'fortinet', - description: 'NAC Sensor Name ', - name: 'fortinet.firewall.sensor', - type: 'keyword', - }, - 'fortinet.firewall.sentdelta': { - category: 'fortinet', - description: 'Sent bytes delta ', - name: 'fortinet.firewall.sentdelta', - type: 'keyword', - }, - 'fortinet.firewall.seq': { - category: 'fortinet', - description: 'Sequence number ', - name: 'fortinet.firewall.seq', - type: 'keyword', - }, - 'fortinet.firewall.serial': { - category: 'fortinet', - description: 'WAN optimisation serial ', - name: 'fortinet.firewall.serial', - type: 'keyword', - }, - 'fortinet.firewall.serialno': { - category: 'fortinet', - description: 'Serial number ', - name: 'fortinet.firewall.serialno', - type: 'keyword', - }, - 'fortinet.firewall.server': { - category: 'fortinet', - description: 'AD server FQDN or IP ', - name: 'fortinet.firewall.server', - type: 'keyword', - }, - 'fortinet.firewall.session_id': { - category: 'fortinet', - description: 'Session ID ', - name: 'fortinet.firewall.session_id', - type: 'keyword', - }, - 'fortinet.firewall.sessionid': { - category: 'fortinet', - description: 'WAD Session ID ', - name: 'fortinet.firewall.sessionid', - type: 'integer', - }, - 'fortinet.firewall.setuprate': { - category: 'fortinet', - description: 'Session Setup Rate ', - name: 'fortinet.firewall.setuprate', - type: 'long', - }, - 'fortinet.firewall.severity': { - category: 'fortinet', - description: 'Severity ', - name: 'fortinet.firewall.severity', - type: 'keyword', - }, - 'fortinet.firewall.shaperdroprcvdbyte': { - category: 'fortinet', - description: 'Received bytes dropped by shaper ', - name: 'fortinet.firewall.shaperdroprcvdbyte', - type: 'integer', - }, - 'fortinet.firewall.shaperdropsentbyte': { - category: 'fortinet', - description: 'Sent bytes dropped by shaper ', - name: 'fortinet.firewall.shaperdropsentbyte', - type: 'integer', - }, - 'fortinet.firewall.shaperperipdropbyte': { - category: 'fortinet', - description: 'Dropped bytes per IP by shaper ', - name: 'fortinet.firewall.shaperperipdropbyte', - type: 'integer', - }, - 'fortinet.firewall.shaperperipname': { - category: 'fortinet', - description: 'Traffic shaper name (per IP) ', - name: 'fortinet.firewall.shaperperipname', - type: 'keyword', - }, - 'fortinet.firewall.shaperrcvdname': { - category: 'fortinet', - description: 'Traffic shaper name for received traffic ', - name: 'fortinet.firewall.shaperrcvdname', - type: 'keyword', - }, - 'fortinet.firewall.shapersentname': { - category: 'fortinet', - description: 'Traffic shaper name for sent traffic ', - name: 'fortinet.firewall.shapersentname', - type: 'keyword', - }, - 'fortinet.firewall.shapingpolicyid': { - category: 'fortinet', - description: 'Traffic shaper policy ID ', - name: 'fortinet.firewall.shapingpolicyid', - type: 'integer', - }, - 'fortinet.firewall.signal': { - category: 'fortinet', - description: 'Wireless rogue API signal ', - name: 'fortinet.firewall.signal', - type: 'integer', - }, - 'fortinet.firewall.size': { - category: 'fortinet', - description: 'Email size in bytes ', - name: 'fortinet.firewall.size', - type: 'long', - }, - 'fortinet.firewall.slot': { - category: 'fortinet', - description: 'Slot number ', - name: 'fortinet.firewall.slot', - type: 'integer', - }, - 'fortinet.firewall.sn': { - category: 'fortinet', - description: 'Security fabric serial number ', - name: 'fortinet.firewall.sn', - type: 'keyword', - }, - 'fortinet.firewall.snclosest': { - category: 'fortinet', - description: 'SN of the AP closest to the rogue AP ', - name: 'fortinet.firewall.snclosest', - type: 'keyword', - }, - 'fortinet.firewall.sndetected': { - category: 'fortinet', - description: 'SN of the AP which detected the rogue AP ', - name: 'fortinet.firewall.sndetected', - type: 'keyword', - }, - 'fortinet.firewall.snmeshparent': { - category: 'fortinet', - description: 'SN of the mesh parent ', - name: 'fortinet.firewall.snmeshparent', - type: 'keyword', - }, - 'fortinet.firewall.spi': { - category: 'fortinet', - description: 'IPSEC SPI ', - name: 'fortinet.firewall.spi', - type: 'keyword', - }, - 'fortinet.firewall.src_int': { - category: 'fortinet', - description: 'Source interface ', - name: 'fortinet.firewall.src_int', - type: 'keyword', - }, - 'fortinet.firewall.srcintfrole': { - category: 'fortinet', - description: 'Source interface role ', - name: 'fortinet.firewall.srcintfrole', - type: 'keyword', - }, - 'fortinet.firewall.srccountry': { - category: 'fortinet', - description: 'Source country ', - name: 'fortinet.firewall.srccountry', - type: 'keyword', - }, - 'fortinet.firewall.srcfamily': { - category: 'fortinet', - description: 'Source family ', - name: 'fortinet.firewall.srcfamily', - type: 'keyword', - }, - 'fortinet.firewall.srchwvendor': { - category: 'fortinet', - description: 'Source hardware vendor ', - name: 'fortinet.firewall.srchwvendor', - type: 'keyword', - }, - 'fortinet.firewall.srchwversion': { - category: 'fortinet', - description: 'Source hardware version ', - name: 'fortinet.firewall.srchwversion', - type: 'keyword', - }, - 'fortinet.firewall.srcinetsvc': { - category: 'fortinet', - description: 'Source interface service ', - name: 'fortinet.firewall.srcinetsvc', - type: 'keyword', - }, - 'fortinet.firewall.srcname': { - category: 'fortinet', - description: 'Source name ', - name: 'fortinet.firewall.srcname', - type: 'keyword', - }, - 'fortinet.firewall.srcserver': { - category: 'fortinet', - description: 'Source server ', - name: 'fortinet.firewall.srcserver', - type: 'integer', - }, - 'fortinet.firewall.srcssid': { - category: 'fortinet', - description: 'Source SSID ', - name: 'fortinet.firewall.srcssid', - type: 'keyword', - }, - 'fortinet.firewall.srcswversion': { - category: 'fortinet', - description: 'Source software version ', - name: 'fortinet.firewall.srcswversion', - type: 'keyword', - }, - 'fortinet.firewall.srcuuid': { - category: 'fortinet', - description: 'Source UUID ', - name: 'fortinet.firewall.srcuuid', - type: 'keyword', - }, - 'fortinet.firewall.sscname': { - category: 'fortinet', - description: 'SSC name ', - name: 'fortinet.firewall.sscname', - type: 'keyword', - }, - 'fortinet.firewall.ssid': { - category: 'fortinet', - description: 'Base Service Set ID ', - name: 'fortinet.firewall.ssid', - type: 'keyword', - }, - 'fortinet.firewall.sslaction': { - category: 'fortinet', - description: 'SSL Action ', - name: 'fortinet.firewall.sslaction', - type: 'keyword', - }, - 'fortinet.firewall.ssllocal': { - category: 'fortinet', - description: 'WAD SSL local ', - name: 'fortinet.firewall.ssllocal', - type: 'keyword', - }, - 'fortinet.firewall.sslremote': { - category: 'fortinet', - description: 'WAD SSL remote ', - name: 'fortinet.firewall.sslremote', - type: 'keyword', - }, - 'fortinet.firewall.stacount': { - category: 'fortinet', - description: 'Number of stations/clients ', - name: 'fortinet.firewall.stacount', - type: 'integer', - }, - 'fortinet.firewall.stage': { - category: 'fortinet', - description: 'IPSEC stage ', - name: 'fortinet.firewall.stage', - type: 'keyword', - }, - 'fortinet.firewall.stamac': { - category: 'fortinet', - description: '802.1x station mac ', - name: 'fortinet.firewall.stamac', - type: 'keyword', - }, - 'fortinet.firewall.state': { - category: 'fortinet', - description: 'Admin login state ', - name: 'fortinet.firewall.state', - type: 'keyword', - }, - 'fortinet.firewall.status': { - category: 'fortinet', - description: 'Status ', - name: 'fortinet.firewall.status', - type: 'keyword', - }, - 'fortinet.firewall.stitch': { - category: 'fortinet', - description: 'Automation stitch triggered ', - name: 'fortinet.firewall.stitch', - type: 'keyword', - }, - 'fortinet.firewall.subject': { - category: 'fortinet', - description: 'Email subject ', - name: 'fortinet.firewall.subject', - type: 'keyword', - }, - 'fortinet.firewall.submodule': { - category: 'fortinet', - description: 'Configuration Sub-Module Name ', - name: 'fortinet.firewall.submodule', - type: 'keyword', - }, - 'fortinet.firewall.subservice': { - category: 'fortinet', - description: 'AV subservice ', - name: 'fortinet.firewall.subservice', - type: 'keyword', - }, - 'fortinet.firewall.subtype': { - category: 'fortinet', - description: 'Log subtype ', - name: 'fortinet.firewall.subtype', - type: 'keyword', - }, - 'fortinet.firewall.suspicious': { - category: 'fortinet', - description: 'Number of Suspicious MMSs ', - name: 'fortinet.firewall.suspicious', - type: 'integer', - }, - 'fortinet.firewall.switchproto': { - category: 'fortinet', - description: 'Protocol change information ', - name: 'fortinet.firewall.switchproto', - type: 'keyword', - }, - 'fortinet.firewall.sync_status': { - category: 'fortinet', - description: 'The sync status with the master ', - name: 'fortinet.firewall.sync_status', - type: 'keyword', - }, - 'fortinet.firewall.sync_type': { - category: 'fortinet', - description: 'The sync type with the master ', - name: 'fortinet.firewall.sync_type', - type: 'keyword', - }, - 'fortinet.firewall.sysuptime': { - category: 'fortinet', - description: 'System uptime ', - name: 'fortinet.firewall.sysuptime', - type: 'keyword', - }, - 'fortinet.firewall.tamac': { - category: 'fortinet', - description: 'the MAC address of Transmitter, if none, then Receiver ', - name: 'fortinet.firewall.tamac', - type: 'keyword', - }, - 'fortinet.firewall.threattype': { - category: 'fortinet', - description: 'WIDS threat type ', - name: 'fortinet.firewall.threattype', - type: 'keyword', - }, - 'fortinet.firewall.time': { - category: 'fortinet', - description: 'Time of the event ', - name: 'fortinet.firewall.time', - type: 'keyword', - }, - 'fortinet.firewall.to': { - category: 'fortinet', - description: 'Email to field ', - name: 'fortinet.firewall.to', - type: 'keyword', - }, - 'fortinet.firewall.to_vcluster': { - category: 'fortinet', - description: 'destination virtual cluster number ', - name: 'fortinet.firewall.to_vcluster', - type: 'integer', - }, - 'fortinet.firewall.total': { - category: 'fortinet', - description: 'Total memory ', - name: 'fortinet.firewall.total', - type: 'integer', - }, - 'fortinet.firewall.totalsession': { - category: 'fortinet', - description: 'Total Number of Sessions ', - name: 'fortinet.firewall.totalsession', - type: 'integer', - }, - 'fortinet.firewall.trace_id': { - category: 'fortinet', - description: 'Session clash trace ID ', - name: 'fortinet.firewall.trace_id', - type: 'keyword', - }, - 'fortinet.firewall.trandisp': { - category: 'fortinet', - description: 'NAT translation type ', - name: 'fortinet.firewall.trandisp', - type: 'keyword', - }, - 'fortinet.firewall.transid': { - category: 'fortinet', - description: 'HTTP transaction ID ', - name: 'fortinet.firewall.transid', - type: 'integer', - }, - 'fortinet.firewall.translationid': { - category: 'fortinet', - description: 'DNS filter transaltion ID ', - name: 'fortinet.firewall.translationid', - type: 'keyword', - }, - 'fortinet.firewall.trigger': { - category: 'fortinet', - description: 'Automation stitch trigger ', - name: 'fortinet.firewall.trigger', - type: 'keyword', - }, - 'fortinet.firewall.trueclntip': { - category: 'fortinet', - description: 'File filter true client IP ', - name: 'fortinet.firewall.trueclntip', - type: 'ip', - }, - 'fortinet.firewall.tunnelid': { - category: 'fortinet', - description: 'IPSEC tunnel ID ', - name: 'fortinet.firewall.tunnelid', - type: 'integer', - }, - 'fortinet.firewall.tunnelip': { - category: 'fortinet', - description: 'IPSEC tunnel IP ', - name: 'fortinet.firewall.tunnelip', - type: 'ip', - }, - 'fortinet.firewall.tunneltype': { - category: 'fortinet', - description: 'IPSEC tunnel type ', - name: 'fortinet.firewall.tunneltype', - type: 'keyword', - }, - 'fortinet.firewall.type': { - category: 'fortinet', - description: 'Module type ', - name: 'fortinet.firewall.type', - type: 'keyword', - }, - 'fortinet.firewall.ui': { - category: 'fortinet', - description: 'Admin authentication UI type ', - name: 'fortinet.firewall.ui', - type: 'keyword', - }, - 'fortinet.firewall.unauthusersource': { - category: 'fortinet', - description: 'Unauthenticated user source ', - name: 'fortinet.firewall.unauthusersource', - type: 'keyword', - }, - 'fortinet.firewall.unit': { - category: 'fortinet', - description: 'Power supply unit ', - name: 'fortinet.firewall.unit', - type: 'integer', - }, - 'fortinet.firewall.urlfilteridx': { - category: 'fortinet', - description: 'URL filter ID ', - name: 'fortinet.firewall.urlfilteridx', - type: 'integer', - }, - 'fortinet.firewall.urlfilterlist': { - category: 'fortinet', - description: 'URL filter list ', - name: 'fortinet.firewall.urlfilterlist', - type: 'keyword', - }, - 'fortinet.firewall.urlsource': { - category: 'fortinet', - description: 'URL filter source ', - name: 'fortinet.firewall.urlsource', - type: 'keyword', - }, - 'fortinet.firewall.urltype': { - category: 'fortinet', - description: 'URL filter type ', - name: 'fortinet.firewall.urltype', - type: 'keyword', - }, - 'fortinet.firewall.used': { - category: 'fortinet', - description: 'Number of Used IPs ', - name: 'fortinet.firewall.used', - type: 'integer', - }, - 'fortinet.firewall.used_for_type': { - category: 'fortinet', - description: 'Connection for the type ', - name: 'fortinet.firewall.used_for_type', - type: 'integer', - }, - 'fortinet.firewall.utmaction': { - category: 'fortinet', - description: 'Security action performed by UTM ', - name: 'fortinet.firewall.utmaction', - type: 'keyword', - }, - 'fortinet.firewall.utmref': { - category: 'fortinet', - description: 'Reference to UTM ', - name: 'fortinet.firewall.utmref', - type: 'keyword', - }, - 'fortinet.firewall.vap': { - category: 'fortinet', - description: 'Virtual AP ', - name: 'fortinet.firewall.vap', - type: 'keyword', - }, - 'fortinet.firewall.vapmode': { - category: 'fortinet', - description: 'Virtual AP mode ', - name: 'fortinet.firewall.vapmode', - type: 'keyword', - }, - 'fortinet.firewall.vcluster': { - category: 'fortinet', - description: 'virtual cluster id ', - name: 'fortinet.firewall.vcluster', - type: 'integer', - }, - 'fortinet.firewall.vcluster_member': { - category: 'fortinet', - description: 'Virtual cluster member ', - name: 'fortinet.firewall.vcluster_member', - type: 'integer', - }, - 'fortinet.firewall.vcluster_state': { - category: 'fortinet', - description: 'Virtual cluster state ', - name: 'fortinet.firewall.vcluster_state', - type: 'keyword', - }, - 'fortinet.firewall.vd': { - category: 'fortinet', - description: 'Virtual Domain Name ', - name: 'fortinet.firewall.vd', - type: 'keyword', - }, - 'fortinet.firewall.vdname': { - category: 'fortinet', - description: 'Virtual Domain Name ', - name: 'fortinet.firewall.vdname', - type: 'keyword', - }, - 'fortinet.firewall.vendorurl': { - category: 'fortinet', - description: 'Vulnerability scan vendor name ', - name: 'fortinet.firewall.vendorurl', - type: 'keyword', - }, - 'fortinet.firewall.version': { - category: 'fortinet', - description: 'Version ', - name: 'fortinet.firewall.version', - type: 'keyword', - }, - 'fortinet.firewall.vip': { - category: 'fortinet', - description: 'Virtual IP ', - name: 'fortinet.firewall.vip', - type: 'keyword', - }, - 'fortinet.firewall.virus': { - category: 'fortinet', - description: 'Virus name ', - name: 'fortinet.firewall.virus', - type: 'keyword', - }, - 'fortinet.firewall.virusid': { - category: 'fortinet', - description: 'Virus ID (unique virus identifier) ', - name: 'fortinet.firewall.virusid', - type: 'integer', - }, - 'fortinet.firewall.voip_proto': { - category: 'fortinet', - description: 'VOIP protocol ', - name: 'fortinet.firewall.voip_proto', - type: 'keyword', - }, - 'fortinet.firewall.vpn': { - category: 'fortinet', - description: 'VPN description ', - name: 'fortinet.firewall.vpn', - type: 'keyword', - }, - 'fortinet.firewall.vpntunnel': { - category: 'fortinet', - description: 'IPsec Vpn Tunnel Name ', - name: 'fortinet.firewall.vpntunnel', - type: 'keyword', - }, - 'fortinet.firewall.vpntype': { - category: 'fortinet', - description: 'The type of the VPN tunnel ', - name: 'fortinet.firewall.vpntype', - type: 'keyword', - }, - 'fortinet.firewall.vrf': { - category: 'fortinet', - description: 'VRF number ', - name: 'fortinet.firewall.vrf', - type: 'integer', - }, - 'fortinet.firewall.vulncat': { - category: 'fortinet', - description: 'Vulnerability Category ', - name: 'fortinet.firewall.vulncat', - type: 'keyword', - }, - 'fortinet.firewall.vulnid': { - category: 'fortinet', - description: 'Vulnerability ID ', - name: 'fortinet.firewall.vulnid', - type: 'integer', - }, - 'fortinet.firewall.vulnname': { - category: 'fortinet', - description: 'Vulnerability name ', - name: 'fortinet.firewall.vulnname', - type: 'keyword', - }, - 'fortinet.firewall.vwlid': { - category: 'fortinet', - description: 'VWL ID ', - name: 'fortinet.firewall.vwlid', - type: 'integer', - }, - 'fortinet.firewall.vwlquality': { - category: 'fortinet', - description: 'VWL quality ', - name: 'fortinet.firewall.vwlquality', - type: 'keyword', - }, - 'fortinet.firewall.vwlservice': { - category: 'fortinet', - description: 'VWL service ', - name: 'fortinet.firewall.vwlservice', - type: 'keyword', - }, - 'fortinet.firewall.vwpvlanid': { - category: 'fortinet', - description: 'VWP VLAN ID ', - name: 'fortinet.firewall.vwpvlanid', - type: 'integer', - }, - 'fortinet.firewall.wanin': { - category: 'fortinet', - description: 'WAN incoming traffic in bytes ', - name: 'fortinet.firewall.wanin', - type: 'long', - }, - 'fortinet.firewall.wanoptapptype': { - category: 'fortinet', - description: 'WAN Optimization Application type ', - name: 'fortinet.firewall.wanoptapptype', - type: 'keyword', - }, - 'fortinet.firewall.wanout': { - category: 'fortinet', - description: 'WAN outgoing traffic in bytes ', - name: 'fortinet.firewall.wanout', - type: 'long', - }, - 'fortinet.firewall.weakwepiv': { - category: 'fortinet', - description: 'Weak Wep Initiation Vector ', - name: 'fortinet.firewall.weakwepiv', - type: 'keyword', - }, - 'fortinet.firewall.xauthgroup': { - category: 'fortinet', - description: 'XAuth Group Name ', - name: 'fortinet.firewall.xauthgroup', - type: 'keyword', - }, - 'fortinet.firewall.xauthuser': { - category: 'fortinet', - description: 'XAuth User Name ', - name: 'fortinet.firewall.xauthuser', - type: 'keyword', - }, - 'fortinet.firewall.xid': { - category: 'fortinet', - description: 'Wireless X ID ', - name: 'fortinet.firewall.xid', - type: 'integer', - }, - 'gcp.destination.instance.project_id': { - category: 'gcp', - description: 'ID of the project containing the VM. ', - name: 'gcp.destination.instance.project_id', - type: 'keyword', - }, - 'gcp.destination.instance.region': { - category: 'gcp', - description: 'Region of the VM. ', - name: 'gcp.destination.instance.region', - type: 'keyword', - }, - 'gcp.destination.instance.zone': { - category: 'gcp', - description: 'Zone of the VM. ', - name: 'gcp.destination.instance.zone', - type: 'keyword', - }, - 'gcp.destination.vpc.project_id': { - category: 'gcp', - description: 'ID of the project containing the VM. ', - name: 'gcp.destination.vpc.project_id', - type: 'keyword', - }, - 'gcp.destination.vpc.vpc_name': { - category: 'gcp', - description: 'VPC on which the VM is operating. ', - name: 'gcp.destination.vpc.vpc_name', - type: 'keyword', - }, - 'gcp.destination.vpc.subnetwork_name': { - category: 'gcp', - description: 'Subnetwork on which the VM is operating. ', - name: 'gcp.destination.vpc.subnetwork_name', - type: 'keyword', - }, - 'gcp.source.instance.project_id': { - category: 'gcp', - description: 'ID of the project containing the VM. ', - name: 'gcp.source.instance.project_id', - type: 'keyword', - }, - 'gcp.source.instance.region': { - category: 'gcp', - description: 'Region of the VM. ', - name: 'gcp.source.instance.region', - type: 'keyword', - }, - 'gcp.source.instance.zone': { - category: 'gcp', - description: 'Zone of the VM. ', - name: 'gcp.source.instance.zone', - type: 'keyword', - }, - 'gcp.source.vpc.project_id': { - category: 'gcp', - description: 'ID of the project containing the VM. ', - name: 'gcp.source.vpc.project_id', - type: 'keyword', - }, - 'gcp.source.vpc.vpc_name': { - category: 'gcp', - description: 'VPC on which the VM is operating. ', - name: 'gcp.source.vpc.vpc_name', - type: 'keyword', - }, - 'gcp.source.vpc.subnetwork_name': { - category: 'gcp', - description: 'Subnetwork on which the VM is operating. ', - name: 'gcp.source.vpc.subnetwork_name', - type: 'keyword', - }, - 'gcp.audit.type': { - category: 'gcp', - description: 'Type property. ', - name: 'gcp.audit.type', - type: 'keyword', - }, - 'gcp.audit.authentication_info.principal_email': { - category: 'gcp', - description: 'The email address of the authenticated user making the request. ', - name: 'gcp.audit.authentication_info.principal_email', - type: 'keyword', - }, - 'gcp.audit.authentication_info.authority_selector': { - category: 'gcp', - description: - 'The authority selector specified by the requestor, if any. It is not guaranteed that the principal was allowed to use this authority. ', - name: 'gcp.audit.authentication_info.authority_selector', - type: 'keyword', - }, - 'gcp.audit.authorization_info.permission': { - category: 'gcp', - description: 'The required IAM permission. ', - name: 'gcp.audit.authorization_info.permission', - type: 'keyword', - }, - 'gcp.audit.authorization_info.granted': { - category: 'gcp', - description: 'Whether or not authorization for resource and permission was granted. ', - name: 'gcp.audit.authorization_info.granted', - type: 'boolean', - }, - 'gcp.audit.authorization_info.resource_attributes.service': { - category: 'gcp', - description: 'The name of the service. ', - name: 'gcp.audit.authorization_info.resource_attributes.service', - type: 'keyword', - }, - 'gcp.audit.authorization_info.resource_attributes.name': { - category: 'gcp', - description: 'The name of the resource. ', - name: 'gcp.audit.authorization_info.resource_attributes.name', - type: 'keyword', - }, - 'gcp.audit.authorization_info.resource_attributes.type': { - category: 'gcp', - description: 'The type of the resource. ', - name: 'gcp.audit.authorization_info.resource_attributes.type', - type: 'keyword', - }, - 'gcp.audit.method_name': { - category: 'gcp', - description: - "The name of the service method or operation. For API calls, this should be the name of the API method. For example, 'google.datastore.v1.Datastore.RunQuery'. ", - name: 'gcp.audit.method_name', - type: 'keyword', - }, - 'gcp.audit.num_response_items': { - category: 'gcp', - description: 'The number of items returned from a List or Query API method, if applicable. ', - name: 'gcp.audit.num_response_items', - type: 'long', - }, - 'gcp.audit.request.proto_name': { - category: 'gcp', - description: 'Type property of the request. ', - name: 'gcp.audit.request.proto_name', - type: 'keyword', - }, - 'gcp.audit.request.filter': { - category: 'gcp', - description: 'Filter of the request. ', - name: 'gcp.audit.request.filter', - type: 'keyword', - }, - 'gcp.audit.request.name': { - category: 'gcp', - description: 'Name of the request. ', - name: 'gcp.audit.request.name', - type: 'keyword', - }, - 'gcp.audit.request.resource_name': { - category: 'gcp', - description: 'Name of the request resource. ', - name: 'gcp.audit.request.resource_name', - type: 'keyword', - }, - 'gcp.audit.request_metadata.caller_ip': { - category: 'gcp', - description: 'The IP address of the caller. ', - name: 'gcp.audit.request_metadata.caller_ip', - type: 'ip', - }, - 'gcp.audit.request_metadata.caller_supplied_user_agent': { - category: 'gcp', - description: - 'The user agent of the caller. This information is not authenticated and should be treated accordingly. ', - name: 'gcp.audit.request_metadata.caller_supplied_user_agent', - type: 'keyword', - }, - 'gcp.audit.response.proto_name': { - category: 'gcp', - description: 'Type property of the response. ', - name: 'gcp.audit.response.proto_name', - type: 'keyword', - }, - 'gcp.audit.response.details.group': { - category: 'gcp', - description: 'The name of the group. ', - name: 'gcp.audit.response.details.group', - type: 'keyword', - }, - 'gcp.audit.response.details.kind': { - category: 'gcp', - description: 'The kind of the response details. ', - name: 'gcp.audit.response.details.kind', - type: 'keyword', - }, - 'gcp.audit.response.details.name': { - category: 'gcp', - description: 'The name of the response details. ', - name: 'gcp.audit.response.details.name', - type: 'keyword', - }, - 'gcp.audit.response.details.uid': { - category: 'gcp', - description: 'The uid of the response details. ', - name: 'gcp.audit.response.details.uid', - type: 'keyword', - }, - 'gcp.audit.response.status': { - category: 'gcp', - description: 'Status of the response. ', - name: 'gcp.audit.response.status', - type: 'keyword', - }, - 'gcp.audit.resource_name': { - category: 'gcp', - description: - "The resource or collection that is the target of the operation. The name is a scheme-less URI, not including the API service name. For example, 'shelves/SHELF_ID/books'. ", - name: 'gcp.audit.resource_name', - type: 'keyword', - }, - 'gcp.audit.resource_location.current_locations': { - category: 'gcp', - description: 'Current locations of the resource. ', - name: 'gcp.audit.resource_location.current_locations', - type: 'keyword', - }, - 'gcp.audit.service_name': { - category: 'gcp', - description: - 'The name of the API service performing the operation. For example, datastore.googleapis.com. ', - name: 'gcp.audit.service_name', - type: 'keyword', - }, - 'gcp.audit.status.code': { - category: 'gcp', - description: 'The status code, which should be an enum value of google.rpc.Code. ', - name: 'gcp.audit.status.code', - type: 'integer', - }, - 'gcp.audit.status.message': { - category: 'gcp', - description: - 'A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client. ', - name: 'gcp.audit.status.message', - type: 'keyword', - }, - 'gcp.firewall.rule_details.priority': { - category: 'gcp', - description: 'The priority for the firewall rule.', - name: 'gcp.firewall.rule_details.priority', - type: 'long', - }, - 'gcp.firewall.rule_details.action': { - category: 'gcp', - description: 'Action that the rule performs on match.', - name: 'gcp.firewall.rule_details.action', - type: 'keyword', - }, - 'gcp.firewall.rule_details.direction': { - category: 'gcp', - description: 'Direction of traffic that matches this rule.', - name: 'gcp.firewall.rule_details.direction', - type: 'keyword', - }, - 'gcp.firewall.rule_details.reference': { - category: 'gcp', - description: 'Reference to the firewall rule.', - name: 'gcp.firewall.rule_details.reference', - type: 'keyword', - }, - 'gcp.firewall.rule_details.source_range': { - category: 'gcp', - description: 'List of source ranges that the firewall rule applies to.', - name: 'gcp.firewall.rule_details.source_range', - type: 'keyword', - }, - 'gcp.firewall.rule_details.destination_range': { - category: 'gcp', - description: 'List of destination ranges that the firewall applies to.', - name: 'gcp.firewall.rule_details.destination_range', - type: 'keyword', - }, - 'gcp.firewall.rule_details.source_tag': { - category: 'gcp', - description: 'List of all the source tags that the firewall rule applies to. ', - name: 'gcp.firewall.rule_details.source_tag', - type: 'keyword', - }, - 'gcp.firewall.rule_details.target_tag': { - category: 'gcp', - description: 'List of all the target tags that the firewall rule applies to. ', - name: 'gcp.firewall.rule_details.target_tag', - type: 'keyword', - }, - 'gcp.firewall.rule_details.ip_port_info': { - category: 'gcp', - description: 'List of ip protocols and applicable port ranges for rules. ', - name: 'gcp.firewall.rule_details.ip_port_info', - type: 'array', - }, - 'gcp.firewall.rule_details.source_service_account': { - category: 'gcp', - description: 'List of all the source service accounts that the firewall rule applies to. ', - name: 'gcp.firewall.rule_details.source_service_account', - type: 'keyword', - }, - 'gcp.firewall.rule_details.target_service_account': { - category: 'gcp', - description: 'List of all the target service accounts that the firewall rule applies to. ', - name: 'gcp.firewall.rule_details.target_service_account', - type: 'keyword', - }, - 'gcp.vpcflow.reporter': { - category: 'gcp', - description: "The side which reported the flow. Can be either 'SRC' or 'DEST'. ", - name: 'gcp.vpcflow.reporter', - type: 'keyword', - }, - 'gcp.vpcflow.rtt.ms': { - category: 'gcp', - description: - 'Latency as measured (for TCP flows only) during the time interval. This is the time elapsed between sending a SEQ and receiving a corresponding ACK and it contains the network RTT as well as the application related delay. ', - name: 'gcp.vpcflow.rtt.ms', - type: 'long', - }, - 'google_workspace.actor.type': { - category: 'google_workspace', - description: - 'The type of actor. Values can be: *USER*: Another user in the same domain. *EXTERNAL_USER*: A user outside the domain. *KEY*: A non-human actor. ', - name: 'google_workspace.actor.type', - type: 'keyword', - }, - 'google_workspace.actor.key': { - category: 'google_workspace', - description: - 'Only present when `actor.type` is `KEY`. Can be the `consumer_key` of the requestor for OAuth 2LO API requests or an identifier for robot accounts. ', - name: 'google_workspace.actor.key', - type: 'keyword', - }, - 'google_workspace.event.type': { - category: 'google_workspace', - description: - 'The type of Google Workspace event, mapped from `items[].events[].type` in the original payload. Each fileset can have a different set of values for it, more details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ', - example: 'audit#activity', - name: 'google_workspace.event.type', - type: 'keyword', - }, - 'google_workspace.kind': { - category: 'google_workspace', - description: - 'The type of API resource, mapped from `kind` in the original payload. More details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ', - example: 'audit#activity', - name: 'google_workspace.kind', - type: 'keyword', - }, - 'google_workspace.organization.domain': { - category: 'google_workspace', - description: "The domain that is affected by the report's event. ", - name: 'google_workspace.organization.domain', - type: 'keyword', - }, - 'google_workspace.admin.application.edition': { - category: 'google_workspace', - description: 'The Google Workspace edition.', - name: 'google_workspace.admin.application.edition', - type: 'keyword', - }, - 'google_workspace.admin.application.name': { - category: 'google_workspace', - description: "The application's name.", - name: 'google_workspace.admin.application.name', - type: 'keyword', - }, - 'google_workspace.admin.application.enabled': { - category: 'google_workspace', - description: 'The enabled application.', - name: 'google_workspace.admin.application.enabled', - type: 'keyword', - }, - 'google_workspace.admin.application.licences_order_number': { - category: 'google_workspace', - description: 'Order number used to redeem licenses.', - name: 'google_workspace.admin.application.licences_order_number', - type: 'keyword', - }, - 'google_workspace.admin.application.licences_purchased': { - category: 'google_workspace', - description: 'Number of licences purchased.', - name: 'google_workspace.admin.application.licences_purchased', - type: 'keyword', - }, - 'google_workspace.admin.application.id': { - category: 'google_workspace', - description: 'The application ID.', - name: 'google_workspace.admin.application.id', - type: 'keyword', - }, - 'google_workspace.admin.application.asp_id': { - category: 'google_workspace', - description: 'The application specific password ID.', - name: 'google_workspace.admin.application.asp_id', - type: 'keyword', - }, - 'google_workspace.admin.application.package_id': { - category: 'google_workspace', - description: 'The mobile application package ID.', - name: 'google_workspace.admin.application.package_id', - type: 'keyword', - }, - 'google_workspace.admin.group.email': { - category: 'google_workspace', - description: "The group's primary email address.", - name: 'google_workspace.admin.group.email', - type: 'keyword', - }, - 'google_workspace.admin.new_value': { - category: 'google_workspace', - description: 'The new value for the setting.', - name: 'google_workspace.admin.new_value', - type: 'keyword', - }, - 'google_workspace.admin.old_value': { - category: 'google_workspace', - description: 'The old value for the setting.', - name: 'google_workspace.admin.old_value', - type: 'keyword', - }, - 'google_workspace.admin.org_unit.name': { - category: 'google_workspace', - description: 'The organizational unit name.', - name: 'google_workspace.admin.org_unit.name', - type: 'keyword', - }, - 'google_workspace.admin.org_unit.full': { - category: 'google_workspace', - description: 'The org unit full path including the root org unit name.', - name: 'google_workspace.admin.org_unit.full', - type: 'keyword', - }, - 'google_workspace.admin.setting.name': { - category: 'google_workspace', - description: 'The setting name.', - name: 'google_workspace.admin.setting.name', - type: 'keyword', - }, - 'google_workspace.admin.user_defined_setting.name': { - category: 'google_workspace', - description: 'The name of the user-defined setting.', - name: 'google_workspace.admin.user_defined_setting.name', - type: 'keyword', - }, - 'google_workspace.admin.setting.description': { - category: 'google_workspace', - description: 'The setting name.', - name: 'google_workspace.admin.setting.description', - type: 'keyword', - }, - 'google_workspace.admin.group.priorities': { - category: 'google_workspace', - description: 'Group priorities.', - name: 'google_workspace.admin.group.priorities', - type: 'keyword', - }, - 'google_workspace.admin.domain.alias': { - category: 'google_workspace', - description: 'The domain alias.', - name: 'google_workspace.admin.domain.alias', - type: 'keyword', - }, - 'google_workspace.admin.domain.name': { - category: 'google_workspace', - description: 'The primary domain name.', - name: 'google_workspace.admin.domain.name', - type: 'keyword', - }, - 'google_workspace.admin.domain.secondary_name': { - category: 'google_workspace', - description: 'The secondary domain name.', - name: 'google_workspace.admin.domain.secondary_name', - type: 'keyword', - }, - 'google_workspace.admin.managed_configuration': { - category: 'google_workspace', - description: 'The name of the managed configuration.', - name: 'google_workspace.admin.managed_configuration', - type: 'keyword', - }, - 'google_workspace.admin.non_featured_services_selection': { - category: 'google_workspace', - description: - 'Non-featured services selection. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-application-settings#FLASHLIGHT_EDU_NON_FEATURED_SERVICES_SELECTED ', - name: 'google_workspace.admin.non_featured_services_selection', - type: 'keyword', - }, - 'google_workspace.admin.field': { - category: 'google_workspace', - description: 'The name of the field.', - name: 'google_workspace.admin.field', - type: 'keyword', - }, - 'google_workspace.admin.resource.id': { - category: 'google_workspace', - description: 'The name of the resource identifier.', - name: 'google_workspace.admin.resource.id', - type: 'keyword', - }, - 'google_workspace.admin.user.email': { - category: 'google_workspace', - description: "The user's primary email address.", - name: 'google_workspace.admin.user.email', - type: 'keyword', - }, - 'google_workspace.admin.user.nickname': { - category: 'google_workspace', - description: "The user's nickname.", - name: 'google_workspace.admin.user.nickname', - type: 'keyword', - }, - 'google_workspace.admin.user.birthdate': { - category: 'google_workspace', - description: "The user's birth date.", - name: 'google_workspace.admin.user.birthdate', - type: 'date', - }, - 'google_workspace.admin.gateway.name': { - category: 'google_workspace', - description: 'Gateway name. Present on some chat settings.', - name: 'google_workspace.admin.gateway.name', - type: 'keyword', - }, - 'google_workspace.admin.chrome_os.session_type': { - category: 'google_workspace', - description: 'Chrome OS session type.', - name: 'google_workspace.admin.chrome_os.session_type', - type: 'keyword', - }, - 'google_workspace.admin.device.serial_number': { - category: 'google_workspace', - description: 'Device serial number.', - name: 'google_workspace.admin.device.serial_number', - type: 'keyword', - }, - 'google_workspace.admin.device.id': { - category: 'google_workspace', - name: 'google_workspace.admin.device.id', - type: 'keyword', - }, - 'google_workspace.admin.device.type': { - category: 'google_workspace', - description: 'Device type.', - name: 'google_workspace.admin.device.type', - type: 'keyword', - }, - 'google_workspace.admin.print_server.name': { - category: 'google_workspace', - description: 'The name of the print server.', - name: 'google_workspace.admin.print_server.name', - type: 'keyword', - }, - 'google_workspace.admin.printer.name': { - category: 'google_workspace', - description: 'The name of the printer.', - name: 'google_workspace.admin.printer.name', - type: 'keyword', - }, - 'google_workspace.admin.device.command_details': { - category: 'google_workspace', - description: 'Command details.', - name: 'google_workspace.admin.device.command_details', - type: 'keyword', - }, - 'google_workspace.admin.role.id': { - category: 'google_workspace', - description: 'Unique identifier for this role privilege.', - name: 'google_workspace.admin.role.id', - type: 'keyword', - }, - 'google_workspace.admin.role.name': { - category: 'google_workspace', - description: - 'The role name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-delegated-admin-settings ', - name: 'google_workspace.admin.role.name', - type: 'keyword', - }, - 'google_workspace.admin.privilege.name': { - category: 'google_workspace', - description: 'Privilege name.', - name: 'google_workspace.admin.privilege.name', - type: 'keyword', - }, - 'google_workspace.admin.service.name': { - category: 'google_workspace', - description: 'The service name.', - name: 'google_workspace.admin.service.name', - type: 'keyword', - }, - 'google_workspace.admin.url.name': { - category: 'google_workspace', - description: 'The website name.', - name: 'google_workspace.admin.url.name', - type: 'keyword', - }, - 'google_workspace.admin.product.name': { - category: 'google_workspace', - description: 'The product name.', - name: 'google_workspace.admin.product.name', - type: 'keyword', - }, - 'google_workspace.admin.product.sku': { - category: 'google_workspace', - description: 'The product SKU.', - name: 'google_workspace.admin.product.sku', - type: 'keyword', - }, - 'google_workspace.admin.bulk_upload.failed': { - category: 'google_workspace', - description: 'Number of failed records in bulk upload operation.', - name: 'google_workspace.admin.bulk_upload.failed', - type: 'long', - }, - 'google_workspace.admin.bulk_upload.total': { - category: 'google_workspace', - description: 'Number of total records in bulk upload operation.', - name: 'google_workspace.admin.bulk_upload.total', - type: 'long', - }, - 'google_workspace.admin.group.allowed_list': { - category: 'google_workspace', - description: 'Names of allow-listed groups.', - name: 'google_workspace.admin.group.allowed_list', - type: 'keyword', - }, - 'google_workspace.admin.email.quarantine_name': { - category: 'google_workspace', - description: 'The name of the quarantine.', - name: 'google_workspace.admin.email.quarantine_name', - type: 'keyword', - }, - 'google_workspace.admin.email.log_search_filter.message_id': { - category: 'google_workspace', - description: "The log search filter's email message ID.", - name: 'google_workspace.admin.email.log_search_filter.message_id', - type: 'keyword', - }, - 'google_workspace.admin.email.log_search_filter.start_date': { - category: 'google_workspace', - description: "The log search filter's start date.", - name: 'google_workspace.admin.email.log_search_filter.start_date', - type: 'date', - }, - 'google_workspace.admin.email.log_search_filter.end_date': { - category: 'google_workspace', - description: "The log search filter's ending date.", - name: 'google_workspace.admin.email.log_search_filter.end_date', - type: 'date', - }, - 'google_workspace.admin.email.log_search_filter.recipient.value': { - category: 'google_workspace', - description: "The log search filter's email recipient.", - name: 'google_workspace.admin.email.log_search_filter.recipient.value', - type: 'keyword', - }, - 'google_workspace.admin.email.log_search_filter.sender.value': { - category: 'google_workspace', - description: "The log search filter's email sender.", - name: 'google_workspace.admin.email.log_search_filter.sender.value', - type: 'keyword', - }, - 'google_workspace.admin.email.log_search_filter.recipient.ip': { - category: 'google_workspace', - description: "The log search filter's email recipient's IP address.", - name: 'google_workspace.admin.email.log_search_filter.recipient.ip', - type: 'ip', - }, - 'google_workspace.admin.email.log_search_filter.sender.ip': { - category: 'google_workspace', - description: "The log search filter's email sender's IP address.", - name: 'google_workspace.admin.email.log_search_filter.sender.ip', - type: 'ip', - }, - 'google_workspace.admin.chrome_licenses.enabled': { - category: 'google_workspace', - description: - 'Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ', - name: 'google_workspace.admin.chrome_licenses.enabled', - type: 'keyword', - }, - 'google_workspace.admin.chrome_licenses.allowed': { - category: 'google_workspace', - description: - 'Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ', - name: 'google_workspace.admin.chrome_licenses.allowed', - type: 'keyword', - }, - 'google_workspace.admin.oauth2.service.name': { - category: 'google_workspace', - description: - 'OAuth2 service name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ', - name: 'google_workspace.admin.oauth2.service.name', - type: 'keyword', - }, - 'google_workspace.admin.oauth2.application.id': { - category: 'google_workspace', - description: 'OAuth2 application ID.', - name: 'google_workspace.admin.oauth2.application.id', - type: 'keyword', - }, - 'google_workspace.admin.oauth2.application.name': { - category: 'google_workspace', - description: 'OAuth2 application name.', - name: 'google_workspace.admin.oauth2.application.name', - type: 'keyword', - }, - 'google_workspace.admin.oauth2.application.type': { - category: 'google_workspace', - description: - 'OAuth2 application type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ', - name: 'google_workspace.admin.oauth2.application.type', - type: 'keyword', - }, - 'google_workspace.admin.verification_method': { - category: 'google_workspace', - description: - 'Related verification method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings and https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ', - name: 'google_workspace.admin.verification_method', - type: 'keyword', - }, - 'google_workspace.admin.alert.name': { - category: 'google_workspace', - description: 'The alert name.', - name: 'google_workspace.admin.alert.name', - type: 'keyword', - }, - 'google_workspace.admin.rule.name': { - category: 'google_workspace', - description: 'The rule name.', - name: 'google_workspace.admin.rule.name', - type: 'keyword', - }, - 'google_workspace.admin.api.client.name': { - category: 'google_workspace', - description: 'The API client name.', - name: 'google_workspace.admin.api.client.name', - type: 'keyword', - }, - 'google_workspace.admin.api.scopes': { - category: 'google_workspace', - description: 'The API scopes.', - name: 'google_workspace.admin.api.scopes', - type: 'keyword', - }, - 'google_workspace.admin.mdm.token': { - category: 'google_workspace', - description: 'The MDM vendor enrollment token.', - name: 'google_workspace.admin.mdm.token', - type: 'keyword', - }, - 'google_workspace.admin.mdm.vendor': { - category: 'google_workspace', - description: "The MDM vendor's name.", - name: 'google_workspace.admin.mdm.vendor', - type: 'keyword', - }, - 'google_workspace.admin.info_type': { - category: 'google_workspace', - description: - 'This will be used to state what kind of information was changed. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ', - name: 'google_workspace.admin.info_type', - type: 'keyword', - }, - 'google_workspace.admin.email_monitor.dest_email': { - category: 'google_workspace', - description: 'The destination address of the email monitor.', - name: 'google_workspace.admin.email_monitor.dest_email', - type: 'keyword', - }, - 'google_workspace.admin.email_monitor.level.chat': { - category: 'google_workspace', - description: 'The chat email monitor level.', - name: 'google_workspace.admin.email_monitor.level.chat', - type: 'keyword', - }, - 'google_workspace.admin.email_monitor.level.draft': { - category: 'google_workspace', - description: 'The draft email monitor level.', - name: 'google_workspace.admin.email_monitor.level.draft', - type: 'keyword', - }, - 'google_workspace.admin.email_monitor.level.incoming': { - category: 'google_workspace', - description: 'The incoming email monitor level.', - name: 'google_workspace.admin.email_monitor.level.incoming', - type: 'keyword', - }, - 'google_workspace.admin.email_monitor.level.outgoing': { - category: 'google_workspace', - description: 'The outgoing email monitor level.', - name: 'google_workspace.admin.email_monitor.level.outgoing', - type: 'keyword', - }, - 'google_workspace.admin.email_dump.include_deleted': { - category: 'google_workspace', - description: 'Indicates if deleted emails are included in the export.', - name: 'google_workspace.admin.email_dump.include_deleted', - type: 'boolean', - }, - 'google_workspace.admin.email_dump.package_content': { - category: 'google_workspace', - description: 'The contents of the mailbox package.', - name: 'google_workspace.admin.email_dump.package_content', - type: 'keyword', - }, - 'google_workspace.admin.email_dump.query': { - category: 'google_workspace', - description: 'The search query used for the dump.', - name: 'google_workspace.admin.email_dump.query', - type: 'keyword', - }, - 'google_workspace.admin.request.id': { - category: 'google_workspace', - description: 'The request ID.', - name: 'google_workspace.admin.request.id', - type: 'keyword', - }, - 'google_workspace.admin.mobile.action.id': { - category: 'google_workspace', - description: "The mobile device action's ID.", - name: 'google_workspace.admin.mobile.action.id', - type: 'keyword', - }, - 'google_workspace.admin.mobile.action.type': { - category: 'google_workspace', - description: - "The mobile device action's type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ", - name: 'google_workspace.admin.mobile.action.type', - type: 'keyword', - }, - 'google_workspace.admin.mobile.certificate.name': { - category: 'google_workspace', - description: 'The mobile certificate common name.', - name: 'google_workspace.admin.mobile.certificate.name', - type: 'keyword', - }, - 'google_workspace.admin.mobile.company_owned_devices': { - category: 'google_workspace', - description: 'The number of devices a company owns.', - name: 'google_workspace.admin.mobile.company_owned_devices', - type: 'long', - }, - 'google_workspace.admin.distribution.entity.name': { - category: 'google_workspace', - description: - 'The distribution entity value, which can be a group name or an org-unit name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ', - name: 'google_workspace.admin.distribution.entity.name', - type: 'keyword', - }, - 'google_workspace.admin.distribution.entity.type': { - category: 'google_workspace', - description: - 'The distribution entity type, which can be a group or an org-unit. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ', - name: 'google_workspace.admin.distribution.entity.type', - type: 'keyword', - }, - 'google_workspace.drive.billable': { - category: 'google_workspace', - description: 'Whether this activity is billable.', - name: 'google_workspace.drive.billable', - type: 'boolean', - }, - 'google_workspace.drive.source_folder_id': { - category: 'google_workspace', - name: 'google_workspace.drive.source_folder_id', - type: 'keyword', - }, - 'google_workspace.drive.source_folder_title': { - category: 'google_workspace', - name: 'google_workspace.drive.source_folder_title', - type: 'keyword', - }, - 'google_workspace.drive.destination_folder_id': { - category: 'google_workspace', - name: 'google_workspace.drive.destination_folder_id', - type: 'keyword', - }, - 'google_workspace.drive.destination_folder_title': { - category: 'google_workspace', - name: 'google_workspace.drive.destination_folder_title', - type: 'keyword', - }, - 'google_workspace.drive.file.id': { - category: 'google_workspace', - name: 'google_workspace.drive.file.id', - type: 'keyword', - }, - 'google_workspace.drive.file.type': { - category: 'google_workspace', - description: - 'Document Drive type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.file.type', - type: 'keyword', - }, - 'google_workspace.drive.originating_app_id': { - category: 'google_workspace', - description: 'The Google Cloud Project ID of the application that performed the action. ', - name: 'google_workspace.drive.originating_app_id', - type: 'keyword', - }, - 'google_workspace.drive.file.owner.email': { - category: 'google_workspace', - name: 'google_workspace.drive.file.owner.email', - type: 'keyword', - }, - 'google_workspace.drive.file.owner.is_shared_drive': { - category: 'google_workspace', - description: 'Boolean flag denoting whether owner is a shared drive. ', - name: 'google_workspace.drive.file.owner.is_shared_drive', - type: 'boolean', - }, - 'google_workspace.drive.primary_event': { - category: 'google_workspace', - description: - 'Whether this is a primary event. A single user action in Drive may generate several events. ', - name: 'google_workspace.drive.primary_event', - type: 'boolean', - }, - 'google_workspace.drive.shared_drive_id': { - category: 'google_workspace', - description: - 'The unique identifier of the Team Drive. Only populated for for events relating to a Team Drive or item contained inside a Team Drive. ', - name: 'google_workspace.drive.shared_drive_id', - type: 'keyword', - }, - 'google_workspace.drive.visibility': { - category: 'google_workspace', - description: - 'Visibility of target file. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.visibility', - type: 'keyword', - }, - 'google_workspace.drive.new_value': { - category: 'google_workspace', - description: - 'When a setting or property of the file changes, the new value for it will appear here. ', - name: 'google_workspace.drive.new_value', - type: 'keyword', - }, - 'google_workspace.drive.old_value': { - category: 'google_workspace', - description: - 'When a setting or property of the file changes, the old value for it will appear here. ', - name: 'google_workspace.drive.old_value', - type: 'keyword', - }, - 'google_workspace.drive.sheets_import_range_recipient_doc': { - category: 'google_workspace', - description: 'Doc ID of the recipient of a sheets import range.', - name: 'google_workspace.drive.sheets_import_range_recipient_doc', - type: 'keyword', - }, - 'google_workspace.drive.old_visibility': { - category: 'google_workspace', - description: 'When visibility changes, this holds the old value. ', - name: 'google_workspace.drive.old_visibility', - type: 'keyword', - }, - 'google_workspace.drive.visibility_change': { - category: 'google_workspace', - description: 'When visibility changes, this holds the new overall visibility of the file. ', - name: 'google_workspace.drive.visibility_change', - type: 'keyword', - }, - 'google_workspace.drive.target_domain': { - category: 'google_workspace', - description: - 'The domain for which the acccess scope was changed. This can also be the alias all to indicate the access scope was changed for all domains that have visibility for this document. ', - name: 'google_workspace.drive.target_domain', - type: 'keyword', - }, - 'google_workspace.drive.added_role': { - category: 'google_workspace', - description: - 'Added membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.added_role', - type: 'keyword', - }, - 'google_workspace.drive.membership_change_type': { - category: 'google_workspace', - description: - 'Type of change in Team Drive membership of a user/group. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.membership_change_type', - type: 'keyword', - }, - 'google_workspace.drive.shared_drive_settings_change_type': { - category: 'google_workspace', - description: - 'Type of change in Team Drive settings. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.shared_drive_settings_change_type', - type: 'keyword', - }, - 'google_workspace.drive.removed_role': { - category: 'google_workspace', - description: - 'Removed membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'google_workspace.drive.removed_role', - type: 'keyword', - }, - 'google_workspace.drive.target': { - category: 'google_workspace', - description: 'Target user or group.', - name: 'google_workspace.drive.target', - type: 'keyword', - }, - 'google_workspace.groups.acl_permission': { - category: 'google_workspace', - description: - 'Group permission setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'google_workspace.groups.acl_permission', - type: 'keyword', - }, - 'google_workspace.groups.email': { - category: 'google_workspace', - description: 'Group email. ', - name: 'google_workspace.groups.email', - type: 'keyword', - }, - 'google_workspace.groups.member.email': { - category: 'google_workspace', - description: 'Member email. ', - name: 'google_workspace.groups.member.email', - type: 'keyword', - }, - 'google_workspace.groups.member.role': { - category: 'google_workspace', - description: - 'Member role. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'google_workspace.groups.member.role', - type: 'keyword', - }, - 'google_workspace.groups.setting': { - category: 'google_workspace', - description: - 'Group setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'google_workspace.groups.setting', - type: 'keyword', - }, - 'google_workspace.groups.new_value': { - category: 'google_workspace', - description: - 'New value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'google_workspace.groups.new_value', - type: 'keyword', - }, - 'google_workspace.groups.old_value': { - category: 'google_workspace', - description: - 'Old value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups', - name: 'google_workspace.groups.old_value', - type: 'keyword', - }, - 'google_workspace.groups.value': { - category: 'google_workspace', - description: - 'Value of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'google_workspace.groups.value', - type: 'keyword', - }, - 'google_workspace.groups.message.id': { - category: 'google_workspace', - description: 'SMTP message Id of an email message. Present for moderation events. ', - name: 'google_workspace.groups.message.id', - type: 'keyword', - }, - 'google_workspace.groups.message.moderation_action': { - category: 'google_workspace', - description: 'Message moderation action. Possible values are `approved` and `rejected`. ', - name: 'google_workspace.groups.message.moderation_action', - type: 'keyword', - }, - 'google_workspace.groups.status': { - category: 'google_workspace', - description: - 'A status describing the output of an operation. Possible values are `failed` and `succeeded`. ', - name: 'google_workspace.groups.status', - type: 'keyword', - }, - 'google_workspace.login.affected_email_address': { - category: 'google_workspace', - name: 'google_workspace.login.affected_email_address', - type: 'keyword', - }, - 'google_workspace.login.challenge_method': { - category: 'google_workspace', - description: - 'Login challenge method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'google_workspace.login.challenge_method', - type: 'keyword', - }, - 'google_workspace.login.failure_type': { - category: 'google_workspace', - description: - 'Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'google_workspace.login.failure_type', - type: 'keyword', - }, - 'google_workspace.login.type': { - category: 'google_workspace', - description: - 'Login credentials type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'google_workspace.login.type', - type: 'keyword', - }, - 'google_workspace.login.is_second_factor': { - category: 'google_workspace', - name: 'google_workspace.login.is_second_factor', - type: 'boolean', - }, - 'google_workspace.login.is_suspicious': { - category: 'google_workspace', - name: 'google_workspace.login.is_suspicious', - type: 'boolean', - }, - 'google_workspace.saml.application_name': { - category: 'google_workspace', - description: 'Saml SP application name. ', - name: 'google_workspace.saml.application_name', - type: 'keyword', - }, - 'google_workspace.saml.failure_type': { - category: 'google_workspace', - description: - 'Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/saml. ', - name: 'google_workspace.saml.failure_type', - type: 'keyword', - }, - 'google_workspace.saml.initiated_by': { - category: 'google_workspace', - description: 'Requester of SAML authentication. ', - name: 'google_workspace.saml.initiated_by', - type: 'keyword', - }, - 'google_workspace.saml.orgunit_path': { - category: 'google_workspace', - description: 'User orgunit. ', - name: 'google_workspace.saml.orgunit_path', - type: 'keyword', - }, - 'google_workspace.saml.status_code': { - category: 'google_workspace', - description: 'SAML status code. ', - name: 'google_workspace.saml.status_code', - type: 'keyword', - }, - 'google_workspace.saml.second_level_status_code': { - category: 'google_workspace', - description: 'SAML second level status code. ', - name: 'google_workspace.saml.second_level_status_code', - type: 'keyword', - }, - 'gsuite.actor.type': { - category: 'gsuite', - description: - 'The type of actor. Values can be: *USER*: Another user in the same domain. *EXTERNAL_USER*: A user outside the domain. *KEY*: A non-human actor. ', - name: 'gsuite.actor.type', - type: 'keyword', - }, - 'gsuite.actor.key': { - category: 'gsuite', - description: - 'Only present when `actor.type` is `KEY`. Can be the `consumer_key` of the requestor for OAuth 2LO API requests or an identifier for robot accounts. ', - name: 'gsuite.actor.key', - type: 'keyword', - }, - 'gsuite.event.type': { - category: 'gsuite', - description: - 'The type of GSuite event, mapped from `items[].events[].type` in the original payload. Each fileset can have a different set of values for it, more details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ', - example: 'audit#activity', - name: 'gsuite.event.type', - type: 'keyword', - }, - 'gsuite.kind': { - category: 'gsuite', - description: - 'The type of API resource, mapped from `kind` in the original payload. More details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ', - example: 'audit#activity', - name: 'gsuite.kind', - type: 'keyword', - }, - 'gsuite.organization.domain': { - category: 'gsuite', - description: "The domain that is affected by the report's event. ", - name: 'gsuite.organization.domain', - type: 'keyword', - }, - 'gsuite.admin.application.edition': { - category: 'gsuite', - description: 'The GSuite edition.', - name: 'gsuite.admin.application.edition', - type: 'keyword', - }, - 'gsuite.admin.application.name': { - category: 'gsuite', - description: "The application's name.", - name: 'gsuite.admin.application.name', - type: 'keyword', - }, - 'gsuite.admin.application.enabled': { - category: 'gsuite', - description: 'The enabled application.', - name: 'gsuite.admin.application.enabled', - type: 'keyword', - }, - 'gsuite.admin.application.licences_order_number': { - category: 'gsuite', - description: 'Order number used to redeem licenses.', - name: 'gsuite.admin.application.licences_order_number', - type: 'keyword', - }, - 'gsuite.admin.application.licences_purchased': { - category: 'gsuite', - description: 'Number of licences purchased.', - name: 'gsuite.admin.application.licences_purchased', - type: 'keyword', - }, - 'gsuite.admin.application.id': { - category: 'gsuite', - description: 'The application ID.', - name: 'gsuite.admin.application.id', - type: 'keyword', - }, - 'gsuite.admin.application.asp_id': { - category: 'gsuite', - description: 'The application specific password ID.', - name: 'gsuite.admin.application.asp_id', - type: 'keyword', - }, - 'gsuite.admin.application.package_id': { - category: 'gsuite', - description: 'The mobile application package ID.', - name: 'gsuite.admin.application.package_id', - type: 'keyword', - }, - 'gsuite.admin.group.email': { - category: 'gsuite', - description: "The group's primary email address.", - name: 'gsuite.admin.group.email', - type: 'keyword', - }, - 'gsuite.admin.new_value': { - category: 'gsuite', - description: 'The new value for the setting.', - name: 'gsuite.admin.new_value', - type: 'keyword', - }, - 'gsuite.admin.old_value': { - category: 'gsuite', - description: 'The old value for the setting.', - name: 'gsuite.admin.old_value', - type: 'keyword', - }, - 'gsuite.admin.org_unit.name': { - category: 'gsuite', - description: 'The organizational unit name.', - name: 'gsuite.admin.org_unit.name', - type: 'keyword', - }, - 'gsuite.admin.org_unit.full': { - category: 'gsuite', - description: 'The org unit full path including the root org unit name.', - name: 'gsuite.admin.org_unit.full', - type: 'keyword', - }, - 'gsuite.admin.setting.name': { - category: 'gsuite', - description: 'The setting name.', - name: 'gsuite.admin.setting.name', - type: 'keyword', - }, - 'gsuite.admin.user_defined_setting.name': { - category: 'gsuite', - description: 'The name of the user-defined setting.', - name: 'gsuite.admin.user_defined_setting.name', - type: 'keyword', - }, - 'gsuite.admin.setting.description': { - category: 'gsuite', - description: 'The setting name.', - name: 'gsuite.admin.setting.description', - type: 'keyword', - }, - 'gsuite.admin.group.priorities': { - category: 'gsuite', - description: 'Group priorities.', - name: 'gsuite.admin.group.priorities', - type: 'keyword', - }, - 'gsuite.admin.domain.alias': { - category: 'gsuite', - description: 'The domain alias.', - name: 'gsuite.admin.domain.alias', - type: 'keyword', - }, - 'gsuite.admin.domain.name': { - category: 'gsuite', - description: 'The primary domain name.', - name: 'gsuite.admin.domain.name', - type: 'keyword', - }, - 'gsuite.admin.domain.secondary_name': { - category: 'gsuite', - description: 'The secondary domain name.', - name: 'gsuite.admin.domain.secondary_name', - type: 'keyword', - }, - 'gsuite.admin.managed_configuration': { - category: 'gsuite', - description: 'The name of the managed configuration.', - name: 'gsuite.admin.managed_configuration', - type: 'keyword', - }, - 'gsuite.admin.non_featured_services_selection': { - category: 'gsuite', - description: - 'Non-featured services selection. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-application-settings#FLASHLIGHT_EDU_NON_FEATURED_SERVICES_SELECTED ', - name: 'gsuite.admin.non_featured_services_selection', - type: 'keyword', - }, - 'gsuite.admin.field': { - category: 'gsuite', - description: 'The name of the field.', - name: 'gsuite.admin.field', - type: 'keyword', - }, - 'gsuite.admin.resource.id': { - category: 'gsuite', - description: 'The name of the resource identifier.', - name: 'gsuite.admin.resource.id', - type: 'keyword', - }, - 'gsuite.admin.user.email': { - category: 'gsuite', - description: "The user's primary email address.", - name: 'gsuite.admin.user.email', - type: 'keyword', - }, - 'gsuite.admin.user.nickname': { - category: 'gsuite', - description: "The user's nickname.", - name: 'gsuite.admin.user.nickname', - type: 'keyword', - }, - 'gsuite.admin.user.birthdate': { - category: 'gsuite', - description: "The user's birth date.", - name: 'gsuite.admin.user.birthdate', - type: 'date', - }, - 'gsuite.admin.gateway.name': { - category: 'gsuite', - description: 'Gateway name. Present on some chat settings.', - name: 'gsuite.admin.gateway.name', - type: 'keyword', - }, - 'gsuite.admin.chrome_os.session_type': { - category: 'gsuite', - description: 'Chrome OS session type.', - name: 'gsuite.admin.chrome_os.session_type', - type: 'keyword', - }, - 'gsuite.admin.device.serial_number': { - category: 'gsuite', - description: 'Device serial number.', - name: 'gsuite.admin.device.serial_number', - type: 'keyword', - }, - 'gsuite.admin.device.id': { - category: 'gsuite', - name: 'gsuite.admin.device.id', - type: 'keyword', - }, - 'gsuite.admin.device.type': { - category: 'gsuite', - description: 'Device type.', - name: 'gsuite.admin.device.type', - type: 'keyword', - }, - 'gsuite.admin.print_server.name': { - category: 'gsuite', - description: 'The name of the print server.', - name: 'gsuite.admin.print_server.name', - type: 'keyword', - }, - 'gsuite.admin.printer.name': { - category: 'gsuite', - description: 'The name of the printer.', - name: 'gsuite.admin.printer.name', - type: 'keyword', - }, - 'gsuite.admin.device.command_details': { - category: 'gsuite', - description: 'Command details.', - name: 'gsuite.admin.device.command_details', - type: 'keyword', - }, - 'gsuite.admin.role.id': { - category: 'gsuite', - description: 'Unique identifier for this role privilege.', - name: 'gsuite.admin.role.id', - type: 'keyword', - }, - 'gsuite.admin.role.name': { - category: 'gsuite', - description: - 'The role name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-delegated-admin-settings ', - name: 'gsuite.admin.role.name', - type: 'keyword', - }, - 'gsuite.admin.privilege.name': { - category: 'gsuite', - description: 'Privilege name.', - name: 'gsuite.admin.privilege.name', - type: 'keyword', - }, - 'gsuite.admin.service.name': { - category: 'gsuite', - description: 'The service name.', - name: 'gsuite.admin.service.name', - type: 'keyword', - }, - 'gsuite.admin.url.name': { - category: 'gsuite', - description: 'The website name.', - name: 'gsuite.admin.url.name', - type: 'keyword', - }, - 'gsuite.admin.product.name': { - category: 'gsuite', - description: 'The product name.', - name: 'gsuite.admin.product.name', - type: 'keyword', - }, - 'gsuite.admin.product.sku': { - category: 'gsuite', - description: 'The product SKU.', - name: 'gsuite.admin.product.sku', - type: 'keyword', - }, - 'gsuite.admin.bulk_upload.failed': { - category: 'gsuite', - description: 'Number of failed records in bulk upload operation.', - name: 'gsuite.admin.bulk_upload.failed', - type: 'long', - }, - 'gsuite.admin.bulk_upload.total': { - category: 'gsuite', - description: 'Number of total records in bulk upload operation.', - name: 'gsuite.admin.bulk_upload.total', - type: 'long', - }, - 'gsuite.admin.group.allowed_list': { - category: 'gsuite', - description: 'Names of allow-listed groups.', - name: 'gsuite.admin.group.allowed_list', - type: 'keyword', - }, - 'gsuite.admin.email.quarantine_name': { - category: 'gsuite', - description: 'The name of the quarantine.', - name: 'gsuite.admin.email.quarantine_name', - type: 'keyword', - }, - 'gsuite.admin.email.log_search_filter.message_id': { - category: 'gsuite', - description: "The log search filter's email message ID.", - name: 'gsuite.admin.email.log_search_filter.message_id', - type: 'keyword', - }, - 'gsuite.admin.email.log_search_filter.start_date': { - category: 'gsuite', - description: "The log search filter's start date.", - name: 'gsuite.admin.email.log_search_filter.start_date', - type: 'date', - }, - 'gsuite.admin.email.log_search_filter.end_date': { - category: 'gsuite', - description: "The log search filter's ending date.", - name: 'gsuite.admin.email.log_search_filter.end_date', - type: 'date', - }, - 'gsuite.admin.email.log_search_filter.recipient.value': { - category: 'gsuite', - description: "The log search filter's email recipient.", - name: 'gsuite.admin.email.log_search_filter.recipient.value', - type: 'keyword', - }, - 'gsuite.admin.email.log_search_filter.sender.value': { - category: 'gsuite', - description: "The log search filter's email sender.", - name: 'gsuite.admin.email.log_search_filter.sender.value', - type: 'keyword', - }, - 'gsuite.admin.email.log_search_filter.recipient.ip': { - category: 'gsuite', - description: "The log search filter's email recipient's IP address.", - name: 'gsuite.admin.email.log_search_filter.recipient.ip', - type: 'ip', - }, - 'gsuite.admin.email.log_search_filter.sender.ip': { - category: 'gsuite', - description: "The log search filter's email sender's IP address.", - name: 'gsuite.admin.email.log_search_filter.sender.ip', - type: 'ip', - }, - 'gsuite.admin.chrome_licenses.enabled': { - category: 'gsuite', - description: - 'Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ', - name: 'gsuite.admin.chrome_licenses.enabled', - type: 'keyword', - }, - 'gsuite.admin.chrome_licenses.allowed': { - category: 'gsuite', - description: - 'Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ', - name: 'gsuite.admin.chrome_licenses.allowed', - type: 'keyword', - }, - 'gsuite.admin.oauth2.service.name': { - category: 'gsuite', - description: - 'OAuth2 service name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ', - name: 'gsuite.admin.oauth2.service.name', - type: 'keyword', - }, - 'gsuite.admin.oauth2.application.id': { - category: 'gsuite', - description: 'OAuth2 application ID.', - name: 'gsuite.admin.oauth2.application.id', - type: 'keyword', - }, - 'gsuite.admin.oauth2.application.name': { - category: 'gsuite', - description: 'OAuth2 application name.', - name: 'gsuite.admin.oauth2.application.name', - type: 'keyword', - }, - 'gsuite.admin.oauth2.application.type': { - category: 'gsuite', - description: - 'OAuth2 application type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ', - name: 'gsuite.admin.oauth2.application.type', - type: 'keyword', - }, - 'gsuite.admin.verification_method': { - category: 'gsuite', - description: - 'Related verification method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings and https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ', - name: 'gsuite.admin.verification_method', - type: 'keyword', - }, - 'gsuite.admin.alert.name': { - category: 'gsuite', - description: 'The alert name.', - name: 'gsuite.admin.alert.name', - type: 'keyword', - }, - 'gsuite.admin.rule.name': { - category: 'gsuite', - description: 'The rule name.', - name: 'gsuite.admin.rule.name', - type: 'keyword', - }, - 'gsuite.admin.api.client.name': { - category: 'gsuite', - description: 'The API client name.', - name: 'gsuite.admin.api.client.name', - type: 'keyword', - }, - 'gsuite.admin.api.scopes': { - category: 'gsuite', - description: 'The API scopes.', - name: 'gsuite.admin.api.scopes', - type: 'keyword', - }, - 'gsuite.admin.mdm.token': { - category: 'gsuite', - description: 'The MDM vendor enrollment token.', - name: 'gsuite.admin.mdm.token', - type: 'keyword', - }, - 'gsuite.admin.mdm.vendor': { - category: 'gsuite', - description: "The MDM vendor's name.", - name: 'gsuite.admin.mdm.vendor', - type: 'keyword', - }, - 'gsuite.admin.info_type': { - category: 'gsuite', - description: - 'This will be used to state what kind of information was changed. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ', - name: 'gsuite.admin.info_type', - type: 'keyword', - }, - 'gsuite.admin.email_monitor.dest_email': { - category: 'gsuite', - description: 'The destination address of the email monitor.', - name: 'gsuite.admin.email_monitor.dest_email', - type: 'keyword', - }, - 'gsuite.admin.email_monitor.level.chat': { - category: 'gsuite', - description: 'The chat email monitor level.', - name: 'gsuite.admin.email_monitor.level.chat', - type: 'keyword', - }, - 'gsuite.admin.email_monitor.level.draft': { - category: 'gsuite', - description: 'The draft email monitor level.', - name: 'gsuite.admin.email_monitor.level.draft', - type: 'keyword', - }, - 'gsuite.admin.email_monitor.level.incoming': { - category: 'gsuite', - description: 'The incoming email monitor level.', - name: 'gsuite.admin.email_monitor.level.incoming', - type: 'keyword', - }, - 'gsuite.admin.email_monitor.level.outgoing': { - category: 'gsuite', - description: 'The outgoing email monitor level.', - name: 'gsuite.admin.email_monitor.level.outgoing', - type: 'keyword', - }, - 'gsuite.admin.email_dump.include_deleted': { - category: 'gsuite', - description: 'Indicates if deleted emails are included in the export.', - name: 'gsuite.admin.email_dump.include_deleted', - type: 'boolean', - }, - 'gsuite.admin.email_dump.package_content': { - category: 'gsuite', - description: 'The contents of the mailbox package.', - name: 'gsuite.admin.email_dump.package_content', - type: 'keyword', - }, - 'gsuite.admin.email_dump.query': { - category: 'gsuite', - description: 'The search query used for the dump.', - name: 'gsuite.admin.email_dump.query', - type: 'keyword', - }, - 'gsuite.admin.request.id': { - category: 'gsuite', - description: 'The request ID.', - name: 'gsuite.admin.request.id', - type: 'keyword', - }, - 'gsuite.admin.mobile.action.id': { - category: 'gsuite', - description: "The mobile device action's ID.", - name: 'gsuite.admin.mobile.action.id', - type: 'keyword', - }, - 'gsuite.admin.mobile.action.type': { - category: 'gsuite', - description: - "The mobile device action's type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ", - name: 'gsuite.admin.mobile.action.type', - type: 'keyword', - }, - 'gsuite.admin.mobile.certificate.name': { - category: 'gsuite', - description: 'The mobile certificate common name.', - name: 'gsuite.admin.mobile.certificate.name', - type: 'keyword', - }, - 'gsuite.admin.mobile.company_owned_devices': { - category: 'gsuite', - description: 'The number of devices a company owns.', - name: 'gsuite.admin.mobile.company_owned_devices', - type: 'long', - }, - 'gsuite.admin.distribution.entity.name': { - category: 'gsuite', - description: - 'The distribution entity value, which can be a group name or an org-unit name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ', - name: 'gsuite.admin.distribution.entity.name', - type: 'keyword', - }, - 'gsuite.admin.distribution.entity.type': { - category: 'gsuite', - description: - 'The distribution entity type, which can be a group or an org-unit. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ', - name: 'gsuite.admin.distribution.entity.type', - type: 'keyword', - }, - 'gsuite.drive.billable': { - category: 'gsuite', - description: 'Whether this activity is billable.', - name: 'gsuite.drive.billable', - type: 'boolean', - }, - 'gsuite.drive.source_folder_id': { - category: 'gsuite', - name: 'gsuite.drive.source_folder_id', - type: 'keyword', - }, - 'gsuite.drive.source_folder_title': { - category: 'gsuite', - name: 'gsuite.drive.source_folder_title', - type: 'keyword', - }, - 'gsuite.drive.destination_folder_id': { - category: 'gsuite', - name: 'gsuite.drive.destination_folder_id', - type: 'keyword', - }, - 'gsuite.drive.destination_folder_title': { - category: 'gsuite', - name: 'gsuite.drive.destination_folder_title', - type: 'keyword', - }, - 'gsuite.drive.file.id': { - category: 'gsuite', - name: 'gsuite.drive.file.id', - type: 'keyword', - }, - 'gsuite.drive.file.type': { - category: 'gsuite', - description: - 'Document Drive type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.file.type', - type: 'keyword', - }, - 'gsuite.drive.originating_app_id': { - category: 'gsuite', - description: 'The Google Cloud Project ID of the application that performed the action. ', - name: 'gsuite.drive.originating_app_id', - type: 'keyword', - }, - 'gsuite.drive.file.owner.email': { - category: 'gsuite', - name: 'gsuite.drive.file.owner.email', - type: 'keyword', - }, - 'gsuite.drive.file.owner.is_shared_drive': { - category: 'gsuite', - description: 'Boolean flag denoting whether owner is a shared drive. ', - name: 'gsuite.drive.file.owner.is_shared_drive', - type: 'boolean', - }, - 'gsuite.drive.primary_event': { - category: 'gsuite', - description: - 'Whether this is a primary event. A single user action in Drive may generate several events. ', - name: 'gsuite.drive.primary_event', - type: 'boolean', - }, - 'gsuite.drive.shared_drive_id': { - category: 'gsuite', - description: - 'The unique identifier of the Team Drive. Only populated for for events relating to a Team Drive or item contained inside a Team Drive. ', - name: 'gsuite.drive.shared_drive_id', - type: 'keyword', - }, - 'gsuite.drive.visibility': { - category: 'gsuite', - description: - 'Visibility of target file. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.visibility', - type: 'keyword', - }, - 'gsuite.drive.new_value': { - category: 'gsuite', - description: - 'When a setting or property of the file changes, the new value for it will appear here. ', - name: 'gsuite.drive.new_value', - type: 'keyword', - }, - 'gsuite.drive.old_value': { - category: 'gsuite', - description: - 'When a setting or property of the file changes, the old value for it will appear here. ', - name: 'gsuite.drive.old_value', - type: 'keyword', - }, - 'gsuite.drive.sheets_import_range_recipient_doc': { - category: 'gsuite', - description: 'Doc ID of the recipient of a sheets import range.', - name: 'gsuite.drive.sheets_import_range_recipient_doc', - type: 'keyword', - }, - 'gsuite.drive.old_visibility': { - category: 'gsuite', - description: 'When visibility changes, this holds the old value. ', - name: 'gsuite.drive.old_visibility', - type: 'keyword', - }, - 'gsuite.drive.visibility_change': { - category: 'gsuite', - description: 'When visibility changes, this holds the new overall visibility of the file. ', - name: 'gsuite.drive.visibility_change', - type: 'keyword', - }, - 'gsuite.drive.target_domain': { - category: 'gsuite', - description: - 'The domain for which the acccess scope was changed. This can also be the alias all to indicate the access scope was changed for all domains that have visibility for this document. ', - name: 'gsuite.drive.target_domain', - type: 'keyword', - }, - 'gsuite.drive.added_role': { - category: 'gsuite', - description: - 'Added membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.added_role', - type: 'keyword', - }, - 'gsuite.drive.membership_change_type': { - category: 'gsuite', - description: - 'Type of change in Team Drive membership of a user/group. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.membership_change_type', - type: 'keyword', - }, - 'gsuite.drive.shared_drive_settings_change_type': { - category: 'gsuite', - description: - 'Type of change in Team Drive settings. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.shared_drive_settings_change_type', - type: 'keyword', - }, - 'gsuite.drive.removed_role': { - category: 'gsuite', - description: - 'Removed membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.removed_role', - type: 'keyword', - }, - 'gsuite.drive.target': { - category: 'gsuite', - description: 'Target user or group.', - name: 'gsuite.drive.target', - type: 'keyword', - }, - 'gsuite.groups.acl_permission': { - category: 'gsuite', - description: - 'Group permission setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'gsuite.groups.acl_permission', - type: 'keyword', - }, - 'gsuite.groups.email': { - category: 'gsuite', - description: 'Group email. ', - name: 'gsuite.groups.email', - type: 'keyword', - }, - 'gsuite.groups.member.email': { - category: 'gsuite', - description: 'Member email. ', - name: 'gsuite.groups.member.email', - type: 'keyword', - }, - 'gsuite.groups.member.role': { - category: 'gsuite', - description: - 'Member role. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'gsuite.groups.member.role', - type: 'keyword', - }, - 'gsuite.groups.setting': { - category: 'gsuite', - description: - 'Group setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'gsuite.groups.setting', - type: 'keyword', - }, - 'gsuite.groups.new_value': { - category: 'gsuite', - description: - 'New value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'gsuite.groups.new_value', - type: 'keyword', - }, - 'gsuite.groups.old_value': { - category: 'gsuite', - description: - 'Old value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups', - name: 'gsuite.groups.old_value', - type: 'keyword', - }, - 'gsuite.groups.value': { - category: 'gsuite', - description: - 'Value of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'gsuite.groups.value', - type: 'keyword', - }, - 'gsuite.groups.message.id': { - category: 'gsuite', - description: 'SMTP message Id of an email message. Present for moderation events. ', - name: 'gsuite.groups.message.id', - type: 'keyword', - }, - 'gsuite.groups.message.moderation_action': { - category: 'gsuite', - description: 'Message moderation action. Possible values are `approved` and `rejected`. ', - name: 'gsuite.groups.message.moderation_action', - type: 'keyword', - }, - 'gsuite.groups.status': { - category: 'gsuite', - description: - 'A status describing the output of an operation. Possible values are `failed` and `succeeded`. ', - name: 'gsuite.groups.status', - type: 'keyword', - }, - 'gsuite.login.affected_email_address': { - category: 'gsuite', - name: 'gsuite.login.affected_email_address', - type: 'keyword', - }, - 'gsuite.login.challenge_method': { - category: 'gsuite', - description: - 'Login challenge method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'gsuite.login.challenge_method', - type: 'keyword', - }, - 'gsuite.login.failure_type': { - category: 'gsuite', - description: - 'Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'gsuite.login.failure_type', - type: 'keyword', - }, - 'gsuite.login.type': { - category: 'gsuite', - description: - 'Login credentials type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'gsuite.login.type', - type: 'keyword', - }, - 'gsuite.login.is_second_factor': { - category: 'gsuite', - name: 'gsuite.login.is_second_factor', - type: 'boolean', - }, - 'gsuite.login.is_suspicious': { - category: 'gsuite', - name: 'gsuite.login.is_suspicious', - type: 'boolean', - }, - 'gsuite.saml.application_name': { - category: 'gsuite', - description: 'Saml SP application name. ', - name: 'gsuite.saml.application_name', - type: 'keyword', - }, - 'gsuite.saml.failure_type': { - category: 'gsuite', - description: - 'Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/saml. ', - name: 'gsuite.saml.failure_type', - type: 'keyword', - }, - 'gsuite.saml.initiated_by': { - category: 'gsuite', - description: 'Requester of SAML authentication. ', - name: 'gsuite.saml.initiated_by', - type: 'keyword', - }, - 'gsuite.saml.orgunit_path': { - category: 'gsuite', - description: 'User orgunit. ', - name: 'gsuite.saml.orgunit_path', - type: 'keyword', - }, - 'gsuite.saml.status_code': { - category: 'gsuite', - description: 'SAML status code. ', - name: 'gsuite.saml.status_code', - type: 'keyword', - }, - 'gsuite.saml.second_level_status_code': { - category: 'gsuite', - description: 'SAML second level status code. ', - name: 'gsuite.saml.second_level_status_code', - type: 'keyword', - }, - 'ibmmq.errorlog.installation': { - category: 'ibmmq', - description: - 'This is the installation name which can be given at installation time. Each installation of IBM MQ on UNIX, Linux, and Windows, has a unique identifier known as an installation name. The installation name is used to associate things such as queue managers and configuration files with an installation. ', - name: 'ibmmq.errorlog.installation', - type: 'keyword', - }, - 'ibmmq.errorlog.qmgr': { - category: 'ibmmq', - description: - 'Name of the queue manager. Queue managers provide queuing services to applications, and manages the queues that belong to them. ', - name: 'ibmmq.errorlog.qmgr', - type: 'keyword', - }, - 'ibmmq.errorlog.arithinsert': { - category: 'ibmmq', - description: 'Changing content based on error.id', - name: 'ibmmq.errorlog.arithinsert', - type: 'keyword', - }, - 'ibmmq.errorlog.commentinsert': { - category: 'ibmmq', - description: 'Changing content based on error.id', - name: 'ibmmq.errorlog.commentinsert', - type: 'keyword', - }, - 'ibmmq.errorlog.errordescription': { - category: 'ibmmq', - description: 'Please add description', - example: 'Please add example', - name: 'ibmmq.errorlog.errordescription', - type: 'text', - }, - 'ibmmq.errorlog.explanation': { - category: 'ibmmq', - description: 'Explaines the error in more detail', - name: 'ibmmq.errorlog.explanation', - type: 'keyword', - }, - 'ibmmq.errorlog.action': { - category: 'ibmmq', - description: 'Defines what to do when the error occurs', - name: 'ibmmq.errorlog.action', - type: 'keyword', - }, - 'ibmmq.errorlog.code': { - category: 'ibmmq', - description: 'Error code.', - name: 'ibmmq.errorlog.code', - type: 'keyword', - }, - 'iptables.ether_type': { - category: 'iptables', - description: 'Value of the ethernet type field identifying the network layer protocol. ', - name: 'iptables.ether_type', - type: 'long', - }, - 'iptables.flow_label': { - category: 'iptables', - description: 'IPv6 flow label. ', - name: 'iptables.flow_label', - type: 'integer', - }, - 'iptables.fragment_flags': { - category: 'iptables', - description: 'IP fragment flags. A combination of CE, DF and MF. ', - name: 'iptables.fragment_flags', - type: 'keyword', - }, - 'iptables.fragment_offset': { - category: 'iptables', - description: 'Offset of the current IP fragment. ', - name: 'iptables.fragment_offset', - type: 'long', - }, - 'iptables.icmp.code': { - category: 'iptables', - description: 'ICMP code. ', - name: 'iptables.icmp.code', - type: 'long', - }, - 'iptables.icmp.id': { - category: 'iptables', - description: 'ICMP ID. ', - name: 'iptables.icmp.id', - type: 'long', - }, - 'iptables.icmp.parameter': { - category: 'iptables', - description: 'ICMP parameter. ', - name: 'iptables.icmp.parameter', - type: 'long', - }, - 'iptables.icmp.redirect': { - category: 'iptables', - description: 'ICMP redirect address. ', - name: 'iptables.icmp.redirect', - type: 'ip', - }, - 'iptables.icmp.seq': { - category: 'iptables', - description: 'ICMP sequence number. ', - name: 'iptables.icmp.seq', - type: 'long', - }, - 'iptables.icmp.type': { - category: 'iptables', - description: 'ICMP type. ', - name: 'iptables.icmp.type', - type: 'long', - }, - 'iptables.id': { - category: 'iptables', - description: 'Packet identifier. ', - name: 'iptables.id', - type: 'long', - }, - 'iptables.incomplete_bytes': { - category: 'iptables', - description: 'Number of incomplete bytes. ', - name: 'iptables.incomplete_bytes', - type: 'long', - }, - 'iptables.input_device': { - category: 'iptables', - description: 'Device that received the packet. ', - name: 'iptables.input_device', - type: 'keyword', - }, - 'iptables.precedence_bits': { - category: 'iptables', - description: 'IP precedence bits. ', - name: 'iptables.precedence_bits', - type: 'short', - }, - 'iptables.tos': { - category: 'iptables', - description: 'IP Type of Service field. ', - name: 'iptables.tos', - type: 'long', - }, - 'iptables.length': { - category: 'iptables', - description: 'Packet length. ', - name: 'iptables.length', - type: 'long', - }, - 'iptables.output_device': { - category: 'iptables', - description: 'Device that output the packet. ', - name: 'iptables.output_device', - type: 'keyword', - }, - 'iptables.tcp.flags': { - category: 'iptables', - description: 'TCP flags. ', - name: 'iptables.tcp.flags', - type: 'keyword', - }, - 'iptables.tcp.reserved_bits': { - category: 'iptables', - description: 'TCP reserved bits. ', - name: 'iptables.tcp.reserved_bits', - type: 'short', - }, - 'iptables.tcp.seq': { - category: 'iptables', - description: 'TCP sequence number. ', - name: 'iptables.tcp.seq', - type: 'long', - }, - 'iptables.tcp.ack': { - category: 'iptables', - description: 'TCP Acknowledgment number. ', - name: 'iptables.tcp.ack', - type: 'long', - }, - 'iptables.tcp.window': { - category: 'iptables', - description: 'Advertised TCP window size. ', - name: 'iptables.tcp.window', - type: 'long', - }, - 'iptables.ttl': { - category: 'iptables', - description: 'Time To Live field. ', - name: 'iptables.ttl', - type: 'integer', - }, - 'iptables.udp.length': { - category: 'iptables', - description: 'Length of the UDP header and payload. ', - name: 'iptables.udp.length', - type: 'long', - }, - 'iptables.ubiquiti.input_zone': { - category: 'iptables', - description: 'Input zone. ', - name: 'iptables.ubiquiti.input_zone', - type: 'keyword', - }, - 'iptables.ubiquiti.output_zone': { - category: 'iptables', - description: 'Output zone. ', - name: 'iptables.ubiquiti.output_zone', - type: 'keyword', - }, - 'iptables.ubiquiti.rule_number': { - category: 'iptables', - description: 'The rule number within the rule set.', - name: 'iptables.ubiquiti.rule_number', - type: 'keyword', - }, - 'iptables.ubiquiti.rule_set': { - category: 'iptables', - description: 'The rule set name.', - name: 'iptables.ubiquiti.rule_set', - type: 'keyword', - }, - 'juniper.srx.reason': { - category: 'juniper', - description: 'reason ', - name: 'juniper.srx.reason', - type: 'keyword', - }, - 'juniper.srx.connection_tag': { - category: 'juniper', - description: 'connection tag ', - name: 'juniper.srx.connection_tag', - type: 'keyword', - }, - 'juniper.srx.service_name': { - category: 'juniper', - description: 'service name ', - name: 'juniper.srx.service_name', - type: 'keyword', - }, - 'juniper.srx.nat_connection_tag': { - category: 'juniper', - description: 'nat connection tag ', - name: 'juniper.srx.nat_connection_tag', - type: 'keyword', - }, - 'juniper.srx.src_nat_rule_type': { - category: 'juniper', - description: 'src nat rule type ', - name: 'juniper.srx.src_nat_rule_type', - type: 'keyword', - }, - 'juniper.srx.src_nat_rule_name': { - category: 'juniper', - description: 'src nat rule name ', - name: 'juniper.srx.src_nat_rule_name', - type: 'keyword', - }, - 'juniper.srx.dst_nat_rule_type': { - category: 'juniper', - description: 'dst nat rule type ', - name: 'juniper.srx.dst_nat_rule_type', - type: 'keyword', - }, - 'juniper.srx.dst_nat_rule_name': { - category: 'juniper', - description: 'dst nat rule name ', - name: 'juniper.srx.dst_nat_rule_name', - type: 'keyword', - }, - 'juniper.srx.protocol_id': { - category: 'juniper', - description: 'protocol id ', - name: 'juniper.srx.protocol_id', - type: 'keyword', - }, - 'juniper.srx.policy_name': { - category: 'juniper', - description: 'policy name ', - name: 'juniper.srx.policy_name', - type: 'keyword', - }, - 'juniper.srx.session_id_32': { - category: 'juniper', - description: 'session id 32 ', - name: 'juniper.srx.session_id_32', - type: 'keyword', - }, - 'juniper.srx.session_id': { - category: 'juniper', - description: 'session id ', - name: 'juniper.srx.session_id', - type: 'keyword', - }, - 'juniper.srx.outbound_packets': { - category: 'juniper', - description: 'packets from client ', - name: 'juniper.srx.outbound_packets', - type: 'integer', - }, - 'juniper.srx.outbound_bytes': { - category: 'juniper', - description: 'bytes from client ', - name: 'juniper.srx.outbound_bytes', - type: 'integer', - }, - 'juniper.srx.inbound_packets': { - category: 'juniper', - description: 'packets from server ', - name: 'juniper.srx.inbound_packets', - type: 'integer', - }, - 'juniper.srx.inbound_bytes': { - category: 'juniper', - description: 'bytes from server ', - name: 'juniper.srx.inbound_bytes', - type: 'integer', - }, - 'juniper.srx.elapsed_time': { - category: 'juniper', - description: 'elapsed time ', - name: 'juniper.srx.elapsed_time', - type: 'date', - }, - 'juniper.srx.application': { - category: 'juniper', - description: 'application ', - name: 'juniper.srx.application', - type: 'keyword', - }, - 'juniper.srx.nested_application': { - category: 'juniper', - description: 'nested application ', - name: 'juniper.srx.nested_application', - type: 'keyword', - }, - 'juniper.srx.username': { - category: 'juniper', - description: 'username ', - name: 'juniper.srx.username', - type: 'keyword', - }, - 'juniper.srx.roles': { - category: 'juniper', - description: 'roles ', - name: 'juniper.srx.roles', - type: 'keyword', - }, - 'juniper.srx.encrypted': { - category: 'juniper', - description: 'encrypted ', - name: 'juniper.srx.encrypted', - type: 'keyword', - }, - 'juniper.srx.application_category': { - category: 'juniper', - description: 'application category ', - name: 'juniper.srx.application_category', - type: 'keyword', - }, - 'juniper.srx.application_sub_category': { - category: 'juniper', - description: 'application sub category ', - name: 'juniper.srx.application_sub_category', - type: 'keyword', - }, - 'juniper.srx.application_characteristics': { - category: 'juniper', - description: 'application characteristics ', - name: 'juniper.srx.application_characteristics', - type: 'keyword', - }, - 'juniper.srx.secure_web_proxy_session_type': { - category: 'juniper', - description: 'secure web proxy session type ', - name: 'juniper.srx.secure_web_proxy_session_type', - type: 'keyword', - }, - 'juniper.srx.peer_session_id': { - category: 'juniper', - description: 'peer session id ', - name: 'juniper.srx.peer_session_id', - type: 'keyword', - }, - 'juniper.srx.peer_source_address': { - category: 'juniper', - description: 'peer source address ', - name: 'juniper.srx.peer_source_address', - type: 'ip', - }, - 'juniper.srx.peer_source_port': { - category: 'juniper', - description: 'peer source port ', - name: 'juniper.srx.peer_source_port', - type: 'integer', - }, - 'juniper.srx.peer_destination_address': { - category: 'juniper', - description: 'peer destination address ', - name: 'juniper.srx.peer_destination_address', - type: 'ip', - }, - 'juniper.srx.peer_destination_port': { - category: 'juniper', - description: 'peer destination port ', - name: 'juniper.srx.peer_destination_port', - type: 'integer', - }, - 'juniper.srx.hostname': { - category: 'juniper', - description: 'hostname ', - name: 'juniper.srx.hostname', - type: 'keyword', - }, - 'juniper.srx.src_vrf_grp': { - category: 'juniper', - description: 'src_vrf_grp ', - name: 'juniper.srx.src_vrf_grp', - type: 'keyword', - }, - 'juniper.srx.dst_vrf_grp': { - category: 'juniper', - description: 'dst_vrf_grp ', - name: 'juniper.srx.dst_vrf_grp', - type: 'keyword', - }, - 'juniper.srx.icmp_type': { - category: 'juniper', - description: 'icmp type ', - name: 'juniper.srx.icmp_type', - type: 'integer', - }, - 'juniper.srx.process': { - category: 'juniper', - description: 'process that generated the message ', - name: 'juniper.srx.process', - type: 'keyword', - }, - 'juniper.srx.apbr_rule_type': { - category: 'juniper', - description: 'apbr rule type ', - name: 'juniper.srx.apbr_rule_type', - type: 'keyword', - }, - 'juniper.srx.dscp_value': { - category: 'juniper', - description: 'apbr rule type ', - name: 'juniper.srx.dscp_value', - type: 'integer', - }, - 'juniper.srx.logical_system_name': { - category: 'juniper', - description: 'logical system name ', - name: 'juniper.srx.logical_system_name', - type: 'keyword', - }, - 'juniper.srx.profile_name': { - category: 'juniper', - description: 'profile name ', - name: 'juniper.srx.profile_name', - type: 'keyword', - }, - 'juniper.srx.routing_instance': { - category: 'juniper', - description: 'routing instance ', - name: 'juniper.srx.routing_instance', - type: 'keyword', - }, - 'juniper.srx.rule_name': { - category: 'juniper', - description: 'rule name ', - name: 'juniper.srx.rule_name', - type: 'keyword', - }, - 'juniper.srx.uplink_tx_bytes': { - category: 'juniper', - description: 'uplink tx bytes ', - name: 'juniper.srx.uplink_tx_bytes', - type: 'integer', - }, - 'juniper.srx.uplink_rx_bytes': { - category: 'juniper', - description: 'uplink rx bytes ', - name: 'juniper.srx.uplink_rx_bytes', - type: 'integer', - }, - 'juniper.srx.obj': { - category: 'juniper', - description: 'url path ', - name: 'juniper.srx.obj', - type: 'keyword', - }, - 'juniper.srx.url': { - category: 'juniper', - description: 'url domain ', - name: 'juniper.srx.url', - type: 'keyword', - }, - 'juniper.srx.profile': { - category: 'juniper', - description: 'filter profile ', - name: 'juniper.srx.profile', - type: 'keyword', - }, - 'juniper.srx.category': { - category: 'juniper', - description: 'filter category ', - name: 'juniper.srx.category', - type: 'keyword', - }, - 'juniper.srx.filename': { - category: 'juniper', - description: 'filename ', - name: 'juniper.srx.filename', - type: 'keyword', - }, - 'juniper.srx.temporary_filename': { - category: 'juniper', - description: 'temporary_filename ', - name: 'juniper.srx.temporary_filename', - type: 'keyword', - }, - 'juniper.srx.name': { - category: 'juniper', - description: 'name ', - name: 'juniper.srx.name', - type: 'keyword', - }, - 'juniper.srx.error_message': { - category: 'juniper', - description: 'error_message ', - name: 'juniper.srx.error_message', - type: 'keyword', - }, - 'juniper.srx.error_code': { - category: 'juniper', - description: 'error_code ', - name: 'juniper.srx.error_code', - type: 'keyword', - }, - 'juniper.srx.action': { - category: 'juniper', - description: 'action ', - name: 'juniper.srx.action', - type: 'keyword', - }, - 'juniper.srx.protocol': { - category: 'juniper', - description: 'protocol ', - name: 'juniper.srx.protocol', - type: 'keyword', - }, - 'juniper.srx.protocol_name': { - category: 'juniper', - description: 'protocol name ', - name: 'juniper.srx.protocol_name', - type: 'keyword', - }, - 'juniper.srx.type': { - category: 'juniper', - description: 'type ', - name: 'juniper.srx.type', - type: 'keyword', - }, - 'juniper.srx.repeat_count': { - category: 'juniper', - description: 'repeat count ', - name: 'juniper.srx.repeat_count', - type: 'integer', - }, - 'juniper.srx.alert': { - category: 'juniper', - description: 'repeat alert ', - name: 'juniper.srx.alert', - type: 'keyword', - }, - 'juniper.srx.message_type': { - category: 'juniper', - description: 'message type ', - name: 'juniper.srx.message_type', - type: 'keyword', - }, - 'juniper.srx.threat_severity': { - category: 'juniper', - description: 'threat severity ', - name: 'juniper.srx.threat_severity', - type: 'keyword', - }, - 'juniper.srx.application_name': { - category: 'juniper', - description: 'application name ', - name: 'juniper.srx.application_name', - type: 'keyword', - }, - 'juniper.srx.attack_name': { - category: 'juniper', - description: 'attack name ', - name: 'juniper.srx.attack_name', - type: 'keyword', - }, - 'juniper.srx.index': { - category: 'juniper', - description: 'index ', - name: 'juniper.srx.index', - type: 'keyword', - }, - 'juniper.srx.message': { - category: 'juniper', - description: 'mesagge ', - name: 'juniper.srx.message', - type: 'keyword', - }, - 'juniper.srx.epoch_time': { - category: 'juniper', - description: 'epoch time ', - name: 'juniper.srx.epoch_time', - type: 'date', - }, - 'juniper.srx.packet_log_id': { - category: 'juniper', - description: 'packet log id ', - name: 'juniper.srx.packet_log_id', - type: 'integer', - }, - 'juniper.srx.export_id': { - category: 'juniper', - description: 'packet log id ', - name: 'juniper.srx.export_id', - type: 'integer', - }, - 'juniper.srx.ddos_application_name': { - category: 'juniper', - description: 'ddos application name ', - name: 'juniper.srx.ddos_application_name', - type: 'keyword', - }, - 'juniper.srx.connection_hit_rate': { - category: 'juniper', - description: 'connection hit rate ', - name: 'juniper.srx.connection_hit_rate', - type: 'integer', - }, - 'juniper.srx.time_scope': { - category: 'juniper', - description: 'time scope ', - name: 'juniper.srx.time_scope', - type: 'keyword', - }, - 'juniper.srx.context_hit_rate': { - category: 'juniper', - description: 'context hit rate ', - name: 'juniper.srx.context_hit_rate', - type: 'integer', - }, - 'juniper.srx.context_value_hit_rate': { - category: 'juniper', - description: 'context value hit rate ', - name: 'juniper.srx.context_value_hit_rate', - type: 'integer', - }, - 'juniper.srx.time_count': { - category: 'juniper', - description: 'time count ', - name: 'juniper.srx.time_count', - type: 'integer', - }, - 'juniper.srx.time_period': { - category: 'juniper', - description: 'time period ', - name: 'juniper.srx.time_period', - type: 'integer', - }, - 'juniper.srx.context_value': { - category: 'juniper', - description: 'context value ', - name: 'juniper.srx.context_value', - type: 'keyword', - }, - 'juniper.srx.context_name': { - category: 'juniper', - description: 'context name ', - name: 'juniper.srx.context_name', - type: 'keyword', - }, - 'juniper.srx.ruleebase_name': { - category: 'juniper', - description: 'ruleebase name ', - name: 'juniper.srx.ruleebase_name', - type: 'keyword', - }, - 'juniper.srx.verdict_source': { - category: 'juniper', - description: 'verdict source ', - name: 'juniper.srx.verdict_source', - type: 'keyword', - }, - 'juniper.srx.verdict_number': { - category: 'juniper', - description: 'verdict number ', - name: 'juniper.srx.verdict_number', - type: 'integer', - }, - 'juniper.srx.file_category': { - category: 'juniper', - description: 'file category ', - name: 'juniper.srx.file_category', - type: 'keyword', - }, - 'juniper.srx.sample_sha256': { - category: 'juniper', - description: 'sample sha256 ', - name: 'juniper.srx.sample_sha256', - type: 'keyword', - }, - 'juniper.srx.malware_info': { - category: 'juniper', - description: 'malware info ', - name: 'juniper.srx.malware_info', - type: 'keyword', - }, - 'juniper.srx.client_ip': { - category: 'juniper', - description: 'client ip ', - name: 'juniper.srx.client_ip', - type: 'ip', - }, - 'juniper.srx.tenant_id': { - category: 'juniper', - description: 'tenant id ', - name: 'juniper.srx.tenant_id', - type: 'keyword', - }, - 'juniper.srx.timestamp': { - category: 'juniper', - description: 'timestamp ', - name: 'juniper.srx.timestamp', - type: 'date', - }, - 'juniper.srx.th': { - category: 'juniper', - description: 'th ', - name: 'juniper.srx.th', - type: 'keyword', - }, - 'juniper.srx.status': { - category: 'juniper', - description: 'status ', - name: 'juniper.srx.status', - type: 'keyword', - }, - 'juniper.srx.state': { - category: 'juniper', - description: 'state ', - name: 'juniper.srx.state', - type: 'keyword', - }, - 'juniper.srx.file_hash_lookup': { - category: 'juniper', - description: 'file hash lookup ', - name: 'juniper.srx.file_hash_lookup', - type: 'keyword', - }, - 'juniper.srx.file_name': { - category: 'juniper', - description: 'file name ', - name: 'juniper.srx.file_name', - type: 'keyword', - }, - 'juniper.srx.action_detail': { - category: 'juniper', - description: 'action detail ', - name: 'juniper.srx.action_detail', - type: 'keyword', - }, - 'juniper.srx.sub_category': { - category: 'juniper', - description: 'sub category ', - name: 'juniper.srx.sub_category', - type: 'keyword', - }, - 'juniper.srx.feed_name': { - category: 'juniper', - description: 'feed name ', - name: 'juniper.srx.feed_name', - type: 'keyword', - }, - 'juniper.srx.occur_count': { - category: 'juniper', - description: 'occur count ', - name: 'juniper.srx.occur_count', - type: 'integer', - }, - 'juniper.srx.tag': { - category: 'juniper', - description: 'system log message tag, which uniquely identifies the message. ', - name: 'juniper.srx.tag', - type: 'keyword', - }, - 'microsoft.defender_atp.lastUpdateTime': { - category: 'microsoft', - description: 'The date and time (in UTC) the alert was last updated. ', - name: 'microsoft.defender_atp.lastUpdateTime', - type: 'date', - }, - 'microsoft.defender_atp.resolvedTime': { - category: 'microsoft', - description: "The date and time in which the status of the alert was changed to 'Resolved'. ", - name: 'microsoft.defender_atp.resolvedTime', - type: 'date', - }, - 'microsoft.defender_atp.incidentId': { - category: 'microsoft', - description: 'The Incident ID of the Alert. ', - name: 'microsoft.defender_atp.incidentId', - type: 'keyword', - }, - 'microsoft.defender_atp.investigationId': { - category: 'microsoft', - description: 'The Investigation ID related to the Alert. ', - name: 'microsoft.defender_atp.investigationId', - type: 'keyword', - }, - 'microsoft.defender_atp.investigationState': { - category: 'microsoft', - description: 'The current state of the Investigation. ', - name: 'microsoft.defender_atp.investigationState', - type: 'keyword', - }, - 'microsoft.defender_atp.assignedTo': { - category: 'microsoft', - description: 'Owner of the alert. ', - name: 'microsoft.defender_atp.assignedTo', - type: 'keyword', - }, - 'microsoft.defender_atp.status': { - category: 'microsoft', - description: - "Specifies the current status of the alert. Possible values are: 'Unknown', 'New', 'InProgress' and 'Resolved'. ", - name: 'microsoft.defender_atp.status', - type: 'keyword', - }, - 'microsoft.defender_atp.classification': { - category: 'microsoft', - description: - "Specification of the alert. Possible values are: 'Unknown', 'FalsePositive', 'TruePositive'. ", - name: 'microsoft.defender_atp.classification', - type: 'keyword', - }, - 'microsoft.defender_atp.determination': { - category: 'microsoft', - description: - "Specifies the determination of the alert. Possible values are: 'NotAvailable', 'Apt', 'Malware', 'SecurityPersonnel', 'SecurityTesting', 'UnwantedSoftware', 'Other'. ", - name: 'microsoft.defender_atp.determination', - type: 'keyword', - }, - 'microsoft.defender_atp.threatFamilyName': { - category: 'microsoft', - description: 'Threat family. ', - name: 'microsoft.defender_atp.threatFamilyName', - type: 'keyword', - }, - 'microsoft.defender_atp.rbacGroupName': { - category: 'microsoft', - description: 'User group related to the alert ', - name: 'microsoft.defender_atp.rbacGroupName', - type: 'keyword', - }, - 'microsoft.defender_atp.evidence.domainName': { - category: 'microsoft', - description: 'Domain name related to the alert ', - name: 'microsoft.defender_atp.evidence.domainName', - type: 'keyword', - }, - 'microsoft.defender_atp.evidence.ipAddress': { - category: 'microsoft', - description: 'IP address involved in the alert ', - name: 'microsoft.defender_atp.evidence.ipAddress', - type: 'ip', - }, - 'microsoft.defender_atp.evidence.aadUserId': { - category: 'microsoft', - description: 'ID of the user involved in the alert ', - name: 'microsoft.defender_atp.evidence.aadUserId', - type: 'keyword', - }, - 'microsoft.defender_atp.evidence.accountName': { - category: 'microsoft', - description: 'Username of the user involved in the alert ', - name: 'microsoft.defender_atp.evidence.accountName', - type: 'keyword', - }, - 'microsoft.defender_atp.evidence.entityType': { - category: 'microsoft', - description: 'The type of evidence ', - name: 'microsoft.defender_atp.evidence.entityType', - type: 'keyword', - }, - 'microsoft.defender_atp.evidence.userPrincipalName': { - category: 'microsoft', - description: 'Principal name of the user involved in the alert ', - name: 'microsoft.defender_atp.evidence.userPrincipalName', - type: 'keyword', - }, - 'microsoft.m365_defender.incidentId': { - category: 'microsoft', - description: 'Unique identifier to represent the incident. ', - name: 'microsoft.m365_defender.incidentId', - type: 'keyword', - }, - 'microsoft.m365_defender.redirectIncidentId': { - category: 'microsoft', - description: - 'Only populated in case an incident is being grouped together with another incident, as part of the incident processing logic. ', - name: 'microsoft.m365_defender.redirectIncidentId', - type: 'keyword', - }, - 'microsoft.m365_defender.incidentName': { - category: 'microsoft', - description: 'Name of the Incident. ', - name: 'microsoft.m365_defender.incidentName', - type: 'keyword', - }, - 'microsoft.m365_defender.determination': { - category: 'microsoft', - description: - 'Specifies the determination of the incident. The property values are: NotAvailable, Apt, Malware, SecurityPersonnel, SecurityTesting, UnwantedSoftware, Other. ', - name: 'microsoft.m365_defender.determination', - type: 'keyword', - }, - 'microsoft.m365_defender.investigationState': { - category: 'microsoft', - description: 'The current state of the Investigation. ', - name: 'microsoft.m365_defender.investigationState', - type: 'keyword', - }, - 'microsoft.m365_defender.assignedTo': { - category: 'microsoft', - description: 'Owner of the alert. ', - name: 'microsoft.m365_defender.assignedTo', - type: 'keyword', - }, - 'microsoft.m365_defender.tags': { - category: 'microsoft', - description: - 'Array of custom tags associated with an incident, for example to flag a group of incidents with a common characteristic. ', - name: 'microsoft.m365_defender.tags', - type: 'keyword', - }, - 'microsoft.m365_defender.status': { - category: 'microsoft', - description: - "Specifies the current status of the alert. Possible values are: 'Unknown', 'New', 'InProgress' and 'Resolved'. ", - name: 'microsoft.m365_defender.status', - type: 'keyword', - }, - 'microsoft.m365_defender.classification': { - category: 'microsoft', - description: - "Specification of the alert. Possible values are: 'Unknown', 'FalsePositive', 'TruePositive'. ", - name: 'microsoft.m365_defender.classification', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.incidentId': { - category: 'microsoft', - description: 'Unique identifier to represent the incident this alert is associated with. ', - name: 'microsoft.m365_defender.alerts.incidentId', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.resolvedTime': { - category: 'microsoft', - description: 'Time when alert was resolved. ', - name: 'microsoft.m365_defender.alerts.resolvedTime', - type: 'date', - }, - 'microsoft.m365_defender.alerts.status': { - category: 'microsoft', - description: 'Categorize alerts (as New, Active, or Resolved). ', - name: 'microsoft.m365_defender.alerts.status', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.severity': { - category: 'microsoft', - description: 'The severity of the related alert. ', - name: 'microsoft.m365_defender.alerts.severity', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.creationTime': { - category: 'microsoft', - description: 'Time when alert was first created. ', - name: 'microsoft.m365_defender.alerts.creationTime', - type: 'date', - }, - 'microsoft.m365_defender.alerts.lastUpdatedTime': { - category: 'microsoft', - description: 'Time when alert was last updated. ', - name: 'microsoft.m365_defender.alerts.lastUpdatedTime', - type: 'date', - }, - 'microsoft.m365_defender.alerts.investigationId': { - category: 'microsoft', - description: 'The automated investigation id triggered by this alert. ', - name: 'microsoft.m365_defender.alerts.investigationId', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.userSid': { - category: 'microsoft', - description: 'The SID of the related user ', - name: 'microsoft.m365_defender.alerts.userSid', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.detectionSource': { - category: 'microsoft', - description: 'The service that initially detected the threat. ', - name: 'microsoft.m365_defender.alerts.detectionSource', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.classification': { - category: 'microsoft', - description: - 'The specification for the incident. The property values are: Unknown, FalsePositive, TruePositive or null. ', - name: 'microsoft.m365_defender.alerts.classification', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.investigationState': { - category: 'microsoft', - description: "Information on the investigation's current status. ", - name: 'microsoft.m365_defender.alerts.investigationState', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.determination': { - category: 'microsoft', - description: - 'Specifies the determination of the incident. The property values are: NotAvailable, Apt, Malware, SecurityPersonnel, SecurityTesting, UnwantedSoftware, Other or null ', - name: 'microsoft.m365_defender.alerts.determination', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.assignedTo': { - category: 'microsoft', - description: 'Owner of the incident, or null if no owner is assigned. ', - name: 'microsoft.m365_defender.alerts.assignedTo', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.actorName': { - category: 'microsoft', - description: 'The activity group, if any, the associated with this alert. ', - name: 'microsoft.m365_defender.alerts.actorName', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.threatFamilyName': { - category: 'microsoft', - description: 'Threat family associated with this alert. ', - name: 'microsoft.m365_defender.alerts.threatFamilyName', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.mitreTechniques': { - category: 'microsoft', - description: 'The attack techniques, as aligned with the MITRE ATT&CK™ framework. ', - name: 'microsoft.m365_defender.alerts.mitreTechniques', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.entityType': { - category: 'microsoft', - description: - 'Entities that have been identified to be part of, or related to, a given alert. The properties values are: User, Ip, Url, File, Process, MailBox, MailMessage, MailCluster, Registry. ', - name: 'microsoft.m365_defender.alerts.entities.entityType', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.accountName': { - category: 'microsoft', - description: 'Account name of the related user. ', - name: 'microsoft.m365_defender.alerts.entities.accountName', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.mailboxDisplayName': { - category: 'microsoft', - description: 'The display name of the related mailbox. ', - name: 'microsoft.m365_defender.alerts.entities.mailboxDisplayName', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.mailboxAddress': { - category: 'microsoft', - description: 'The mail address of the related mailbox. ', - name: 'microsoft.m365_defender.alerts.entities.mailboxAddress', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.clusterBy': { - category: 'microsoft', - description: 'A list of metadata if the entityType is MailCluster. ', - name: 'microsoft.m365_defender.alerts.entities.clusterBy', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.sender': { - category: 'microsoft', - description: 'The sender for the related email message. ', - name: 'microsoft.m365_defender.alerts.entities.sender', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.recipient': { - category: 'microsoft', - description: 'The recipient for the related email message. ', - name: 'microsoft.m365_defender.alerts.entities.recipient', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.subject': { - category: 'microsoft', - description: 'The subject for the related email message. ', - name: 'microsoft.m365_defender.alerts.entities.subject', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.deliveryAction': { - category: 'microsoft', - description: 'The delivery status for the related email message. ', - name: 'microsoft.m365_defender.alerts.entities.deliveryAction', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.securityGroupId': { - category: 'microsoft', - description: 'The Security Group ID for the user related to the email message. ', - name: 'microsoft.m365_defender.alerts.entities.securityGroupId', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.securityGroupName': { - category: 'microsoft', - description: 'The Security Group Name for the user related to the email message. ', - name: 'microsoft.m365_defender.alerts.entities.securityGroupName', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.registryHive': { - category: 'microsoft', - description: - 'Reference to which Hive in registry the event is related to, if eventType is registry. Example: HKEY_LOCAL_MACHINE. ', - name: 'microsoft.m365_defender.alerts.entities.registryHive', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.registryKey': { - category: 'microsoft', - description: 'Reference to the related registry key to the event. ', - name: 'microsoft.m365_defender.alerts.entities.registryKey', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.registryValueType': { - category: 'microsoft', - description: 'Value type of the registry key/value pair related to the event. ', - name: 'microsoft.m365_defender.alerts.entities.registryValueType', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.deviceId': { - category: 'microsoft', - description: 'The unique ID of the device related to the event. ', - name: 'microsoft.m365_defender.alerts.entities.deviceId', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.entities.ipAddress': { - category: 'microsoft', - description: 'The related IP address to the event. ', - name: 'microsoft.m365_defender.alerts.entities.ipAddress', - type: 'keyword', - }, - 'microsoft.m365_defender.alerts.devices': { - category: 'microsoft', - description: 'The devices related to the investigation. ', - name: 'microsoft.m365_defender.alerts.devices', - type: 'flattened', - }, - 'misp.attack_pattern.id': { - category: 'misp', - description: 'Identifier of the threat indicator. ', - name: 'misp.attack_pattern.id', - type: 'keyword', - }, - 'misp.attack_pattern.name': { - category: 'misp', - description: 'Name of the attack pattern. ', - name: 'misp.attack_pattern.name', - type: 'keyword', - }, - 'misp.attack_pattern.description': { - category: 'misp', - description: 'Description of the attack pattern. ', - name: 'misp.attack_pattern.description', - type: 'text', - }, - 'misp.attack_pattern.kill_chain_phases': { - category: 'misp', - description: 'The kill chain phase(s) to which this attack pattern corresponds. ', - name: 'misp.attack_pattern.kill_chain_phases', - type: 'keyword', - }, - 'misp.campaign.id': { - category: 'misp', - description: 'Identifier of the campaign. ', - name: 'misp.campaign.id', - type: 'keyword', - }, - 'misp.campaign.name': { - category: 'misp', - description: 'Name of the campaign. ', - name: 'misp.campaign.name', - type: 'keyword', - }, - 'misp.campaign.description': { - category: 'misp', - description: 'Description of the campaign. ', - name: 'misp.campaign.description', - type: 'text', - }, - 'misp.campaign.aliases': { - category: 'misp', - description: 'Alternative names used to identify this campaign. ', - name: 'misp.campaign.aliases', - type: 'text', - }, - 'misp.campaign.first_seen': { - category: 'misp', - description: 'The time that this Campaign was first seen, in RFC3339 format. ', - name: 'misp.campaign.first_seen', - type: 'date', - }, - 'misp.campaign.last_seen': { - category: 'misp', - description: 'The time that this Campaign was last seen, in RFC3339 format. ', - name: 'misp.campaign.last_seen', - type: 'date', - }, - 'misp.campaign.objective': { - category: 'misp', - description: - "This field defines the Campaign's primary goal, objective, desired outcome, or intended effect. ", - name: 'misp.campaign.objective', - type: 'keyword', - }, - 'misp.course_of_action.id': { - category: 'misp', - description: 'Identifier of the Course of Action. ', - name: 'misp.course_of_action.id', - type: 'keyword', - }, - 'misp.course_of_action.name': { - category: 'misp', - description: 'The name used to identify the Course of Action. ', - name: 'misp.course_of_action.name', - type: 'keyword', - }, - 'misp.course_of_action.description': { - category: 'misp', - description: 'Description of the Course of Action. ', - name: 'misp.course_of_action.description', - type: 'text', - }, - 'misp.identity.id': { - category: 'misp', - description: 'Identifier of the Identity. ', - name: 'misp.identity.id', - type: 'keyword', - }, - 'misp.identity.name': { - category: 'misp', - description: 'The name used to identify the Identity. ', - name: 'misp.identity.name', - type: 'keyword', - }, - 'misp.identity.description': { - category: 'misp', - description: 'Description of the Identity. ', - name: 'misp.identity.description', - type: 'text', - }, - 'misp.identity.identity_class': { - category: 'misp', - description: - 'The type of entity that this Identity describes, e.g., an individual or organization. Open Vocab - identity-class-ov ', - name: 'misp.identity.identity_class', - type: 'keyword', - }, - 'misp.identity.labels': { - category: 'misp', - description: 'The list of roles that this Identity performs. ', - example: 'CEO\n', - name: 'misp.identity.labels', - type: 'keyword', - }, - 'misp.identity.sectors': { - category: 'misp', - description: - 'The list of sectors that this Identity belongs to. Open Vocab - industry-sector-ov ', - name: 'misp.identity.sectors', - type: 'keyword', - }, - 'misp.identity.contact_information': { - category: 'misp', - description: 'The contact information (e-mail, phone number, etc.) for this Identity. ', - name: 'misp.identity.contact_information', - type: 'text', - }, - 'misp.intrusion_set.id': { - category: 'misp', - description: 'Identifier of the Intrusion Set. ', - name: 'misp.intrusion_set.id', - type: 'keyword', - }, - 'misp.intrusion_set.name': { - category: 'misp', - description: 'The name used to identify the Intrusion Set. ', - name: 'misp.intrusion_set.name', - type: 'keyword', - }, - 'misp.intrusion_set.description': { - category: 'misp', - description: 'Description of the Intrusion Set. ', - name: 'misp.intrusion_set.description', - type: 'text', - }, - 'misp.intrusion_set.aliases': { - category: 'misp', - description: 'Alternative names used to identify the Intrusion Set. ', - name: 'misp.intrusion_set.aliases', - type: 'text', - }, - 'misp.intrusion_set.first_seen': { - category: 'misp', - description: 'The time that this Intrusion Set was first seen, in RFC3339 format. ', - name: 'misp.intrusion_set.first_seen', - type: 'date', - }, - 'misp.intrusion_set.last_seen': { - category: 'misp', - description: 'The time that this Intrusion Set was last seen, in RFC3339 format. ', - name: 'misp.intrusion_set.last_seen', - type: 'date', - }, - 'misp.intrusion_set.goals': { - category: 'misp', - description: 'The high level goals of this Intrusion Set, namely, what are they trying to do. ', - name: 'misp.intrusion_set.goals', - type: 'text', - }, - 'misp.intrusion_set.resource_level': { - category: 'misp', - description: - 'This defines the organizational level at which this Intrusion Set typically works. Open Vocab - attack-resource-level-ov ', - name: 'misp.intrusion_set.resource_level', - type: 'text', - }, - 'misp.intrusion_set.primary_motivation': { - category: 'misp', - description: - 'The primary reason, motivation, or purpose behind this Intrusion Set. Open Vocab - attack-motivation-ov ', - name: 'misp.intrusion_set.primary_motivation', - type: 'text', - }, - 'misp.intrusion_set.secondary_motivations': { - category: 'misp', - description: - 'The secondary reasons, motivations, or purposes behind this Intrusion Set. Open Vocab - attack-motivation-ov ', - name: 'misp.intrusion_set.secondary_motivations', - type: 'text', - }, - 'misp.malware.id': { - category: 'misp', - description: 'Identifier of the Malware. ', - name: 'misp.malware.id', - type: 'keyword', - }, - 'misp.malware.name': { - category: 'misp', - description: 'The name used to identify the Malware. ', - name: 'misp.malware.name', - type: 'keyword', - }, - 'misp.malware.description': { - category: 'misp', - description: 'Description of the Malware. ', - name: 'misp.malware.description', - type: 'text', - }, - 'misp.malware.labels': { - category: 'misp', - description: - 'The type of malware being described. Open Vocab - malware-label-ov. adware,backdoor,bot,ddos,dropper,exploit-kit,keylogger,ransomware, remote-access-trojan,resource-exploitation,rogue-security-software,rootkit, screen-capture,spyware,trojan,virus,worm ', - name: 'misp.malware.labels', - type: 'keyword', - }, - 'misp.malware.kill_chain_phases': { - category: 'misp', - description: 'The list of kill chain phases for which this Malware instance can be used. ', - name: 'misp.malware.kill_chain_phases', - type: 'keyword', - format: 'string', - }, - 'misp.note.id': { - category: 'misp', - description: 'Identifier of the Note. ', - name: 'misp.note.id', - type: 'keyword', - }, - 'misp.note.summary': { - category: 'misp', - description: 'A brief description used as a summary of the Note. ', - name: 'misp.note.summary', - type: 'keyword', - }, - 'misp.note.description': { - category: 'misp', - description: 'The content of the Note. ', - name: 'misp.note.description', - type: 'text', - }, - 'misp.note.authors': { - category: 'misp', - description: 'The name of the author(s) of this Note. ', - name: 'misp.note.authors', - type: 'keyword', - }, - 'misp.note.object_refs': { - category: 'misp', - description: 'The STIX Objects (SDOs and SROs) that the note is being applied to. ', - name: 'misp.note.object_refs', - type: 'keyword', - }, - 'misp.threat_indicator.labels': { - category: 'misp', - description: 'list of type open-vocab that specifies the type of indicator. ', - example: 'Domain Watchlist\n', - name: 'misp.threat_indicator.labels', - type: 'keyword', - }, - 'misp.threat_indicator.id': { - category: 'misp', - description: 'Identifier of the threat indicator. ', - name: 'misp.threat_indicator.id', - type: 'keyword', - }, - 'misp.threat_indicator.version': { - category: 'misp', - description: 'Version of the threat indicator. ', - name: 'misp.threat_indicator.version', - type: 'keyword', - }, - 'misp.threat_indicator.type': { - category: 'misp', - description: 'Type of the threat indicator. ', - name: 'misp.threat_indicator.type', - type: 'keyword', - }, - 'misp.threat_indicator.description': { - category: 'misp', - description: 'Description of the threat indicator. ', - name: 'misp.threat_indicator.description', - type: 'text', - }, - 'misp.threat_indicator.feed': { - category: 'misp', - description: 'Name of the threat feed. ', - name: 'misp.threat_indicator.feed', - type: 'text', - }, - 'misp.threat_indicator.valid_from': { - category: 'misp', - description: - 'The time from which this Indicator should be considered valuable intelligence, in RFC3339 format. ', - name: 'misp.threat_indicator.valid_from', - type: 'date', - }, - 'misp.threat_indicator.valid_until': { - category: 'misp', - description: - 'The time at which this Indicator should no longer be considered valuable intelligence. If the valid_until property is omitted, then there is no constraint on the latest time for which the indicator should be used, in RFC3339 format. ', - name: 'misp.threat_indicator.valid_until', - type: 'date', - }, - 'misp.threat_indicator.severity': { - category: 'misp', - description: 'Threat severity to which this indicator corresponds. ', - example: 'high', - name: 'misp.threat_indicator.severity', - type: 'keyword', - format: 'string', - }, - 'misp.threat_indicator.confidence': { - category: 'misp', - description: 'Confidence level to which this indicator corresponds. ', - example: 'high', - name: 'misp.threat_indicator.confidence', - type: 'keyword', - }, - 'misp.threat_indicator.kill_chain_phases': { - category: 'misp', - description: 'The kill chain phase(s) to which this indicator corresponds. ', - name: 'misp.threat_indicator.kill_chain_phases', - type: 'keyword', - format: 'string', - }, - 'misp.threat_indicator.mitre_tactic': { - category: 'misp', - description: 'MITRE tactics to which this indicator corresponds. ', - example: 'Initial Access', - name: 'misp.threat_indicator.mitre_tactic', - type: 'keyword', - format: 'string', - }, - 'misp.threat_indicator.mitre_technique': { - category: 'misp', - description: 'MITRE techniques to which this indicator corresponds. ', - example: 'Drive-by Compromise', - name: 'misp.threat_indicator.mitre_technique', - type: 'keyword', - format: 'string', - }, - 'misp.threat_indicator.attack_pattern': { - category: 'misp', - description: - 'The attack_pattern for this indicator is a STIX Pattern as specified in STIX Version 2.0 Part 5 - STIX Patterning. ', - example: "[destination:ip = '91.219.29.188/32']\n", - name: 'misp.threat_indicator.attack_pattern', - type: 'keyword', - }, - 'misp.threat_indicator.attack_pattern_kql': { - category: 'misp', - description: - 'The attack_pattern for this indicator is KQL query that matches the attack_pattern specified in the STIX Pattern format. ', - example: 'destination.ip: "91.219.29.188/32"\n', - name: 'misp.threat_indicator.attack_pattern_kql', - type: 'keyword', - }, - 'misp.threat_indicator.negate': { - category: 'misp', - description: 'When set to true, it specifies the absence of the attack_pattern. ', - name: 'misp.threat_indicator.negate', - type: 'boolean', - }, - 'misp.threat_indicator.intrusion_set': { - category: 'misp', - description: 'Name of the intrusion set if known. ', - name: 'misp.threat_indicator.intrusion_set', - type: 'keyword', - }, - 'misp.threat_indicator.campaign': { - category: 'misp', - description: 'Name of the attack campaign if known. ', - name: 'misp.threat_indicator.campaign', - type: 'keyword', - }, - 'misp.threat_indicator.threat_actor': { - category: 'misp', - description: 'Name of the threat actor if known. ', - name: 'misp.threat_indicator.threat_actor', - type: 'keyword', - }, - 'misp.observed_data.id': { - category: 'misp', - description: 'Identifier of the Observed Data. ', - name: 'misp.observed_data.id', - type: 'keyword', - }, - 'misp.observed_data.first_observed': { - category: 'misp', - description: 'The beginning of the time window that the data was observed, in RFC3339 format. ', - name: 'misp.observed_data.first_observed', - type: 'date', - }, - 'misp.observed_data.last_observed': { - category: 'misp', - description: 'The end of the time window that the data was observed, in RFC3339 format. ', - name: 'misp.observed_data.last_observed', - type: 'date', - }, - 'misp.observed_data.number_observed': { - category: 'misp', - description: - 'The number of times the data represented in the objects property was observed. This MUST be an integer between 1 and 999,999,999 inclusive. ', - name: 'misp.observed_data.number_observed', - type: 'integer', - }, - 'misp.observed_data.objects': { - category: 'misp', - description: - 'A dictionary of Cyber Observable Objects that describes the single fact that was observed. ', - name: 'misp.observed_data.objects', - type: 'keyword', - }, - 'misp.report.id': { - category: 'misp', - description: 'Identifier of the Report. ', - name: 'misp.report.id', - type: 'keyword', - }, - 'misp.report.labels': { - category: 'misp', - description: - 'This field is an Open Vocabulary that specifies the primary subject of this report. Open Vocab - report-label-ov. threat-report,attack-pattern,campaign,identity,indicator,malware,observed-data,threat-actor,tool,vulnerability ', - name: 'misp.report.labels', - type: 'keyword', - }, - 'misp.report.name': { - category: 'misp', - description: 'The name used to identify the Report. ', - name: 'misp.report.name', - type: 'keyword', - }, - 'misp.report.description': { - category: 'misp', - description: 'A description that provides more details and context about Report. ', - name: 'misp.report.description', - type: 'text', - }, - 'misp.report.published': { - category: 'misp', - description: - 'The date that this report object was officially published by the creator of this report, in RFC3339 format. ', - name: 'misp.report.published', - type: 'date', - }, - 'misp.report.object_refs': { - category: 'misp', - description: 'Specifies the STIX Objects that are referred to by this Report. ', - name: 'misp.report.object_refs', - type: 'text', - }, - 'misp.threat_actor.id': { - category: 'misp', - description: 'Identifier of the Threat Actor. ', - name: 'misp.threat_actor.id', - type: 'keyword', - }, - 'misp.threat_actor.labels': { - category: 'misp', - description: - 'This field specifies the type of threat actor. Open Vocab - threat-actor-label-ov. activist,competitor,crime-syndicate,criminal,hacker,insider-accidental,insider-disgruntled,nation-state,sensationalist,spy,terrorist ', - name: 'misp.threat_actor.labels', - type: 'keyword', - }, - 'misp.threat_actor.name': { - category: 'misp', - description: 'The name used to identify this Threat Actor or Threat Actor group. ', - name: 'misp.threat_actor.name', - type: 'keyword', - }, - 'misp.threat_actor.description': { - category: 'misp', - description: 'A description that provides more details and context about the Threat Actor. ', - name: 'misp.threat_actor.description', - type: 'text', - }, - 'misp.threat_actor.aliases': { - category: 'misp', - description: 'A list of other names that this Threat Actor is believed to use. ', - name: 'misp.threat_actor.aliases', - type: 'text', - }, - 'misp.threat_actor.roles': { - category: 'misp', - description: - 'This is a list of roles the Threat Actor plays. Open Vocab - threat-actor-role-ov. agent,director,independent,sponsor,infrastructure-operator,infrastructure-architect,malware-author ', - name: 'misp.threat_actor.roles', - type: 'text', - }, - 'misp.threat_actor.goals': { - category: 'misp', - description: 'The high level goals of this Threat Actor, namely, what are they trying to do. ', - name: 'misp.threat_actor.goals', - type: 'text', - }, - 'misp.threat_actor.sophistication': { - category: 'misp', - description: - 'The skill, specific knowledge, special training, or expertise a Threat Actor must have to perform the attack. Open Vocab - threat-actor-sophistication-ov. none,minimal,intermediate,advanced,strategic,expert,innovator ', - name: 'misp.threat_actor.sophistication', - type: 'text', - }, - 'misp.threat_actor.resource_level': { - category: 'misp', - description: - 'This defines the organizational level at which this Threat Actor typically works. Open Vocab - attack-resource-level-ov. individual,club,contest,team,organization,government ', - name: 'misp.threat_actor.resource_level', - type: 'text', - }, - 'misp.threat_actor.primary_motivation': { - category: 'misp', - description: - 'The primary reason, motivation, or purpose behind this Threat Actor. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', - name: 'misp.threat_actor.primary_motivation', - type: 'text', - }, - 'misp.threat_actor.secondary_motivations': { - category: 'misp', - description: - 'The secondary reasons, motivations, or purposes behind this Threat Actor. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', - name: 'misp.threat_actor.secondary_motivations', - type: 'text', - }, - 'misp.threat_actor.personal_motivations': { - category: 'misp', - description: - 'The personal reasons, motivations, or purposes of the Threat Actor regardless of organizational goals. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', - name: 'misp.threat_actor.personal_motivations', - type: 'text', - }, - 'misp.tool.id': { - category: 'misp', - description: 'Identifier of the Tool. ', - name: 'misp.tool.id', - type: 'keyword', - }, - 'misp.tool.labels': { - category: 'misp', - description: - 'The kind(s) of tool(s) being described. Open Vocab - tool-label-ov. denial-of-service,exploitation,information-gathering,network-capture,credential-exploitation,remote-access,vulnerability-scanning ', - name: 'misp.tool.labels', - type: 'keyword', - }, - 'misp.tool.name': { - category: 'misp', - description: 'The name used to identify the Tool. ', - name: 'misp.tool.name', - type: 'keyword', - }, - 'misp.tool.description': { - category: 'misp', - description: 'A description that provides more details and context about the Tool. ', - name: 'misp.tool.description', - type: 'text', - }, - 'misp.tool.tool_version': { - category: 'misp', - description: 'The version identifier associated with the Tool. ', - name: 'misp.tool.tool_version', - type: 'keyword', - }, - 'misp.tool.kill_chain_phases': { - category: 'misp', - description: 'The list of kill chain phases for which this Tool instance can be used. ', - name: 'misp.tool.kill_chain_phases', - type: 'text', - }, - 'misp.vulnerability.id': { - category: 'misp', - description: 'Identifier of the Vulnerability. ', - name: 'misp.vulnerability.id', - type: 'keyword', - }, - 'misp.vulnerability.name': { - category: 'misp', - description: 'The name used to identify the Vulnerability. ', - name: 'misp.vulnerability.name', - type: 'keyword', - }, - 'misp.vulnerability.description': { - category: 'misp', - description: 'A description that provides more details and context about the Vulnerability. ', - name: 'misp.vulnerability.description', - type: 'text', - }, - 'mssql.log.origin': { - category: 'mssql', - description: 'Origin of the message, usually the server but it can also be a recovery process', - name: 'mssql.log.origin', - type: 'keyword', - }, - 'mysqlenterprise.audit.class': { - category: 'mysqlenterprise', - description: - 'A string representing the event class. The class defines the type of event, when taken together with the event item that specifies the event subclass. ', - name: 'mysqlenterprise.audit.class', - type: 'keyword', - }, - 'mysqlenterprise.audit.connection_id': { - category: 'mysqlenterprise', - description: - 'An integer representing the client connection identifier. This is the same as the value returned by the CONNECTION_ID() function within the session. ', - name: 'mysqlenterprise.audit.connection_id', - type: 'keyword', - }, - 'mysqlenterprise.audit.id': { - category: 'mysqlenterprise', - description: 'An unsigned integer representing an event ID. ', - name: 'mysqlenterprise.audit.id', - type: 'keyword', - }, - 'mysqlenterprise.audit.connection_data.connection_type': { - category: 'mysqlenterprise', - description: - 'The security state of the connection to the server. Permitted values are tcp/ip (TCP/IP connection established without encryption), ssl (TCP/IP connection established with encryption), socket (Unix socket file connection), named_pipe (Windows named pipe connection), and shared_memory (Windows shared memory connection). ', - name: 'mysqlenterprise.audit.connection_data.connection_type', - type: 'keyword', - }, - 'mysqlenterprise.audit.connection_data.status': { - category: 'mysqlenterprise', - description: - 'An integer representing the command status: 0 for success, nonzero if an error occurred. ', - name: 'mysqlenterprise.audit.connection_data.status', - type: 'long', - }, - 'mysqlenterprise.audit.connection_data.db': { - category: 'mysqlenterprise', - description: - 'A string representing a database name. For connection_data, it is the default database. For table_access_data, it is the table database. ', - name: 'mysqlenterprise.audit.connection_data.db', - type: 'keyword', - }, - 'mysqlenterprise.audit.connection_data.connection_attributes': { - category: 'mysqlenterprise', - description: 'Connection attributes that might be passed by different MySQL Clients. ', - name: 'mysqlenterprise.audit.connection_data.connection_attributes', - type: 'flattened', - }, - 'mysqlenterprise.audit.general_data.command': { - category: 'mysqlenterprise', - description: - 'A string representing the type of instruction that generated the audit event, such as a command that the server received from a client. ', - name: 'mysqlenterprise.audit.general_data.command', - type: 'keyword', - }, - 'mysqlenterprise.audit.general_data.sql_command': { - category: 'mysqlenterprise', - description: 'A string that indicates the SQL statement type. ', - name: 'mysqlenterprise.audit.general_data.sql_command', - type: 'keyword', - }, - 'mysqlenterprise.audit.general_data.query': { - category: 'mysqlenterprise', - description: - 'A string representing the text of an SQL statement. The value can be empty. Long values may be truncated. The string, like the audit log file itself, is written using UTF-8 (up to 4 bytes per character), so the value may be the result of conversion. ', - name: 'mysqlenterprise.audit.general_data.query', - type: 'keyword', - }, - 'mysqlenterprise.audit.general_data.status': { - category: 'mysqlenterprise', - description: - 'An integer representing the command status: 0 for success, nonzero if an error occurred. This is the same as the value of the mysql_errno() C API function. ', - name: 'mysqlenterprise.audit.general_data.status', - type: 'long', - }, - 'mysqlenterprise.audit.login.user': { - category: 'mysqlenterprise', - description: - 'A string representing the information indicating how a client connected to the server. ', - name: 'mysqlenterprise.audit.login.user', - type: 'keyword', - }, - 'mysqlenterprise.audit.login.proxy': { - category: 'mysqlenterprise', - description: - 'A string representing the proxy user. The value is empty if user proxying is not in effect. ', - name: 'mysqlenterprise.audit.login.proxy', - type: 'keyword', - }, - 'mysqlenterprise.audit.shutdown_data.server_id': { - category: 'mysqlenterprise', - description: - 'An integer representing the server ID. This is the same as the value of the server_id system variable. ', - name: 'mysqlenterprise.audit.shutdown_data.server_id', - type: 'keyword', - }, - 'mysqlenterprise.audit.startup_data.server_id': { - category: 'mysqlenterprise', - description: - 'An integer representing the server ID. This is the same as the value of the server_id system variable. ', - name: 'mysqlenterprise.audit.startup_data.server_id', - type: 'keyword', - }, - 'mysqlenterprise.audit.startup_data.mysql_version': { - category: 'mysqlenterprise', - description: - 'An integer representing the server ID. This is the same as the value of the server_id system variable. ', - name: 'mysqlenterprise.audit.startup_data.mysql_version', - type: 'keyword', - }, - 'mysqlenterprise.audit.table_access_data.db': { - category: 'mysqlenterprise', - description: - 'A string representing a database name. For connection_data, it is the default database. For table_access_data, it is the table database. ', - name: 'mysqlenterprise.audit.table_access_data.db', - type: 'keyword', - }, - 'mysqlenterprise.audit.table_access_data.table': { - category: 'mysqlenterprise', - description: 'A string representing a table name. ', - name: 'mysqlenterprise.audit.table_access_data.table', - type: 'keyword', - }, - 'mysqlenterprise.audit.table_access_data.query': { - category: 'mysqlenterprise', - description: - 'A string representing the text of an SQL statement. The value can be empty. Long values may be truncated. The string, like the audit log file itself, is written using UTF-8 (up to 4 bytes per character), so the value may be the result of conversion. ', - name: 'mysqlenterprise.audit.table_access_data.query', - type: 'keyword', - }, - 'mysqlenterprise.audit.table_access_data.sql_command': { - category: 'mysqlenterprise', - description: 'A string that indicates the SQL statement type. ', - name: 'mysqlenterprise.audit.table_access_data.sql_command', - type: 'keyword', - }, - 'mysqlenterprise.audit.account.user': { - category: 'mysqlenterprise', - description: - 'A string representing the user that the server authenticated the client as. This is the user name that the server uses for privilege checking. ', - name: 'mysqlenterprise.audit.account.user', - type: 'keyword', - }, - 'mysqlenterprise.audit.account.host': { - category: 'mysqlenterprise', - description: 'A string representing the client host name. ', - name: 'mysqlenterprise.audit.account.host', - type: 'keyword', - }, - 'mysqlenterprise.audit.login.os': { - category: 'mysqlenterprise', - description: - 'A string representing the external user name used during the authentication process, as set by the plugin used to authenticate the client. ', - name: 'mysqlenterprise.audit.login.os', - type: 'keyword', - }, - 'o365.audit.AADGroupId': { - category: 'o365', - name: 'o365.audit.AADGroupId', - type: 'keyword', - }, - 'o365.audit.Actor.ID': { - category: 'o365', - name: 'o365.audit.Actor.ID', - type: 'keyword', - }, - 'o365.audit.Actor.Type': { - category: 'o365', - name: 'o365.audit.Actor.Type', - type: 'keyword', - }, - 'o365.audit.ActorContextId': { - category: 'o365', - name: 'o365.audit.ActorContextId', - type: 'keyword', - }, - 'o365.audit.ActorIpAddress': { - category: 'o365', - name: 'o365.audit.ActorIpAddress', - type: 'keyword', - }, - 'o365.audit.ActorUserId': { - category: 'o365', - name: 'o365.audit.ActorUserId', - type: 'keyword', - }, - 'o365.audit.ActorYammerUserId': { - category: 'o365', - name: 'o365.audit.ActorYammerUserId', - type: 'keyword', - }, - 'o365.audit.AlertEntityId': { - category: 'o365', - name: 'o365.audit.AlertEntityId', - type: 'keyword', - }, - 'o365.audit.AlertId': { - category: 'o365', - name: 'o365.audit.AlertId', - type: 'keyword', - }, - 'o365.audit.AlertLinks': { - category: 'o365', - name: 'o365.audit.AlertLinks', - type: 'array', - }, - 'o365.audit.AlertType': { - category: 'o365', - name: 'o365.audit.AlertType', - type: 'keyword', - }, - 'o365.audit.AppId': { - category: 'o365', - name: 'o365.audit.AppId', - type: 'keyword', - }, - 'o365.audit.ApplicationDisplayName': { - category: 'o365', - name: 'o365.audit.ApplicationDisplayName', - type: 'keyword', - }, - 'o365.audit.ApplicationId': { - category: 'o365', - name: 'o365.audit.ApplicationId', - type: 'keyword', - }, - 'o365.audit.AzureActiveDirectoryEventType': { - category: 'o365', - name: 'o365.audit.AzureActiveDirectoryEventType', - type: 'keyword', - }, - 'o365.audit.ExchangeMetaData.*': { - category: 'o365', - name: 'o365.audit.ExchangeMetaData.*', - type: 'object', - }, - 'o365.audit.Category': { - category: 'o365', - name: 'o365.audit.Category', - type: 'keyword', - }, - 'o365.audit.ClientAppId': { - category: 'o365', - name: 'o365.audit.ClientAppId', - type: 'keyword', - }, - 'o365.audit.ClientInfoString': { - category: 'o365', - name: 'o365.audit.ClientInfoString', - type: 'keyword', - }, - 'o365.audit.ClientIP': { - category: 'o365', - name: 'o365.audit.ClientIP', - type: 'keyword', - }, - 'o365.audit.ClientIPAddress': { - category: 'o365', - name: 'o365.audit.ClientIPAddress', - type: 'keyword', - }, - 'o365.audit.Comments': { - category: 'o365', - name: 'o365.audit.Comments', - type: 'text', - }, - 'o365.audit.CommunicationType': { - category: 'o365', - name: 'o365.audit.CommunicationType', - type: 'keyword', - }, - 'o365.audit.CorrelationId': { - category: 'o365', - name: 'o365.audit.CorrelationId', - type: 'keyword', - }, - 'o365.audit.CreationTime': { - category: 'o365', - name: 'o365.audit.CreationTime', - type: 'keyword', - }, - 'o365.audit.CustomUniqueId': { - category: 'o365', - name: 'o365.audit.CustomUniqueId', - type: 'keyword', - }, - 'o365.audit.Data': { - category: 'o365', - name: 'o365.audit.Data', - type: 'keyword', - }, - 'o365.audit.DataType': { - category: 'o365', - name: 'o365.audit.DataType', - type: 'keyword', - }, - 'o365.audit.DoNotDistributeEvent': { - category: 'o365', - name: 'o365.audit.DoNotDistributeEvent', - type: 'boolean', - }, - 'o365.audit.EntityType': { - category: 'o365', - name: 'o365.audit.EntityType', - type: 'keyword', - }, - 'o365.audit.ErrorNumber': { - category: 'o365', - name: 'o365.audit.ErrorNumber', - type: 'keyword', - }, - 'o365.audit.EventData': { - category: 'o365', - name: 'o365.audit.EventData', - type: 'keyword', - }, - 'o365.audit.EventSource': { - category: 'o365', - name: 'o365.audit.EventSource', - type: 'keyword', - }, - 'o365.audit.ExceptionInfo.*': { - category: 'o365', - name: 'o365.audit.ExceptionInfo.*', - type: 'object', - }, - 'o365.audit.ExtendedProperties.*': { - category: 'o365', - name: 'o365.audit.ExtendedProperties.*', - type: 'object', - }, - 'o365.audit.ExternalAccess': { - category: 'o365', - name: 'o365.audit.ExternalAccess', - type: 'keyword', - }, - 'o365.audit.FromApp': { - category: 'o365', - name: 'o365.audit.FromApp', - type: 'boolean', - }, - 'o365.audit.GroupName': { - category: 'o365', - name: 'o365.audit.GroupName', - type: 'keyword', - }, - 'o365.audit.Id': { - category: 'o365', - name: 'o365.audit.Id', - type: 'keyword', - }, - 'o365.audit.ImplicitShare': { - category: 'o365', - name: 'o365.audit.ImplicitShare', - type: 'keyword', - }, - 'o365.audit.IncidentId': { - category: 'o365', - name: 'o365.audit.IncidentId', - type: 'keyword', - }, - 'o365.audit.InternalLogonType': { - category: 'o365', - name: 'o365.audit.InternalLogonType', - type: 'keyword', - }, - 'o365.audit.InterSystemsId': { - category: 'o365', - name: 'o365.audit.InterSystemsId', - type: 'keyword', - }, - 'o365.audit.IntraSystemId': { - category: 'o365', - name: 'o365.audit.IntraSystemId', - type: 'keyword', - }, - 'o365.audit.IsDocLib': { - category: 'o365', - name: 'o365.audit.IsDocLib', - type: 'boolean', - }, - 'o365.audit.Item.*': { - category: 'o365', - name: 'o365.audit.Item.*', - type: 'object', - }, - 'o365.audit.Item.*.*': { - category: 'o365', - name: 'o365.audit.Item.*.*', - type: 'object', - }, - 'o365.audit.ItemCount': { - category: 'o365', - name: 'o365.audit.ItemCount', - type: 'long', - }, - 'o365.audit.ItemName': { - category: 'o365', - name: 'o365.audit.ItemName', - type: 'keyword', - }, - 'o365.audit.ItemType': { - category: 'o365', - name: 'o365.audit.ItemType', - type: 'keyword', - }, - 'o365.audit.ListBaseTemplateType': { - category: 'o365', - name: 'o365.audit.ListBaseTemplateType', - type: 'keyword', - }, - 'o365.audit.ListBaseType': { - category: 'o365', - name: 'o365.audit.ListBaseType', - type: 'keyword', - }, - 'o365.audit.ListColor': { - category: 'o365', - name: 'o365.audit.ListColor', - type: 'keyword', - }, - 'o365.audit.ListIcon': { - category: 'o365', - name: 'o365.audit.ListIcon', - type: 'keyword', - }, - 'o365.audit.ListId': { - category: 'o365', - name: 'o365.audit.ListId', - type: 'keyword', - }, - 'o365.audit.ListTitle': { - category: 'o365', - name: 'o365.audit.ListTitle', - type: 'keyword', - }, - 'o365.audit.ListItemUniqueId': { - category: 'o365', - name: 'o365.audit.ListItemUniqueId', - type: 'keyword', - }, - 'o365.audit.LogonError': { - category: 'o365', - name: 'o365.audit.LogonError', - type: 'keyword', - }, - 'o365.audit.LogonType': { - category: 'o365', - name: 'o365.audit.LogonType', - type: 'keyword', - }, - 'o365.audit.LogonUserSid': { - category: 'o365', - name: 'o365.audit.LogonUserSid', - type: 'keyword', - }, - 'o365.audit.MailboxGuid': { - category: 'o365', - name: 'o365.audit.MailboxGuid', - type: 'keyword', - }, - 'o365.audit.MailboxOwnerMasterAccountSid': { - category: 'o365', - name: 'o365.audit.MailboxOwnerMasterAccountSid', - type: 'keyword', - }, - 'o365.audit.MailboxOwnerSid': { - category: 'o365', - name: 'o365.audit.MailboxOwnerSid', - type: 'keyword', - }, - 'o365.audit.MailboxOwnerUPN': { - category: 'o365', - name: 'o365.audit.MailboxOwnerUPN', - type: 'keyword', - }, - 'o365.audit.Members': { - category: 'o365', - name: 'o365.audit.Members', - type: 'array', - }, - 'o365.audit.Members.*': { - category: 'o365', - name: 'o365.audit.Members.*', - type: 'object', - }, - 'o365.audit.ModifiedProperties.*.*': { - category: 'o365', - name: 'o365.audit.ModifiedProperties.*.*', - type: 'object', - }, - 'o365.audit.Name': { - category: 'o365', - name: 'o365.audit.Name', - type: 'keyword', - }, - 'o365.audit.ObjectId': { - category: 'o365', - name: 'o365.audit.ObjectId', - type: 'keyword', - }, - 'o365.audit.Operation': { - category: 'o365', - name: 'o365.audit.Operation', - type: 'keyword', - }, - 'o365.audit.OrganizationId': { - category: 'o365', - name: 'o365.audit.OrganizationId', - type: 'keyword', - }, - 'o365.audit.OrganizationName': { - category: 'o365', - name: 'o365.audit.OrganizationName', - type: 'keyword', - }, - 'o365.audit.OriginatingServer': { - category: 'o365', - name: 'o365.audit.OriginatingServer', - type: 'keyword', - }, - 'o365.audit.Parameters.*': { - category: 'o365', - name: 'o365.audit.Parameters.*', - type: 'object', - }, - 'o365.audit.PolicyDetails': { - category: 'o365', - name: 'o365.audit.PolicyDetails', - type: 'array', - }, - 'o365.audit.PolicyId': { - category: 'o365', - name: 'o365.audit.PolicyId', - type: 'keyword', - }, - 'o365.audit.RecordType': { - category: 'o365', - name: 'o365.audit.RecordType', - type: 'keyword', - }, - 'o365.audit.ResultStatus': { - category: 'o365', - name: 'o365.audit.ResultStatus', - type: 'keyword', - }, - 'o365.audit.SensitiveInfoDetectionIsIncluded': { - category: 'o365', - name: 'o365.audit.SensitiveInfoDetectionIsIncluded', - type: 'keyword', - }, - 'o365.audit.SharePointMetaData.*': { - category: 'o365', - name: 'o365.audit.SharePointMetaData.*', - type: 'object', - }, - 'o365.audit.SessionId': { - category: 'o365', - name: 'o365.audit.SessionId', - type: 'keyword', - }, - 'o365.audit.Severity': { - category: 'o365', - name: 'o365.audit.Severity', - type: 'keyword', - }, - 'o365.audit.Site': { - category: 'o365', - name: 'o365.audit.Site', - type: 'keyword', - }, - 'o365.audit.SiteUrl': { - category: 'o365', - name: 'o365.audit.SiteUrl', - type: 'keyword', - }, - 'o365.audit.Source': { - category: 'o365', - name: 'o365.audit.Source', - type: 'keyword', - }, - 'o365.audit.SourceFileExtension': { - category: 'o365', - name: 'o365.audit.SourceFileExtension', - type: 'keyword', - }, - 'o365.audit.SourceFileName': { - category: 'o365', - name: 'o365.audit.SourceFileName', - type: 'keyword', - }, - 'o365.audit.SourceRelativeUrl': { - category: 'o365', - name: 'o365.audit.SourceRelativeUrl', - type: 'keyword', - }, - 'o365.audit.Status': { - category: 'o365', - name: 'o365.audit.Status', - type: 'keyword', - }, - 'o365.audit.SupportTicketId': { - category: 'o365', - name: 'o365.audit.SupportTicketId', - type: 'keyword', - }, - 'o365.audit.Target.ID': { - category: 'o365', - name: 'o365.audit.Target.ID', - type: 'keyword', - }, - 'o365.audit.Target.Type': { - category: 'o365', - name: 'o365.audit.Target.Type', - type: 'keyword', - }, - 'o365.audit.TargetContextId': { - category: 'o365', - name: 'o365.audit.TargetContextId', - type: 'keyword', - }, - 'o365.audit.TargetUserOrGroupName': { - category: 'o365', - name: 'o365.audit.TargetUserOrGroupName', - type: 'keyword', - }, - 'o365.audit.TargetUserOrGroupType': { - category: 'o365', - name: 'o365.audit.TargetUserOrGroupType', - type: 'keyword', - }, - 'o365.audit.TeamName': { - category: 'o365', - name: 'o365.audit.TeamName', - type: 'keyword', - }, - 'o365.audit.TeamGuid': { - category: 'o365', - name: 'o365.audit.TeamGuid', - type: 'keyword', - }, - 'o365.audit.TemplateTypeId': { - category: 'o365', - name: 'o365.audit.TemplateTypeId', - type: 'keyword', - }, - 'o365.audit.UniqueSharingId': { - category: 'o365', - name: 'o365.audit.UniqueSharingId', - type: 'keyword', - }, - 'o365.audit.UserAgent': { - category: 'o365', - name: 'o365.audit.UserAgent', - type: 'keyword', - }, - 'o365.audit.UserId': { - category: 'o365', - name: 'o365.audit.UserId', - type: 'keyword', - }, - 'o365.audit.UserKey': { - category: 'o365', - name: 'o365.audit.UserKey', - type: 'keyword', - }, - 'o365.audit.UserType': { - category: 'o365', - name: 'o365.audit.UserType', - type: 'keyword', - }, - 'o365.audit.Version': { - category: 'o365', - name: 'o365.audit.Version', - type: 'keyword', - }, - 'o365.audit.WebId': { - category: 'o365', - name: 'o365.audit.WebId', - type: 'keyword', - }, - 'o365.audit.Workload': { - category: 'o365', - name: 'o365.audit.Workload', - type: 'keyword', - }, - 'o365.audit.YammerNetworkId': { - category: 'o365', - name: 'o365.audit.YammerNetworkId', - type: 'keyword', - }, - 'okta.uuid': { - category: 'okta', - description: 'The unique identifier of the Okta LogEvent. ', - name: 'okta.uuid', - type: 'keyword', - }, - 'okta.event_type': { - category: 'okta', - description: 'The type of the LogEvent. ', - name: 'okta.event_type', - type: 'keyword', - }, - 'okta.version': { - category: 'okta', - description: 'The version of the LogEvent. ', - name: 'okta.version', - type: 'keyword', - }, - 'okta.severity': { - category: 'okta', - description: 'The severity of the LogEvent. Must be one of DEBUG, INFO, WARN, or ERROR. ', - name: 'okta.severity', - type: 'keyword', - }, - 'okta.display_message': { - category: 'okta', - description: 'The display message of the LogEvent. ', - name: 'okta.display_message', - type: 'keyword', - }, - 'okta.actor.id': { - category: 'okta', - description: 'Identifier of the actor. ', - name: 'okta.actor.id', - type: 'keyword', - }, - 'okta.actor.type': { - category: 'okta', - description: 'Type of the actor. ', - name: 'okta.actor.type', - type: 'keyword', - }, - 'okta.actor.alternate_id': { - category: 'okta', - description: 'Alternate identifier of the actor. ', - name: 'okta.actor.alternate_id', - type: 'keyword', - }, - 'okta.actor.display_name': { - category: 'okta', - description: 'Display name of the actor. ', - name: 'okta.actor.display_name', - type: 'keyword', - }, - 'okta.client.ip': { - category: 'okta', - description: 'The IP address of the client. ', - name: 'okta.client.ip', - type: 'ip', - }, - 'okta.client.user_agent.raw_user_agent': { - category: 'okta', - description: 'The raw informaton of the user agent. ', - name: 'okta.client.user_agent.raw_user_agent', - type: 'keyword', - }, - 'okta.client.user_agent.os': { - category: 'okta', - description: 'The OS informaton. ', - name: 'okta.client.user_agent.os', - type: 'keyword', - }, - 'okta.client.user_agent.browser': { - category: 'okta', - description: 'The browser informaton of the client. ', - name: 'okta.client.user_agent.browser', - type: 'keyword', - }, - 'okta.client.zone': { - category: 'okta', - description: 'The zone information of the client. ', - name: 'okta.client.zone', - type: 'keyword', - }, - 'okta.client.device': { - category: 'okta', - description: 'The information of the client device. ', - name: 'okta.client.device', - type: 'keyword', - }, - 'okta.client.id': { - category: 'okta', - description: 'The identifier of the client. ', - name: 'okta.client.id', - type: 'keyword', - }, - 'okta.outcome.reason': { - category: 'okta', - description: 'The reason of the outcome. ', - name: 'okta.outcome.reason', - type: 'keyword', - }, - 'okta.outcome.result': { - category: 'okta', - description: - 'The result of the outcome. Must be one of: SUCCESS, FAILURE, SKIPPED, ALLOW, DENY, CHALLENGE, UNKNOWN. ', - name: 'okta.outcome.result', - type: 'keyword', - }, - 'okta.target.id': { - category: 'okta', - description: 'Identifier of the actor. ', - name: 'okta.target.id', - type: 'keyword', - }, - 'okta.target.type': { - category: 'okta', - description: 'Type of the actor. ', - name: 'okta.target.type', - type: 'keyword', - }, - 'okta.target.alternate_id': { - category: 'okta', - description: 'Alternate identifier of the actor. ', - name: 'okta.target.alternate_id', - type: 'keyword', - }, - 'okta.target.display_name': { - category: 'okta', - description: 'Display name of the actor. ', - name: 'okta.target.display_name', - type: 'keyword', - }, - 'okta.transaction.id': { - category: 'okta', - description: 'Identifier of the transaction. ', - name: 'okta.transaction.id', - type: 'keyword', - }, - 'okta.transaction.type': { - category: 'okta', - description: 'The type of transaction. Must be one of "WEB", "JOB". ', - name: 'okta.transaction.type', - type: 'keyword', - }, - 'okta.debug_context.debug_data.device_fingerprint': { - category: 'okta', - description: 'The fingerprint of the device. ', - name: 'okta.debug_context.debug_data.device_fingerprint', - type: 'keyword', - }, - 'okta.debug_context.debug_data.request_id': { - category: 'okta', - description: 'The identifier of the request. ', - name: 'okta.debug_context.debug_data.request_id', - type: 'keyword', - }, - 'okta.debug_context.debug_data.request_uri': { - category: 'okta', - description: 'The request URI. ', - name: 'okta.debug_context.debug_data.request_uri', - type: 'keyword', - }, - 'okta.debug_context.debug_data.threat_suspected': { - category: 'okta', - description: 'Threat suspected. ', - name: 'okta.debug_context.debug_data.threat_suspected', - type: 'keyword', - }, - 'okta.debug_context.debug_data.url': { - category: 'okta', - description: 'The URL. ', - name: 'okta.debug_context.debug_data.url', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.browser': { - category: 'okta', - description: 'The browser used. ', - name: 'okta.debug_context.debug_data.suspicious_activity.browser', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_city': { - category: 'okta', - description: 'The city where the suspicious activity took place. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_city', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_country': { - category: 'okta', - description: 'The country where the suspicious activity took place. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_country', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_id': { - category: 'okta', - description: 'The event ID. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_id', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_ip': { - category: 'okta', - description: 'The IP of the suspicious event. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_ip', - type: 'ip', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_latitude': { - category: 'okta', - description: 'The latitude where the suspicious activity took place. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_latitude', - type: 'float', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_longitude': { - category: 'okta', - description: 'The longitude where the suspicious activity took place. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_longitude', - type: 'float', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_state': { - category: 'okta', - description: 'The state where the suspicious activity took place. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_state', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_transaction_id': { - category: 'okta', - description: 'The event transaction ID. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_transaction_id', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.event_type': { - category: 'okta', - description: 'The event type. ', - name: 'okta.debug_context.debug_data.suspicious_activity.event_type', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.os': { - category: 'okta', - description: 'The OS of the system from where the suspicious activity occured. ', - name: 'okta.debug_context.debug_data.suspicious_activity.os', - type: 'keyword', - }, - 'okta.debug_context.debug_data.suspicious_activity.timestamp': { - category: 'okta', - description: 'The timestamp of when the activity occurred. ', - name: 'okta.debug_context.debug_data.suspicious_activity.timestamp', - type: 'date', - }, - 'okta.authentication_context.authentication_provider': { - category: 'okta', - description: - 'The information about the authentication provider. Must be one of OKTA_AUTHENTICATION_PROVIDER, ACTIVE_DIRECTORY, LDAP, FEDERATION, SOCIAL, FACTOR_PROVIDER. ', - name: 'okta.authentication_context.authentication_provider', - type: 'keyword', - }, - 'okta.authentication_context.authentication_step': { - category: 'okta', - description: 'The authentication step. ', - name: 'okta.authentication_context.authentication_step', - type: 'integer', - }, - 'okta.authentication_context.credential_provider': { - category: 'okta', - description: - 'The information about credential provider. Must be one of OKTA_CREDENTIAL_PROVIDER, RSA, SYMANTEC, GOOGLE, DUO, YUBIKEY. ', - name: 'okta.authentication_context.credential_provider', - type: 'keyword', - }, - 'okta.authentication_context.credential_type': { - category: 'okta', - description: - 'The information about credential type. Must be one of OTP, SMS, PASSWORD, ASSERTION, IWA, EMAIL, OAUTH2, JWT, CERTIFICATE, PRE_SHARED_SYMMETRIC_KEY, OKTA_CLIENT_SESSION, DEVICE_UDID. ', - name: 'okta.authentication_context.credential_type', - type: 'keyword', - }, - 'okta.authentication_context.issuer.id': { - category: 'okta', - description: 'The identifier of the issuer. ', - name: 'okta.authentication_context.issuer.id', - type: 'keyword', - }, - 'okta.authentication_context.issuer.type': { - category: 'okta', - description: 'The type of the issuer. ', - name: 'okta.authentication_context.issuer.type', - type: 'keyword', - }, - 'okta.authentication_context.external_session_id': { - category: 'okta', - description: 'The session identifer of the external session if any. ', - name: 'okta.authentication_context.external_session_id', - type: 'keyword', - }, - 'okta.authentication_context.interface': { - category: 'okta', - description: 'The interface used. e.g., Outlook, Office365, wsTrust ', - name: 'okta.authentication_context.interface', - type: 'keyword', - }, - 'okta.security_context.as.number': { - category: 'okta', - description: 'The AS number. ', - name: 'okta.security_context.as.number', - type: 'integer', - }, - 'okta.security_context.as.organization.name': { - category: 'okta', - description: 'The organization name. ', - name: 'okta.security_context.as.organization.name', - type: 'keyword', - }, - 'okta.security_context.isp': { - category: 'okta', - description: 'The Internet Service Provider. ', - name: 'okta.security_context.isp', - type: 'keyword', - }, - 'okta.security_context.domain': { - category: 'okta', - description: 'The domain name. ', - name: 'okta.security_context.domain', - type: 'keyword', - }, - 'okta.security_context.is_proxy': { - category: 'okta', - description: 'Whether it is a proxy or not. ', - name: 'okta.security_context.is_proxy', - type: 'boolean', - }, - 'okta.request.ip_chain.ip': { - category: 'okta', - description: 'IP address. ', - name: 'okta.request.ip_chain.ip', - type: 'ip', - }, - 'okta.request.ip_chain.version': { - category: 'okta', - description: 'IP version. Must be one of V4, V6. ', - name: 'okta.request.ip_chain.version', - type: 'keyword', - }, - 'okta.request.ip_chain.source': { - category: 'okta', - description: 'Source information. ', - name: 'okta.request.ip_chain.source', - type: 'keyword', - }, - 'okta.request.ip_chain.geographical_context.city': { - category: 'okta', - description: 'The city.', - name: 'okta.request.ip_chain.geographical_context.city', - type: 'keyword', - }, - 'okta.request.ip_chain.geographical_context.state': { - category: 'okta', - description: 'The state.', - name: 'okta.request.ip_chain.geographical_context.state', - type: 'keyword', - }, - 'okta.request.ip_chain.geographical_context.postal_code': { - category: 'okta', - description: 'The postal code.', - name: 'okta.request.ip_chain.geographical_context.postal_code', - type: 'keyword', - }, - 'okta.request.ip_chain.geographical_context.country': { - category: 'okta', - description: 'The country.', - name: 'okta.request.ip_chain.geographical_context.country', - type: 'keyword', - }, - 'okta.request.ip_chain.geographical_context.geolocation': { - category: 'okta', - description: 'Geolocation information. ', - name: 'okta.request.ip_chain.geographical_context.geolocation', - type: 'geo_point', - }, - 'oracle.database_audit.status': { - category: 'oracle', - description: 'Database Audit Status. ', - name: 'oracle.database_audit.status', - type: 'keyword', - }, - 'oracle.database_audit.session_id': { - category: 'oracle', - description: 'Indicates the audit session ID number. ', - name: 'oracle.database_audit.session_id', - type: 'keyword', - }, - 'oracle.database_audit.client.terminal': { - category: 'oracle', - description: 'If available, the client terminal type, for example "pty". ', - name: 'oracle.database_audit.client.terminal', - type: 'keyword', - }, - 'oracle.database_audit.client.address': { - category: 'oracle', - description: 'The IP Address or Domain used by the client. ', - name: 'oracle.database_audit.client.address', - type: 'keyword', - }, - 'oracle.database_audit.client.user': { - category: 'oracle', - description: 'The user running the client or connection to the database. ', - name: 'oracle.database_audit.client.user', - type: 'keyword', - }, - 'oracle.database_audit.database.user': { - category: 'oracle', - description: 'The database user used to authenticate. ', - name: 'oracle.database_audit.database.user', - type: 'keyword', - }, - 'oracle.database_audit.privilege': { - category: 'oracle', - description: 'The privilege group related to the database user. ', - name: 'oracle.database_audit.privilege', - type: 'keyword', - }, - 'oracle.database_audit.entry.id': { - category: 'oracle', - description: - 'Indicates the current audit entry number, assigned to each audit trail record. The audit entry.id sequence number is shared between fine-grained audit records and regular audit records. ', - name: 'oracle.database_audit.entry.id', - type: 'keyword', - }, - 'oracle.database_audit.database.host': { - category: 'oracle', - description: 'Client host machine name. ', - name: 'oracle.database_audit.database.host', - type: 'keyword', - }, - 'oracle.database_audit.action': { - category: 'oracle', - description: - 'The action performed during the audit event. This could for example be the raw query. ', - name: 'oracle.database_audit.action', - type: 'keyword', - }, - 'oracle.database_audit.action_number': { - category: 'oracle', - description: - 'Action is a numeric value representing the action the user performed. The corresponding name of the action type is in the AUDIT_ACTIONS table. For example, action 100 refers to LOGON. ', - name: 'oracle.database_audit.action_number', - type: 'keyword', - }, - 'oracle.database_audit.database.id': { - category: 'oracle', - description: - 'Database identifier calculated when the database is created. It corresponds to the DBID column of the V$DATABASE data dictionary view. ', - name: 'oracle.database_audit.database.id', - type: 'keyword', - }, - 'oracle.database_audit.length': { - category: 'oracle', - description: - 'Refers to the total number of bytes used in this audit record. This number includes the trailing newline bytes (\\n), if any, at the end of the audit record. ', - name: 'oracle.database_audit.length', - type: 'long', - }, - 'panw.panos.ruleset': { - category: 'panw', - description: 'Name of the rule that matched this session. ', - name: 'panw.panos.ruleset', - type: 'keyword', - }, - 'panw.panos.source.zone': { - category: 'panw', - description: 'Source zone for this session. ', - name: 'panw.panos.source.zone', - type: 'keyword', - }, - 'panw.panos.source.interface': { - category: 'panw', - description: 'Source interface for this session. ', - name: 'panw.panos.source.interface', - type: 'keyword', - }, - 'panw.panos.source.nat.ip': { - category: 'panw', - description: 'Post-NAT source IP. ', - name: 'panw.panos.source.nat.ip', - type: 'ip', - }, - 'panw.panos.source.nat.port': { - category: 'panw', - description: 'Post-NAT source port. ', - name: 'panw.panos.source.nat.port', - type: 'long', - }, - 'panw.panos.destination.zone': { - category: 'panw', - description: 'Destination zone for this session. ', - name: 'panw.panos.destination.zone', - type: 'keyword', - }, - 'panw.panos.destination.interface': { - category: 'panw', - description: 'Destination interface for this session. ', - name: 'panw.panos.destination.interface', - type: 'keyword', - }, - 'panw.panos.destination.nat.ip': { - category: 'panw', - description: 'Post-NAT destination IP. ', - name: 'panw.panos.destination.nat.ip', - type: 'ip', - }, - 'panw.panos.destination.nat.port': { - category: 'panw', - description: 'Post-NAT destination port. ', - name: 'panw.panos.destination.nat.port', - type: 'long', - }, - 'panw.panos.endreason': { - category: 'panw', - description: 'The reason a session terminated. ', - name: 'panw.panos.endreason', - type: 'keyword', - }, - 'panw.panos.network.pcap_id': { - category: 'panw', - description: 'Packet capture ID for a threat. ', - name: 'panw.panos.network.pcap_id', - type: 'keyword', - }, - 'panw.panos.network.nat.community_id': { - category: 'panw', - description: 'Community ID flow-hash for the NAT 5-tuple. ', - name: 'panw.panos.network.nat.community_id', - type: 'keyword', - }, - 'panw.panos.file.hash': { - category: 'panw', - description: 'Binary hash for a threat file sent to be analyzed by the WildFire service. ', - name: 'panw.panos.file.hash', - type: 'keyword', - }, - 'panw.panos.url.category': { - category: 'panw', - description: - "For threat URLs, it's the URL category. For WildFire, the verdict on the file and is either 'malicious', 'grayware', or 'benign'. ", - name: 'panw.panos.url.category', - type: 'keyword', - }, - 'panw.panos.flow_id': { - category: 'panw', - description: 'Internal numeric identifier for each session. ', - name: 'panw.panos.flow_id', - type: 'keyword', - }, - 'panw.panos.sequence_number': { - category: 'panw', - description: - 'Log entry identifier that is incremented sequentially. Unique for each log type. ', - name: 'panw.panos.sequence_number', - type: 'long', - }, - 'panw.panos.threat.resource': { - category: 'panw', - description: 'URL or file name for a threat. ', - name: 'panw.panos.threat.resource', - type: 'keyword', - }, - 'panw.panos.threat.id': { - category: 'panw', - description: 'Palo Alto Networks identifier for the threat. ', - name: 'panw.panos.threat.id', - type: 'keyword', - }, - 'panw.panos.threat.name': { - category: 'panw', - description: 'Palo Alto Networks name for the threat. ', - name: 'panw.panos.threat.name', - type: 'keyword', - }, - 'panw.panos.action': { - category: 'panw', - description: 'Action taken for the session.', - name: 'panw.panos.action', - type: 'keyword', - }, - 'panw.panos.type': { - category: 'panw', - description: 'Specifies the type of the log', - name: 'panw.panos.type', - }, - 'panw.panos.sub_type': { - category: 'panw', - description: 'Specifies the sub type of the log', - name: 'panw.panos.sub_type', - }, - 'panw.panos.virtual_sys': { - category: 'panw', - description: 'Virtual system instance ', - name: 'panw.panos.virtual_sys', - type: 'keyword', - }, - 'panw.panos.client_os_ver': { - category: 'panw', - description: 'The client device’s OS version. ', - name: 'panw.panos.client_os_ver', - type: 'keyword', - }, - 'panw.panos.client_os': { - category: 'panw', - description: 'The client device’s OS version. ', - name: 'panw.panos.client_os', - type: 'keyword', - }, - 'panw.panos.client_ver': { - category: 'panw', - description: 'The client’s GlobalProtect app version. ', - name: 'panw.panos.client_ver', - type: 'keyword', - }, - 'panw.panos.stage': { - category: 'panw', - description: 'A string showing the stage of the connection ', - example: 'before-login', - name: 'panw.panos.stage', - type: 'keyword', - }, - 'panw.panos.actionflags': { - category: 'panw', - description: 'A bit field indicating if the log was forwarded to Panorama. ', - name: 'panw.panos.actionflags', - type: 'keyword', - }, - 'panw.panos.error': { - category: 'panw', - description: 'A string showing that error that has occurred in any event. ', - name: 'panw.panos.error', - type: 'keyword', - }, - 'panw.panos.error_code': { - category: 'panw', - description: 'An integer associated with any errors that occurred. ', - name: 'panw.panos.error_code', - type: 'integer', - }, - 'panw.panos.repeatcnt': { - category: 'panw', - description: - 'The number of sessions with the same source IP address, destination IP address, application, and subtype that GlobalProtect has detected within the last five seconds.An integer associated with any errors that occurred. ', - name: 'panw.panos.repeatcnt', - type: 'integer', - }, - 'panw.panos.serial_number': { - category: 'panw', - description: 'The serial number of the user’s machine or device. ', - name: 'panw.panos.serial_number', - type: 'keyword', - }, - 'panw.panos.auth_method': { - category: 'panw', - description: 'A string showing the authentication type ', - example: 'LDAP', - name: 'panw.panos.auth_method', - type: 'keyword', - }, - 'panw.panos.datasource': { - category: 'panw', - description: 'Source from which mapping information is collected. ', - name: 'panw.panos.datasource', - type: 'keyword', - }, - 'panw.panos.datasourcetype': { - category: 'panw', - description: 'Mechanism used to identify the IP/User mappings within a data source. ', - name: 'panw.panos.datasourcetype', - type: 'keyword', - }, - 'panw.panos.datasourcename': { - category: 'panw', - description: 'User-ID source that sends the IP (Port)-User Mapping. ', - name: 'panw.panos.datasourcename', - type: 'keyword', - }, - 'panw.panos.factorno': { - category: 'panw', - description: 'Indicates the use of primary authentication (1) or additional factors (2, 3). ', - name: 'panw.panos.factorno', - type: 'integer', - }, - 'panw.panos.factortype': { - category: 'panw', - description: 'Vendor used to authenticate a user when Multi Factor authentication is present. ', - name: 'panw.panos.factortype', - type: 'keyword', - }, - 'panw.panos.factorcompletiontime': { - category: 'panw', - description: 'Time the authentication was completed. ', - name: 'panw.panos.factorcompletiontime', - type: 'date', - }, - 'panw.panos.ugflags': { - category: 'panw', - description: - 'Displays whether the user group that was found during user group mapping. Supported values are: User Group Found—Indicates whether the user could be mapped to a group. Duplicate User—Indicates whether duplicate users were found in a user group. Displays N/A if no user group is found. ', - name: 'panw.panos.ugflags', - type: 'keyword', - }, - 'panw.panos.device_group_hierarchy.level_1': { - category: 'panw', - description: - 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', - name: 'panw.panos.device_group_hierarchy.level_1', - type: 'keyword', - }, - 'panw.panos.device_group_hierarchy.level_2': { - category: 'panw', - description: - 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', - name: 'panw.panos.device_group_hierarchy.level_2', - type: 'keyword', - }, - 'panw.panos.device_group_hierarchy.level_3': { - category: 'panw', - description: - 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', - name: 'panw.panos.device_group_hierarchy.level_3', - type: 'keyword', - }, - 'panw.panos.device_group_hierarchy.level_4': { - category: 'panw', - description: - 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', - name: 'panw.panos.device_group_hierarchy.level_4', - type: 'keyword', - }, - 'panw.panos.timeout': { - category: 'panw', - description: 'Timeout after which the IP/User Mappings are cleared. ', - name: 'panw.panos.timeout', - type: 'integer', - }, - 'panw.panos.vsys_id': { - category: 'panw', - description: 'A unique identifier for a virtual system on a Palo Alto Networks firewall. ', - name: 'panw.panos.vsys_id', - type: 'keyword', - }, - 'panw.panos.vsys_name': { - category: 'panw', - description: - 'The name of the virtual system associated with the session; only valid on firewalls enabled for multiple virtual systems. ', - name: 'panw.panos.vsys_name', - type: 'keyword', - }, - 'panw.panos.description': { - category: 'panw', - description: 'Additional information for any event that has occurred. ', - name: 'panw.panos.description', - type: 'keyword', - }, - 'panw.panos.tunnel_type': { - category: 'panw', - description: 'The type of tunnel (either SSLVPN or IPSec). ', - name: 'panw.panos.tunnel_type', - type: 'keyword', - }, - 'panw.panos.connect_method': { - category: 'panw', - description: 'A string showing the how the GlobalProtect app connects to Gateway ', - name: 'panw.panos.connect_method', - type: 'keyword', - }, - 'panw.panos.matchname': { - category: 'panw', - description: 'Name of the HIP object or profile. ', - name: 'panw.panos.matchname', - type: 'keyword', - }, - 'panw.panos.matchtype': { - category: 'panw', - description: 'Whether the hip field represents a HIP object or a HIP profile. ', - name: 'panw.panos.matchtype', - type: 'keyword', - }, - 'panw.panos.priority': { - category: 'panw', - description: - 'The priority order of the gateway that is based on highest (1), high (2), medium (3), low (4), or lowest (5) to which the GlobalProtect app can connect. ', - name: 'panw.panos.priority', - type: 'keyword', - }, - 'panw.panos.response_time': { - category: 'panw', - description: - 'The SSL response time of the selected gateway that is measured in milliseconds on the endpoint during tunnel setup. ', - name: 'panw.panos.response_time', - type: 'keyword', - }, - 'panw.panos.attempted_gateways': { - category: 'panw', - description: - 'The fields that are collected for each gateway connection attempt with the gateway name, SSL response time, and priority ', - name: 'panw.panos.attempted_gateways', - type: 'keyword', - }, - 'panw.panos.gateway': { - category: 'panw', - description: 'The name of the gateway that is specified on the portal configuration. ', - name: 'panw.panos.gateway', - type: 'keyword', - }, - 'panw.panos.selection_type': { - category: 'panw', - description: 'The connection method that is selected to connect to the gateway. ', - name: 'panw.panos.selection_type', - type: 'keyword', - }, - 'rabbitmq.log.pid': { - category: 'rabbitmq', - description: 'The Erlang process id', - example: '<0.222.0>', - name: 'rabbitmq.log.pid', - type: 'keyword', - }, - 'snyk.projects': { - category: 'snyk', - description: 'Array with all related projects objects. ', - name: 'snyk.projects', - type: 'flattened', - }, - 'snyk.related.projects': { - category: 'snyk', - description: "Array of all the related project ID's. ", - name: 'snyk.related.projects', - type: 'keyword', - }, - 'snyk.audit.org_id': { - category: 'snyk', - description: 'ID of the related Organization related to the event. ', - name: 'snyk.audit.org_id', - type: 'keyword', - }, - 'snyk.audit.project_id': { - category: 'snyk', - description: 'ID of the project related to the event. ', - name: 'snyk.audit.project_id', - type: 'keyword', - }, - 'snyk.audit.content': { - category: 'snyk', - description: 'Overview of the content that was changed, both old and new values. ', - name: 'snyk.audit.content', - type: 'flattened', - }, - 'snyk.vulnerabilities.cvss3': { - category: 'snyk', - description: 'CSSv3 scores. ', - name: 'snyk.vulnerabilities.cvss3', - type: 'keyword', - }, - 'snyk.vulnerabilities.disclosure_time': { - category: 'snyk', - description: - 'The time this vulnerability was originally disclosed to the package maintainers. ', - name: 'snyk.vulnerabilities.disclosure_time', - type: 'date', - }, - 'snyk.vulnerabilities.exploit_maturity': { - category: 'snyk', - description: 'The Snyk exploit maturity level. ', - name: 'snyk.vulnerabilities.exploit_maturity', - type: 'keyword', - }, - 'snyk.vulnerabilities.id': { - category: 'snyk', - description: 'The vulnerability reference ID. ', - name: 'snyk.vulnerabilities.id', - type: 'keyword', - }, - 'snyk.vulnerabilities.is_ignored': { - category: 'snyk', - description: 'If the vulnerability report has been ignored. ', - name: 'snyk.vulnerabilities.is_ignored', - type: 'boolean', - }, - 'snyk.vulnerabilities.is_patchable': { - category: 'snyk', - description: 'If vulnerability is fixable by using a Snyk supplied patch. ', - name: 'snyk.vulnerabilities.is_patchable', - type: 'boolean', - }, - 'snyk.vulnerabilities.is_patched': { - category: 'snyk', - description: 'If the vulnerability has been patched. ', - name: 'snyk.vulnerabilities.is_patched', - type: 'boolean', - }, - 'snyk.vulnerabilities.is_pinnable': { - category: 'snyk', - description: 'If the vulnerability is fixable by pinning a transitive dependency. ', - name: 'snyk.vulnerabilities.is_pinnable', - type: 'boolean', - }, - 'snyk.vulnerabilities.is_upgradable': { - category: 'snyk', - description: 'If the vulnerability fixable by upgrading a dependency. ', - name: 'snyk.vulnerabilities.is_upgradable', - type: 'boolean', - }, - 'snyk.vulnerabilities.language': { - category: 'snyk', - description: "The package's programming language. ", - name: 'snyk.vulnerabilities.language', - type: 'keyword', - }, - 'snyk.vulnerabilities.package': { - category: 'snyk', - description: 'The package identifier according to its package manager. ', - name: 'snyk.vulnerabilities.package', - type: 'keyword', - }, - 'snyk.vulnerabilities.package_manager': { - category: 'snyk', - description: 'The package manager. ', - name: 'snyk.vulnerabilities.package_manager', - type: 'keyword', - }, - 'snyk.vulnerabilities.patches': { - category: 'snyk', - description: 'Patches required to resolve the issue created by Snyk. ', - name: 'snyk.vulnerabilities.patches', - type: 'flattened', - }, - 'snyk.vulnerabilities.priority_score': { - category: 'snyk', - description: 'The CVS priority score. ', - name: 'snyk.vulnerabilities.priority_score', - type: 'long', - }, - 'snyk.vulnerabilities.publication_time': { - category: 'snyk', - description: 'The vulnerability publication time. ', - name: 'snyk.vulnerabilities.publication_time', - type: 'date', - }, - 'snyk.vulnerabilities.jira_issue_url': { - category: 'snyk', - description: 'Link to the related Jira issue. ', - name: 'snyk.vulnerabilities.jira_issue_url', - type: 'keyword', - }, - 'snyk.vulnerabilities.original_severity': { - category: 'snyk', - description: 'The original severity of the vulnerability. ', - name: 'snyk.vulnerabilities.original_severity', - type: 'long', - }, - 'snyk.vulnerabilities.reachability': { - category: 'snyk', - description: - 'If the vulnerable function from the library is used in the code scanned. Can either be No Info, Potentially reachable and Reachable. ', - name: 'snyk.vulnerabilities.reachability', - type: 'keyword', - }, - 'snyk.vulnerabilities.title': { - category: 'snyk', - description: 'The issue title. ', - name: 'snyk.vulnerabilities.title', - type: 'keyword', - }, - 'snyk.vulnerabilities.type': { - category: 'snyk', - description: 'The issue type. Can be either "license" or "vulnerability". ', - name: 'snyk.vulnerabilities.type', - type: 'keyword', - }, - 'snyk.vulnerabilities.unique_severities_list': { - category: 'snyk', - description: 'A list of related unique severities. ', - name: 'snyk.vulnerabilities.unique_severities_list', - type: 'keyword', - }, - 'snyk.vulnerabilities.version': { - category: 'snyk', - description: 'The package version this issue is applicable to. ', - name: 'snyk.vulnerabilities.version', - type: 'keyword', - }, - 'snyk.vulnerabilities.introduced_date': { - category: 'snyk', - description: 'The date the vulnerability was initially found. ', - name: 'snyk.vulnerabilities.introduced_date', - type: 'date', - }, - 'snyk.vulnerabilities.is_fixed': { - category: 'snyk', - description: 'If the related vulnerability has been resolved. ', - name: 'snyk.vulnerabilities.is_fixed', - type: 'boolean', - }, - 'snyk.vulnerabilities.credit': { - category: 'snyk', - description: 'Reference to the person that original found the vulnerability. ', - name: 'snyk.vulnerabilities.credit', - type: 'keyword', - }, - 'snyk.vulnerabilities.semver': { - category: 'snyk', - description: - 'One or more semver ranges this issue is applicable to. The format varies according to package manager. ', - name: 'snyk.vulnerabilities.semver', - type: 'flattened', - }, - 'snyk.vulnerabilities.identifiers.alternative': { - category: 'snyk', - description: 'Additional vulnerability identifiers. ', - name: 'snyk.vulnerabilities.identifiers.alternative', - type: 'keyword', - }, - 'snyk.vulnerabilities.identifiers.cwe': { - category: 'snyk', - description: 'CWE vulnerability identifiers. ', - name: 'snyk.vulnerabilities.identifiers.cwe', - type: 'keyword', - }, - 'sophos.xg.device': { - category: 'sophos', - description: 'device ', - name: 'sophos.xg.device', - type: 'keyword', - }, - 'sophos.xg.date': { - category: 'sophos', - description: 'Date (yyyy-mm-dd) when the event occurred ', - name: 'sophos.xg.date', - type: 'date', - }, - 'sophos.xg.timezone': { - category: 'sophos', - description: 'Time (hh:mm:ss) when the event occurred ', - name: 'sophos.xg.timezone', - type: 'keyword', - }, - 'sophos.xg.device_name': { - category: 'sophos', - description: 'Model number of the device ', - name: 'sophos.xg.device_name', - type: 'keyword', - }, - 'sophos.xg.device_id': { - category: 'sophos', - description: 'Serial number of the device ', - name: 'sophos.xg.device_id', - type: 'keyword', - }, - 'sophos.xg.log_id': { - category: 'sophos', - description: 'Unique 12 characters code (0101011) ', - name: 'sophos.xg.log_id', - type: 'keyword', - }, - 'sophos.xg.log_type': { - category: 'sophos', - description: 'Type of event e.g. firewall event ', - name: 'sophos.xg.log_type', - type: 'keyword', - }, - 'sophos.xg.log_component': { - category: 'sophos', - description: 'Component responsible for logging e.g. Firewall rule ', - name: 'sophos.xg.log_component', - type: 'keyword', - }, - 'sophos.xg.log_subtype': { - category: 'sophos', - description: 'Sub type of event ', - name: 'sophos.xg.log_subtype', - type: 'keyword', - }, - 'sophos.xg.hb_health': { - category: 'sophos', - description: 'Heartbeat status ', - name: 'sophos.xg.hb_health', - type: 'keyword', - }, - 'sophos.xg.priority': { - category: 'sophos', - description: 'Severity level of traffic ', - name: 'sophos.xg.priority', - type: 'keyword', - }, - 'sophos.xg.status': { - category: 'sophos', - description: 'Ultimate status of traffic – Allowed or Denied ', - name: 'sophos.xg.status', - type: 'keyword', - }, - 'sophos.xg.duration': { - category: 'sophos', - description: 'Durability of traffic (seconds) ', - name: 'sophos.xg.duration', - type: 'long', - }, - 'sophos.xg.fw_rule_id': { - category: 'sophos', - description: 'Firewall Rule ID which is applied on the traffic ', - name: 'sophos.xg.fw_rule_id', - type: 'integer', - }, - 'sophos.xg.user_name': { - category: 'sophos', - description: 'user_name ', - name: 'sophos.xg.user_name', - type: 'keyword', - }, - 'sophos.xg.user_group': { - category: 'sophos', - description: 'Group name to which the user belongs ', - name: 'sophos.xg.user_group', - type: 'keyword', - }, - 'sophos.xg.iap': { - category: 'sophos', - description: 'Internet Access policy ID applied on the traffic ', - name: 'sophos.xg.iap', - type: 'keyword', - }, - 'sophos.xg.ips_policy_id': { - category: 'sophos', - description: 'IPS policy ID applied on the traffic ', - name: 'sophos.xg.ips_policy_id', - type: 'integer', - }, - 'sophos.xg.policy_type': { - category: 'sophos', - description: 'Policy type applied to the traffic ', - name: 'sophos.xg.policy_type', - type: 'keyword', - }, - 'sophos.xg.appfilter_policy_id': { - category: 'sophos', - description: 'Application Filter policy applied on the traffic ', - name: 'sophos.xg.appfilter_policy_id', - type: 'integer', - }, - 'sophos.xg.application_filter_policy': { - category: 'sophos', - description: 'Application Filter policy applied on the traffic ', - name: 'sophos.xg.application_filter_policy', - type: 'integer', - }, - 'sophos.xg.application': { - category: 'sophos', - description: 'Application name ', - name: 'sophos.xg.application', - type: 'keyword', - }, - 'sophos.xg.application_name': { - category: 'sophos', - description: 'Application name ', - name: 'sophos.xg.application_name', - type: 'keyword', - }, - 'sophos.xg.application_risk': { - category: 'sophos', - description: 'Risk level assigned to the application ', - name: 'sophos.xg.application_risk', - type: 'keyword', - }, - 'sophos.xg.application_technology': { - category: 'sophos', - description: 'Technology of the application ', - name: 'sophos.xg.application_technology', - type: 'keyword', - }, - 'sophos.xg.application_category': { - category: 'sophos', - description: 'Application is resolved by signature or synchronized application ', - name: 'sophos.xg.application_category', - type: 'keyword', - }, - 'sophos.xg.appresolvedby': { - category: 'sophos', - description: 'Technology of the application ', - name: 'sophos.xg.appresolvedby', - type: 'keyword', - }, - 'sophos.xg.app_is_cloud': { - category: 'sophos', - description: 'Application is Cloud ', - name: 'sophos.xg.app_is_cloud', - type: 'keyword', - }, - 'sophos.xg.in_interface': { - category: 'sophos', - description: 'Interface for incoming traffic, e.g., Port A ', - name: 'sophos.xg.in_interface', - type: 'keyword', - }, - 'sophos.xg.out_interface': { - category: 'sophos', - description: 'Interface for outgoing traffic, e.g., Port B ', - name: 'sophos.xg.out_interface', - type: 'keyword', - }, - 'sophos.xg.src_ip': { - category: 'sophos', - description: 'Original source IP address of traffic ', - name: 'sophos.xg.src_ip', - type: 'ip', - }, - 'sophos.xg.src_mac': { - category: 'sophos', - description: 'Original source MAC address of traffic ', - name: 'sophos.xg.src_mac', - type: 'keyword', - }, - 'sophos.xg.src_country_code': { - category: 'sophos', - description: 'Code of the country to which the source IP belongs ', - name: 'sophos.xg.src_country_code', - type: 'keyword', - }, - 'sophos.xg.dst_ip': { - category: 'sophos', - description: 'Original destination IP address of traffic ', - name: 'sophos.xg.dst_ip', - type: 'ip', - }, - 'sophos.xg.dst_country_code': { - category: 'sophos', - description: 'Code of the country to which the destination IP belongs ', - name: 'sophos.xg.dst_country_code', - type: 'keyword', - }, - 'sophos.xg.protocol': { - category: 'sophos', - description: 'Protocol number of traffic ', - name: 'sophos.xg.protocol', - type: 'keyword', - }, - 'sophos.xg.src_port': { - category: 'sophos', - description: 'Original source port of TCP and UDP traffic ', - name: 'sophos.xg.src_port', - type: 'integer', - }, - 'sophos.xg.dst_port': { - category: 'sophos', - description: 'Original destination port of TCP and UDP traffic ', - name: 'sophos.xg.dst_port', - type: 'integer', - }, - 'sophos.xg.icmp_type': { - category: 'sophos', - description: 'ICMP type of ICMP traffic ', - name: 'sophos.xg.icmp_type', - type: 'keyword', - }, - 'sophos.xg.icmp_code': { - category: 'sophos', - description: 'ICMP code of ICMP traffic ', - name: 'sophos.xg.icmp_code', - type: 'keyword', - }, - 'sophos.xg.sent_pkts': { - category: 'sophos', - description: 'Total number of packets sent ', - name: 'sophos.xg.sent_pkts', - type: 'long', - }, - 'sophos.xg.received_pkts': { - category: 'sophos', - description: 'Total number of packets received ', - name: 'sophos.xg.received_pkts', - type: 'long', - }, - 'sophos.xg.sent_bytes': { - category: 'sophos', - description: 'Total number of bytes sent ', - name: 'sophos.xg.sent_bytes', - type: 'long', - }, - 'sophos.xg.recv_bytes': { - category: 'sophos', - description: 'Total number of bytes received ', - name: 'sophos.xg.recv_bytes', - type: 'long', - }, - 'sophos.xg.trans_src_ip': { - category: 'sophos', - description: 'Translated source IP address for outgoing traffic ', - name: 'sophos.xg.trans_src_ip', - type: 'ip', - }, - 'sophos.xg.trans_src_port': { - category: 'sophos', - description: 'Translated source port for outgoing traffic ', - name: 'sophos.xg.trans_src_port', - type: 'integer', - }, - 'sophos.xg.trans_dst_ip': { - category: 'sophos', - description: 'Translated destination IP address for outgoing traffic ', - name: 'sophos.xg.trans_dst_ip', - type: 'ip', - }, - 'sophos.xg.trans_dst_port': { - category: 'sophos', - description: 'Translated destination port for outgoing traffic ', - name: 'sophos.xg.trans_dst_port', - type: 'integer', - }, - 'sophos.xg.srczonetype': { - category: 'sophos', - description: 'Type of source zone, e.g., LAN ', - name: 'sophos.xg.srczonetype', - type: 'keyword', - }, - 'sophos.xg.srczone': { - category: 'sophos', - description: 'Name of source zone ', - name: 'sophos.xg.srczone', - type: 'keyword', - }, - 'sophos.xg.dstzonetype': { - category: 'sophos', - description: 'Type of destination zone, e.g., WAN ', - name: 'sophos.xg.dstzonetype', - type: 'keyword', - }, - 'sophos.xg.dstzone': { - category: 'sophos', - description: 'Name of destination zone ', - name: 'sophos.xg.dstzone', - type: 'keyword', - }, - 'sophos.xg.dir_disp': { - category: 'sophos', - description: 'TPacket direction. Possible values:“org”, “reply”, “” ', - name: 'sophos.xg.dir_disp', - type: 'keyword', - }, - 'sophos.xg.connevent': { - category: 'sophos', - description: 'Event on which this log is generated ', - name: 'sophos.xg.connevent', - type: 'keyword', - }, - 'sophos.xg.conn_id': { - category: 'sophos', - description: 'Unique identifier of connection ', - name: 'sophos.xg.conn_id', - type: 'integer', - }, - 'sophos.xg.vconn_id': { - category: 'sophos', - description: 'Connection ID of the master connection ', - name: 'sophos.xg.vconn_id', - type: 'integer', - }, - 'sophos.xg.idp_policy_id': { - category: 'sophos', - description: 'IPS policy ID which is applied on the traffic ', - name: 'sophos.xg.idp_policy_id', - type: 'integer', - }, - 'sophos.xg.idp_policy_name': { - category: 'sophos', - description: 'IPS policy name i.e. IPS policy name which is applied on the traffic ', - name: 'sophos.xg.idp_policy_name', - type: 'keyword', - }, - 'sophos.xg.signature_id': { - category: 'sophos', - description: 'Signature ID ', - name: 'sophos.xg.signature_id', - type: 'keyword', - }, - 'sophos.xg.signature_msg': { - category: 'sophos', - description: 'Signature messsage ', - name: 'sophos.xg.signature_msg', - type: 'keyword', - }, - 'sophos.xg.classification': { - category: 'sophos', - description: 'Signature classification ', - name: 'sophos.xg.classification', - type: 'keyword', - }, - 'sophos.xg.rule_priority': { - category: 'sophos', - description: 'Priority of IPS policy ', - name: 'sophos.xg.rule_priority', - type: 'keyword', - }, - 'sophos.xg.platform': { - category: 'sophos', - description: 'Platform of the traffic. ', - name: 'sophos.xg.platform', - type: 'keyword', - }, - 'sophos.xg.category': { - category: 'sophos', - description: 'IPS signature category. ', - name: 'sophos.xg.category', - type: 'keyword', - }, - 'sophos.xg.target': { - category: 'sophos', - description: 'Platform of the traffic. ', - name: 'sophos.xg.target', - type: 'keyword', - }, - 'sophos.xg.eventid': { - category: 'sophos', - description: 'ATP Evenet ID ', - name: 'sophos.xg.eventid', - type: 'keyword', - }, - 'sophos.xg.ep_uuid': { - category: 'sophos', - description: 'Endpoint UUID ', - name: 'sophos.xg.ep_uuid', - type: 'keyword', - }, - 'sophos.xg.threatname': { - category: 'sophos', - description: 'ATP threatname ', - name: 'sophos.xg.threatname', - type: 'keyword', - }, - 'sophos.xg.sourceip': { - category: 'sophos', - description: 'Original source IP address of traffic ', - name: 'sophos.xg.sourceip', - type: 'ip', - }, - 'sophos.xg.destinationip': { - category: 'sophos', - description: 'Original destination IP address of traffic ', - name: 'sophos.xg.destinationip', - type: 'ip', - }, - 'sophos.xg.login_user': { - category: 'sophos', - description: 'ATP login user ', - name: 'sophos.xg.login_user', - type: 'keyword', - }, - 'sophos.xg.eventtype': { - category: 'sophos', - description: 'ATP event type ', - name: 'sophos.xg.eventtype', - type: 'keyword', - }, - 'sophos.xg.execution_path': { - category: 'sophos', - description: 'ATP execution path ', - name: 'sophos.xg.execution_path', - type: 'keyword', - }, - 'sophos.xg.av_policy_name': { - category: 'sophos', - description: 'Malware scanning policy name which is applied on the traffic ', - name: 'sophos.xg.av_policy_name', - type: 'keyword', - }, - 'sophos.xg.from_email_address': { - category: 'sophos', - description: 'Sender email address ', - name: 'sophos.xg.from_email_address', - type: 'keyword', - }, - 'sophos.xg.to_email_address': { - category: 'sophos', - description: 'Receipeint email address ', - name: 'sophos.xg.to_email_address', - type: 'keyword', - }, - 'sophos.xg.subject': { - category: 'sophos', - description: 'Email subject ', - name: 'sophos.xg.subject', - type: 'keyword', - }, - 'sophos.xg.mailsize': { - category: 'sophos', - description: 'mailsize ', - name: 'sophos.xg.mailsize', - type: 'integer', - }, - 'sophos.xg.virus': { - category: 'sophos', - description: 'virus name ', - name: 'sophos.xg.virus', - type: 'keyword', - }, - 'sophos.xg.ftp_url': { - category: 'sophos', - description: 'FTP URL from which virus was downloaded ', - name: 'sophos.xg.ftp_url', - type: 'keyword', - }, - 'sophos.xg.ftp_direction': { - category: 'sophos', - description: 'Direction of FTP transfer: Upload or Download ', - name: 'sophos.xg.ftp_direction', - type: 'keyword', - }, - 'sophos.xg.filesize': { - category: 'sophos', - description: 'Size of the file that contained virus ', - name: 'sophos.xg.filesize', - type: 'integer', - }, - 'sophos.xg.filepath': { - category: 'sophos', - description: 'Path of the file containing virus ', - name: 'sophos.xg.filepath', - type: 'keyword', - }, - 'sophos.xg.filename': { - category: 'sophos', - description: 'File name associated with the event ', - name: 'sophos.xg.filename', - type: 'keyword', - }, - 'sophos.xg.ftpcommand': { - category: 'sophos', - description: 'FTP command used when virus was found ', - name: 'sophos.xg.ftpcommand', - type: 'keyword', - }, - 'sophos.xg.url': { - category: 'sophos', - description: 'URL from which virus was downloaded ', - name: 'sophos.xg.url', - type: 'keyword', - }, - 'sophos.xg.domainname': { - category: 'sophos', - description: 'Domain from which virus was downloaded ', - name: 'sophos.xg.domainname', - type: 'keyword', - }, - 'sophos.xg.quarantine': { - category: 'sophos', - description: 'Path and filename of the file quarantined ', - name: 'sophos.xg.quarantine', - type: 'keyword', - }, - 'sophos.xg.src_domainname': { - category: 'sophos', - description: 'Sender domain name ', - name: 'sophos.xg.src_domainname', - type: 'keyword', - }, - 'sophos.xg.dst_domainname': { - category: 'sophos', - description: 'Receiver domain name ', - name: 'sophos.xg.dst_domainname', - type: 'keyword', - }, - 'sophos.xg.reason': { - category: 'sophos', - description: 'Reason why the record was detected as spam/malicious ', - name: 'sophos.xg.reason', - type: 'keyword', - }, - 'sophos.xg.referer': { - category: 'sophos', - description: 'Referer ', - name: 'sophos.xg.referer', - type: 'keyword', - }, - 'sophos.xg.spamaction': { - category: 'sophos', - description: 'Spam Action ', - name: 'sophos.xg.spamaction', - type: 'keyword', - }, - 'sophos.xg.mailid': { - category: 'sophos', - description: 'mailid ', - name: 'sophos.xg.mailid', - type: 'keyword', - }, - 'sophos.xg.quarantine_reason': { - category: 'sophos', - description: 'Quarantine reason ', - name: 'sophos.xg.quarantine_reason', - type: 'keyword', - }, - 'sophos.xg.status_code': { - category: 'sophos', - description: 'Status code ', - name: 'sophos.xg.status_code', - type: 'keyword', - }, - 'sophos.xg.override_token': { - category: 'sophos', - description: 'Override token ', - name: 'sophos.xg.override_token', - type: 'keyword', - }, - 'sophos.xg.con_id': { - category: 'sophos', - description: 'Unique identifier of connection ', - name: 'sophos.xg.con_id', - type: 'integer', - }, - 'sophos.xg.override_authorizer': { - category: 'sophos', - description: 'Override authorizer ', - name: 'sophos.xg.override_authorizer', - type: 'keyword', - }, - 'sophos.xg.transactionid': { - category: 'sophos', - description: 'Transaction ID of the AV scan. ', - name: 'sophos.xg.transactionid', - type: 'keyword', - }, - 'sophos.xg.upload_file_type': { - category: 'sophos', - description: 'Upload file type ', - name: 'sophos.xg.upload_file_type', - type: 'keyword', - }, - 'sophos.xg.upload_file_name': { - category: 'sophos', - description: 'Upload file name ', - name: 'sophos.xg.upload_file_name', - type: 'keyword', - }, - 'sophos.xg.httpresponsecode': { - category: 'sophos', - description: 'code of HTTP response ', - name: 'sophos.xg.httpresponsecode', - type: 'long', - }, - 'sophos.xg.user_gp': { - category: 'sophos', - description: 'Group name to which the user belongs. ', - name: 'sophos.xg.user_gp', - type: 'keyword', - }, - 'sophos.xg.category_type': { - category: 'sophos', - description: 'Type of category under which website falls ', - name: 'sophos.xg.category_type', - type: 'keyword', - }, - 'sophos.xg.download_file_type': { - category: 'sophos', - description: 'Download file type ', - name: 'sophos.xg.download_file_type', - type: 'keyword', - }, - 'sophos.xg.exceptions': { - category: 'sophos', - description: 'List of the checks excluded by web exceptions. ', - name: 'sophos.xg.exceptions', - type: 'keyword', - }, - 'sophos.xg.contenttype': { - category: 'sophos', - description: 'Type of the content ', - name: 'sophos.xg.contenttype', - type: 'keyword', - }, - 'sophos.xg.override_name': { - category: 'sophos', - description: 'Override name ', - name: 'sophos.xg.override_name', - type: 'keyword', - }, - 'sophos.xg.activityname': { - category: 'sophos', - description: 'Web policy activity that matched and caused the policy result. ', - name: 'sophos.xg.activityname', - type: 'keyword', - }, - 'sophos.xg.download_file_name': { - category: 'sophos', - description: 'Download file name ', - name: 'sophos.xg.download_file_name', - type: 'keyword', - }, - 'sophos.xg.sha1sum': { - category: 'sophos', - description: 'SHA1 checksum of the item being analyzed ', - name: 'sophos.xg.sha1sum', - type: 'keyword', - }, - 'sophos.xg.message_id': { - category: 'sophos', - description: 'Message ID ', - name: 'sophos.xg.message_id', - type: 'keyword', - }, - 'sophos.xg.connid': { - category: 'sophos', - description: 'Connection ID ', - name: 'sophos.xg.connid', - type: 'keyword', - }, - 'sophos.xg.message': { - category: 'sophos', - description: 'Message ', - name: 'sophos.xg.message', - type: 'keyword', - }, - 'sophos.xg.email_subject': { - category: 'sophos', - description: 'Email Subject ', - name: 'sophos.xg.email_subject', - type: 'keyword', - }, - 'sophos.xg.file_path': { - category: 'sophos', - description: 'File path ', - name: 'sophos.xg.file_path', - type: 'keyword', - }, - 'sophos.xg.dstdomain': { - category: 'sophos', - description: 'Destination Domain ', - name: 'sophos.xg.dstdomain', - type: 'keyword', - }, - 'sophos.xg.file_size': { - category: 'sophos', - description: 'File Size ', - name: 'sophos.xg.file_size', - type: 'integer', - }, - 'sophos.xg.transaction_id': { - category: 'sophos', - description: 'Transaction ID ', - name: 'sophos.xg.transaction_id', - type: 'keyword', - }, - 'sophos.xg.website': { - category: 'sophos', - description: 'Website ', - name: 'sophos.xg.website', - type: 'keyword', - }, - 'sophos.xg.file_name': { - category: 'sophos', - description: 'Filename ', - name: 'sophos.xg.file_name', - type: 'keyword', - }, - 'sophos.xg.context_prefix': { - category: 'sophos', - description: 'Content Prefix ', - name: 'sophos.xg.context_prefix', - type: 'keyword', - }, - 'sophos.xg.site_category': { - category: 'sophos', - description: 'Site Category ', - name: 'sophos.xg.site_category', - type: 'keyword', - }, - 'sophos.xg.context_suffix': { - category: 'sophos', - description: 'Context Suffix ', - name: 'sophos.xg.context_suffix', - type: 'keyword', - }, - 'sophos.xg.dictionary_name': { - category: 'sophos', - description: 'Dictionary Name ', - name: 'sophos.xg.dictionary_name', - type: 'keyword', - }, - 'sophos.xg.action': { - category: 'sophos', - description: 'Event Action ', - name: 'sophos.xg.action', - type: 'keyword', - }, - 'sophos.xg.user': { - category: 'sophos', - description: 'User ', - name: 'sophos.xg.user', - type: 'keyword', - }, - 'sophos.xg.context_match': { - category: 'sophos', - description: 'Context Match ', - name: 'sophos.xg.context_match', - type: 'keyword', - }, - 'sophos.xg.direction': { - category: 'sophos', - description: 'Direction ', - name: 'sophos.xg.direction', - type: 'keyword', - }, - 'sophos.xg.auth_client': { - category: 'sophos', - description: 'Auth Client ', - name: 'sophos.xg.auth_client', - type: 'keyword', - }, - 'sophos.xg.auth_mechanism': { - category: 'sophos', - description: 'Auth mechanism ', - name: 'sophos.xg.auth_mechanism', - type: 'keyword', - }, - 'sophos.xg.connectionname': { - category: 'sophos', - description: 'Connectionname ', - name: 'sophos.xg.connectionname', - type: 'keyword', - }, - 'sophos.xg.remotenetwork': { - category: 'sophos', - description: 'remotenetwork ', - name: 'sophos.xg.remotenetwork', - type: 'keyword', - }, - 'sophos.xg.localgateway': { - category: 'sophos', - description: 'Localgateway ', - name: 'sophos.xg.localgateway', - type: 'keyword', - }, - 'sophos.xg.localnetwork': { - category: 'sophos', - description: 'Localnetwork ', - name: 'sophos.xg.localnetwork', - type: 'keyword', - }, - 'sophos.xg.connectiontype': { - category: 'sophos', - description: 'Connectiontype ', - name: 'sophos.xg.connectiontype', - type: 'keyword', - }, - 'sophos.xg.oldversion': { - category: 'sophos', - description: 'Oldversion ', - name: 'sophos.xg.oldversion', - type: 'keyword', - }, - 'sophos.xg.newversion': { - category: 'sophos', - description: 'Newversion ', - name: 'sophos.xg.newversion', - type: 'keyword', - }, - 'sophos.xg.ipaddress': { - category: 'sophos', - description: 'Ipaddress ', - name: 'sophos.xg.ipaddress', - type: 'keyword', - }, - 'sophos.xg.client_physical_address': { - category: 'sophos', - description: 'Client physical address ', - name: 'sophos.xg.client_physical_address', - type: 'keyword', - }, - 'sophos.xg.client_host_name': { - category: 'sophos', - description: 'Client host name ', - name: 'sophos.xg.client_host_name', - type: 'keyword', - }, - 'sophos.xg.raw_data': { - category: 'sophos', - description: 'Raw data ', - name: 'sophos.xg.raw_data', - type: 'keyword', - }, - 'sophos.xg.Mode': { - category: 'sophos', - description: 'Mode ', - name: 'sophos.xg.Mode', - type: 'keyword', - }, - 'sophos.xg.sessionid': { - category: 'sophos', - description: 'Sessionid ', - name: 'sophos.xg.sessionid', - type: 'keyword', - }, - 'sophos.xg.starttime': { - category: 'sophos', - description: 'Starttime ', - name: 'sophos.xg.starttime', - type: 'date', - }, - 'sophos.xg.remote_ip': { - category: 'sophos', - description: 'Remote IP ', - name: 'sophos.xg.remote_ip', - type: 'ip', - }, - 'sophos.xg.timestamp': { - category: 'sophos', - description: 'timestamp ', - name: 'sophos.xg.timestamp', - type: 'date', - }, - 'sophos.xg.SysLog_SERVER_NAME': { - category: 'sophos', - description: 'SysLog SERVER NAME ', - name: 'sophos.xg.SysLog_SERVER_NAME', - type: 'keyword', - }, - 'sophos.xg.backup_mode': { - category: 'sophos', - description: 'Backup mode ', - name: 'sophos.xg.backup_mode', - type: 'keyword', - }, - 'sophos.xg.source': { - category: 'sophos', - description: 'Source ', - name: 'sophos.xg.source', - type: 'keyword', - }, - 'sophos.xg.server': { - category: 'sophos', - description: 'Server ', - name: 'sophos.xg.server', - type: 'keyword', - }, - 'sophos.xg.host': { - category: 'sophos', - description: 'Host ', - name: 'sophos.xg.host', - type: 'keyword', - }, - 'sophos.xg.responsetime': { - category: 'sophos', - description: 'Responsetime ', - name: 'sophos.xg.responsetime', - type: 'long', - }, - 'sophos.xg.cookie': { - category: 'sophos', - description: 'cookie ', - name: 'sophos.xg.cookie', - type: 'keyword', - }, - 'sophos.xg.querystring': { - category: 'sophos', - description: 'querystring ', - name: 'sophos.xg.querystring', - type: 'keyword', - }, - 'sophos.xg.extra': { - category: 'sophos', - description: 'extra ', - name: 'sophos.xg.extra', - type: 'keyword', - }, - 'sophos.xg.PHPSESSID': { - category: 'sophos', - description: 'PHPSESSID ', - name: 'sophos.xg.PHPSESSID', - type: 'keyword', - }, - 'sophos.xg.start_time': { - category: 'sophos', - description: 'Start time ', - name: 'sophos.xg.start_time', - type: 'date', - }, - 'sophos.xg.eventtime': { - category: 'sophos', - description: 'Event time ', - name: 'sophos.xg.eventtime', - type: 'date', - }, - 'sophos.xg.red_id': { - category: 'sophos', - description: 'RED ID ', - name: 'sophos.xg.red_id', - type: 'keyword', - }, - 'sophos.xg.branch_name': { - category: 'sophos', - description: 'Branch Name ', - name: 'sophos.xg.branch_name', - type: 'keyword', - }, - 'sophos.xg.updatedip': { - category: 'sophos', - description: 'updatedip ', - name: 'sophos.xg.updatedip', - type: 'ip', - }, - 'sophos.xg.idle_cpu': { - category: 'sophos', - description: 'idle ## ', - name: 'sophos.xg.idle_cpu', - type: 'float', - }, - 'sophos.xg.system_cpu': { - category: 'sophos', - description: 'system ', - name: 'sophos.xg.system_cpu', - type: 'float', - }, - 'sophos.xg.user_cpu': { - category: 'sophos', - description: 'system ', - name: 'sophos.xg.user_cpu', - type: 'float', - }, - 'sophos.xg.used': { - category: 'sophos', - description: 'used ', - name: 'sophos.xg.used', - type: 'integer', - }, - 'sophos.xg.unit': { - category: 'sophos', - description: 'unit ', - name: 'sophos.xg.unit', - type: 'keyword', - }, - 'sophos.xg.total_memory': { - category: 'sophos', - description: 'Total Memory ', - name: 'sophos.xg.total_memory', - type: 'integer', - }, - 'sophos.xg.free': { - category: 'sophos', - description: 'free ', - name: 'sophos.xg.free', - type: 'integer', - }, - 'sophos.xg.transmittederrors': { - category: 'sophos', - description: 'transmitted errors ', - name: 'sophos.xg.transmittederrors', - type: 'keyword', - }, - 'sophos.xg.receivederrors': { - category: 'sophos', - description: 'received errors ', - name: 'sophos.xg.receivederrors', - type: 'keyword', - }, - 'sophos.xg.receivedkbits': { - category: 'sophos', - description: 'received kbits ', - name: 'sophos.xg.receivedkbits', - type: 'long', - }, - 'sophos.xg.transmittedkbits': { - category: 'sophos', - description: 'transmitted kbits ', - name: 'sophos.xg.transmittedkbits', - type: 'long', - }, - 'sophos.xg.transmitteddrops': { - category: 'sophos', - description: 'transmitted drops ', - name: 'sophos.xg.transmitteddrops', - type: 'long', - }, - 'sophos.xg.receiveddrops': { - category: 'sophos', - description: 'received drops ', - name: 'sophos.xg.receiveddrops', - type: 'long', - }, - 'sophos.xg.collisions': { - category: 'sophos', - description: 'collisions ', - name: 'sophos.xg.collisions', - type: 'long', - }, - 'sophos.xg.interface': { - category: 'sophos', - description: 'interface ', - name: 'sophos.xg.interface', - type: 'keyword', - }, - 'sophos.xg.Configuration': { - category: 'sophos', - description: 'Configuration ', - name: 'sophos.xg.Configuration', - type: 'float', - }, - 'sophos.xg.Reports': { - category: 'sophos', - description: 'Reports ', - name: 'sophos.xg.Reports', - type: 'float', - }, - 'sophos.xg.Signature': { - category: 'sophos', - description: 'Signature ', - name: 'sophos.xg.Signature', - type: 'float', - }, - 'sophos.xg.Temp': { - category: 'sophos', - description: 'Temp ', - name: 'sophos.xg.Temp', - type: 'float', - }, - 'sophos.xg.users': { - category: 'sophos', - description: 'users ', - name: 'sophos.xg.users', - type: 'keyword', - }, - 'sophos.xg.ssid': { - category: 'sophos', - description: 'ssid ', - name: 'sophos.xg.ssid', - type: 'keyword', - }, - 'sophos.xg.ap': { - category: 'sophos', - description: 'ap ', - name: 'sophos.xg.ap', - type: 'keyword', - }, - 'sophos.xg.clients_conn_ssid': { - category: 'sophos', - description: 'clients connection ssid ', - name: 'sophos.xg.clients_conn_ssid', - type: 'keyword', - }, - 'sophos.xg.sqli': { - category: 'sophos', - description: 'The related SQLI caught by the WAF ', - name: 'sophos.xg.sqli', - type: 'keyword', - }, - 'sophos.xg.xss': { - category: 'sophos', - description: 'The related XSS caught by the WAF ', - name: 'sophos.xg.xss', - type: 'keyword', - }, - 'suricata.eve.event_type': { - category: 'suricata', - name: 'suricata.eve.event_type', - type: 'keyword', - }, - 'suricata.eve.app_proto_orig': { - category: 'suricata', - name: 'suricata.eve.app_proto_orig', - type: 'keyword', - }, - 'suricata.eve.tcp.tcp_flags': { - category: 'suricata', - name: 'suricata.eve.tcp.tcp_flags', - type: 'keyword', - }, - 'suricata.eve.tcp.psh': { - category: 'suricata', - name: 'suricata.eve.tcp.psh', - type: 'boolean', - }, - 'suricata.eve.tcp.tcp_flags_tc': { - category: 'suricata', - name: 'suricata.eve.tcp.tcp_flags_tc', - type: 'keyword', - }, - 'suricata.eve.tcp.ack': { - category: 'suricata', - name: 'suricata.eve.tcp.ack', - type: 'boolean', - }, - 'suricata.eve.tcp.syn': { - category: 'suricata', - name: 'suricata.eve.tcp.syn', - type: 'boolean', - }, - 'suricata.eve.tcp.state': { - category: 'suricata', - name: 'suricata.eve.tcp.state', - type: 'keyword', - }, - 'suricata.eve.tcp.tcp_flags_ts': { - category: 'suricata', - name: 'suricata.eve.tcp.tcp_flags_ts', - type: 'keyword', - }, - 'suricata.eve.tcp.rst': { - category: 'suricata', - name: 'suricata.eve.tcp.rst', - type: 'boolean', - }, - 'suricata.eve.tcp.fin': { - category: 'suricata', - name: 'suricata.eve.tcp.fin', - type: 'boolean', - }, - 'suricata.eve.fileinfo.sha1': { - category: 'suricata', - name: 'suricata.eve.fileinfo.sha1', - type: 'keyword', - }, - 'suricata.eve.fileinfo.filename': { - category: 'suricata', - name: 'suricata.eve.fileinfo.filename', - type: 'alias', - }, - 'suricata.eve.fileinfo.tx_id': { - category: 'suricata', - name: 'suricata.eve.fileinfo.tx_id', - type: 'long', - }, - 'suricata.eve.fileinfo.state': { - category: 'suricata', - name: 'suricata.eve.fileinfo.state', - type: 'keyword', - }, - 'suricata.eve.fileinfo.stored': { - category: 'suricata', - name: 'suricata.eve.fileinfo.stored', - type: 'boolean', - }, - 'suricata.eve.fileinfo.gaps': { - category: 'suricata', - name: 'suricata.eve.fileinfo.gaps', - type: 'boolean', - }, - 'suricata.eve.fileinfo.sha256': { - category: 'suricata', - name: 'suricata.eve.fileinfo.sha256', - type: 'keyword', - }, - 'suricata.eve.fileinfo.md5': { - category: 'suricata', - name: 'suricata.eve.fileinfo.md5', - type: 'keyword', - }, - 'suricata.eve.fileinfo.size': { - category: 'suricata', - name: 'suricata.eve.fileinfo.size', - type: 'alias', - }, - 'suricata.eve.icmp_type': { - category: 'suricata', - name: 'suricata.eve.icmp_type', - type: 'long', - }, - 'suricata.eve.dest_port': { - category: 'suricata', - name: 'suricata.eve.dest_port', - type: 'alias', - }, - 'suricata.eve.src_port': { - category: 'suricata', - name: 'suricata.eve.src_port', - type: 'alias', - }, - 'suricata.eve.proto': { - category: 'suricata', - name: 'suricata.eve.proto', - type: 'alias', - }, - 'suricata.eve.pcap_cnt': { - category: 'suricata', - name: 'suricata.eve.pcap_cnt', - type: 'long', - }, - 'suricata.eve.src_ip': { - category: 'suricata', - name: 'suricata.eve.src_ip', - type: 'alias', - }, - 'suricata.eve.dns.type': { - category: 'suricata', - name: 'suricata.eve.dns.type', - type: 'keyword', - }, - 'suricata.eve.dns.rrtype': { - category: 'suricata', - name: 'suricata.eve.dns.rrtype', - type: 'keyword', - }, - 'suricata.eve.dns.rrname': { - category: 'suricata', - name: 'suricata.eve.dns.rrname', - type: 'keyword', - }, - 'suricata.eve.dns.rdata': { - category: 'suricata', - name: 'suricata.eve.dns.rdata', - type: 'keyword', - }, - 'suricata.eve.dns.tx_id': { - category: 'suricata', - name: 'suricata.eve.dns.tx_id', - type: 'long', - }, - 'suricata.eve.dns.ttl': { - category: 'suricata', - name: 'suricata.eve.dns.ttl', - type: 'long', - }, - 'suricata.eve.dns.rcode': { - category: 'suricata', - name: 'suricata.eve.dns.rcode', - type: 'keyword', - }, - 'suricata.eve.dns.id': { - category: 'suricata', - name: 'suricata.eve.dns.id', - type: 'long', - }, - 'suricata.eve.flow_id': { - category: 'suricata', - name: 'suricata.eve.flow_id', - type: 'keyword', - }, - 'suricata.eve.email.status': { - category: 'suricata', - name: 'suricata.eve.email.status', - type: 'keyword', - }, - 'suricata.eve.dest_ip': { - category: 'suricata', - name: 'suricata.eve.dest_ip', - type: 'alias', - }, - 'suricata.eve.icmp_code': { - category: 'suricata', - name: 'suricata.eve.icmp_code', - type: 'long', - }, - 'suricata.eve.http.status': { - category: 'suricata', - name: 'suricata.eve.http.status', - type: 'alias', - }, - 'suricata.eve.http.redirect': { - category: 'suricata', - name: 'suricata.eve.http.redirect', - type: 'keyword', - }, - 'suricata.eve.http.http_user_agent': { - category: 'suricata', - name: 'suricata.eve.http.http_user_agent', - type: 'alias', - }, - 'suricata.eve.http.protocol': { - category: 'suricata', - name: 'suricata.eve.http.protocol', - type: 'keyword', - }, - 'suricata.eve.http.http_refer': { - category: 'suricata', - name: 'suricata.eve.http.http_refer', - type: 'alias', - }, - 'suricata.eve.http.url': { - category: 'suricata', - name: 'suricata.eve.http.url', - type: 'alias', - }, - 'suricata.eve.http.hostname': { - category: 'suricata', - name: 'suricata.eve.http.hostname', - type: 'alias', - }, - 'suricata.eve.http.length': { - category: 'suricata', - name: 'suricata.eve.http.length', - type: 'alias', - }, - 'suricata.eve.http.http_method': { - category: 'suricata', - name: 'suricata.eve.http.http_method', - type: 'alias', - }, - 'suricata.eve.http.http_content_type': { - category: 'suricata', - name: 'suricata.eve.http.http_content_type', - type: 'keyword', - }, - 'suricata.eve.in_iface': { - category: 'suricata', - name: 'suricata.eve.in_iface', - type: 'keyword', - }, - 'suricata.eve.alert.metadata': { - category: 'suricata', - description: 'Metadata about the alert.', - name: 'suricata.eve.alert.metadata', - type: 'flattened', - }, - 'suricata.eve.alert.category': { - category: 'suricata', - name: 'suricata.eve.alert.category', - type: 'keyword', - }, - 'suricata.eve.alert.severity': { - category: 'suricata', - name: 'suricata.eve.alert.severity', - type: 'alias', - }, - 'suricata.eve.alert.rev': { - category: 'suricata', - name: 'suricata.eve.alert.rev', - type: 'long', - }, - 'suricata.eve.alert.gid': { - category: 'suricata', - name: 'suricata.eve.alert.gid', - type: 'long', - }, - 'suricata.eve.alert.signature': { - category: 'suricata', - name: 'suricata.eve.alert.signature', - type: 'keyword', - }, - 'suricata.eve.alert.action': { - category: 'suricata', - name: 'suricata.eve.alert.action', - type: 'alias', - }, - 'suricata.eve.alert.signature_id': { - category: 'suricata', - name: 'suricata.eve.alert.signature_id', - type: 'long', - }, - 'suricata.eve.alert.protocols': { - category: 'suricata', - name: 'suricata.eve.alert.protocols', - type: 'keyword', - }, - 'suricata.eve.alert.attack_target': { - category: 'suricata', - name: 'suricata.eve.alert.attack_target', - type: 'keyword', - }, - 'suricata.eve.alert.capec_id': { - category: 'suricata', - name: 'suricata.eve.alert.capec_id', - type: 'keyword', - }, - 'suricata.eve.alert.cwe_id': { - category: 'suricata', - name: 'suricata.eve.alert.cwe_id', - type: 'keyword', - }, - 'suricata.eve.alert.malware': { - category: 'suricata', - name: 'suricata.eve.alert.malware', - type: 'keyword', - }, - 'suricata.eve.alert.cve': { - category: 'suricata', - name: 'suricata.eve.alert.cve', - type: 'keyword', - }, - 'suricata.eve.alert.cvss_v2_base': { - category: 'suricata', - name: 'suricata.eve.alert.cvss_v2_base', - type: 'keyword', - }, - 'suricata.eve.alert.cvss_v2_temporal': { - category: 'suricata', - name: 'suricata.eve.alert.cvss_v2_temporal', - type: 'keyword', - }, - 'suricata.eve.alert.cvss_v3_base': { - category: 'suricata', - name: 'suricata.eve.alert.cvss_v3_base', - type: 'keyword', - }, - 'suricata.eve.alert.cvss_v3_temporal': { - category: 'suricata', - name: 'suricata.eve.alert.cvss_v3_temporal', - type: 'keyword', - }, - 'suricata.eve.alert.priority': { - category: 'suricata', - name: 'suricata.eve.alert.priority', - type: 'keyword', - }, - 'suricata.eve.alert.hostile': { - category: 'suricata', - name: 'suricata.eve.alert.hostile', - type: 'keyword', - }, - 'suricata.eve.alert.infected': { - category: 'suricata', - name: 'suricata.eve.alert.infected', - type: 'keyword', - }, - 'suricata.eve.alert.created_at': { - category: 'suricata', - name: 'suricata.eve.alert.created_at', - type: 'date', - }, - 'suricata.eve.alert.updated_at': { - category: 'suricata', - name: 'suricata.eve.alert.updated_at', - type: 'date', - }, - 'suricata.eve.alert.classtype': { - category: 'suricata', - name: 'suricata.eve.alert.classtype', - type: 'keyword', - }, - 'suricata.eve.alert.rule_source': { - category: 'suricata', - name: 'suricata.eve.alert.rule_source', - type: 'keyword', - }, - 'suricata.eve.alert.sid': { - category: 'suricata', - name: 'suricata.eve.alert.sid', - type: 'keyword', - }, - 'suricata.eve.alert.affected_product': { - category: 'suricata', - name: 'suricata.eve.alert.affected_product', - type: 'keyword', - }, - 'suricata.eve.alert.deployment': { - category: 'suricata', - name: 'suricata.eve.alert.deployment', - type: 'keyword', - }, - 'suricata.eve.alert.former_category': { - category: 'suricata', - name: 'suricata.eve.alert.former_category', - type: 'keyword', - }, - 'suricata.eve.alert.mitre_tool_id': { - category: 'suricata', - name: 'suricata.eve.alert.mitre_tool_id', - type: 'keyword', - }, - 'suricata.eve.alert.performance_impact': { - category: 'suricata', - name: 'suricata.eve.alert.performance_impact', - type: 'keyword', - }, - 'suricata.eve.alert.signature_severity': { - category: 'suricata', - name: 'suricata.eve.alert.signature_severity', - type: 'keyword', - }, - 'suricata.eve.alert.tag': { - category: 'suricata', - name: 'suricata.eve.alert.tag', - type: 'keyword', - }, - 'suricata.eve.ssh.client.proto_version': { - category: 'suricata', - name: 'suricata.eve.ssh.client.proto_version', - type: 'keyword', - }, - 'suricata.eve.ssh.client.software_version': { - category: 'suricata', - name: 'suricata.eve.ssh.client.software_version', - type: 'keyword', - }, - 'suricata.eve.ssh.server.proto_version': { - category: 'suricata', - name: 'suricata.eve.ssh.server.proto_version', - type: 'keyword', - }, - 'suricata.eve.ssh.server.software_version': { - category: 'suricata', - name: 'suricata.eve.ssh.server.software_version', - type: 'keyword', - }, - 'suricata.eve.stats.capture.kernel_packets': { - category: 'suricata', - name: 'suricata.eve.stats.capture.kernel_packets', - type: 'long', - }, - 'suricata.eve.stats.capture.kernel_drops': { - category: 'suricata', - name: 'suricata.eve.stats.capture.kernel_drops', - type: 'long', - }, - 'suricata.eve.stats.capture.kernel_ifdrops': { - category: 'suricata', - name: 'suricata.eve.stats.capture.kernel_ifdrops', - type: 'long', - }, - 'suricata.eve.stats.uptime': { - category: 'suricata', - name: 'suricata.eve.stats.uptime', - type: 'long', - }, - 'suricata.eve.stats.detect.alert': { - category: 'suricata', - name: 'suricata.eve.stats.detect.alert', - type: 'long', - }, - 'suricata.eve.stats.http.memcap': { - category: 'suricata', - name: 'suricata.eve.stats.http.memcap', - type: 'long', - }, - 'suricata.eve.stats.http.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.http.memuse', - type: 'long', - }, - 'suricata.eve.stats.file_store.open_files': { - category: 'suricata', - name: 'suricata.eve.stats.file_store.open_files', - type: 'long', - }, - 'suricata.eve.stats.defrag.max_frag_hits': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.max_frag_hits', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv4.timeouts': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv4.timeouts', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv4.fragments': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv4.fragments', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv4.reassembled': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv4.reassembled', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv6.timeouts': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv6.timeouts', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv6.fragments': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv6.fragments', - type: 'long', - }, - 'suricata.eve.stats.defrag.ipv6.reassembled': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv6.reassembled', - type: 'long', - }, - 'suricata.eve.stats.flow.tcp_reuse': { - category: 'suricata', - name: 'suricata.eve.stats.flow.tcp_reuse', - type: 'long', - }, - 'suricata.eve.stats.flow.udp': { - category: 'suricata', - name: 'suricata.eve.stats.flow.udp', - type: 'long', - }, - 'suricata.eve.stats.flow.memcap': { - category: 'suricata', - name: 'suricata.eve.stats.flow.memcap', - type: 'long', - }, - 'suricata.eve.stats.flow.emerg_mode_entered': { - category: 'suricata', - name: 'suricata.eve.stats.flow.emerg_mode_entered', - type: 'long', - }, - 'suricata.eve.stats.flow.emerg_mode_over': { - category: 'suricata', - name: 'suricata.eve.stats.flow.emerg_mode_over', - type: 'long', - }, - 'suricata.eve.stats.flow.tcp': { - category: 'suricata', - name: 'suricata.eve.stats.flow.tcp', - type: 'long', - }, - 'suricata.eve.stats.flow.icmpv6': { - category: 'suricata', - name: 'suricata.eve.stats.flow.icmpv6', - type: 'long', - }, - 'suricata.eve.stats.flow.icmpv4': { - category: 'suricata', - name: 'suricata.eve.stats.flow.icmpv4', - type: 'long', - }, - 'suricata.eve.stats.flow.spare': { - category: 'suricata', - name: 'suricata.eve.stats.flow.spare', - type: 'long', - }, - 'suricata.eve.stats.flow.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.flow.memuse', - type: 'long', - }, - 'suricata.eve.stats.tcp.pseudo_failed': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.pseudo_failed', - type: 'long', - }, - 'suricata.eve.stats.tcp.ssn_memcap_drop': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.ssn_memcap_drop', - type: 'long', - }, - 'suricata.eve.stats.tcp.insert_data_overlap_fail': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.insert_data_overlap_fail', - type: 'long', - }, - 'suricata.eve.stats.tcp.sessions': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.sessions', - type: 'long', - }, - 'suricata.eve.stats.tcp.pseudo': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.pseudo', - type: 'long', - }, - 'suricata.eve.stats.tcp.synack': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.synack', - type: 'long', - }, - 'suricata.eve.stats.tcp.insert_data_normal_fail': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.insert_data_normal_fail', - type: 'long', - }, - 'suricata.eve.stats.tcp.syn': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.syn', - type: 'long', - }, - 'suricata.eve.stats.tcp.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.memuse', - type: 'long', - }, - 'suricata.eve.stats.tcp.invalid_checksum': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.invalid_checksum', - type: 'long', - }, - 'suricata.eve.stats.tcp.segment_memcap_drop': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.segment_memcap_drop', - type: 'long', - }, - 'suricata.eve.stats.tcp.overlap': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.overlap', - type: 'long', - }, - 'suricata.eve.stats.tcp.insert_list_fail': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.insert_list_fail', - type: 'long', - }, - 'suricata.eve.stats.tcp.rst': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.rst', - type: 'long', - }, - 'suricata.eve.stats.tcp.stream_depth_reached': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.stream_depth_reached', - type: 'long', - }, - 'suricata.eve.stats.tcp.reassembly_memuse': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.reassembly_memuse', - type: 'long', - }, - 'suricata.eve.stats.tcp.reassembly_gap': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.reassembly_gap', - type: 'long', - }, - 'suricata.eve.stats.tcp.overlap_diff_data': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.overlap_diff_data', - type: 'long', - }, - 'suricata.eve.stats.tcp.no_flow': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.no_flow', - type: 'long', - }, - 'suricata.eve.stats.decoder.avg_pkt_size': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.avg_pkt_size', - type: 'long', - }, - 'suricata.eve.stats.decoder.bytes': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.bytes', - type: 'long', - }, - 'suricata.eve.stats.decoder.tcp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.tcp', - type: 'long', - }, - 'suricata.eve.stats.decoder.raw': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.raw', - type: 'long', - }, - 'suricata.eve.stats.decoder.ppp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ppp', - type: 'long', - }, - 'suricata.eve.stats.decoder.vlan_qinq': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.vlan_qinq', - type: 'long', - }, - 'suricata.eve.stats.decoder.null': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.null', - type: 'long', - }, - 'suricata.eve.stats.decoder.ltnull.unsupported_type': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ltnull.unsupported_type', - type: 'long', - }, - 'suricata.eve.stats.decoder.ltnull.pkt_too_small': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ltnull.pkt_too_small', - type: 'long', - }, - 'suricata.eve.stats.decoder.invalid': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.invalid', - type: 'long', - }, - 'suricata.eve.stats.decoder.gre': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.gre', - type: 'long', - }, - 'suricata.eve.stats.decoder.ipv4': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv4', - type: 'long', - }, - 'suricata.eve.stats.decoder.ipv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv6', - type: 'long', - }, - 'suricata.eve.stats.decoder.pkts': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.pkts', - type: 'long', - }, - 'suricata.eve.stats.decoder.ipv6_in_ipv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv6_in_ipv6', - type: 'long', - }, - 'suricata.eve.stats.decoder.ipraw.invalid_ip_version': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipraw.invalid_ip_version', - type: 'long', - }, - 'suricata.eve.stats.decoder.pppoe': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.pppoe', - type: 'long', - }, - 'suricata.eve.stats.decoder.udp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.udp', - type: 'long', - }, - 'suricata.eve.stats.decoder.dce.pkt_too_small': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.dce.pkt_too_small', - type: 'long', - }, - 'suricata.eve.stats.decoder.vlan': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.vlan', - type: 'long', - }, - 'suricata.eve.stats.decoder.sctp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.sctp', - type: 'long', - }, - 'suricata.eve.stats.decoder.max_pkt_size': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.max_pkt_size', - type: 'long', - }, - 'suricata.eve.stats.decoder.teredo': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.teredo', - type: 'long', - }, - 'suricata.eve.stats.decoder.mpls': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.mpls', - type: 'long', - }, - 'suricata.eve.stats.decoder.sll': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.sll', - type: 'long', - }, - 'suricata.eve.stats.decoder.icmpv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.icmpv6', - type: 'long', - }, - 'suricata.eve.stats.decoder.icmpv4': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.icmpv4', - type: 'long', - }, - 'suricata.eve.stats.decoder.erspan': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.erspan', - type: 'long', - }, - 'suricata.eve.stats.decoder.ethernet': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ethernet', - type: 'long', - }, - 'suricata.eve.stats.decoder.ipv4_in_ipv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv4_in_ipv6', - type: 'long', - }, - 'suricata.eve.stats.decoder.ieee8021ah': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ieee8021ah', - type: 'long', - }, - 'suricata.eve.stats.dns.memcap_global': { - category: 'suricata', - name: 'suricata.eve.stats.dns.memcap_global', - type: 'long', - }, - 'suricata.eve.stats.dns.memcap_state': { - category: 'suricata', - name: 'suricata.eve.stats.dns.memcap_state', - type: 'long', - }, - 'suricata.eve.stats.dns.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.dns.memuse', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.rows_busy': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_busy', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.flows_timeout': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_timeout', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.flows_notimeout': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_notimeout', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.rows_skipped': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_skipped', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.closed_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.closed_pruned', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.new_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.new_pruned', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.flows_removed': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_removed', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.bypassed_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.bypassed_pruned', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.est_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.est_pruned', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.flows_timeout_inuse': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_timeout_inuse', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.flows_checked': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_checked', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.rows_maxlen': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_maxlen', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.rows_checked': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_checked', - type: 'long', - }, - 'suricata.eve.stats.flow_mgr.rows_empty': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_empty', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.tls': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.tls', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.ftp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.ftp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.http': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.http', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.failed_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.failed_udp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.dns_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dns_udp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.dns_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dns_tcp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.smtp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.smtp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.failed_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.failed_tcp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.msn': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.msn', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.ssh': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.ssh', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.imap': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.imap', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.dcerpc_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dcerpc_udp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.dcerpc_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dcerpc_tcp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.flow.smb': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.smb', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.tls': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.tls', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.ftp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.ftp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.http': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.http', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.dns_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dns_udp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.dns_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dns_tcp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.smtp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.smtp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.ssh': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.ssh', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.dcerpc_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dcerpc_udp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.dcerpc_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dcerpc_tcp', - type: 'long', - }, - 'suricata.eve.stats.app_layer.tx.smb': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.smb', - type: 'long', - }, - 'suricata.eve.tls.notbefore': { - category: 'suricata', - name: 'suricata.eve.tls.notbefore', - type: 'date', - }, - 'suricata.eve.tls.issuerdn': { - category: 'suricata', - name: 'suricata.eve.tls.issuerdn', - type: 'keyword', - }, - 'suricata.eve.tls.sni': { - category: 'suricata', - name: 'suricata.eve.tls.sni', - type: 'keyword', - }, - 'suricata.eve.tls.version': { - category: 'suricata', - name: 'suricata.eve.tls.version', - type: 'keyword', - }, - 'suricata.eve.tls.session_resumed': { - category: 'suricata', - name: 'suricata.eve.tls.session_resumed', - type: 'boolean', - }, - 'suricata.eve.tls.fingerprint': { - category: 'suricata', - name: 'suricata.eve.tls.fingerprint', - type: 'keyword', - }, - 'suricata.eve.tls.serial': { - category: 'suricata', - name: 'suricata.eve.tls.serial', - type: 'keyword', - }, - 'suricata.eve.tls.notafter': { - category: 'suricata', - name: 'suricata.eve.tls.notafter', - type: 'date', - }, - 'suricata.eve.tls.subject': { - category: 'suricata', - name: 'suricata.eve.tls.subject', - type: 'keyword', - }, - 'suricata.eve.tls.ja3s.string': { - category: 'suricata', - name: 'suricata.eve.tls.ja3s.string', - type: 'keyword', - }, - 'suricata.eve.tls.ja3s.hash': { - category: 'suricata', - name: 'suricata.eve.tls.ja3s.hash', - type: 'keyword', - }, - 'suricata.eve.tls.ja3.string': { - category: 'suricata', - name: 'suricata.eve.tls.ja3.string', - type: 'keyword', - }, - 'suricata.eve.tls.ja3.hash': { - category: 'suricata', - name: 'suricata.eve.tls.ja3.hash', - type: 'keyword', - }, - 'suricata.eve.app_proto_ts': { - category: 'suricata', - name: 'suricata.eve.app_proto_ts', - type: 'keyword', - }, - 'suricata.eve.flow.bytes_toclient': { - category: 'suricata', - name: 'suricata.eve.flow.bytes_toclient', - type: 'alias', - }, - 'suricata.eve.flow.start': { - category: 'suricata', - name: 'suricata.eve.flow.start', - type: 'alias', - }, - 'suricata.eve.flow.pkts_toclient': { - category: 'suricata', - name: 'suricata.eve.flow.pkts_toclient', - type: 'alias', - }, - 'suricata.eve.flow.age': { - category: 'suricata', - name: 'suricata.eve.flow.age', - type: 'long', - }, - 'suricata.eve.flow.state': { - category: 'suricata', - name: 'suricata.eve.flow.state', - type: 'keyword', - }, - 'suricata.eve.flow.bytes_toserver': { - category: 'suricata', - name: 'suricata.eve.flow.bytes_toserver', - type: 'alias', - }, - 'suricata.eve.flow.reason': { - category: 'suricata', - name: 'suricata.eve.flow.reason', - type: 'keyword', - }, - 'suricata.eve.flow.pkts_toserver': { - category: 'suricata', - name: 'suricata.eve.flow.pkts_toserver', - type: 'alias', - }, - 'suricata.eve.flow.alerted': { - category: 'suricata', - name: 'suricata.eve.flow.alerted', - type: 'boolean', - }, - 'suricata.eve.app_proto': { - category: 'suricata', - name: 'suricata.eve.app_proto', - type: 'alias', - }, - 'suricata.eve.tx_id': { - category: 'suricata', - name: 'suricata.eve.tx_id', - type: 'long', - }, - 'suricata.eve.app_proto_tc': { - category: 'suricata', - name: 'suricata.eve.app_proto_tc', - type: 'keyword', - }, - 'suricata.eve.smtp.rcpt_to': { - category: 'suricata', - name: 'suricata.eve.smtp.rcpt_to', - type: 'keyword', - }, - 'suricata.eve.smtp.mail_from': { - category: 'suricata', - name: 'suricata.eve.smtp.mail_from', - type: 'keyword', - }, - 'suricata.eve.smtp.helo': { - category: 'suricata', - name: 'suricata.eve.smtp.helo', - type: 'keyword', - }, - 'suricata.eve.app_proto_expected': { - category: 'suricata', - name: 'suricata.eve.app_proto_expected', - type: 'keyword', - }, - 'suricata.eve.flags': { - category: 'suricata', - name: 'suricata.eve.flags', - type: 'group', - }, - 'threatintel.indicator.first_seen': { - category: 'threatintel', - description: - 'The date and time when intelligence source first reported sighting this indicator. ', - name: 'threatintel.indicator.first_seen', - type: 'date', - }, - 'threatintel.indicator.last_seen': { - category: 'threatintel', - description: - 'The date and time when intelligence source last reported sighting this indicator. ', - name: 'threatintel.indicator.last_seen', - type: 'date', - }, - 'threatintel.indicator.sightings': { - category: 'threatintel', - description: 'Number of times this indicator was observed conducting threat activity. ', - name: 'threatintel.indicator.sightings', - type: 'long', - }, - 'threatintel.indicator.type': { - category: 'threatintel', - description: - 'Type of indicator as represented by Cyber Observable in STIX 2.0. Expected values * autonomous-system * artifact * directory * domain-name * email-addr * file * ipv4-addr * ipv6-addr * mac-addr * mutex * process * software * url * user-account * windows-registry-key * x-509-certificate ', - name: 'threatintel.indicator.type', - type: 'keyword', - }, - 'threatintel.indicator.description': { - category: 'threatintel', - description: 'Describes the type of action conducted by the threat. ', - name: 'threatintel.indicator.description', - type: 'keyword', - }, - 'threatintel.indicator.scanner_stats': { - category: 'threatintel', - description: 'Count of AV/EDR vendors that successfully detected malicious file or URL. ', - name: 'threatintel.indicator.scanner_stats', - type: 'long', - }, - 'threatintel.indicator.provider': { - category: 'threatintel', - description: 'Identifies the name of the intelligence provider. ', - name: 'threatintel.indicator.provider', - type: 'keyword', - }, - 'threatintel.indicator.confidence': { - category: 'threatintel', - description: - 'Identifies the confidence rating assigned by the provider using STIX confidence scales. Expected values * Not Specified, None, Low, Medium, High * 0-10 * Admirality Scale (1-6) * DNI Scale (5-95) * WEP Scale (Impossible - Certain) ', - name: 'threatintel.indicator.confidence', - type: 'keyword', - }, - 'threatintel.indicator.module': { - category: 'threatintel', - description: 'Identifies the name of specific module this data is coming from. ', - name: 'threatintel.indicator.module', - type: 'keyword', - }, - 'threatintel.indicator.dataset': { - category: 'threatintel', - description: 'Identifies the name of specific dataset from the intelligence source. ', - name: 'threatintel.indicator.dataset', - type: 'keyword', - }, - 'threatintel.indicator.ip': { - category: 'threatintel', - description: 'Identifies a threat indicator as an IP address (irrespective of direction). ', - name: 'threatintel.indicator.ip', - type: 'ip', - }, - 'threatintel.indicator.domain': { - category: 'threatintel', - description: 'Identifies a threat indicator as a domain (irrespective of direction). ', - name: 'threatintel.indicator.domain', - type: 'keyword', - }, - 'threatintel.indicator.port': { - category: 'threatintel', - description: 'Identifies a threat indicator as a port number (irrespective of direction). ', - name: 'threatintel.indicator.port', - type: 'long', - }, - 'threatintel.indicator.email.address': { - category: 'threatintel', - description: 'Identifies a threat indicator as an email address (irrespective of direction). ', - name: 'threatintel.indicator.email.address', - type: 'keyword', - }, - 'threatintel.indicator.marking.tlp': { - category: 'threatintel', - description: - 'Traffic Light Protocol sharing markings. Expected values are: * White * Green * Amber * Red ', - name: 'threatintel.indicator.marking.tlp', - type: 'keyword', - }, - 'threatintel.indicator.matched.atomic': { - category: 'threatintel', - description: - 'Identifies the atomic indicator that matched a local environment endpoint or network event. ', - name: 'threatintel.indicator.matched.atomic', - type: 'keyword', - }, - 'threatintel.indicator.matched.field': { - category: 'threatintel', - description: - 'Identifies the field of the atomic indicator that matched a local environment endpoint or network event. ', - name: 'threatintel.indicator.matched.field', - type: 'keyword', - }, - 'threatintel.indicator.matched.type': { - category: 'threatintel', - description: - 'Identifies the type of the atomic indicator that matched a local environment endpoint or network event. ', - name: 'threatintel.indicator.matched.type', - type: 'keyword', - }, - 'threatintel.indicator.as.number': { - category: 'threatintel', - description: - 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', - example: 15169, - name: 'threatintel.indicator.as.number', - type: 'long', - }, - 'threatintel.indicator.as.organization.name': { - category: 'threatintel', - description: 'Organization name.', - example: 'Google LLC', - name: 'threatintel.indicator.as.organization.name', - type: 'keyword', - }, - 'threatintel.indicator.registry.data.strings': { - category: 'threatintel', - description: - 'Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `"1"`). ', - example: '["C:\\rta\\red_ttp\\bin\\myapp.exe"]', - name: 'threatintel.indicator.registry.data.strings', - type: 'keyword', - }, - 'threatintel.indicator.registry.path': { - category: 'threatintel', - description: 'Full path, including hive, key and value', - example: - 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe\\Debugger', - name: 'threatintel.indicator.registry.path', - type: 'keyword', - }, - 'threatintel.indicator.registry.value': { - category: 'threatintel', - description: 'Name of the value written.', - example: 'Debugger', - name: 'threatintel.indicator.registry.value', - type: 'keyword', - }, - 'threatintel.indicator.registry.key': { - category: 'threatintel', - description: 'Registry key value', - name: 'threatintel.indicator.registry.key', - type: 'keyword', - }, - 'threatintel.indicator.geo.city_name': { - category: 'threatintel', - description: 'City name.', - example: 'Montreal', - name: 'threatintel.indicator.geo.city_name', - type: 'keyword', - }, - 'threatintel.indicator.geo.continent_name': { - category: 'threatintel', - description: 'Name of the continent.', - example: 'North America', - name: 'threatintel.indicator.geo.continent_name', - type: 'keyword', - }, - 'threatintel.indicator.geo.country_iso_code': { - category: 'threatintel', - description: 'Country ISO code.', - example: 'CA', - name: 'threatintel.indicator.geo.country_iso_code', - type: 'keyword', - }, - 'threatintel.indicator.geo.country_name': { - category: 'threatintel', - description: 'Country name.', - example: 'Canada', - name: 'threatintel.indicator.geo.country_name', - type: 'keyword', - }, - 'threatintel.indicator.geo.location': { - category: 'threatintel', - description: 'Longitude and latitude.', - example: '{ "lon": -73.614830, "lat": 45.505918 }', - name: 'threatintel.indicator.geo.location', - type: 'geo_point', - }, - 'threatintel.indicator.geo.region_iso_code': { - category: 'threatintel', - description: 'Region ISO code.', - example: 'CA-QC', - name: 'threatintel.indicator.geo.region_iso_code', - type: 'keyword', - }, - 'threatintel.indicator.geo.region_name': { - category: 'threatintel', - description: 'Region name.', - example: 'Quebec', - name: 'threatintel.indicator.geo.region_name', - type: 'keyword', - }, - 'threatintel.indicator.file.pe.imphash': { - category: 'threatintel', - description: - 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', - example: '0c6803c4e922103c4dca5963aad36ddf', - name: 'threatintel.indicator.file.pe.imphash', - type: 'keyword', - }, - 'threatintel.indicator.file.hash.tlsh': { - category: 'threatintel', - description: "The file's import tlsh, if available. ", - name: 'threatintel.indicator.file.hash.tlsh', - type: 'keyword', - }, - 'threatintel.indicator.file.hash.ssdeep': { - category: 'threatintel', - description: "The file's ssdeep hash, if available. ", - name: 'threatintel.indicator.file.hash.ssdeep', - type: 'keyword', - }, - 'threatintel.indicator.file.hash.md5': { - category: 'threatintel', - description: "The file's md5 hash, if available. ", - name: 'threatintel.indicator.file.hash.md5', - type: 'keyword', - }, - 'threatintel.indicator.file.hash.sha1': { - category: 'threatintel', - description: "The file's sha1 hash, if available. ", - name: 'threatintel.indicator.file.hash.sha1', - type: 'keyword', - }, - 'threatintel.indicator.file.hash.sha256': { - category: 'threatintel', - description: "The file's sha256 hash, if available. ", - name: 'threatintel.indicator.file.hash.sha256', - type: 'keyword', - }, - 'threatintel.indicator.file.hash.sha384': { - category: 'threatintel', - description: "The file's sha384 hash, if available. ", - name: 'threatintel.indicator.file.hash.sha384', - type: 'keyword', - }, - 'threatintel.indicator.file.hash.sha512': { - category: 'threatintel', - description: "The file's sha512 hash, if available. ", - name: 'threatintel.indicator.file.hash.sha512', - type: 'keyword', - }, - 'threatintel.indicator.file.type': { - category: 'threatintel', - description: 'The file type. ', - name: 'threatintel.indicator.file.type', - type: 'keyword', - }, - 'threatintel.indicator.file.size': { - category: 'threatintel', - description: "The file's total size. ", - name: 'threatintel.indicator.file.size', - type: 'long', - }, - 'threatintel.indicator.file.name': { - category: 'threatintel', - description: "The file's name. ", - name: 'threatintel.indicator.file.name', - type: 'keyword', - }, - 'threatintel.indicator.file.extension': { - category: 'threatintel', - description: "The file's extension. ", - name: 'threatintel.indicator.file.extension', - type: 'keyword', - }, - 'threatintel.indicator.file.mime_type': { - category: 'threatintel', - description: "The file's MIME type. ", - name: 'threatintel.indicator.file.mime_type', - type: 'keyword', - }, - 'threatintel.indicator.url.domain': { - category: 'threatintel', - description: 'Domain of the url, such as "www.elastic.co". ', - name: 'threatintel.indicator.url.domain', - type: 'keyword', - }, - 'threatintel.indicator.url.extension': { - category: 'threatintel', - description: 'The field contains the file extension from the original request ', - name: 'threatintel.indicator.url.extension', - type: 'keyword', - }, - 'threatintel.indicator.url.fragment': { - category: 'threatintel', - description: 'Portion of the url after the `#`, such as "top". ', - name: 'threatintel.indicator.url.fragment', - type: 'keyword', - }, - 'threatintel.indicator.url.full': { - category: 'threatintel', - description: - 'If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. ', - name: 'threatintel.indicator.url.full', - type: 'keyword', - }, - 'threatintel.indicator.url.original': { - category: 'threatintel', - description: - 'Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not. ', - name: 'threatintel.indicator.url.original', - type: 'keyword', - }, - 'threatintel.indicator.url.password': { - category: 'threatintel', - description: 'Password of the request. ', - name: 'threatintel.indicator.url.password', - type: 'keyword', - }, - 'threatintel.indicator.url.path': { - category: 'threatintel', - description: 'Path of the request, such as "/search". ', - name: 'threatintel.indicator.url.path', - type: 'keyword', - }, - 'threatintel.indicator.url.port': { - category: 'threatintel', - description: 'Port of the request, such as 443. ', - name: 'threatintel.indicator.url.port', - type: 'long', - format: 'string', - }, - 'threatintel.indicator.url.query': { - category: 'threatintel', - description: - 'The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. ', - name: 'threatintel.indicator.url.query', - type: 'keyword', - }, - 'threatintel.indicator.url.registered_domain': { - category: 'threatintel', - description: - 'The highest registered url domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". ', - name: 'threatintel.indicator.url.registered_domain', - type: 'keyword', - }, - 'threatintel.indicator.url.scheme': { - category: 'threatintel', - description: 'Scheme of the request, such as "https". ', - name: 'threatintel.indicator.url.scheme', - type: 'keyword', - }, - 'threatintel.indicator.url.subdomain': { - category: 'threatintel', - description: - 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period. ', - name: 'threatintel.indicator.url.subdomain', - type: 'keyword', - }, - 'threatintel.indicator.url.top_level_domain': { - category: 'threatintel', - description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". ', - name: 'threatintel.indicator.url.top_level_domain', - type: 'keyword', - }, - 'threatintel.indicator.url.username': { - category: 'threatintel', - description: 'Username of the request. ', - name: 'threatintel.indicator.url.username', - type: 'keyword', - }, - 'threatintel.indicator.x509.serial_number': { - category: 'threatintel', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'threatintel.indicator.x509.serial_number', - type: 'keyword', - }, - 'threatintel.indicator.x509.issuer': { - category: 'threatintel', - description: - 'Name of issuing certificate authority. Could be either Distinguished Name (DN) or Common Name (CN), depending on source.', - example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', - name: 'threatintel.indicator.x509.issuer', - type: 'keyword', - }, - 'threatintel.indicator.x509.subject': { - category: 'threatintel', - description: - 'Name of the certificate subject entity. Could be either Distinguished Name (DN) or Common Name (CN), depending on source.', - example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', - name: 'threatintel.indicator.x509.subject', - type: 'keyword', - }, - 'threatintel.indicator.x509.alternative_names': { - category: 'threatintel', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'threatintel.indicator.x509.alternative_names', - type: 'keyword', - }, - 'threatintel.indicator.signature': { - category: 'threatintel', - description: 'Malware family of sample (if available). ', - name: 'threatintel.indicator.signature', - type: 'keyword', - }, - 'threatintel.abusemalware.file_type': { - category: 'threatintel', - description: 'File type guessed by URLhaus. ', - name: 'threatintel.abusemalware.file_type', - type: 'keyword', - }, - 'threatintel.abusemalware.signature': { - category: 'threatintel', - description: 'Malware familiy. ', - name: 'threatintel.abusemalware.signature', - type: 'keyword', - }, - 'threatintel.abusemalware.urlhaus_download': { - category: 'threatintel', - description: 'Location (URL) where you can download a copy of this file. ', - name: 'threatintel.abusemalware.urlhaus_download', - type: 'keyword', - }, - 'threatintel.abusemalware.virustotal.result': { - category: 'threatintel', - description: 'AV detection ration. ', - name: 'threatintel.abusemalware.virustotal.result', - type: 'keyword', - }, - 'threatintel.abusemalware.virustotal.percent': { - category: 'threatintel', - description: 'AV detection in percent. ', - name: 'threatintel.abusemalware.virustotal.percent', - type: 'float', - }, - 'threatintel.abusemalware.virustotal.link': { - category: 'threatintel', - description: 'Link to the Virustotal report. ', - name: 'threatintel.abusemalware.virustotal.link', - type: 'keyword', - }, - 'threatintel.abuseurl.id': { - category: 'threatintel', - description: 'The ID of the url. ', - name: 'threatintel.abuseurl.id', - type: 'keyword', - }, - 'threatintel.abuseurl.urlhaus_reference': { - category: 'threatintel', - description: 'Link to URLhaus entry. ', - name: 'threatintel.abuseurl.urlhaus_reference', - type: 'keyword', - }, - 'threatintel.abuseurl.url_status': { - category: 'threatintel', - description: - 'The current status of the URL. Possible values are: online, offline and unknown. ', - name: 'threatintel.abuseurl.url_status', - type: 'keyword', - }, - 'threatintel.abuseurl.threat': { - category: 'threatintel', - description: 'The threat corresponding to this malware URL. ', - name: 'threatintel.abuseurl.threat', - type: 'keyword', - }, - 'threatintel.abuseurl.blacklists.surbl': { - category: 'threatintel', - description: 'SURBL blacklist status. Possible values are: listed and not_listed ', - name: 'threatintel.abuseurl.blacklists.surbl', - type: 'keyword', - }, - 'threatintel.abuseurl.blacklists.spamhaus_dbl': { - category: 'threatintel', - description: 'Spamhaus DBL blacklist status. ', - name: 'threatintel.abuseurl.blacklists.spamhaus_dbl', - type: 'keyword', - }, - 'threatintel.abuseurl.reporter': { - category: 'threatintel', - description: - 'The Twitter handle of the reporter that has reported this malware URL (or anonymous). ', - name: 'threatintel.abuseurl.reporter', - type: 'keyword', - }, - 'threatintel.abuseurl.larted': { - category: 'threatintel', - description: - 'Indicates whether the malware URL has been reported to the hosting provider (true or false) ', - name: 'threatintel.abuseurl.larted', - type: 'boolean', - }, - 'threatintel.abuseurl.tags': { - category: 'threatintel', - description: 'A list of tags associated with the queried malware URL ', - name: 'threatintel.abuseurl.tags', - type: 'keyword', - }, - 'threatintel.anomali.id': { - category: 'threatintel', - description: 'The ID of the indicator. ', - name: 'threatintel.anomali.id', - type: 'keyword', - }, - 'threatintel.anomali.name': { - category: 'threatintel', - description: 'The name of the indicator. ', - name: 'threatintel.anomali.name', - type: 'keyword', - }, - 'threatintel.anomali.pattern': { - category: 'threatintel', - description: 'The pattern ID of the indicator. ', - name: 'threatintel.anomali.pattern', - type: 'keyword', - }, - 'threatintel.anomali.valid_from': { - category: 'threatintel', - description: 'When the indicator was first found or is considered valid. ', - name: 'threatintel.anomali.valid_from', - type: 'date', - }, - 'threatintel.anomali.modified': { - category: 'threatintel', - description: 'When the indicator was last modified ', - name: 'threatintel.anomali.modified', - type: 'date', - }, - 'threatintel.anomali.labels': { - category: 'threatintel', - description: 'The labels related to the indicator ', - name: 'threatintel.anomali.labels', - type: 'keyword', - }, - 'threatintel.anomali.indicator': { - category: 'threatintel', - description: - 'The value of the indicator, for example if the type is domain, this would be the value. ', - name: 'threatintel.anomali.indicator', - type: 'keyword', - }, - 'threatintel.anomali.description': { - category: 'threatintel', - description: 'A description of the indicator. ', - name: 'threatintel.anomali.description', - type: 'keyword', - }, - 'threatintel.anomali.title': { - category: 'threatintel', - description: 'Title describing the indicator. ', - name: 'threatintel.anomali.title', - type: 'keyword', - }, - 'threatintel.anomali.content': { - category: 'threatintel', - description: 'Extra text or descriptive content related to the indicator. ', - name: 'threatintel.anomali.content', - type: 'keyword', - }, - 'threatintel.anomali.type': { - category: 'threatintel', - description: 'The indicator type, can for example be "domain, email, FileHash-SHA256". ', - name: 'threatintel.anomali.type', - type: 'keyword', - }, - 'threatintel.anomali.object_marking_refs': { - category: 'threatintel', - description: 'The STIX reference object. ', - name: 'threatintel.anomali.object_marking_refs', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.classification': { - category: 'threatintel', - description: - 'Indicates whether an indicator is private or from a public feed and available publicly. Possible values: private, public. ', - example: 'private', - name: 'threatintel.anomalithreatstream.classification', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.confidence': { - category: 'threatintel', - description: - "The measure of the accuracy (from 0 to 100) assigned by ThreatStream's predictive analytics technology to indicators. ", - name: 'threatintel.anomalithreatstream.confidence', - type: 'short', - }, - 'threatintel.anomalithreatstream.detail2': { - category: 'threatintel', - description: 'Detail text for indicator. ', - example: 'Imported by user 42.', - name: 'threatintel.anomalithreatstream.detail2', - type: 'text', - }, - 'threatintel.anomalithreatstream.id': { - category: 'threatintel', - description: 'The ID of the indicator. ', - name: 'threatintel.anomalithreatstream.id', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.import_session_id': { - category: 'threatintel', - description: 'ID of the import session that created the indicator on ThreatStream. ', - name: 'threatintel.anomalithreatstream.import_session_id', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.itype': { - category: 'threatintel', - description: - 'Indicator type. Possible values: "apt_domain", "apt_email", "apt_ip", "apt_url", "bot_ip", "c2_domain", "c2_ip", "c2_url", "i2p_ip", "mal_domain", "mal_email", "mal_ip", "mal_md5", "mal_url", "parked_ip", "phish_email", "phish_ip", "phish_url", "scan_ip", "spam_domain", "ssh_ip", "suspicious_domain", "tor_ip" and "torrent_tracker_url". ', - name: 'threatintel.anomalithreatstream.itype', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.maltype': { - category: 'threatintel', - description: - 'Information regarding a malware family, a CVE ID, or another attack or threat, associated with the indicator. ', - name: 'threatintel.anomalithreatstream.maltype', - type: 'wildcard', - }, - 'threatintel.anomalithreatstream.md5': { - category: 'threatintel', - description: 'Hash for the indicator. ', - name: 'threatintel.anomalithreatstream.md5', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.resource_uri': { - category: 'threatintel', - description: 'Relative URI for the indicator details. ', - name: 'threatintel.anomalithreatstream.resource_uri', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.severity': { - category: 'threatintel', - description: - 'Criticality associated with the threat feed that supplied the indicator. Possible values: low, medium, high, very-high. ', - name: 'threatintel.anomalithreatstream.severity', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.source': { - category: 'threatintel', - description: 'Source for the indicator. ', - example: 'Analyst', - name: 'threatintel.anomalithreatstream.source', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.source_feed_id': { - category: 'threatintel', - description: 'ID for the integrator source. ', - name: 'threatintel.anomalithreatstream.source_feed_id', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.state': { - category: 'threatintel', - description: 'State for this indicator. ', - example: 'active', - name: 'threatintel.anomalithreatstream.state', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.trusted_circle_ids': { - category: 'threatintel', - description: 'ID of the trusted circle that imported the indicator. ', - name: 'threatintel.anomalithreatstream.trusted_circle_ids', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.update_id': { - category: 'threatintel', - description: 'Update ID. ', - name: 'threatintel.anomalithreatstream.update_id', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.url': { - category: 'threatintel', - description: 'URL for the indicator. ', - name: 'threatintel.anomalithreatstream.url', - type: 'keyword', - }, - 'threatintel.anomalithreatstream.value_type': { - category: 'threatintel', - description: 'Data type of the indicator. Possible values: ip, domain, url, email, md5. ', - name: 'threatintel.anomalithreatstream.value_type', - type: 'keyword', - }, - 'threatintel.malwarebazaar.file_type': { - category: 'threatintel', - description: 'File type guessed by Malware Bazaar. ', - name: 'threatintel.malwarebazaar.file_type', - type: 'keyword', - }, - 'threatintel.malwarebazaar.signature': { - category: 'threatintel', - description: 'Malware familiy. ', - name: 'threatintel.malwarebazaar.signature', - type: 'keyword', - }, - 'threatintel.malwarebazaar.tags': { - category: 'threatintel', - description: 'A list of tags associated with the queried malware sample. ', - name: 'threatintel.malwarebazaar.tags', - type: 'keyword', - }, - 'threatintel.malwarebazaar.intelligence.downloads': { - category: 'threatintel', - description: 'Number of downloads from MalwareBazaar. ', - name: 'threatintel.malwarebazaar.intelligence.downloads', - type: 'long', - }, - 'threatintel.malwarebazaar.intelligence.uploads': { - category: 'threatintel', - description: 'Number of uploads from MalwareBazaar. ', - name: 'threatintel.malwarebazaar.intelligence.uploads', - type: 'long', - }, - 'threatintel.malwarebazaar.intelligence.mail.Generic': { - category: 'threatintel', - description: 'Malware seen in generic spam traffic. ', - name: 'threatintel.malwarebazaar.intelligence.mail.Generic', - type: 'keyword', - }, - 'threatintel.malwarebazaar.intelligence.mail.IT': { - category: 'threatintel', - description: 'Malware seen in IT spam traffic. ', - name: 'threatintel.malwarebazaar.intelligence.mail.IT', - type: 'keyword', - }, - 'threatintel.malwarebazaar.anonymous': { - category: 'threatintel', - description: 'Identifies if the sample was submitted anonymously. ', - name: 'threatintel.malwarebazaar.anonymous', - type: 'long', - }, - 'threatintel.malwarebazaar.code_sign': { - category: 'threatintel', - description: 'Code signing information for the sample. ', - name: 'threatintel.malwarebazaar.code_sign', - type: 'keyword', - }, - 'threatintel.misp.id': { - category: 'threatintel', - description: 'Attribute ID. ', - name: 'threatintel.misp.id', - type: 'keyword', - }, - 'threatintel.misp.orgc_id': { - category: 'threatintel', - description: 'Organization Community ID of the event. ', - name: 'threatintel.misp.orgc_id', - type: 'keyword', - }, - 'threatintel.misp.org_id': { - category: 'threatintel', - description: 'Organization ID of the event. ', - name: 'threatintel.misp.org_id', - type: 'keyword', - }, - 'threatintel.misp.threat_level_id': { - category: 'threatintel', - description: 'Threat level from 5 to 1, where 1 is the most critical. ', - name: 'threatintel.misp.threat_level_id', - type: 'long', - }, - 'threatintel.misp.info': { - category: 'threatintel', - description: 'Additional text or information related to the event. ', - name: 'threatintel.misp.info', - type: 'keyword', - }, - 'threatintel.misp.published': { - category: 'threatintel', - description: 'When the event was published. ', - name: 'threatintel.misp.published', - type: 'boolean', - }, - 'threatintel.misp.uuid': { - category: 'threatintel', - description: 'The UUID of the event object. ', - name: 'threatintel.misp.uuid', - type: 'keyword', - }, - 'threatintel.misp.date': { - category: 'threatintel', - description: 'The date of when the event object was created. ', - name: 'threatintel.misp.date', - type: 'date', - }, - 'threatintel.misp.attribute_count': { - category: 'threatintel', - description: 'How many attributes are included in a single event object. ', - name: 'threatintel.misp.attribute_count', - type: 'long', - }, - 'threatintel.misp.timestamp': { - category: 'threatintel', - description: 'The timestamp of when the event object was created. ', - name: 'threatintel.misp.timestamp', - type: 'date', - }, - 'threatintel.misp.distribution': { - category: 'threatintel', - description: 'Distribution type related to MISP. ', - name: 'threatintel.misp.distribution', - type: 'keyword', - }, - 'threatintel.misp.proposal_email_lock': { - category: 'threatintel', - description: 'Settings configured on MISP for email lock on this event object. ', - name: 'threatintel.misp.proposal_email_lock', - type: 'boolean', - }, - 'threatintel.misp.locked': { - category: 'threatintel', - description: 'If the current MISP event object is locked or not. ', - name: 'threatintel.misp.locked', - type: 'boolean', - }, - 'threatintel.misp.publish_timestamp': { - category: 'threatintel', - description: 'At what time the event object was published ', - name: 'threatintel.misp.publish_timestamp', - type: 'date', - }, - 'threatintel.misp.sharing_group_id': { - category: 'threatintel', - description: 'The ID of the grouped events or sources of the event. ', - name: 'threatintel.misp.sharing_group_id', - type: 'keyword', - }, - 'threatintel.misp.disable_correlation': { - category: 'threatintel', - description: 'If correlation is disabled on the MISP event object. ', - name: 'threatintel.misp.disable_correlation', - type: 'boolean', - }, - 'threatintel.misp.extends_uuid': { - category: 'threatintel', - description: 'The UUID of the event object it might extend. ', - name: 'threatintel.misp.extends_uuid', - type: 'keyword', - }, - 'threatintel.misp.org.id': { - category: 'threatintel', - description: 'The organization ID related to the event object. ', - name: 'threatintel.misp.org.id', - type: 'keyword', - }, - 'threatintel.misp.org.name': { - category: 'threatintel', - description: 'The organization name related to the event object. ', - name: 'threatintel.misp.org.name', - type: 'keyword', - }, - 'threatintel.misp.org.uuid': { - category: 'threatintel', - description: 'The UUID of the organization related to the event object. ', - name: 'threatintel.misp.org.uuid', - type: 'keyword', - }, - 'threatintel.misp.org.local': { - category: 'threatintel', - description: 'If the event object is local or from a remote source. ', - name: 'threatintel.misp.org.local', - type: 'boolean', - }, - 'threatintel.misp.orgc.id': { - category: 'threatintel', - description: 'The Organization Community ID in which the event object was reported from. ', - name: 'threatintel.misp.orgc.id', - type: 'keyword', - }, - 'threatintel.misp.orgc.name': { - category: 'threatintel', - description: 'The Organization Community name in which the event object was reported from. ', - name: 'threatintel.misp.orgc.name', - type: 'keyword', - }, - 'threatintel.misp.orgc.uuid': { - category: 'threatintel', - description: 'The Organization Community UUID in which the event object was reported from. ', - name: 'threatintel.misp.orgc.uuid', - type: 'keyword', - }, - 'threatintel.misp.orgc.local': { - category: 'threatintel', - description: 'If the Organization Community was local or synced from a remote source. ', - name: 'threatintel.misp.orgc.local', - type: 'boolean', - }, - 'threatintel.misp.attribute.id': { - category: 'threatintel', - description: 'The ID of the attribute related to the event object. ', - name: 'threatintel.misp.attribute.id', - type: 'keyword', - }, - 'threatintel.misp.attribute.type': { - category: 'threatintel', - description: - 'The type of the attribute related to the event object. For example email, ipv4, sha1 and such. ', - name: 'threatintel.misp.attribute.type', - type: 'keyword', - }, - 'threatintel.misp.attribute.category': { - category: 'threatintel', - description: - 'The category of the attribute related to the event object. For example "Network Activity". ', - name: 'threatintel.misp.attribute.category', - type: 'keyword', - }, - 'threatintel.misp.attribute.to_ids': { - category: 'threatintel', - description: 'If the attribute should be automatically synced with an IDS. ', - name: 'threatintel.misp.attribute.to_ids', - type: 'boolean', - }, - 'threatintel.misp.attribute.uuid': { - category: 'threatintel', - description: 'The UUID of the attribute related to the event. ', - name: 'threatintel.misp.attribute.uuid', - type: 'keyword', - }, - 'threatintel.misp.attribute.event_id': { - category: 'threatintel', - description: 'The local event ID of the attribute related to the event. ', - name: 'threatintel.misp.attribute.event_id', - type: 'keyword', - }, - 'threatintel.misp.attribute.distribution': { - category: 'threatintel', - description: 'How the attribute has been distributed, represented by integer numbers. ', - name: 'threatintel.misp.attribute.distribution', - type: 'long', - }, - 'threatintel.misp.attribute.timestamp': { - category: 'threatintel', - description: 'The timestamp in which the attribute was attached to the event object. ', - name: 'threatintel.misp.attribute.timestamp', - type: 'date', - }, - 'threatintel.misp.attribute.comment': { - category: 'threatintel', - description: 'Comments made to the attribute itself. ', - name: 'threatintel.misp.attribute.comment', - type: 'keyword', - }, - 'threatintel.misp.attribute.sharing_group_id': { - category: 'threatintel', - description: 'The group ID of the sharing group related to the specific attribute. ', - name: 'threatintel.misp.attribute.sharing_group_id', - type: 'keyword', - }, - 'threatintel.misp.attribute.deleted': { - category: 'threatintel', - description: 'If the attribute has been removed from the event object. ', - name: 'threatintel.misp.attribute.deleted', - type: 'boolean', - }, - 'threatintel.misp.attribute.disable_correlation': { - category: 'threatintel', - description: 'If correlation has been enabled on the attribute related to the event object. ', - name: 'threatintel.misp.attribute.disable_correlation', - type: 'boolean', - }, - 'threatintel.misp.attribute.object_id': { - category: 'threatintel', - description: 'The ID of the Object in which the attribute is attached. ', - name: 'threatintel.misp.attribute.object_id', - type: 'keyword', - }, - 'threatintel.misp.attribute.object_relation': { - category: 'threatintel', - description: 'The type of relation the attribute has with the event object itself. ', - name: 'threatintel.misp.attribute.object_relation', - type: 'keyword', - }, - 'threatintel.misp.attribute.value': { - category: 'threatintel', - description: 'The value of the attribute, depending on the type like "url, sha1, email-src". ', - name: 'threatintel.misp.attribute.value', - type: 'keyword', - }, - 'threatintel.otx.id': { - category: 'threatintel', - description: 'The ID of the indicator. ', - name: 'threatintel.otx.id', - type: 'keyword', - }, - 'threatintel.otx.indicator': { - category: 'threatintel', - description: - 'The value of the indicator, for example if the type is domain, this would be the value. ', - name: 'threatintel.otx.indicator', - type: 'keyword', - }, - 'threatintel.otx.description': { - category: 'threatintel', - description: 'A description of the indicator. ', - name: 'threatintel.otx.description', - type: 'keyword', - }, - 'threatintel.otx.title': { - category: 'threatintel', - description: 'Title describing the indicator. ', - name: 'threatintel.otx.title', - type: 'keyword', - }, - 'threatintel.otx.content': { - category: 'threatintel', - description: 'Extra text or descriptive content related to the indicator. ', - name: 'threatintel.otx.content', - type: 'keyword', - }, - 'threatintel.otx.type': { - category: 'threatintel', - description: 'The indicator type, can for example be "domain, email, FileHash-SHA256". ', - name: 'threatintel.otx.type', - type: 'keyword', - }, - 'threatintel.recordedfuture.entity.id': { - category: 'threatintel', - description: 'Entity ID. ', - example: 'ip:192.0.2.13', - name: 'threatintel.recordedfuture.entity.id', - type: 'keyword', - }, - 'threatintel.recordedfuture.entity.name': { - category: 'threatintel', - description: 'Entity name. Value for the entity. ', - example: '192.0.2.13', - name: 'threatintel.recordedfuture.entity.name', - type: 'keyword', - }, - 'threatintel.recordedfuture.entity.type': { - category: 'threatintel', - description: 'Entity type. ', - example: 'IpAddress', - name: 'threatintel.recordedfuture.entity.type', - type: 'keyword', - }, - 'threatintel.recordedfuture.intelCard': { - category: 'threatintel', - description: 'Link to the Recorded Future Intelligence Card for to this indicator. ', - name: 'threatintel.recordedfuture.intelCard', - type: 'keyword', - }, - 'threatintel.recordedfuture.ip_range': { - category: 'threatintel', - description: 'Range of IPs for this indicator. ', - example: '192.0.2.0/16', - name: 'threatintel.recordedfuture.ip_range', - type: 'ip_range', - }, - 'threatintel.recordedfuture.risk.criticality': { - category: 'threatintel', - description: 'Risk criticality (0-4). ', - name: 'threatintel.recordedfuture.risk.criticality', - type: 'byte', - }, - 'threatintel.recordedfuture.risk.criticalityLabel': { - category: 'threatintel', - description: - 'Risk criticality label. One of None, Unusual, Suspicious, Malicious, Very Malicious. ', - name: 'threatintel.recordedfuture.risk.criticalityLabel', - type: 'keyword', - }, - 'threatintel.recordedfuture.risk.evidenceDetails': { - category: 'threatintel', - description: "Risk's evidence details. ", - name: 'threatintel.recordedfuture.risk.evidenceDetails', - type: 'flattened', - }, - 'threatintel.recordedfuture.risk.score': { - category: 'threatintel', - description: 'Risk score (0-99). ', - name: 'threatintel.recordedfuture.risk.score', - type: 'short', - }, - 'threatintel.recordedfuture.risk.riskString': { - category: 'threatintel', - description: 'Number of Risk Rules observed as a factor of total number of rules. ', - example: '1/54', - name: 'threatintel.recordedfuture.risk.riskString', - type: 'keyword', - }, - 'threatintel.recordedfuture.risk.riskSummary': { - category: 'threatintel', - description: 'Risk summary. ', - example: '1 of 54 Risk Rules currently observed.', - name: 'threatintel.recordedfuture.risk.riskSummary', - type: 'keyword', - }, - 'threatintel.recordedfuture.risk.rules': { - category: 'threatintel', - description: 'Number of rules observed. ', - name: 'threatintel.recordedfuture.risk.rules', - type: 'long', - }, - 'zeek.session_id': { - category: 'zeek', - description: 'A unique identifier of the session ', - name: 'zeek.session_id', - type: 'keyword', - }, - 'zeek.capture_loss.ts_delta': { - category: 'zeek', - description: 'The time delay between this measurement and the last. ', - name: 'zeek.capture_loss.ts_delta', - type: 'integer', - }, - 'zeek.capture_loss.peer': { - category: 'zeek', - description: - 'In the event that there are multiple Bro instances logging to the same host, this distinguishes each peer with its individual name. ', - name: 'zeek.capture_loss.peer', - type: 'keyword', - }, - 'zeek.capture_loss.gaps': { - category: 'zeek', - description: 'Number of missed ACKs from the previous measurement interval. ', - name: 'zeek.capture_loss.gaps', - type: 'integer', - }, - 'zeek.capture_loss.acks': { - category: 'zeek', - description: 'Total number of ACKs seen in the previous measurement interval. ', - name: 'zeek.capture_loss.acks', - type: 'integer', - }, - 'zeek.capture_loss.percent_lost': { - category: 'zeek', - description: "Percentage of ACKs seen where the data being ACKed wasn't seen. ", - name: 'zeek.capture_loss.percent_lost', - type: 'double', - }, - 'zeek.connection.local_orig': { - category: 'zeek', - description: 'Indicates whether the session is originated locally. ', - name: 'zeek.connection.local_orig', - type: 'boolean', - }, - 'zeek.connection.local_resp': { - category: 'zeek', - description: 'Indicates whether the session is responded locally. ', - name: 'zeek.connection.local_resp', - type: 'boolean', - }, - 'zeek.connection.missed_bytes': { - category: 'zeek', - description: 'Missed bytes for the session. ', - name: 'zeek.connection.missed_bytes', - type: 'long', - }, - 'zeek.connection.state': { - category: 'zeek', - description: 'Code indicating the state of the session. ', - name: 'zeek.connection.state', - type: 'keyword', - }, - 'zeek.connection.state_message': { - category: 'zeek', - description: 'The state of the session. ', - name: 'zeek.connection.state_message', - type: 'keyword', - }, - 'zeek.connection.icmp.type': { - category: 'zeek', - description: 'ICMP message type. ', - name: 'zeek.connection.icmp.type', - type: 'integer', - }, - 'zeek.connection.icmp.code': { - category: 'zeek', - description: 'ICMP message code. ', - name: 'zeek.connection.icmp.code', - type: 'integer', - }, - 'zeek.connection.history': { - category: 'zeek', - description: 'Flags indicating the history of the session. ', - name: 'zeek.connection.history', - type: 'keyword', - }, - 'zeek.connection.vlan': { - category: 'zeek', - description: 'VLAN identifier. ', - name: 'zeek.connection.vlan', - type: 'integer', - }, - 'zeek.connection.inner_vlan': { - category: 'zeek', - description: 'VLAN identifier. ', - name: 'zeek.connection.inner_vlan', - type: 'integer', - }, - 'zeek.dce_rpc.rtt': { - category: 'zeek', - description: - "Round trip time from the request to the response. If either the request or response wasn't seen, this will be null. ", - name: 'zeek.dce_rpc.rtt', - type: 'integer', - }, - 'zeek.dce_rpc.named_pipe': { - category: 'zeek', - description: 'Remote pipe name. ', - name: 'zeek.dce_rpc.named_pipe', - type: 'keyword', - }, - 'zeek.dce_rpc.endpoint': { - category: 'zeek', - description: 'Endpoint name looked up from the uuid. ', - name: 'zeek.dce_rpc.endpoint', - type: 'keyword', - }, - 'zeek.dce_rpc.operation': { - category: 'zeek', - description: 'Operation seen in the call. ', - name: 'zeek.dce_rpc.operation', - type: 'keyword', - }, - 'zeek.dhcp.domain': { - category: 'zeek', - description: 'Domain given by the server in option 15. ', - name: 'zeek.dhcp.domain', - type: 'keyword', - }, - 'zeek.dhcp.duration': { - category: 'zeek', - description: - 'Duration of the DHCP session representing the time from the first message to the last, in seconds. ', - name: 'zeek.dhcp.duration', - type: 'double', - }, - 'zeek.dhcp.hostname': { - category: 'zeek', - description: 'Name given by client in Hostname option 12. ', - name: 'zeek.dhcp.hostname', - type: 'keyword', - }, - 'zeek.dhcp.client_fqdn': { - category: 'zeek', - description: 'FQDN given by client in Client FQDN option 81. ', - name: 'zeek.dhcp.client_fqdn', - type: 'keyword', - }, - 'zeek.dhcp.lease_time': { - category: 'zeek', - description: 'IP address lease interval in seconds. ', - name: 'zeek.dhcp.lease_time', - type: 'integer', - }, - 'zeek.dhcp.address.assigned': { - category: 'zeek', - description: 'IP address assigned by the server. ', - name: 'zeek.dhcp.address.assigned', - type: 'ip', - }, - 'zeek.dhcp.address.client': { - category: 'zeek', - description: - 'IP address of the client. If a transaction is only a client sending INFORM messages then there is no lease information exchanged so this is helpful to know who sent the messages. Getting an address in this field does require that the client sources at least one DHCP message using a non-broadcast address. ', - name: 'zeek.dhcp.address.client', - type: 'ip', - }, - 'zeek.dhcp.address.mac': { - category: 'zeek', - description: "Client's hardware address. ", - name: 'zeek.dhcp.address.mac', - type: 'keyword', - }, - 'zeek.dhcp.address.requested': { - category: 'zeek', - description: 'IP address requested by the client. ', - name: 'zeek.dhcp.address.requested', - type: 'ip', - }, - 'zeek.dhcp.address.server': { - category: 'zeek', - description: 'IP address of the DHCP server. ', - name: 'zeek.dhcp.address.server', - type: 'ip', - }, - 'zeek.dhcp.msg.types': { - category: 'zeek', - description: 'List of DHCP message types seen in this exchange. ', - name: 'zeek.dhcp.msg.types', - type: 'keyword', - }, - 'zeek.dhcp.msg.origin': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/msg-orig.bro is loaded) The address that originated each message from the msg.types field. ', - name: 'zeek.dhcp.msg.origin', - type: 'ip', - }, - 'zeek.dhcp.msg.client': { - category: 'zeek', - description: - 'Message typically accompanied with a DHCP_DECLINE so the client can tell the server why it rejected an address. ', - name: 'zeek.dhcp.msg.client', - type: 'keyword', - }, - 'zeek.dhcp.msg.server': { - category: 'zeek', - description: - 'Message typically accompanied with a DHCP_NAK to let the client know why it rejected the request. ', - name: 'zeek.dhcp.msg.server', - type: 'keyword', - }, - 'zeek.dhcp.software.client': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/software.bro is loaded) Software reported by the client in the vendor_class option. ', - name: 'zeek.dhcp.software.client', - type: 'keyword', - }, - 'zeek.dhcp.software.server': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/software.bro is loaded) Software reported by the client in the vendor_class option. ', - name: 'zeek.dhcp.software.server', - type: 'keyword', - }, - 'zeek.dhcp.id.circuit': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/sub-opts.bro is loaded) Added by DHCP relay agents which terminate switched or permanent circuits. It encodes an agent-local identifier of the circuit from which a DHCP client-to-server packet was received. Typically it should represent a router or switch interface number. ', - name: 'zeek.dhcp.id.circuit', - type: 'keyword', - }, - 'zeek.dhcp.id.remote_agent': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/sub-opts.bro is loaded) A globally unique identifier added by relay agents to identify the remote host end of the circuit. ', - name: 'zeek.dhcp.id.remote_agent', - type: 'keyword', - }, - 'zeek.dhcp.id.subscriber': { - category: 'zeek', - description: - "(present if policy/protocols/dhcp/sub-opts.bro is loaded) The subscriber ID is a value independent of the physical network configuration so that a customer's DHCP configuration can be given to them correctly no matter where they are physically connected. ", - name: 'zeek.dhcp.id.subscriber', - type: 'keyword', - }, - 'zeek.dnp3.function.request': { - category: 'zeek', - description: 'The name of the function message in the request. ', - name: 'zeek.dnp3.function.request', - type: 'keyword', - }, - 'zeek.dnp3.function.reply': { - category: 'zeek', - description: 'The name of the function message in the reply. ', - name: 'zeek.dnp3.function.reply', - type: 'keyword', - }, - 'zeek.dnp3.id': { - category: 'zeek', - description: "The response's internal indication number. ", - name: 'zeek.dnp3.id', - type: 'integer', - }, - 'zeek.dns.trans_id': { - category: 'zeek', - description: 'DNS transaction identifier. ', - name: 'zeek.dns.trans_id', - type: 'keyword', - }, - 'zeek.dns.rtt': { - category: 'zeek', - description: 'Round trip time for the query and response. ', - name: 'zeek.dns.rtt', - type: 'double', - }, - 'zeek.dns.query': { - category: 'zeek', - description: 'The domain name that is the subject of the DNS query. ', - name: 'zeek.dns.query', - type: 'keyword', - }, - 'zeek.dns.qclass': { - category: 'zeek', - description: 'The QCLASS value specifying the class of the query. ', - name: 'zeek.dns.qclass', - type: 'long', - }, - 'zeek.dns.qclass_name': { - category: 'zeek', - description: 'A descriptive name for the class of the query. ', - name: 'zeek.dns.qclass_name', - type: 'keyword', - }, - 'zeek.dns.qtype': { - category: 'zeek', - description: 'A QTYPE value specifying the type of the query. ', - name: 'zeek.dns.qtype', - type: 'long', - }, - 'zeek.dns.qtype_name': { - category: 'zeek', - description: 'A descriptive name for the type of the query. ', - name: 'zeek.dns.qtype_name', - type: 'keyword', - }, - 'zeek.dns.rcode': { - category: 'zeek', - description: 'The response code value in DNS response messages. ', - name: 'zeek.dns.rcode', - type: 'long', - }, - 'zeek.dns.rcode_name': { - category: 'zeek', - description: 'A descriptive name for the response code value. ', - name: 'zeek.dns.rcode_name', - type: 'keyword', - }, - 'zeek.dns.AA': { - category: 'zeek', - description: - 'The Authoritative Answer bit for response messages specifies that the responding name server is an authority for the domain name in the question section. ', - name: 'zeek.dns.AA', - type: 'boolean', - }, - 'zeek.dns.TC': { - category: 'zeek', - description: 'The Truncation bit specifies that the message was truncated. ', - name: 'zeek.dns.TC', - type: 'boolean', - }, - 'zeek.dns.RD': { - category: 'zeek', - description: - 'The Recursion Desired bit in a request message indicates that the client wants recursive service for this query. ', - name: 'zeek.dns.RD', - type: 'boolean', - }, - 'zeek.dns.RA': { - category: 'zeek', - description: - 'The Recursion Available bit in a response message indicates that the name server supports recursive queries. ', - name: 'zeek.dns.RA', - type: 'boolean', - }, - 'zeek.dns.answers': { - category: 'zeek', - description: 'The set of resource descriptions in the query answer. ', - name: 'zeek.dns.answers', - type: 'keyword', - }, - 'zeek.dns.TTLs': { - category: 'zeek', - description: 'The caching intervals of the associated RRs described by the answers field. ', - name: 'zeek.dns.TTLs', - type: 'double', - }, - 'zeek.dns.rejected': { - category: 'zeek', - description: 'Indicates whether the DNS query was rejected by the server. ', - name: 'zeek.dns.rejected', - type: 'boolean', - }, - 'zeek.dns.total_answers': { - category: 'zeek', - description: 'The total number of resource records in the reply. ', - name: 'zeek.dns.total_answers', - type: 'integer', - }, - 'zeek.dns.total_replies': { - category: 'zeek', - description: 'The total number of resource records in the reply message. ', - name: 'zeek.dns.total_replies', - type: 'integer', - }, - 'zeek.dns.saw_query': { - category: 'zeek', - description: 'Whether the full DNS query has been seen. ', - name: 'zeek.dns.saw_query', - type: 'boolean', - }, - 'zeek.dns.saw_reply': { - category: 'zeek', - description: 'Whether the full DNS reply has been seen. ', - name: 'zeek.dns.saw_reply', - type: 'boolean', - }, - 'zeek.dpd.analyzer': { - category: 'zeek', - description: 'The analyzer that generated the violation. ', - name: 'zeek.dpd.analyzer', - type: 'keyword', - }, - 'zeek.dpd.failure_reason': { - category: 'zeek', - description: 'The textual reason for the analysis failure. ', - name: 'zeek.dpd.failure_reason', - type: 'keyword', - }, - 'zeek.dpd.packet_segment': { - category: 'zeek', - description: - '(present if policy/frameworks/dpd/packet-segment-logging.bro is loaded) A chunk of the payload that most likely resulted in the protocol violation. ', - name: 'zeek.dpd.packet_segment', - type: 'keyword', - }, - 'zeek.files.fuid': { - category: 'zeek', - description: 'A file unique identifier. ', - name: 'zeek.files.fuid', - type: 'keyword', - }, - 'zeek.files.tx_host': { - category: 'zeek', - description: 'The host that transferred the file. ', - name: 'zeek.files.tx_host', - type: 'ip', - }, - 'zeek.files.rx_host': { - category: 'zeek', - description: 'The host that received the file. ', - name: 'zeek.files.rx_host', - type: 'ip', - }, - 'zeek.files.session_ids': { - category: 'zeek', - description: 'The sessions that have this file. ', - name: 'zeek.files.session_ids', - type: 'keyword', - }, - 'zeek.files.source': { - category: 'zeek', - description: - 'An identification of the source of the file data. E.g. it may be a network protocol over which it was transferred, or a local file path which was read, or some other input source. ', - name: 'zeek.files.source', - type: 'keyword', - }, - 'zeek.files.depth': { - category: 'zeek', - description: - 'A value to represent the depth of this file in relation to its source. In SMTP, it is the depth of the MIME attachment on the message. In HTTP, it is the depth of the request within the TCP connection. ', - name: 'zeek.files.depth', - type: 'long', - }, - 'zeek.files.analyzers': { - category: 'zeek', - description: 'A set of analysis types done during the file analysis. ', - name: 'zeek.files.analyzers', - type: 'keyword', - }, - 'zeek.files.mime_type': { - category: 'zeek', - description: 'Mime type of the file. ', - name: 'zeek.files.mime_type', - type: 'keyword', - }, - 'zeek.files.filename': { - category: 'zeek', - description: 'Name of the file if available. ', - name: 'zeek.files.filename', - type: 'keyword', - }, - 'zeek.files.local_orig': { - category: 'zeek', - description: - 'If the source of this file is a network connection, this field indicates if the data originated from the local network or not. ', - name: 'zeek.files.local_orig', - type: 'boolean', - }, - 'zeek.files.is_orig': { - category: 'zeek', - description: - 'If the source of this file is a network connection, this field indicates if the file is being sent by the originator of the connection or the responder. ', - name: 'zeek.files.is_orig', - type: 'boolean', - }, - 'zeek.files.duration': { - category: 'zeek', - description: 'The duration the file was analyzed for. Not the duration of the session. ', - name: 'zeek.files.duration', - type: 'double', - }, - 'zeek.files.seen_bytes': { - category: 'zeek', - description: 'Number of bytes provided to the file analysis engine for the file. ', - name: 'zeek.files.seen_bytes', - type: 'long', - }, - 'zeek.files.total_bytes': { - category: 'zeek', - description: 'Total number of bytes that are supposed to comprise the full file. ', - name: 'zeek.files.total_bytes', - type: 'long', - }, - 'zeek.files.missing_bytes': { - category: 'zeek', - description: - 'The number of bytes in the file stream that were completely missed during the process of analysis. ', - name: 'zeek.files.missing_bytes', - type: 'long', - }, - 'zeek.files.overflow_bytes': { - category: 'zeek', - description: - "The number of bytes in the file stream that were not delivered to stream file analyzers. This could be overlapping bytes or bytes that couldn't be reassembled. ", - name: 'zeek.files.overflow_bytes', - type: 'long', - }, - 'zeek.files.timedout': { - category: 'zeek', - description: 'Whether the file analysis timed out at least once for the file. ', - name: 'zeek.files.timedout', - type: 'boolean', - }, - 'zeek.files.parent_fuid': { - category: 'zeek', - description: - 'Identifier associated with a container file from which this one was extracted as part of the file analysis. ', - name: 'zeek.files.parent_fuid', - type: 'keyword', - }, - 'zeek.files.md5': { - category: 'zeek', - description: 'An MD5 digest of the file contents. ', - name: 'zeek.files.md5', - type: 'keyword', - }, - 'zeek.files.sha1': { - category: 'zeek', - description: 'A SHA1 digest of the file contents. ', - name: 'zeek.files.sha1', - type: 'keyword', - }, - 'zeek.files.sha256': { - category: 'zeek', - description: 'A SHA256 digest of the file contents. ', - name: 'zeek.files.sha256', - type: 'keyword', - }, - 'zeek.files.extracted': { - category: 'zeek', - description: 'Local filename of extracted file. ', - name: 'zeek.files.extracted', - type: 'keyword', - }, - 'zeek.files.extracted_cutoff': { - category: 'zeek', - description: - 'Indicate whether the file being extracted was cut off hence not extracted completely. ', - name: 'zeek.files.extracted_cutoff', - type: 'boolean', - }, - 'zeek.files.extracted_size': { - category: 'zeek', - description: 'The number of bytes extracted to disk. ', - name: 'zeek.files.extracted_size', - type: 'long', - }, - 'zeek.files.entropy': { - category: 'zeek', - description: 'The information density of the contents of the file. ', - name: 'zeek.files.entropy', - type: 'double', - }, - 'zeek.ftp.user': { - category: 'zeek', - description: 'User name for the current FTP session. ', - name: 'zeek.ftp.user', - type: 'keyword', - }, - 'zeek.ftp.password': { - category: 'zeek', - description: 'Password for the current FTP session if captured. ', - name: 'zeek.ftp.password', - type: 'keyword', - }, - 'zeek.ftp.command': { - category: 'zeek', - description: 'Command given by the client. ', - name: 'zeek.ftp.command', - type: 'keyword', - }, - 'zeek.ftp.arg': { - category: 'zeek', - description: 'Argument for the command if one is given. ', - name: 'zeek.ftp.arg', - type: 'keyword', - }, - 'zeek.ftp.file.size': { - category: 'zeek', - description: 'Size of the file if the command indicates a file transfer. ', - name: 'zeek.ftp.file.size', - type: 'long', - }, - 'zeek.ftp.file.mime_type': { - category: 'zeek', - description: 'Sniffed mime type of file. ', - name: 'zeek.ftp.file.mime_type', - type: 'keyword', - }, - 'zeek.ftp.file.fuid': { - category: 'zeek', - description: '(present if base/protocols/ftp/files.bro is loaded) File unique ID. ', - name: 'zeek.ftp.file.fuid', - type: 'keyword', - }, - 'zeek.ftp.reply.code': { - category: 'zeek', - description: 'Reply code from the server in response to the command. ', - name: 'zeek.ftp.reply.code', - type: 'integer', - }, - 'zeek.ftp.reply.msg': { - category: 'zeek', - description: 'Reply message from the server in response to the command. ', - name: 'zeek.ftp.reply.msg', - type: 'keyword', - }, - 'zeek.ftp.data_channel.passive': { - category: 'zeek', - description: 'Whether PASV mode is toggled for control channel. ', - name: 'zeek.ftp.data_channel.passive', - type: 'boolean', - }, - 'zeek.ftp.data_channel.originating_host': { - category: 'zeek', - description: 'The host that will be initiating the data connection. ', - name: 'zeek.ftp.data_channel.originating_host', - type: 'ip', - }, - 'zeek.ftp.data_channel.response_host': { - category: 'zeek', - description: 'The host that will be accepting the data connection. ', - name: 'zeek.ftp.data_channel.response_host', - type: 'ip', - }, - 'zeek.ftp.data_channel.response_port': { - category: 'zeek', - description: 'The port at which the acceptor is listening for the data connection. ', - name: 'zeek.ftp.data_channel.response_port', - type: 'integer', - }, - 'zeek.ftp.cwd': { - category: 'zeek', - description: - "Current working directory that this session is in. By making the default value '.', we can indicate that unless something more concrete is discovered that the existing but unknown directory is ok to use. ", - name: 'zeek.ftp.cwd', - type: 'keyword', - }, - 'zeek.ftp.cmdarg.cmd': { - category: 'zeek', - description: 'Command. ', - name: 'zeek.ftp.cmdarg.cmd', - type: 'keyword', - }, - 'zeek.ftp.cmdarg.arg': { - category: 'zeek', - description: 'Argument for the command if one was given. ', - name: 'zeek.ftp.cmdarg.arg', - type: 'keyword', - }, - 'zeek.ftp.cmdarg.seq': { - category: 'zeek', - description: 'Counter to track how many commands have been executed. ', - name: 'zeek.ftp.cmdarg.seq', - type: 'integer', - }, - 'zeek.ftp.pending_commands': { - category: 'zeek', - description: - 'Queue for commands that have been sent but not yet responded to are tracked here. ', - name: 'zeek.ftp.pending_commands', - type: 'integer', - }, - 'zeek.ftp.passive': { - category: 'zeek', - description: 'Indicates if the session is in active or passive mode. ', - name: 'zeek.ftp.passive', - type: 'boolean', - }, - 'zeek.ftp.capture_password': { - category: 'zeek', - description: 'Determines if the password will be captured for this request. ', - name: 'zeek.ftp.capture_password', - type: 'boolean', - }, - 'zeek.ftp.last_auth_requested': { - category: 'zeek', - description: - 'present if base/protocols/ftp/gridftp.bro is loaded. Last authentication/security mechanism that was used. ', - name: 'zeek.ftp.last_auth_requested', - type: 'keyword', - }, - 'zeek.http.trans_depth': { - category: 'zeek', - description: - 'Represents the pipelined depth into the connection of this request/response transaction. ', - name: 'zeek.http.trans_depth', - type: 'integer', - }, - 'zeek.http.status_msg': { - category: 'zeek', - description: 'Status message returned by the server. ', - name: 'zeek.http.status_msg', - type: 'keyword', - }, - 'zeek.http.info_code': { - category: 'zeek', - description: 'Last seen 1xx informational reply code returned by the server. ', - name: 'zeek.http.info_code', - type: 'integer', - }, - 'zeek.http.info_msg': { - category: 'zeek', - description: 'Last seen 1xx informational reply message returned by the server. ', - name: 'zeek.http.info_msg', - type: 'keyword', - }, - 'zeek.http.tags': { - category: 'zeek', - description: - 'A set of indicators of various attributes discovered and related to a particular request/response pair. ', - name: 'zeek.http.tags', - type: 'keyword', - }, - 'zeek.http.password': { - category: 'zeek', - description: 'Password if basic-auth is performed for the request. ', - name: 'zeek.http.password', - type: 'keyword', - }, - 'zeek.http.captured_password': { - category: 'zeek', - description: 'Determines if the password will be captured for this request. ', - name: 'zeek.http.captured_password', - type: 'boolean', - }, - 'zeek.http.proxied': { - category: 'zeek', - description: 'All of the headers that may indicate if the HTTP request was proxied. ', - name: 'zeek.http.proxied', - type: 'keyword', - }, - 'zeek.http.range_request': { - category: 'zeek', - description: 'Indicates if this request can assume 206 partial content in response. ', - name: 'zeek.http.range_request', - type: 'boolean', - }, - 'zeek.http.client_header_names': { - category: 'zeek', - description: - 'The vector of HTTP header names sent by the client. No header values are included here, just the header names. ', - name: 'zeek.http.client_header_names', - type: 'keyword', - }, - 'zeek.http.server_header_names': { - category: 'zeek', - description: - 'The vector of HTTP header names sent by the server. No header values are included here, just the header names. ', - name: 'zeek.http.server_header_names', - type: 'keyword', - }, - 'zeek.http.orig_fuids': { - category: 'zeek', - description: 'An ordered vector of file unique IDs from the originator. ', - name: 'zeek.http.orig_fuids', - type: 'keyword', - }, - 'zeek.http.orig_mime_types': { - category: 'zeek', - description: 'An ordered vector of mime types from the originator. ', - name: 'zeek.http.orig_mime_types', - type: 'keyword', - }, - 'zeek.http.orig_filenames': { - category: 'zeek', - description: 'An ordered vector of filenames from the originator. ', - name: 'zeek.http.orig_filenames', - type: 'keyword', - }, - 'zeek.http.resp_fuids': { - category: 'zeek', - description: 'An ordered vector of file unique IDs from the responder. ', - name: 'zeek.http.resp_fuids', - type: 'keyword', - }, - 'zeek.http.resp_mime_types': { - category: 'zeek', - description: 'An ordered vector of mime types from the responder. ', - name: 'zeek.http.resp_mime_types', - type: 'keyword', - }, - 'zeek.http.resp_filenames': { - category: 'zeek', - description: 'An ordered vector of filenames from the responder. ', - name: 'zeek.http.resp_filenames', - type: 'keyword', - }, - 'zeek.http.orig_mime_depth': { - category: 'zeek', - description: 'Current number of MIME entities in the HTTP request message body. ', - name: 'zeek.http.orig_mime_depth', - type: 'integer', - }, - 'zeek.http.resp_mime_depth': { - category: 'zeek', - description: 'Current number of MIME entities in the HTTP response message body. ', - name: 'zeek.http.resp_mime_depth', - type: 'integer', - }, - 'zeek.intel.seen.indicator': { - category: 'zeek', - description: 'The intelligence indicator. ', - name: 'zeek.intel.seen.indicator', - type: 'keyword', - }, - 'zeek.intel.seen.indicator_type': { - category: 'zeek', - description: 'The type of data the indicator represents. ', - name: 'zeek.intel.seen.indicator_type', - type: 'keyword', - }, - 'zeek.intel.seen.host': { - category: 'zeek', - description: 'If the indicator type was Intel::ADDR, then this field will be present. ', - name: 'zeek.intel.seen.host', - type: 'keyword', - }, - 'zeek.intel.seen.conn': { - category: 'zeek', - description: - 'If the data was discovered within a connection, the connection record should go here to give context to the data. ', - name: 'zeek.intel.seen.conn', - type: 'keyword', - }, - 'zeek.intel.seen.where': { - category: 'zeek', - description: 'Where the data was discovered. ', - name: 'zeek.intel.seen.where', - type: 'keyword', - }, - 'zeek.intel.seen.node': { - category: 'zeek', - description: 'The name of the node where the match was discovered. ', - name: 'zeek.intel.seen.node', - type: 'keyword', - }, - 'zeek.intel.seen.uid': { - category: 'zeek', - description: - 'If the data was discovered within a connection, the connection uid should go here to give context to the data. If the conn field is provided, this will be automatically filled out. ', - name: 'zeek.intel.seen.uid', - type: 'keyword', - }, - 'zeek.intel.seen.f': { - category: 'zeek', - description: - 'If the data was discovered within a file, the file record should go here to provide context to the data. ', - name: 'zeek.intel.seen.f', - type: 'object', - }, - 'zeek.intel.seen.fuid': { - category: 'zeek', - description: - 'If the data was discovered within a file, the file uid should go here to provide context to the data. If the file record f is provided, this will be automatically filled out. ', - name: 'zeek.intel.seen.fuid', - type: 'keyword', - }, - 'zeek.intel.matched': { - category: 'zeek', - description: 'Event to represent a match in the intelligence data from data that was seen. ', - name: 'zeek.intel.matched', - type: 'keyword', - }, - 'zeek.intel.sources': { - category: 'zeek', - description: 'Sources which supplied data for this match. ', - name: 'zeek.intel.sources', - type: 'keyword', - }, - 'zeek.intel.fuid': { - category: 'zeek', - description: - 'If a file was associated with this intelligence hit, this is the uid for the file. ', - name: 'zeek.intel.fuid', - type: 'keyword', - }, - 'zeek.intel.file_mime_type': { - category: 'zeek', - description: - 'A mime type if the intelligence hit is related to a file. If the $f field is provided this will be automatically filled out. ', - name: 'zeek.intel.file_mime_type', - type: 'keyword', - }, - 'zeek.intel.file_desc': { - category: 'zeek', - description: - 'Frequently files can be described to give a bit more context. If the $f field is provided this field will be automatically filled out. ', - name: 'zeek.intel.file_desc', - type: 'keyword', - }, - 'zeek.irc.nick': { - category: 'zeek', - description: 'Nickname given for the connection. ', - name: 'zeek.irc.nick', - type: 'keyword', - }, - 'zeek.irc.user': { - category: 'zeek', - description: 'Username given for the connection. ', - name: 'zeek.irc.user', - type: 'keyword', - }, - 'zeek.irc.command': { - category: 'zeek', - description: 'Command given by the client. ', - name: 'zeek.irc.command', - type: 'keyword', - }, - 'zeek.irc.value': { - category: 'zeek', - description: 'Value for the command given by the client. ', - name: 'zeek.irc.value', - type: 'keyword', - }, - 'zeek.irc.addl': { - category: 'zeek', - description: 'Any additional data for the command. ', - name: 'zeek.irc.addl', - type: 'keyword', - }, - 'zeek.irc.dcc.file.name': { - category: 'zeek', - description: 'Present if base/protocols/irc/dcc-send.bro is loaded. DCC filename requested. ', - name: 'zeek.irc.dcc.file.name', - type: 'keyword', - }, - 'zeek.irc.dcc.file.size': { - category: 'zeek', - description: - 'Present if base/protocols/irc/dcc-send.bro is loaded. Size of the DCC transfer as indicated by the sender. ', - name: 'zeek.irc.dcc.file.size', - type: 'long', - }, - 'zeek.irc.dcc.mime_type': { - category: 'zeek', - description: - 'present if base/protocols/irc/dcc-send.bro is loaded. Sniffed mime type of the file. ', - name: 'zeek.irc.dcc.mime_type', - type: 'keyword', - }, - 'zeek.irc.fuid': { - category: 'zeek', - description: 'present if base/protocols/irc/files.bro is loaded. File unique ID. ', - name: 'zeek.irc.fuid', - type: 'keyword', - }, - 'zeek.kerberos.request_type': { - category: 'zeek', - description: 'Request type - Authentication Service (AS) or Ticket Granting Service (TGS). ', - name: 'zeek.kerberos.request_type', - type: 'keyword', - }, - 'zeek.kerberos.client': { - category: 'zeek', - description: 'Client name. ', - name: 'zeek.kerberos.client', - type: 'keyword', - }, - 'zeek.kerberos.service': { - category: 'zeek', - description: 'Service name. ', - name: 'zeek.kerberos.service', - type: 'keyword', - }, - 'zeek.kerberos.success': { - category: 'zeek', - description: 'Request result. ', - name: 'zeek.kerberos.success', - type: 'boolean', - }, - 'zeek.kerberos.error.code': { - category: 'zeek', - description: 'Error code. ', - name: 'zeek.kerberos.error.code', - type: 'integer', - }, - 'zeek.kerberos.error.msg': { - category: 'zeek', - description: 'Error message. ', - name: 'zeek.kerberos.error.msg', - type: 'keyword', - }, - 'zeek.kerberos.valid.from': { - category: 'zeek', - description: 'Ticket valid from. ', - name: 'zeek.kerberos.valid.from', - type: 'date', - }, - 'zeek.kerberos.valid.until': { - category: 'zeek', - description: 'Ticket valid until. ', - name: 'zeek.kerberos.valid.until', - type: 'date', - }, - 'zeek.kerberos.valid.days': { - category: 'zeek', - description: 'Number of days the ticket is valid for. ', - name: 'zeek.kerberos.valid.days', - type: 'integer', - }, - 'zeek.kerberos.cipher': { - category: 'zeek', - description: 'Ticket encryption type. ', - name: 'zeek.kerberos.cipher', - type: 'keyword', - }, - 'zeek.kerberos.forwardable': { - category: 'zeek', - description: 'Forwardable ticket requested. ', - name: 'zeek.kerberos.forwardable', - type: 'boolean', - }, - 'zeek.kerberos.renewable': { - category: 'zeek', - description: 'Renewable ticket requested. ', - name: 'zeek.kerberos.renewable', - type: 'boolean', - }, - 'zeek.kerberos.ticket.auth': { - category: 'zeek', - description: 'Hash of ticket used to authorize request/transaction. ', - name: 'zeek.kerberos.ticket.auth', - type: 'keyword', - }, - 'zeek.kerberos.ticket.new': { - category: 'zeek', - description: 'Hash of ticket returned by the KDC. ', - name: 'zeek.kerberos.ticket.new', - type: 'keyword', - }, - 'zeek.kerberos.cert.client.value': { - category: 'zeek', - description: 'Client certificate. ', - name: 'zeek.kerberos.cert.client.value', - type: 'keyword', - }, - 'zeek.kerberos.cert.client.fuid': { - category: 'zeek', - description: 'File unique ID of client cert. ', - name: 'zeek.kerberos.cert.client.fuid', - type: 'keyword', - }, - 'zeek.kerberos.cert.client.subject': { - category: 'zeek', - description: 'Subject of client certificate. ', - name: 'zeek.kerberos.cert.client.subject', - type: 'keyword', - }, - 'zeek.kerberos.cert.server.value': { - category: 'zeek', - description: 'Server certificate. ', - name: 'zeek.kerberos.cert.server.value', - type: 'keyword', - }, - 'zeek.kerberos.cert.server.fuid': { - category: 'zeek', - description: 'File unique ID of server certificate. ', - name: 'zeek.kerberos.cert.server.fuid', - type: 'keyword', - }, - 'zeek.kerberos.cert.server.subject': { - category: 'zeek', - description: 'Subject of server certificate. ', - name: 'zeek.kerberos.cert.server.subject', - type: 'keyword', - }, - 'zeek.modbus.function': { - category: 'zeek', - description: 'The name of the function message that was sent. ', - name: 'zeek.modbus.function', - type: 'keyword', - }, - 'zeek.modbus.exception': { - category: 'zeek', - description: 'The exception if the response was a failure. ', - name: 'zeek.modbus.exception', - type: 'keyword', - }, - 'zeek.modbus.track_address': { - category: 'zeek', - description: - 'Present if policy/protocols/modbus/track-memmap.bro is loaded. Modbus track address. ', - name: 'zeek.modbus.track_address', - type: 'integer', - }, - 'zeek.mysql.cmd': { - category: 'zeek', - description: 'The command that was issued. ', - name: 'zeek.mysql.cmd', - type: 'keyword', - }, - 'zeek.mysql.arg': { - category: 'zeek', - description: 'The argument issued to the command. ', - name: 'zeek.mysql.arg', - type: 'keyword', - }, - 'zeek.mysql.success': { - category: 'zeek', - description: 'Whether the command succeeded. ', - name: 'zeek.mysql.success', - type: 'boolean', - }, - 'zeek.mysql.rows': { - category: 'zeek', - description: 'The number of affected rows, if any. ', - name: 'zeek.mysql.rows', - type: 'integer', - }, - 'zeek.mysql.response': { - category: 'zeek', - description: 'Server message, if any. ', - name: 'zeek.mysql.response', - type: 'keyword', - }, - 'zeek.notice.connection_id': { - category: 'zeek', - description: 'Identifier of the related connection session. ', - name: 'zeek.notice.connection_id', - type: 'keyword', - }, - 'zeek.notice.icmp_id': { - category: 'zeek', - description: 'Identifier of the related ICMP session. ', - name: 'zeek.notice.icmp_id', - type: 'keyword', - }, - 'zeek.notice.file.id': { - category: 'zeek', - description: 'An identifier associated with a single file that is related to this notice. ', - name: 'zeek.notice.file.id', - type: 'keyword', - }, - 'zeek.notice.file.parent_id': { - category: 'zeek', - description: 'Identifier associated with a container file from which this one was extracted. ', - name: 'zeek.notice.file.parent_id', - type: 'keyword', - }, - 'zeek.notice.file.source': { - category: 'zeek', - description: - 'An identification of the source of the file data. E.g. it may be a network protocol over which it was transferred, or a local file path which was read, or some other input source. ', - name: 'zeek.notice.file.source', - type: 'keyword', - }, - 'zeek.notice.file.mime_type': { - category: 'zeek', - description: 'A mime type if the notice is related to a file. ', - name: 'zeek.notice.file.mime_type', - type: 'keyword', - }, - 'zeek.notice.file.is_orig': { - category: 'zeek', - description: - 'If the source of this file is a network connection, this field indicates if the file is being sent by the originator of the connection or the responder. ', - name: 'zeek.notice.file.is_orig', - type: 'boolean', - }, - 'zeek.notice.file.seen_bytes': { - category: 'zeek', - description: 'Number of bytes provided to the file analysis engine for the file. ', - name: 'zeek.notice.file.seen_bytes', - type: 'long', - }, - 'zeek.notice.ffile.total_bytes': { - category: 'zeek', - description: 'Total number of bytes that are supposed to comprise the full file. ', - name: 'zeek.notice.ffile.total_bytes', - type: 'long', - }, - 'zeek.notice.file.missing_bytes': { - category: 'zeek', - description: - 'The number of bytes in the file stream that were completely missed during the process of analysis. ', - name: 'zeek.notice.file.missing_bytes', - type: 'long', - }, - 'zeek.notice.file.overflow_bytes': { - category: 'zeek', - description: - "The number of bytes in the file stream that were not delivered to stream file analyzers. This could be overlapping bytes or bytes that couldn't be reassembled. ", - name: 'zeek.notice.file.overflow_bytes', - type: 'long', - }, - 'zeek.notice.fuid': { - category: 'zeek', - description: 'A file unique ID if this notice is related to a file. ', - name: 'zeek.notice.fuid', - type: 'keyword', - }, - 'zeek.notice.note': { - category: 'zeek', - description: 'The type of the notice. ', - name: 'zeek.notice.note', - type: 'keyword', - }, - 'zeek.notice.msg': { - category: 'zeek', - description: 'The human readable message for the notice. ', - name: 'zeek.notice.msg', - type: 'keyword', - }, - 'zeek.notice.sub': { - category: 'zeek', - description: 'The human readable sub-message. ', - name: 'zeek.notice.sub', - type: 'keyword', - }, - 'zeek.notice.n': { - category: 'zeek', - description: 'Associated count, or a status code. ', - name: 'zeek.notice.n', - type: 'long', - }, - 'zeek.notice.peer_name': { - category: 'zeek', - description: 'Name of remote peer that raised this notice. ', - name: 'zeek.notice.peer_name', - type: 'keyword', - }, - 'zeek.notice.peer_descr': { - category: 'zeek', - description: 'Textual description for the peer that raised this notice. ', - name: 'zeek.notice.peer_descr', - type: 'text', - }, - 'zeek.notice.actions': { - category: 'zeek', - description: 'The actions which have been applied to this notice. ', - name: 'zeek.notice.actions', - type: 'keyword', - }, - 'zeek.notice.email_body_sections': { - category: 'zeek', - description: - 'By adding chunks of text into this element, other scripts can expand on notices that are being emailed. ', - name: 'zeek.notice.email_body_sections', - type: 'text', - }, - 'zeek.notice.email_delay_tokens': { - category: 'zeek', - description: - 'Adding a string token to this set will cause the built-in emailing functionality to delay sending the email either the token has been removed or the email has been delayed for the specified time duration. ', - name: 'zeek.notice.email_delay_tokens', - type: 'keyword', - }, - 'zeek.notice.identifier': { - category: 'zeek', - description: - 'This field is provided when a notice is generated for the purpose of deduplicating notices. ', - name: 'zeek.notice.identifier', - type: 'keyword', - }, - 'zeek.notice.suppress_for': { - category: 'zeek', - description: - 'This field indicates the length of time that this unique notice should be suppressed. ', - name: 'zeek.notice.suppress_for', - type: 'double', - }, - 'zeek.notice.dropped': { - category: 'zeek', - description: 'Indicate if the source IP address was dropped and denied network access. ', - name: 'zeek.notice.dropped', - type: 'boolean', - }, - 'zeek.ntlm.domain': { - category: 'zeek', - description: 'Domain name given by the client. ', - name: 'zeek.ntlm.domain', - type: 'keyword', - }, - 'zeek.ntlm.hostname': { - category: 'zeek', - description: 'Hostname given by the client. ', - name: 'zeek.ntlm.hostname', - type: 'keyword', - }, - 'zeek.ntlm.success': { - category: 'zeek', - description: 'Indicate whether or not the authentication was successful. ', - name: 'zeek.ntlm.success', - type: 'boolean', - }, - 'zeek.ntlm.username': { - category: 'zeek', - description: 'Username given by the client. ', - name: 'zeek.ntlm.username', - type: 'keyword', - }, - 'zeek.ntlm.server.name.dns': { - category: 'zeek', - description: 'DNS name given by the server in a CHALLENGE. ', - name: 'zeek.ntlm.server.name.dns', - type: 'keyword', - }, - 'zeek.ntlm.server.name.netbios': { - category: 'zeek', - description: 'NetBIOS name given by the server in a CHALLENGE. ', - name: 'zeek.ntlm.server.name.netbios', - type: 'keyword', - }, - 'zeek.ntlm.server.name.tree': { - category: 'zeek', - description: 'Tree name given by the server in a CHALLENGE. ', - name: 'zeek.ntlm.server.name.tree', - type: 'keyword', - }, - 'zeek.ntp.version': { - category: 'zeek', - description: 'The NTP version number (1, 2, 3, 4). ', - name: 'zeek.ntp.version', - type: 'integer', - }, - 'zeek.ntp.mode': { - category: 'zeek', - description: 'The NTP mode being used. ', - name: 'zeek.ntp.mode', - type: 'integer', - }, - 'zeek.ntp.stratum': { - category: 'zeek', - description: 'The stratum (primary server, secondary server, etc.). ', - name: 'zeek.ntp.stratum', - type: 'integer', - }, - 'zeek.ntp.poll': { - category: 'zeek', - description: 'The maximum interval between successive messages in seconds. ', - name: 'zeek.ntp.poll', - type: 'double', - }, - 'zeek.ntp.precision': { - category: 'zeek', - description: 'The precision of the system clock in seconds. ', - name: 'zeek.ntp.precision', - type: 'double', - }, - 'zeek.ntp.root_delay': { - category: 'zeek', - description: 'Total round-trip delay to the reference clock in seconds. ', - name: 'zeek.ntp.root_delay', - type: 'double', - }, - 'zeek.ntp.root_disp': { - category: 'zeek', - description: 'Total dispersion to the reference clock in seconds. ', - name: 'zeek.ntp.root_disp', - type: 'double', - }, - 'zeek.ntp.ref_id': { - category: 'zeek', - description: - 'For stratum 0, 4 character string used for debugging. For stratum 1, ID assigned to the reference clock by IANA. Above stratum 1, when using IPv4, the IP address of the reference clock. Note that the NTP protocol did not originally specify a large enough field to represent IPv6 addresses, so they use the first four bytes of the MD5 hash of the reference clock’s IPv6 address (i.e. an IPv4 address here is not necessarily IPv4). ', - name: 'zeek.ntp.ref_id', - type: 'keyword', - }, - 'zeek.ntp.ref_time': { - category: 'zeek', - description: 'Time when the system clock was last set or correct. ', - name: 'zeek.ntp.ref_time', - type: 'date', - }, - 'zeek.ntp.org_time': { - category: 'zeek', - description: 'Time at the client when the request departed for the NTP server. ', - name: 'zeek.ntp.org_time', - type: 'date', - }, - 'zeek.ntp.rec_time': { - category: 'zeek', - description: 'Time at the server when the request arrived from the NTP client. ', - name: 'zeek.ntp.rec_time', - type: 'date', - }, - 'zeek.ntp.xmt_time': { - category: 'zeek', - description: 'Time at the server when the response departed for the NTP client. ', - name: 'zeek.ntp.xmt_time', - type: 'date', - }, - 'zeek.ntp.num_exts': { - category: 'zeek', - description: 'Number of extension fields (which are not currently parsed). ', - name: 'zeek.ntp.num_exts', - type: 'integer', - }, - 'zeek.ocsp.file_id': { - category: 'zeek', - description: 'File id of the OCSP reply. ', - name: 'zeek.ocsp.file_id', - type: 'keyword', - }, - 'zeek.ocsp.hash.algorithm': { - category: 'zeek', - description: 'Hash algorithm used to generate issuerNameHash and issuerKeyHash. ', - name: 'zeek.ocsp.hash.algorithm', - type: 'keyword', - }, - 'zeek.ocsp.hash.issuer.name': { - category: 'zeek', - description: "Hash of the issuer's distingueshed name. ", - name: 'zeek.ocsp.hash.issuer.name', - type: 'keyword', - }, - 'zeek.ocsp.hash.issuer.key': { - category: 'zeek', - description: "Hash of the issuer's public key. ", - name: 'zeek.ocsp.hash.issuer.key', - type: 'keyword', - }, - 'zeek.ocsp.serial_number': { - category: 'zeek', - description: 'Serial number of the affected certificate. ', - name: 'zeek.ocsp.serial_number', - type: 'keyword', - }, - 'zeek.ocsp.status': { - category: 'zeek', - description: 'Status of the affected certificate. ', - name: 'zeek.ocsp.status', - type: 'keyword', - }, - 'zeek.ocsp.revoke.time': { - category: 'zeek', - description: 'Time at which the certificate was revoked. ', - name: 'zeek.ocsp.revoke.time', - type: 'date', - }, - 'zeek.ocsp.revoke.reason': { - category: 'zeek', - description: 'Reason for which the certificate was revoked. ', - name: 'zeek.ocsp.revoke.reason', - type: 'keyword', - }, - 'zeek.ocsp.update.this': { - category: 'zeek', - description: 'The time at which the status being shows is known to have been correct. ', - name: 'zeek.ocsp.update.this', - type: 'date', - }, - 'zeek.ocsp.update.next': { - category: 'zeek', - description: - 'The latest time at which new information about the status of the certificate will be available. ', - name: 'zeek.ocsp.update.next', - type: 'date', - }, - 'zeek.pe.client': { - category: 'zeek', - description: "The client's version string. ", - name: 'zeek.pe.client', - type: 'keyword', - }, - 'zeek.pe.id': { - category: 'zeek', - description: 'File id of this portable executable file. ', - name: 'zeek.pe.id', - type: 'keyword', - }, - 'zeek.pe.machine': { - category: 'zeek', - description: 'The target machine that the file was compiled for. ', - name: 'zeek.pe.machine', - type: 'keyword', - }, - 'zeek.pe.compile_time': { - category: 'zeek', - description: 'The time that the file was created at. ', - name: 'zeek.pe.compile_time', - type: 'date', - }, - 'zeek.pe.os': { - category: 'zeek', - description: 'The required operating system. ', - name: 'zeek.pe.os', - type: 'keyword', - }, - 'zeek.pe.subsystem': { - category: 'zeek', - description: 'The subsystem that is required to run this file. ', - name: 'zeek.pe.subsystem', - type: 'keyword', - }, - 'zeek.pe.is_exe': { - category: 'zeek', - description: 'Is the file an executable, or just an object file? ', - name: 'zeek.pe.is_exe', - type: 'boolean', - }, - 'zeek.pe.is_64bit': { - category: 'zeek', - description: 'Is the file a 64-bit executable? ', - name: 'zeek.pe.is_64bit', - type: 'boolean', - }, - 'zeek.pe.uses_aslr': { - category: 'zeek', - description: 'Does the file support Address Space Layout Randomization? ', - name: 'zeek.pe.uses_aslr', - type: 'boolean', - }, - 'zeek.pe.uses_dep': { - category: 'zeek', - description: 'Does the file support Data Execution Prevention? ', - name: 'zeek.pe.uses_dep', - type: 'boolean', - }, - 'zeek.pe.uses_code_integrity': { - category: 'zeek', - description: 'Does the file enforce code integrity checks? ', - name: 'zeek.pe.uses_code_integrity', - type: 'boolean', - }, - 'zeek.pe.uses_seh': { - category: 'zeek', - description: 'Does the file use structured exception handing? ', - name: 'zeek.pe.uses_seh', - type: 'boolean', - }, - 'zeek.pe.has_import_table': { - category: 'zeek', - description: 'Does the file have an import table? ', - name: 'zeek.pe.has_import_table', - type: 'boolean', - }, - 'zeek.pe.has_export_table': { - category: 'zeek', - description: 'Does the file have an export table? ', - name: 'zeek.pe.has_export_table', - type: 'boolean', - }, - 'zeek.pe.has_cert_table': { - category: 'zeek', - description: 'Does the file have an attribute certificate table? ', - name: 'zeek.pe.has_cert_table', - type: 'boolean', - }, - 'zeek.pe.has_debug_data': { - category: 'zeek', - description: 'Does the file have a debug table? ', - name: 'zeek.pe.has_debug_data', - type: 'boolean', - }, - 'zeek.pe.section_names': { - category: 'zeek', - description: 'The names of the sections, in order. ', - name: 'zeek.pe.section_names', - type: 'keyword', - }, - 'zeek.radius.username': { - category: 'zeek', - description: 'The username, if present. ', - name: 'zeek.radius.username', - type: 'keyword', - }, - 'zeek.radius.mac': { - category: 'zeek', - description: 'MAC address, if present. ', - name: 'zeek.radius.mac', - type: 'keyword', - }, - 'zeek.radius.framed_addr': { - category: 'zeek', - description: - 'The address given to the network access server, if present. This is only a hint from the RADIUS server and the network access server is not required to honor the address. ', - name: 'zeek.radius.framed_addr', - type: 'ip', - }, - 'zeek.radius.remote_ip': { - category: 'zeek', - description: - 'Remote IP address, if present. This is collected from the Tunnel-Client-Endpoint attribute. ', - name: 'zeek.radius.remote_ip', - type: 'ip', - }, - 'zeek.radius.connect_info': { - category: 'zeek', - description: 'Connect info, if present. ', - name: 'zeek.radius.connect_info', - type: 'keyword', - }, - 'zeek.radius.reply_msg': { - category: 'zeek', - description: - 'Reply message from the server challenge. This is frequently shown to the user authenticating. ', - name: 'zeek.radius.reply_msg', - type: 'keyword', - }, - 'zeek.radius.result': { - category: 'zeek', - description: 'Successful or failed authentication. ', - name: 'zeek.radius.result', - type: 'keyword', - }, - 'zeek.radius.ttl': { - category: 'zeek', - description: - 'The duration between the first request and either the "Access-Accept" message or an error. If the field is empty, it means that either the request or response was not seen. ', - name: 'zeek.radius.ttl', - type: 'integer', - }, - 'zeek.radius.logged': { - category: 'zeek', - description: 'Whether this has already been logged and can be ignored. ', - name: 'zeek.radius.logged', - type: 'boolean', - }, - 'zeek.rdp.cookie': { - category: 'zeek', - description: 'Cookie value used by the client machine. This is typically a username. ', - name: 'zeek.rdp.cookie', - type: 'keyword', - }, - 'zeek.rdp.result': { - category: 'zeek', - description: - "Status result for the connection. It's a mix between RDP negotation failure messages and GCC server create response messages. ", - name: 'zeek.rdp.result', - type: 'keyword', - }, - 'zeek.rdp.security_protocol': { - category: 'zeek', - description: 'Security protocol chosen by the server. ', - name: 'zeek.rdp.security_protocol', - type: 'keyword', - }, - 'zeek.rdp.keyboard_layout': { - category: 'zeek', - description: 'Keyboard layout (language) of the client machine. ', - name: 'zeek.rdp.keyboard_layout', - type: 'keyword', - }, - 'zeek.rdp.client.build': { - category: 'zeek', - description: 'RDP client version used by the client machine. ', - name: 'zeek.rdp.client.build', - type: 'keyword', - }, - 'zeek.rdp.client.client_name': { - category: 'zeek', - description: 'Name of the client machine. ', - name: 'zeek.rdp.client.client_name', - type: 'keyword', - }, - 'zeek.rdp.client.product_id': { - category: 'zeek', - description: 'Product ID of the client machine. ', - name: 'zeek.rdp.client.product_id', - type: 'keyword', - }, - 'zeek.rdp.desktop.width': { - category: 'zeek', - description: 'Desktop width of the client machine. ', - name: 'zeek.rdp.desktop.width', - type: 'integer', - }, - 'zeek.rdp.desktop.height': { - category: 'zeek', - description: 'Desktop height of the client machine. ', - name: 'zeek.rdp.desktop.height', - type: 'integer', - }, - 'zeek.rdp.desktop.color_depth': { - category: 'zeek', - description: 'The color depth requested by the client in the high_color_depth field. ', - name: 'zeek.rdp.desktop.color_depth', - type: 'keyword', - }, - 'zeek.rdp.cert.type': { - category: 'zeek', - description: - 'If the connection is being encrypted with native RDP encryption, this is the type of cert being used. ', - name: 'zeek.rdp.cert.type', - type: 'keyword', - }, - 'zeek.rdp.cert.count': { - category: 'zeek', - description: 'The number of certs seen. X.509 can transfer an entire certificate chain. ', - name: 'zeek.rdp.cert.count', - type: 'integer', - }, - 'zeek.rdp.cert.permanent': { - category: 'zeek', - description: - 'Indicates if the provided certificate or certificate chain is permanent or temporary. ', - name: 'zeek.rdp.cert.permanent', - type: 'boolean', - }, - 'zeek.rdp.encryption.level': { - category: 'zeek', - description: 'Encryption level of the connection. ', - name: 'zeek.rdp.encryption.level', - type: 'keyword', - }, - 'zeek.rdp.encryption.method': { - category: 'zeek', - description: 'Encryption method of the connection. ', - name: 'zeek.rdp.encryption.method', - type: 'keyword', - }, - 'zeek.rdp.done': { - category: 'zeek', - description: 'Track status of logging RDP connections. ', - name: 'zeek.rdp.done', - type: 'boolean', - }, - 'zeek.rdp.ssl': { - category: 'zeek', - description: - '(present if policy/protocols/rdp/indicate_ssl.bro is loaded) Flag the connection if it was seen over SSL. ', - name: 'zeek.rdp.ssl', - type: 'boolean', - }, - 'zeek.rfb.version.client.major': { - category: 'zeek', - description: 'Major version of the client. ', - name: 'zeek.rfb.version.client.major', - type: 'keyword', - }, - 'zeek.rfb.version.client.minor': { - category: 'zeek', - description: 'Minor version of the client. ', - name: 'zeek.rfb.version.client.minor', - type: 'keyword', - }, - 'zeek.rfb.version.server.major': { - category: 'zeek', - description: 'Major version of the server. ', - name: 'zeek.rfb.version.server.major', - type: 'keyword', - }, - 'zeek.rfb.version.server.minor': { - category: 'zeek', - description: 'Minor version of the server. ', - name: 'zeek.rfb.version.server.minor', - type: 'keyword', - }, - 'zeek.rfb.auth.success': { - category: 'zeek', - description: 'Whether or not authentication was successful. ', - name: 'zeek.rfb.auth.success', - type: 'boolean', - }, - 'zeek.rfb.auth.method': { - category: 'zeek', - description: 'Identifier of authentication method used. ', - name: 'zeek.rfb.auth.method', - type: 'keyword', - }, - 'zeek.rfb.share_flag': { - category: 'zeek', - description: 'Whether the client has an exclusive or a shared session. ', - name: 'zeek.rfb.share_flag', - type: 'boolean', - }, - 'zeek.rfb.desktop_name': { - category: 'zeek', - description: 'Name of the screen that is being shared. ', - name: 'zeek.rfb.desktop_name', - type: 'keyword', - }, - 'zeek.rfb.width': { - category: 'zeek', - description: 'Width of the screen that is being shared. ', - name: 'zeek.rfb.width', - type: 'integer', - }, - 'zeek.rfb.height': { - category: 'zeek', - description: 'Height of the screen that is being shared. ', - name: 'zeek.rfb.height', - type: 'integer', - }, - 'zeek.signature.note': { - category: 'zeek', - description: 'Notice associated with signature event. ', - name: 'zeek.signature.note', - type: 'keyword', - }, - 'zeek.signature.sig_id': { - category: 'zeek', - description: 'The name of the signature that matched. ', - name: 'zeek.signature.sig_id', - type: 'keyword', - }, - 'zeek.signature.event_msg': { - category: 'zeek', - description: 'A more descriptive message of the signature-matching event. ', - name: 'zeek.signature.event_msg', - type: 'keyword', - }, - 'zeek.signature.sub_msg': { - category: 'zeek', - description: 'Extracted payload data or extra message. ', - name: 'zeek.signature.sub_msg', - type: 'keyword', - }, - 'zeek.signature.sig_count': { - category: 'zeek', - description: 'Number of sigs, usually from summary count. ', - name: 'zeek.signature.sig_count', - type: 'integer', - }, - 'zeek.signature.host_count': { - category: 'zeek', - description: 'Number of hosts, from a summary count. ', - name: 'zeek.signature.host_count', - type: 'integer', - }, - 'zeek.sip.transaction_depth': { - category: 'zeek', - description: - 'Represents the pipelined depth into the connection of this request/response transaction. ', - name: 'zeek.sip.transaction_depth', - type: 'integer', - }, - 'zeek.sip.sequence.method': { - category: 'zeek', - description: 'Verb used in the SIP request (INVITE, REGISTER etc.). ', - name: 'zeek.sip.sequence.method', - type: 'keyword', - }, - 'zeek.sip.sequence.number': { - category: 'zeek', - description: 'Contents of the CSeq: header from the client. ', - name: 'zeek.sip.sequence.number', - type: 'keyword', - }, - 'zeek.sip.uri': { - category: 'zeek', - description: 'URI used in the request. ', - name: 'zeek.sip.uri', - type: 'keyword', - }, - 'zeek.sip.date': { - category: 'zeek', - description: 'Contents of the Date: header from the client. ', - name: 'zeek.sip.date', - type: 'keyword', - }, - 'zeek.sip.request.from': { - category: 'zeek', - description: - "Contents of the request From: header Note: The tag= value that's usually appended to the sender is stripped off and not logged. ", - name: 'zeek.sip.request.from', - type: 'keyword', - }, - 'zeek.sip.request.to': { - category: 'zeek', - description: 'Contents of the To: header. ', - name: 'zeek.sip.request.to', - type: 'keyword', - }, - 'zeek.sip.request.path': { - category: 'zeek', - description: 'The client message transmission path, as extracted from the headers. ', - name: 'zeek.sip.request.path', - type: 'keyword', - }, - 'zeek.sip.request.body_length': { - category: 'zeek', - description: 'Contents of the Content-Length: header from the client. ', - name: 'zeek.sip.request.body_length', - type: 'long', - }, - 'zeek.sip.response.from': { - category: 'zeek', - description: - "Contents of the response From: header Note: The tag= value that's usually appended to the sender is stripped off and not logged. ", - name: 'zeek.sip.response.from', - type: 'keyword', - }, - 'zeek.sip.response.to': { - category: 'zeek', - description: 'Contents of the response To: header. ', - name: 'zeek.sip.response.to', - type: 'keyword', - }, - 'zeek.sip.response.path': { - category: 'zeek', - description: 'The server message transmission path, as extracted from the headers. ', - name: 'zeek.sip.response.path', - type: 'keyword', - }, - 'zeek.sip.response.body_length': { - category: 'zeek', - description: 'Contents of the Content-Length: header from the server. ', - name: 'zeek.sip.response.body_length', - type: 'long', - }, - 'zeek.sip.reply_to': { - category: 'zeek', - description: 'Contents of the Reply-To: header. ', - name: 'zeek.sip.reply_to', - type: 'keyword', - }, - 'zeek.sip.call_id': { - category: 'zeek', - description: 'Contents of the Call-ID: header from the client. ', - name: 'zeek.sip.call_id', - type: 'keyword', - }, - 'zeek.sip.subject': { - category: 'zeek', - description: 'Contents of the Subject: header from the client. ', - name: 'zeek.sip.subject', - type: 'keyword', - }, - 'zeek.sip.user_agent': { - category: 'zeek', - description: 'Contents of the User-Agent: header from the client. ', - name: 'zeek.sip.user_agent', - type: 'keyword', - }, - 'zeek.sip.status.code': { - category: 'zeek', - description: 'Status code returned by the server. ', - name: 'zeek.sip.status.code', - type: 'integer', - }, - 'zeek.sip.status.msg': { - category: 'zeek', - description: 'Status message returned by the server. ', - name: 'zeek.sip.status.msg', - type: 'keyword', - }, - 'zeek.sip.warning': { - category: 'zeek', - description: 'Contents of the Warning: header. ', - name: 'zeek.sip.warning', - type: 'keyword', - }, - 'zeek.sip.content_type': { - category: 'zeek', - description: 'Contents of the Content-Type: header from the server. ', - name: 'zeek.sip.content_type', - type: 'keyword', - }, - 'zeek.smb_cmd.command': { - category: 'zeek', - description: 'The command sent by the client. ', - name: 'zeek.smb_cmd.command', - type: 'keyword', - }, - 'zeek.smb_cmd.sub_command': { - category: 'zeek', - description: 'The subcommand sent by the client, if present. ', - name: 'zeek.smb_cmd.sub_command', - type: 'keyword', - }, - 'zeek.smb_cmd.argument': { - category: 'zeek', - description: 'Command argument sent by the client, if any. ', - name: 'zeek.smb_cmd.argument', - type: 'keyword', - }, - 'zeek.smb_cmd.status': { - category: 'zeek', - description: "Server reply to the client's command. ", - name: 'zeek.smb_cmd.status', - type: 'keyword', - }, - 'zeek.smb_cmd.rtt': { - category: 'zeek', - description: 'Round trip time from the request to the response. ', - name: 'zeek.smb_cmd.rtt', - type: 'double', - }, - 'zeek.smb_cmd.version': { - category: 'zeek', - description: 'Version of SMB for the command. ', - name: 'zeek.smb_cmd.version', - type: 'keyword', - }, - 'zeek.smb_cmd.username': { - category: 'zeek', - description: 'Authenticated username, if available. ', - name: 'zeek.smb_cmd.username', - type: 'keyword', - }, - 'zeek.smb_cmd.tree': { - category: 'zeek', - description: - 'If this is related to a tree, this is the tree that was used for the current command. ', - name: 'zeek.smb_cmd.tree', - type: 'keyword', - }, - 'zeek.smb_cmd.tree_service': { - category: 'zeek', - description: 'The type of tree (disk share, printer share, named pipe, etc.). ', - name: 'zeek.smb_cmd.tree_service', - type: 'keyword', - }, - 'zeek.smb_cmd.file.name': { - category: 'zeek', - description: 'Filename if one was seen. ', - name: 'zeek.smb_cmd.file.name', - type: 'keyword', - }, - 'zeek.smb_cmd.file.action': { - category: 'zeek', - description: 'Action this log record represents. ', - name: 'zeek.smb_cmd.file.action', - type: 'keyword', - }, - 'zeek.smb_cmd.file.uid': { - category: 'zeek', - description: 'UID of the referenced file. ', - name: 'zeek.smb_cmd.file.uid', - type: 'keyword', - }, - 'zeek.smb_cmd.file.host.tx': { - category: 'zeek', - description: 'Address of the transmitting host. ', - name: 'zeek.smb_cmd.file.host.tx', - type: 'ip', - }, - 'zeek.smb_cmd.file.host.rx': { - category: 'zeek', - description: 'Address of the receiving host. ', - name: 'zeek.smb_cmd.file.host.rx', - type: 'ip', - }, - 'zeek.smb_cmd.smb1_offered_dialects': { - category: 'zeek', - description: - 'Present if base/protocols/smb/smb1-main.bro is loaded. Dialects offered by the client. ', - name: 'zeek.smb_cmd.smb1_offered_dialects', - type: 'keyword', - }, - 'zeek.smb_cmd.smb2_offered_dialects': { - category: 'zeek', - description: - 'Present if base/protocols/smb/smb2-main.bro is loaded. Dialects offered by the client. ', - name: 'zeek.smb_cmd.smb2_offered_dialects', - type: 'integer', - }, - 'zeek.smb_files.action': { - category: 'zeek', - description: 'Action this log record represents. ', - name: 'zeek.smb_files.action', - type: 'keyword', - }, - 'zeek.smb_files.fid': { - category: 'zeek', - description: 'ID referencing this file. ', - name: 'zeek.smb_files.fid', - type: 'integer', - }, - 'zeek.smb_files.name': { - category: 'zeek', - description: 'Filename if one was seen. ', - name: 'zeek.smb_files.name', - type: 'keyword', - }, - 'zeek.smb_files.path': { - category: 'zeek', - description: 'Path pulled from the tree this file was transferred to or from. ', - name: 'zeek.smb_files.path', - type: 'keyword', - }, - 'zeek.smb_files.previous_name': { - category: 'zeek', - description: "If the rename action was seen, this will be the file's previous name. ", - name: 'zeek.smb_files.previous_name', - type: 'keyword', - }, - 'zeek.smb_files.size': { - category: 'zeek', - description: 'Byte size of the file. ', - name: 'zeek.smb_files.size', - type: 'long', - }, - 'zeek.smb_files.times.accessed': { - category: 'zeek', - description: "The file's access time. ", - name: 'zeek.smb_files.times.accessed', - type: 'date', - }, - 'zeek.smb_files.times.changed': { - category: 'zeek', - description: "The file's change time. ", - name: 'zeek.smb_files.times.changed', - type: 'date', - }, - 'zeek.smb_files.times.created': { - category: 'zeek', - description: "The file's create time. ", - name: 'zeek.smb_files.times.created', - type: 'date', - }, - 'zeek.smb_files.times.modified': { - category: 'zeek', - description: "The file's modify time. ", - name: 'zeek.smb_files.times.modified', - type: 'date', - }, - 'zeek.smb_files.uuid': { - category: 'zeek', - description: 'UUID referencing this file if DCE/RPC. ', - name: 'zeek.smb_files.uuid', - type: 'keyword', - }, - 'zeek.smb_mapping.path': { - category: 'zeek', - description: 'Name of the tree path. ', - name: 'zeek.smb_mapping.path', - type: 'keyword', - }, - 'zeek.smb_mapping.service': { - category: 'zeek', - description: 'The type of resource of the tree (disk share, printer share, named pipe, etc.). ', - name: 'zeek.smb_mapping.service', - type: 'keyword', - }, - 'zeek.smb_mapping.native_file_system': { - category: 'zeek', - description: 'File system of the tree. ', - name: 'zeek.smb_mapping.native_file_system', - type: 'keyword', - }, - 'zeek.smb_mapping.share_type': { - category: 'zeek', - description: - 'If this is SMB2, a share type will be included. For SMB1, the type of share will be deduced and included as well. ', - name: 'zeek.smb_mapping.share_type', - type: 'keyword', - }, - 'zeek.smtp.transaction_depth': { - category: 'zeek', - description: - 'A count to represent the depth of this message transaction in a single connection where multiple messages were transferred. ', - name: 'zeek.smtp.transaction_depth', - type: 'integer', - }, - 'zeek.smtp.helo': { - category: 'zeek', - description: 'Contents of the Helo header. ', - name: 'zeek.smtp.helo', - type: 'keyword', - }, - 'zeek.smtp.mail_from': { - category: 'zeek', - description: 'Email addresses found in the MAIL FROM header. ', - name: 'zeek.smtp.mail_from', - type: 'keyword', - }, - 'zeek.smtp.rcpt_to': { - category: 'zeek', - description: 'Email addresses found in the RCPT TO header. ', - name: 'zeek.smtp.rcpt_to', - type: 'keyword', - }, - 'zeek.smtp.date': { - category: 'zeek', - description: 'Contents of the Date header. ', - name: 'zeek.smtp.date', - type: 'date', - }, - 'zeek.smtp.from': { - category: 'zeek', - description: 'Contents of the From header. ', - name: 'zeek.smtp.from', - type: 'keyword', - }, - 'zeek.smtp.to': { - category: 'zeek', - description: 'Contents of the To header. ', - name: 'zeek.smtp.to', - type: 'keyword', - }, - 'zeek.smtp.cc': { - category: 'zeek', - description: 'Contents of the CC header. ', - name: 'zeek.smtp.cc', - type: 'keyword', - }, - 'zeek.smtp.reply_to': { - category: 'zeek', - description: 'Contents of the ReplyTo header. ', - name: 'zeek.smtp.reply_to', - type: 'keyword', - }, - 'zeek.smtp.msg_id': { - category: 'zeek', - description: 'Contents of the MsgID header. ', - name: 'zeek.smtp.msg_id', - type: 'keyword', - }, - 'zeek.smtp.in_reply_to': { - category: 'zeek', - description: 'Contents of the In-Reply-To header. ', - name: 'zeek.smtp.in_reply_to', - type: 'keyword', - }, - 'zeek.smtp.subject': { - category: 'zeek', - description: 'Contents of the Subject header. ', - name: 'zeek.smtp.subject', - type: 'keyword', - }, - 'zeek.smtp.x_originating_ip': { - category: 'zeek', - description: 'Contents of the X-Originating-IP header. ', - name: 'zeek.smtp.x_originating_ip', - type: 'keyword', - }, - 'zeek.smtp.first_received': { - category: 'zeek', - description: 'Contents of the first Received header. ', - name: 'zeek.smtp.first_received', - type: 'keyword', - }, - 'zeek.smtp.second_received': { - category: 'zeek', - description: 'Contents of the second Received header. ', - name: 'zeek.smtp.second_received', - type: 'keyword', - }, - 'zeek.smtp.last_reply': { - category: 'zeek', - description: 'The last message that the server sent to the client. ', - name: 'zeek.smtp.last_reply', - type: 'keyword', - }, - 'zeek.smtp.path': { - category: 'zeek', - description: 'The message transmission path, as extracted from the headers. ', - name: 'zeek.smtp.path', - type: 'ip', - }, - 'zeek.smtp.user_agent': { - category: 'zeek', - description: 'Value of the User-Agent header from the client. ', - name: 'zeek.smtp.user_agent', - type: 'keyword', - }, - 'zeek.smtp.tls': { - category: 'zeek', - description: 'Indicates that the connection has switched to using TLS. ', - name: 'zeek.smtp.tls', - type: 'boolean', - }, - 'zeek.smtp.process_received_from': { - category: 'zeek', - description: 'Indicates if the "Received: from" headers should still be processed. ', - name: 'zeek.smtp.process_received_from', - type: 'boolean', - }, - 'zeek.smtp.has_client_activity': { - category: 'zeek', - description: 'Indicates if client activity has been seen, but not yet logged. ', - name: 'zeek.smtp.has_client_activity', - type: 'boolean', - }, - 'zeek.smtp.fuids': { - category: 'zeek', - description: - '(present if base/protocols/smtp/files.bro is loaded) An ordered vector of file unique IDs seen attached to the message. ', - name: 'zeek.smtp.fuids', - type: 'keyword', - }, - 'zeek.smtp.is_webmail': { - category: 'zeek', - description: 'Indicates if the message was sent through a webmail interface. ', - name: 'zeek.smtp.is_webmail', - type: 'boolean', - }, - 'zeek.snmp.duration': { - category: 'zeek', - description: - 'The amount of time between the first packet beloning to the SNMP session and the latest one seen. ', - name: 'zeek.snmp.duration', - type: 'double', - }, - 'zeek.snmp.version': { - category: 'zeek', - description: 'The version of SNMP being used. ', - name: 'zeek.snmp.version', - type: 'keyword', - }, - 'zeek.snmp.community': { - category: 'zeek', - description: - "The community string of the first SNMP packet associated with the session. This is used as part of SNMP's (v1 and v2c) administrative/security framework. See RFC 1157 or RFC 1901. ", - name: 'zeek.snmp.community', - type: 'keyword', - }, - 'zeek.snmp.get.requests': { - category: 'zeek', - description: - 'The number of variable bindings in GetRequest/GetNextRequest PDUs seen for the session. ', - name: 'zeek.snmp.get.requests', - type: 'integer', - }, - 'zeek.snmp.get.bulk_requests': { - category: 'zeek', - description: 'The number of variable bindings in GetBulkRequest PDUs seen for the session. ', - name: 'zeek.snmp.get.bulk_requests', - type: 'integer', - }, - 'zeek.snmp.get.responses': { - category: 'zeek', - description: - 'The number of variable bindings in GetResponse/Response PDUs seen for the session. ', - name: 'zeek.snmp.get.responses', - type: 'integer', - }, - 'zeek.snmp.set.requests': { - category: 'zeek', - description: 'The number of variable bindings in SetRequest PDUs seen for the session. ', - name: 'zeek.snmp.set.requests', - type: 'integer', - }, - 'zeek.snmp.display_string': { - category: 'zeek', - description: 'A system description of the SNMP responder endpoint. ', - name: 'zeek.snmp.display_string', - type: 'keyword', - }, - 'zeek.snmp.up_since': { - category: 'zeek', - description: "The time at which the SNMP responder endpoint claims it's been up since. ", - name: 'zeek.snmp.up_since', - type: 'date', - }, - 'zeek.socks.version': { - category: 'zeek', - description: 'Protocol version of SOCKS. ', - name: 'zeek.socks.version', - type: 'integer', - }, - 'zeek.socks.user': { - category: 'zeek', - description: 'Username used to request a login to the proxy. ', - name: 'zeek.socks.user', - type: 'keyword', - }, - 'zeek.socks.password': { - category: 'zeek', - description: 'Password used to request a login to the proxy. ', - name: 'zeek.socks.password', - type: 'keyword', - }, - 'zeek.socks.status': { - category: 'zeek', - description: 'Server status for the attempt at using the proxy. ', - name: 'zeek.socks.status', - type: 'keyword', - }, - 'zeek.socks.request.host': { - category: 'zeek', - description: 'Client requested SOCKS address. Could be an address, a name or both. ', - name: 'zeek.socks.request.host', - type: 'keyword', - }, - 'zeek.socks.request.port': { - category: 'zeek', - description: 'Client requested port. ', - name: 'zeek.socks.request.port', - type: 'integer', - }, - 'zeek.socks.bound.host': { - category: 'zeek', - description: 'Server bound address. Could be an address, a name or both. ', - name: 'zeek.socks.bound.host', - type: 'keyword', - }, - 'zeek.socks.bound.port': { - category: 'zeek', - description: 'Server bound port. ', - name: 'zeek.socks.bound.port', - type: 'integer', - }, - 'zeek.socks.capture_password': { - category: 'zeek', - description: 'Determines if the password will be captured for this request. ', - name: 'zeek.socks.capture_password', - type: 'boolean', - }, - 'zeek.ssh.client': { - category: 'zeek', - description: "The client's version string. ", - name: 'zeek.ssh.client', - type: 'keyword', - }, - 'zeek.ssh.direction': { - category: 'zeek', - description: - 'Direction of the connection. If the client was a local host logging into an external host, this would be OUTBOUND. INBOUND would be set for the opposite situation. ', - name: 'zeek.ssh.direction', - type: 'keyword', - }, - 'zeek.ssh.host_key': { - category: 'zeek', - description: "The server's key thumbprint. ", - name: 'zeek.ssh.host_key', - type: 'keyword', - }, - 'zeek.ssh.server': { - category: 'zeek', - description: "The server's version string. ", - name: 'zeek.ssh.server', - type: 'keyword', - }, - 'zeek.ssh.version': { - category: 'zeek', - description: 'SSH major version (1 or 2). ', - name: 'zeek.ssh.version', - type: 'integer', - }, - 'zeek.ssh.algorithm.cipher': { - category: 'zeek', - description: 'The encryption algorithm in use. ', - name: 'zeek.ssh.algorithm.cipher', - type: 'keyword', - }, - 'zeek.ssh.algorithm.compression': { - category: 'zeek', - description: 'The compression algorithm in use. ', - name: 'zeek.ssh.algorithm.compression', - type: 'keyword', - }, - 'zeek.ssh.algorithm.host_key': { - category: 'zeek', - description: "The server host key's algorithm. ", - name: 'zeek.ssh.algorithm.host_key', - type: 'keyword', - }, - 'zeek.ssh.algorithm.key_exchange': { - category: 'zeek', - description: 'The key exchange algorithm in use. ', - name: 'zeek.ssh.algorithm.key_exchange', - type: 'keyword', - }, - 'zeek.ssh.algorithm.mac': { - category: 'zeek', - description: 'The signing (MAC) algorithm in use. ', - name: 'zeek.ssh.algorithm.mac', - type: 'keyword', - }, - 'zeek.ssh.auth.attempts': { - category: 'zeek', - description: - "The number of authentication attemps we observed. There's always at least one, since some servers might support no authentication at all. It's important to note that not all of these are failures, since some servers require two-factor auth (e.g. password AND pubkey). ", - name: 'zeek.ssh.auth.attempts', - type: 'integer', - }, - 'zeek.ssh.auth.success': { - category: 'zeek', - description: 'Authentication result. ', - name: 'zeek.ssh.auth.success', - type: 'boolean', - }, - 'zeek.ssl.version': { - category: 'zeek', - description: 'SSL/TLS version that was logged. ', - name: 'zeek.ssl.version', - type: 'keyword', - }, - 'zeek.ssl.cipher': { - category: 'zeek', - description: 'SSL/TLS cipher suite that was logged. ', - name: 'zeek.ssl.cipher', - type: 'keyword', - }, - 'zeek.ssl.curve': { - category: 'zeek', - description: 'Elliptic curve that was logged when using ECDH/ECDHE. ', - name: 'zeek.ssl.curve', - type: 'keyword', - }, - 'zeek.ssl.resumed': { - category: 'zeek', - description: - 'Flag to indicate if the session was resumed reusing the key material exchanged in an earlier connection. ', - name: 'zeek.ssl.resumed', - type: 'boolean', - }, - 'zeek.ssl.next_protocol': { - category: 'zeek', - description: - 'Next protocol the server chose using the application layer next protocol extension. ', - name: 'zeek.ssl.next_protocol', - type: 'keyword', - }, - 'zeek.ssl.established': { - category: 'zeek', - description: 'Flag to indicate if this ssl session has been established successfully. ', - name: 'zeek.ssl.established', - type: 'boolean', - }, - 'zeek.ssl.validation.status': { - category: 'zeek', - description: 'Result of certificate validation for this connection. ', - name: 'zeek.ssl.validation.status', - type: 'keyword', - }, - 'zeek.ssl.validation.code': { - category: 'zeek', - description: - 'Result of certificate validation for this connection, given as OpenSSL validation code. ', - name: 'zeek.ssl.validation.code', - type: 'keyword', - }, - 'zeek.ssl.last_alert': { - category: 'zeek', - description: 'Last alert that was seen during the connection. ', - name: 'zeek.ssl.last_alert', - type: 'keyword', - }, - 'zeek.ssl.server.name': { - category: 'zeek', - description: - 'Value of the Server Name Indicator SSL/TLS extension. It indicates the server name that the client was requesting. ', - name: 'zeek.ssl.server.name', - type: 'keyword', - }, - 'zeek.ssl.server.cert_chain': { - category: 'zeek', - description: - 'Chain of certificates offered by the server to validate its complete signing chain. ', - name: 'zeek.ssl.server.cert_chain', - type: 'keyword', - }, - 'zeek.ssl.server.cert_chain_fuids': { - category: 'zeek', - description: - 'An ordered vector of certificate file identifiers for the certificates offered by the server. ', - name: 'zeek.ssl.server.cert_chain_fuids', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.common_name': { - category: 'zeek', - description: 'Common name of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.common_name', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.country': { - category: 'zeek', - description: 'Country code of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.country', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.locality': { - category: 'zeek', - description: 'Locality of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.locality', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.organization': { - category: 'zeek', - description: 'Organization of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.organization', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.organizational_unit': { - category: 'zeek', - description: - 'Organizational unit of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.organizational_unit', - type: 'keyword', - }, - 'zeek.ssl.server.issuer.state': { - category: 'zeek', - description: - 'State or province name of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.state', - type: 'keyword', - }, - 'zeek.ssl.server.subject.common_name': { - category: 'zeek', - description: 'Common name of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.common_name', - type: 'keyword', - }, - 'zeek.ssl.server.subject.country': { - category: 'zeek', - description: 'Country code of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.country', - type: 'keyword', - }, - 'zeek.ssl.server.subject.locality': { - category: 'zeek', - description: 'Locality of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.locality', - type: 'keyword', - }, - 'zeek.ssl.server.subject.organization': { - category: 'zeek', - description: 'Organization of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.organization', - type: 'keyword', - }, - 'zeek.ssl.server.subject.organizational_unit': { - category: 'zeek', - description: 'Organizational unit of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.organizational_unit', - type: 'keyword', - }, - 'zeek.ssl.server.subject.state': { - category: 'zeek', - description: 'State or province name of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.state', - type: 'keyword', - }, - 'zeek.ssl.client.cert_chain': { - category: 'zeek', - description: - 'Chain of certificates offered by the client to validate its complete signing chain. ', - name: 'zeek.ssl.client.cert_chain', - type: 'keyword', - }, - 'zeek.ssl.client.cert_chain_fuids': { - category: 'zeek', - description: - 'An ordered vector of certificate file identifiers for the certificates offered by the client. ', - name: 'zeek.ssl.client.cert_chain_fuids', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.common_name': { - category: 'zeek', - description: 'Common name of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.common_name', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.country': { - category: 'zeek', - description: 'Country code of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.country', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.locality': { - category: 'zeek', - description: 'Locality of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.locality', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.organization': { - category: 'zeek', - description: 'Organization of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.organization', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.organizational_unit': { - category: 'zeek', - description: - 'Organizational unit of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.organizational_unit', - type: 'keyword', - }, - 'zeek.ssl.client.issuer.state': { - category: 'zeek', - description: - 'State or province name of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.state', - type: 'keyword', - }, - 'zeek.ssl.client.subject.common_name': { - category: 'zeek', - description: 'Common name of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.common_name', - type: 'keyword', - }, - 'zeek.ssl.client.subject.country': { - category: 'zeek', - description: 'Country code of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.country', - type: 'keyword', - }, - 'zeek.ssl.client.subject.locality': { - category: 'zeek', - description: 'Locality of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.locality', - type: 'keyword', - }, - 'zeek.ssl.client.subject.organization': { - category: 'zeek', - description: 'Organization of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.organization', - type: 'keyword', - }, - 'zeek.ssl.client.subject.organizational_unit': { - category: 'zeek', - description: 'Organizational unit of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.organizational_unit', - type: 'keyword', - }, - 'zeek.ssl.client.subject.state': { - category: 'zeek', - description: 'State or province name of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.state', - type: 'keyword', - }, - 'zeek.stats.peer': { - category: 'zeek', - description: 'Peer that generated this log. Mostly for clusters. ', - name: 'zeek.stats.peer', - type: 'keyword', - }, - 'zeek.stats.memory': { - category: 'zeek', - description: 'Amount of memory currently in use in MB. ', - name: 'zeek.stats.memory', - type: 'integer', - }, - 'zeek.stats.packets.processed': { - category: 'zeek', - description: 'Number of packets processed since the last stats interval. ', - name: 'zeek.stats.packets.processed', - type: 'long', - }, - 'zeek.stats.packets.dropped': { - category: 'zeek', - description: - 'Number of packets dropped since the last stats interval if reading live traffic. ', - name: 'zeek.stats.packets.dropped', - type: 'long', - }, - 'zeek.stats.packets.received': { - category: 'zeek', - description: - 'Number of packets seen on the link since the last stats interval if reading live traffic. ', - name: 'zeek.stats.packets.received', - type: 'long', - }, - 'zeek.stats.bytes.received': { - category: 'zeek', - description: 'Number of bytes received since the last stats interval if reading live traffic. ', - name: 'zeek.stats.bytes.received', - type: 'long', - }, - 'zeek.stats.connections.tcp.active': { - category: 'zeek', - description: 'TCP connections currently in memory. ', - name: 'zeek.stats.connections.tcp.active', - type: 'integer', - }, - 'zeek.stats.connections.tcp.count': { - category: 'zeek', - description: 'TCP connections seen since last stats interval. ', - name: 'zeek.stats.connections.tcp.count', - type: 'integer', - }, - 'zeek.stats.connections.udp.active': { - category: 'zeek', - description: 'UDP connections currently in memory. ', - name: 'zeek.stats.connections.udp.active', - type: 'integer', - }, - 'zeek.stats.connections.udp.count': { - category: 'zeek', - description: 'UDP connections seen since last stats interval. ', - name: 'zeek.stats.connections.udp.count', - type: 'integer', - }, - 'zeek.stats.connections.icmp.active': { - category: 'zeek', - description: 'ICMP connections currently in memory. ', - name: 'zeek.stats.connections.icmp.active', - type: 'integer', - }, - 'zeek.stats.connections.icmp.count': { - category: 'zeek', - description: 'ICMP connections seen since last stats interval. ', - name: 'zeek.stats.connections.icmp.count', - type: 'integer', - }, - 'zeek.stats.events.processed': { - category: 'zeek', - description: 'Number of events processed since the last stats interval. ', - name: 'zeek.stats.events.processed', - type: 'integer', - }, - 'zeek.stats.events.queued': { - category: 'zeek', - description: 'Number of events that have been queued since the last stats interval. ', - name: 'zeek.stats.events.queued', - type: 'integer', - }, - 'zeek.stats.timers.count': { - category: 'zeek', - description: 'Number of timers scheduled since last stats interval. ', - name: 'zeek.stats.timers.count', - type: 'integer', - }, - 'zeek.stats.timers.active': { - category: 'zeek', - description: 'Current number of scheduled timers. ', - name: 'zeek.stats.timers.active', - type: 'integer', - }, - 'zeek.stats.files.count': { - category: 'zeek', - description: 'Number of files seen since last stats interval. ', - name: 'zeek.stats.files.count', - type: 'integer', - }, - 'zeek.stats.files.active': { - category: 'zeek', - description: 'Current number of files actively being seen. ', - name: 'zeek.stats.files.active', - type: 'integer', - }, - 'zeek.stats.dns_requests.count': { - category: 'zeek', - description: 'Number of DNS requests seen since last stats interval. ', - name: 'zeek.stats.dns_requests.count', - type: 'integer', - }, - 'zeek.stats.dns_requests.active': { - category: 'zeek', - description: 'Current number of DNS requests awaiting a reply. ', - name: 'zeek.stats.dns_requests.active', - type: 'integer', - }, - 'zeek.stats.reassembly_size.tcp': { - category: 'zeek', - description: 'Current size of TCP data in reassembly. ', - name: 'zeek.stats.reassembly_size.tcp', - type: 'integer', - }, - 'zeek.stats.reassembly_size.file': { - category: 'zeek', - description: 'Current size of File data in reassembly. ', - name: 'zeek.stats.reassembly_size.file', - type: 'integer', - }, - 'zeek.stats.reassembly_size.frag': { - category: 'zeek', - description: 'Current size of packet fragment data in reassembly. ', - name: 'zeek.stats.reassembly_size.frag', - type: 'integer', - }, - 'zeek.stats.reassembly_size.unknown': { - category: 'zeek', - description: 'Current size of unknown data in reassembly (this is only PIA buffer right now). ', - name: 'zeek.stats.reassembly_size.unknown', - type: 'integer', - }, - 'zeek.stats.timestamp_lag': { - category: 'zeek', - description: 'Lag between the wall clock and packet timestamps if reading live traffic. ', - name: 'zeek.stats.timestamp_lag', - type: 'integer', - }, - 'zeek.syslog.facility': { - category: 'zeek', - description: 'Syslog facility for the message. ', - name: 'zeek.syslog.facility', - type: 'keyword', - }, - 'zeek.syslog.severity': { - category: 'zeek', - description: 'Syslog severity for the message. ', - name: 'zeek.syslog.severity', - type: 'keyword', - }, - 'zeek.syslog.message': { - category: 'zeek', - description: 'The plain text message. ', - name: 'zeek.syslog.message', - type: 'keyword', - }, - 'zeek.tunnel.type': { - category: 'zeek', - description: 'The type of tunnel. ', - name: 'zeek.tunnel.type', - type: 'keyword', - }, - 'zeek.tunnel.action': { - category: 'zeek', - description: 'The type of activity that occurred. ', - name: 'zeek.tunnel.action', - type: 'keyword', - }, - 'zeek.weird.name': { - category: 'zeek', - description: 'The name of the weird that occurred. ', - name: 'zeek.weird.name', - type: 'keyword', - }, - 'zeek.weird.additional_info': { - category: 'zeek', - description: 'Additional information accompanying the weird if any. ', - name: 'zeek.weird.additional_info', - type: 'keyword', - }, - 'zeek.weird.notice': { - category: 'zeek', - description: 'Indicate if this weird was also turned into a notice. ', - name: 'zeek.weird.notice', - type: 'boolean', - }, - 'zeek.weird.peer': { - category: 'zeek', - description: - 'The peer that originated this weird. This is helpful in cluster deployments if a particular cluster node is having trouble to help identify which node is having trouble. ', - name: 'zeek.weird.peer', - type: 'keyword', - }, - 'zeek.weird.identifier': { - category: 'zeek', - description: - 'This field is to be provided when a weird is generated for the purpose of deduplicating weirds. The identifier string should be unique for a single instance of the weird. This field is used to define when a weird is conceptually a duplicate of a previous weird. ', - name: 'zeek.weird.identifier', - type: 'keyword', - }, - 'zeek.x509.id': { - category: 'zeek', - description: 'File id of this certificate. ', - name: 'zeek.x509.id', - type: 'keyword', - }, - 'zeek.x509.certificate.version': { - category: 'zeek', - description: 'Version number. ', - name: 'zeek.x509.certificate.version', - type: 'integer', - }, - 'zeek.x509.certificate.serial': { - category: 'zeek', - description: 'Serial number. ', - name: 'zeek.x509.certificate.serial', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.country': { - category: 'zeek', - description: 'Country provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.country', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.common_name': { - category: 'zeek', - description: 'Common name provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.common_name', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.locality': { - category: 'zeek', - description: 'Locality provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.locality', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.organization': { - category: 'zeek', - description: 'Organization provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.organization', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.organizational_unit': { - category: 'zeek', - description: 'Organizational unit provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.organizational_unit', - type: 'keyword', - }, - 'zeek.x509.certificate.subject.state': { - category: 'zeek', - description: 'State or province provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.state', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.country': { - category: 'zeek', - description: 'Country provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.country', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.common_name': { - category: 'zeek', - description: 'Common name provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.common_name', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.locality': { - category: 'zeek', - description: 'Locality provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.locality', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.organization': { - category: 'zeek', - description: 'Organization provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.organization', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.organizational_unit': { - category: 'zeek', - description: 'Organizational unit provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.organizational_unit', - type: 'keyword', - }, - 'zeek.x509.certificate.issuer.state': { - category: 'zeek', - description: 'State or province provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.state', - type: 'keyword', - }, - 'zeek.x509.certificate.common_name': { - category: 'zeek', - description: 'Last (most specific) common name. ', - name: 'zeek.x509.certificate.common_name', - type: 'keyword', - }, - 'zeek.x509.certificate.valid.from': { - category: 'zeek', - description: 'Timestamp before when certificate is not valid. ', - name: 'zeek.x509.certificate.valid.from', - type: 'date', - }, - 'zeek.x509.certificate.valid.until': { - category: 'zeek', - description: 'Timestamp after when certificate is not valid. ', - name: 'zeek.x509.certificate.valid.until', - type: 'date', - }, - 'zeek.x509.certificate.key.algorithm': { - category: 'zeek', - description: 'Name of the key algorithm. ', - name: 'zeek.x509.certificate.key.algorithm', - type: 'keyword', - }, - 'zeek.x509.certificate.key.type': { - category: 'zeek', - description: 'Key type, if key parseable by openssl (either rsa, dsa or ec). ', - name: 'zeek.x509.certificate.key.type', - type: 'keyword', - }, - 'zeek.x509.certificate.key.length': { - category: 'zeek', - description: 'Key length in bits. ', - name: 'zeek.x509.certificate.key.length', - type: 'integer', - }, - 'zeek.x509.certificate.signature_algorithm': { - category: 'zeek', - description: 'Name of the signature algorithm. ', - name: 'zeek.x509.certificate.signature_algorithm', - type: 'keyword', - }, - 'zeek.x509.certificate.exponent': { - category: 'zeek', - description: 'Exponent, if RSA-certificate. ', - name: 'zeek.x509.certificate.exponent', - type: 'keyword', - }, - 'zeek.x509.certificate.curve': { - category: 'zeek', - description: 'Curve, if EC-certificate. ', - name: 'zeek.x509.certificate.curve', - type: 'keyword', - }, - 'zeek.x509.san.dns': { - category: 'zeek', - description: 'List of DNS entries in SAN. ', - name: 'zeek.x509.san.dns', - type: 'keyword', - }, - 'zeek.x509.san.uri': { - category: 'zeek', - description: 'List of URI entries in SAN. ', - name: 'zeek.x509.san.uri', - type: 'keyword', - }, - 'zeek.x509.san.email': { - category: 'zeek', - description: 'List of email entries in SAN. ', - name: 'zeek.x509.san.email', - type: 'keyword', - }, - 'zeek.x509.san.ip': { - category: 'zeek', - description: 'List of IP entries in SAN. ', - name: 'zeek.x509.san.ip', - type: 'ip', - }, - 'zeek.x509.san.other_fields': { - category: 'zeek', - description: 'True if the certificate contained other, not recognized or parsed name fields. ', - name: 'zeek.x509.san.other_fields', - type: 'boolean', - }, - 'zeek.x509.basic_constraints.certificate_authority': { - category: 'zeek', - description: 'CA flag set or not. ', - name: 'zeek.x509.basic_constraints.certificate_authority', - type: 'boolean', - }, - 'zeek.x509.basic_constraints.path_length': { - category: 'zeek', - description: 'Maximum path length. ', - name: 'zeek.x509.basic_constraints.path_length', - type: 'integer', - }, - 'zeek.x509.log_cert': { - category: 'zeek', - description: - 'Present if policy/protocols/ssl/log-hostcerts-only.bro is loaded Logging of certificate is suppressed if set to F. ', - name: 'zeek.x509.log_cert', - type: 'boolean', - }, - 'zookeeper.audit.session': { - category: 'zookeeper', - description: 'Client session id ', - name: 'zookeeper.audit.session', - type: 'keyword', - }, - 'zookeeper.audit.znode': { - category: 'zookeeper', - description: 'Path of the znode ', - name: 'zookeeper.audit.znode', - type: 'keyword', - }, - 'zookeeper.audit.znode_type': { - category: 'zookeeper', - description: 'Type of znode in case of creation operation ', - name: 'zookeeper.audit.znode_type', - type: 'keyword', - }, - 'zookeeper.audit.acl': { - category: 'zookeeper', - description: - 'String representation of znode ACL like cdrwa(create, delete,read, write, admin). This is logged only for setAcl operation ', - name: 'zookeeper.audit.acl', - type: 'keyword', - }, - 'zookeeper.audit.result': { - category: 'zookeeper', - description: - 'Result of the operation. Possible values are (success/failure/invoked). Result "invoked" is used for serverStop operation because stop is logged before ensuring that server actually stopped. ', - name: 'zookeeper.audit.result', - type: 'keyword', - }, - 'zookeeper.audit.user': { - category: 'zookeeper', - description: 'Comma separated list of users who are associate with a client session ', - name: 'zookeeper.audit.user', - type: 'keyword', - }, - 'zookeeper.log': { - category: 'zookeeper', - description: 'ZooKeeper logs. ', - name: 'zookeeper.log', - type: 'group', - }, - 'zoom.master_account_id': { - category: 'zoom', - description: 'Master Account related to a specific Sub Account ', - name: 'zoom.master_account_id', - type: 'keyword', - }, - 'zoom.sub_account_id': { - category: 'zoom', - description: 'Related Sub Account ', - name: 'zoom.sub_account_id', - type: 'keyword', - }, - 'zoom.operator_id': { - category: 'zoom', - description: 'UserID that triggered the event ', - name: 'zoom.operator_id', - type: 'keyword', - }, - 'zoom.operator': { - category: 'zoom', - description: 'Username/Email related to the user that triggered the event ', - name: 'zoom.operator', - type: 'keyword', - }, - 'zoom.account_id': { - category: 'zoom', - description: 'Related accountID to the event ', - name: 'zoom.account_id', - type: 'keyword', - }, - 'zoom.timestamp': { - category: 'zoom', - description: 'Timestamp related to the event ', - name: 'zoom.timestamp', - type: 'date', - }, - 'zoom.creation_type': { - category: 'zoom', - description: 'Creation type ', - name: 'zoom.creation_type', - type: 'keyword', - }, - 'zoom.account.owner_id': { - category: 'zoom', - description: 'UserID of the user whose sub account was created/disassociated ', - name: 'zoom.account.owner_id', - type: 'keyword', - }, - 'zoom.account.email': { - category: 'zoom', - description: 'Email related to the user the action was performed on ', - name: 'zoom.account.email', - type: 'keyword', - }, - 'zoom.account.owner_email': { - category: 'zoom', - description: 'Email of the user whose sub account was created/disassociated ', - name: 'zoom.account.owner_email', - type: 'keyword', - }, - 'zoom.account.account_name': { - category: 'zoom', - description: 'When an account name is updated, this is the new value set ', - name: 'zoom.account.account_name', - type: 'keyword', - }, - 'zoom.account.account_alias': { - category: 'zoom', - description: 'When an account alias is updated, this is the new value set ', - name: 'zoom.account.account_alias', - type: 'keyword', - }, - 'zoom.account.account_support_name': { - category: 'zoom', - description: 'When an account support_name is updated, this is the new value set ', - name: 'zoom.account.account_support_name', - type: 'keyword', - }, - 'zoom.account.account_support_email': { - category: 'zoom', - description: 'When an account support_email is updated, this is the new value set ', - name: 'zoom.account.account_support_email', - type: 'keyword', - }, - 'zoom.chat_channel.name': { - category: 'zoom', - description: 'The name of the channel that has been added/modified/deleted ', - name: 'zoom.chat_channel.name', - type: 'keyword', - }, - 'zoom.chat_channel.id': { - category: 'zoom', - description: 'The ID of the channel that has been added/modified/deleted ', - name: 'zoom.chat_channel.id', - type: 'keyword', - }, - 'zoom.chat_channel.type': { - category: 'zoom', - description: - 'Type of channel related to the event. Can be 1(Invite-Only), 2(Private) or 3(Public) ', - name: 'zoom.chat_channel.type', - type: 'keyword', - }, - 'zoom.chat_message.id': { - category: 'zoom', - description: 'Unique ID of the related chat message ', - name: 'zoom.chat_message.id', - type: 'keyword', - }, - 'zoom.chat_message.type': { - category: 'zoom', - description: 'Type of message, can be either "to_contact" or "to_channel" ', - name: 'zoom.chat_message.type', - type: 'keyword', - }, - 'zoom.chat_message.session_id': { - category: 'zoom', - description: 'SessionID for the channel related to the message ', - name: 'zoom.chat_message.session_id', - type: 'keyword', - }, - 'zoom.chat_message.contact_email': { - category: 'zoom', - description: 'Email address related to the user sending the message ', - name: 'zoom.chat_message.contact_email', - type: 'keyword', - }, - 'zoom.chat_message.contact_id': { - category: 'zoom', - description: 'UserID belonging to the user receiving a message ', - name: 'zoom.chat_message.contact_id', - type: 'keyword', - }, - 'zoom.chat_message.channel_id': { - category: 'zoom', - description: 'ChannelID related to the message ', - name: 'zoom.chat_message.channel_id', - type: 'keyword', - }, - 'zoom.chat_message.channel_name': { - category: 'zoom', - description: 'Channel name related to the message ', - name: 'zoom.chat_message.channel_name', - type: 'keyword', - }, - 'zoom.chat_message.message': { - category: 'zoom', - description: 'A string containing the full message that was sent ', - name: 'zoom.chat_message.message', - type: 'keyword', - }, - 'zoom.meeting.id': { - category: 'zoom', - description: 'Unique ID of the related meeting ', - name: 'zoom.meeting.id', - type: 'keyword', - }, - 'zoom.meeting.uuid': { - category: 'zoom', - description: 'The UUID of the related meeting ', - name: 'zoom.meeting.uuid', - type: 'keyword', - }, - 'zoom.meeting.host_id': { - category: 'zoom', - description: 'The UserID of the configured meeting host ', - name: 'zoom.meeting.host_id', - type: 'keyword', - }, - 'zoom.meeting.topic': { - category: 'zoom', - description: 'Topic of the related meeting ', - name: 'zoom.meeting.topic', - type: 'keyword', - }, - 'zoom.meeting.type': { - category: 'zoom', - description: 'Type of meeting created ', - name: 'zoom.meeting.type', - type: 'keyword', - }, - 'zoom.meeting.start_time': { - category: 'zoom', - description: 'Date and time the meeting started ', - name: 'zoom.meeting.start_time', - type: 'date', - }, - 'zoom.meeting.timezone': { - category: 'zoom', - description: 'Which timezone is used for the meeting timestamps ', - name: 'zoom.meeting.timezone', - type: 'keyword', - }, - 'zoom.meeting.duration': { - category: 'zoom', - description: 'The duration of a meeting in minutes ', - name: 'zoom.meeting.duration', - type: 'long', - }, - 'zoom.meeting.issues': { - category: 'zoom', - description: - 'When a user reports an issue with the meeting, for example: "Unstable audio quality" ', - name: 'zoom.meeting.issues', - type: 'keyword', - }, - 'zoom.meeting.password': { - category: 'zoom', - description: 'Password related to the meeting ', - name: 'zoom.meeting.password', - type: 'keyword', - }, - 'zoom.phone.id': { - category: 'zoom', - description: 'Unique ID for the phone or conversation ', - name: 'zoom.phone.id', - type: 'keyword', - }, - 'zoom.phone.user_id': { - category: 'zoom', - description: 'UserID for the phone owner related to a Call Log being completed ', - name: 'zoom.phone.user_id', - type: 'keyword', - }, - 'zoom.phone.download_url': { - category: 'zoom', - description: 'Download URL for the voicemail ', - name: 'zoom.phone.download_url', - type: 'keyword', - }, - 'zoom.phone.ringing_start_time': { - category: 'zoom', - description: 'The timestamp when a ringtone was established to the callee ', - name: 'zoom.phone.ringing_start_time', - type: 'date', - }, - 'zoom.phone.connected_start_time': { - category: 'zoom', - description: 'The date and time when a ringtone was established to the callee ', - name: 'zoom.phone.connected_start_time', - type: 'date', - }, - 'zoom.phone.answer_start_time': { - category: 'zoom', - description: 'The date and time when the call was answered ', - name: 'zoom.phone.answer_start_time', - type: 'date', - }, - 'zoom.phone.call_end_time': { - category: 'zoom', - description: 'The date and time when the call ended ', - name: 'zoom.phone.call_end_time', - type: 'date', - }, - 'zoom.phone.call_id': { - category: 'zoom', - description: 'Unique ID of the related call ', - name: 'zoom.phone.call_id', - type: 'keyword', - }, - 'zoom.phone.duration': { - category: 'zoom', - description: 'Duration of a voicemail in minutes ', - name: 'zoom.phone.duration', - type: 'long', - }, - 'zoom.phone.caller.id': { - category: 'zoom', - description: 'UserID of the caller related to the voicemail/call ', - name: 'zoom.phone.caller.id', - type: 'keyword', - }, - 'zoom.phone.caller.user_id': { - category: 'zoom', - description: 'UserID of the person which initiated the call ', - name: 'zoom.phone.caller.user_id', - type: 'keyword', - }, - 'zoom.phone.caller.number_type': { - category: 'zoom', - description: 'The type of number, can be 1(Internal) or 2(External) ', - name: 'zoom.phone.caller.number_type', - type: 'keyword', - }, - 'zoom.phone.caller.name': { - category: 'zoom', - description: 'The name of the related callee ', - name: 'zoom.phone.caller.name', - type: 'keyword', - }, - 'zoom.phone.caller.phone_number': { - category: 'zoom', - description: 'Phone Number of the caller related to the call ', - name: 'zoom.phone.caller.phone_number', - type: 'keyword', - }, - 'zoom.phone.caller.extension_type': { - category: 'zoom', - description: - 'Extension type of the caller number, can be user, callQueue, autoReceptionist or shareLineGroup ', - name: 'zoom.phone.caller.extension_type', - type: 'keyword', - }, - 'zoom.phone.caller.extension_number': { - category: 'zoom', - description: 'Extension number of the caller ', - name: 'zoom.phone.caller.extension_number', - type: 'keyword', - }, - 'zoom.phone.caller.timezone': { - category: 'zoom', - description: 'Timezone of the caller ', - name: 'zoom.phone.caller.timezone', - type: 'keyword', - }, - 'zoom.phone.caller.device_type': { - category: 'zoom', - description: 'Device type used by the caller ', - name: 'zoom.phone.caller.device_type', - type: 'keyword', - }, - 'zoom.phone.callee.id': { - category: 'zoom', - description: 'UserID of the callee related to the voicemail/call ', - name: 'zoom.phone.callee.id', - type: 'keyword', - }, - 'zoom.phone.callee.user_id': { - category: 'zoom', - description: 'UserID of the related callee of a voicemail/call ', - name: 'zoom.phone.callee.user_id', - type: 'keyword', - }, - 'zoom.phone.callee.name': { - category: 'zoom', - description: 'The name of the related callee ', - name: 'zoom.phone.callee.name', - type: 'keyword', - }, - 'zoom.phone.callee.number_type': { - category: 'zoom', - description: 'The type of number, can be 1(Internal) or 2(External) ', - name: 'zoom.phone.callee.number_type', - type: 'keyword', - }, - 'zoom.phone.callee.phone_number': { - category: 'zoom', - description: 'Phone Number of the callee related to the call ', - name: 'zoom.phone.callee.phone_number', - type: 'keyword', - }, - 'zoom.phone.callee.extension_type': { - category: 'zoom', - description: - 'Extension type of the callee number, can be user, callQueue, autoReceptionist or shareLineGroup ', - name: 'zoom.phone.callee.extension_type', - type: 'keyword', - }, - 'zoom.phone.callee.extension_number': { - category: 'zoom', - description: 'Extension number of the callee related to the call ', - name: 'zoom.phone.callee.extension_number', - type: 'keyword', - }, - 'zoom.phone.callee.timezone': { - category: 'zoom', - description: 'Timezone of the callee related to the call ', - name: 'zoom.phone.callee.timezone', - type: 'keyword', - }, - 'zoom.phone.callee.device_type': { - category: 'zoom', - description: 'Device type used by the callee related to the call ', - name: 'zoom.phone.callee.device_type', - type: 'keyword', - }, - 'zoom.phone.date_time': { - category: 'zoom', - description: 'Date and time of the related phone event ', - name: 'zoom.phone.date_time', - type: 'date', - }, - 'zoom.recording.id': { - category: 'zoom', - description: 'Unique ID of the related recording ', - name: 'zoom.recording.id', - type: 'keyword', - }, - 'zoom.recording.uuid': { - category: 'zoom', - description: 'UUID of the related recording ', - name: 'zoom.recording.uuid', - type: 'keyword', - }, - 'zoom.recording.host_id': { - category: 'zoom', - description: 'UserID of the host of the meeting that was recorded ', - name: 'zoom.recording.host_id', - type: 'keyword', - }, - 'zoom.recording.topic': { - category: 'zoom', - description: 'Topic of the meeting related to the recording ', - name: 'zoom.recording.topic', - type: 'keyword', - }, - 'zoom.recording.type': { - category: 'zoom', - description: - 'Type of recording, can be multiple type of values, please check Zoom documentation ', - name: 'zoom.recording.type', - type: 'keyword', - }, - 'zoom.recording.start_time': { - category: 'zoom', - description: 'The date and time when the recording started ', - name: 'zoom.recording.start_time', - type: 'date', - }, - 'zoom.recording.timezone': { - category: 'zoom', - description: 'The timezone used for the recording date ', - name: 'zoom.recording.timezone', - type: 'keyword', - }, - 'zoom.recording.duration': { - category: 'zoom', - description: 'Duration of the recording in minutes ', - name: 'zoom.recording.duration', - type: 'long', - }, - 'zoom.recording.share_url': { - category: 'zoom', - description: 'The URL to access the recording ', - name: 'zoom.recording.share_url', - type: 'keyword', - }, - 'zoom.recording.total_size': { - category: 'zoom', - description: 'Total size of the recording in bytes ', - name: 'zoom.recording.total_size', - type: 'long', - }, - 'zoom.recording.recording_count': { - category: 'zoom', - description: 'Number of recording files related to the recording ', - name: 'zoom.recording.recording_count', - type: 'long', - }, - 'zoom.recording.recording_file.recording_start': { - category: 'zoom', - description: 'The date and time the recording started ', - name: 'zoom.recording.recording_file.recording_start', - type: 'date', - }, - 'zoom.recording.recording_file.recording_end': { - category: 'zoom', - description: 'The date and time the recording finished ', - name: 'zoom.recording.recording_file.recording_end', - type: 'date', - }, - 'zoom.recording.host_email': { - category: 'zoom', - description: 'Email address of the host related to the meeting that was recorded ', - name: 'zoom.recording.host_email', - type: 'keyword', - }, - 'zoom.user.id': { - category: 'zoom', - description: 'UserID related to the user event ', - name: 'zoom.user.id', - type: 'keyword', - }, - 'zoom.user.first_name': { - category: 'zoom', - description: 'User first name related to the user event ', - name: 'zoom.user.first_name', - type: 'keyword', - }, - 'zoom.user.last_name': { - category: 'zoom', - description: 'User last name related to the user event ', - name: 'zoom.user.last_name', - type: 'keyword', - }, - 'zoom.user.email': { - category: 'zoom', - description: 'User email related to the user event ', - name: 'zoom.user.email', - type: 'keyword', - }, - 'zoom.user.type': { - category: 'zoom', - description: 'User type related to the user event ', - name: 'zoom.user.type', - type: 'keyword', - }, - 'zoom.user.phone_number': { - category: 'zoom', - description: 'User phone number related to the user event ', - name: 'zoom.user.phone_number', - type: 'keyword', - }, - 'zoom.user.phone_country': { - category: 'zoom', - description: 'User country code related to the user event ', - name: 'zoom.user.phone_country', - type: 'keyword', - }, - 'zoom.user.company': { - category: 'zoom', - description: 'User company related to the user event ', - name: 'zoom.user.company', - type: 'keyword', - }, - 'zoom.user.pmi': { - category: 'zoom', - description: 'User personal meeting ID related to the user event ', - name: 'zoom.user.pmi', - type: 'keyword', - }, - 'zoom.user.use_pmi': { - category: 'zoom', - description: 'If a user has PMI enabled ', - name: 'zoom.user.use_pmi', - type: 'boolean', - }, - 'zoom.user.pic_url': { - category: 'zoom', - description: 'Full URL to the profile picture used by the user ', - name: 'zoom.user.pic_url', - type: 'keyword', - }, - 'zoom.user.vanity_name': { - category: 'zoom', - description: 'Name of the personal meeting room related to the user event ', - name: 'zoom.user.vanity_name', - type: 'keyword', - }, - 'zoom.user.timezone': { - category: 'zoom', - description: 'Timezone configured for the user ', - name: 'zoom.user.timezone', - type: 'keyword', - }, - 'zoom.user.language': { - category: 'zoom', - description: 'Language configured for the user ', - name: 'zoom.user.language', - type: 'keyword', - }, - 'zoom.user.host_key': { - category: 'zoom', - description: 'Host key set for the user ', - name: 'zoom.user.host_key', - type: 'keyword', - }, - 'zoom.user.role': { - category: 'zoom', - description: 'The configured role for the user ', - name: 'zoom.user.role', - type: 'keyword', - }, - 'zoom.user.dept': { - category: 'zoom', - description: 'The configured departement for the user ', - name: 'zoom.user.dept', - type: 'keyword', - }, - 'zoom.user.presence_status': { - category: 'zoom', - description: 'Current presence status of user ', - name: 'zoom.user.presence_status', - type: 'keyword', - }, - 'zoom.user.personal_notes': { - category: 'zoom', - description: 'Personal notes for the User ', - name: 'zoom.user.personal_notes', - type: 'keyword', - }, - 'zoom.user.client_type': { - category: 'zoom', - description: 'Type of client used by the user. Can be browser, mac, win, iphone or android ', - name: 'zoom.user.client_type', - type: 'keyword', - }, - 'zoom.user.version': { - category: 'zoom', - description: 'Version of the client used by the user ', - name: 'zoom.user.version', - type: 'keyword', - }, - 'zoom.webinar.id': { - category: 'zoom', - description: 'Unique ID for the related webinar ', - name: 'zoom.webinar.id', - type: 'keyword', - }, - 'zoom.webinar.join_url': { - category: 'zoom', - description: 'The URL configured to join the webinar ', - name: 'zoom.webinar.join_url', - type: 'keyword', - }, - 'zoom.webinar.uuid': { - category: 'zoom', - description: 'UUID for the related webinar ', - name: 'zoom.webinar.uuid', - type: 'keyword', - }, - 'zoom.webinar.host_id': { - category: 'zoom', - description: 'UserID for the configured host of the webinar ', - name: 'zoom.webinar.host_id', - type: 'keyword', - }, - 'zoom.webinar.topic': { - category: 'zoom', - description: 'Meeting topic of the related webinar ', - name: 'zoom.webinar.topic', - type: 'keyword', - }, - 'zoom.webinar.type': { - category: 'zoom', - description: - 'Type of webinar created. Can be either 5(Webinar), 6(Recurring webinar without fixed time) or 9(Recurring webinar with fixed time) ', - name: 'zoom.webinar.type', - type: 'keyword', - }, - 'zoom.webinar.start_time': { - category: 'zoom', - description: 'The date and time when the webinar started ', - name: 'zoom.webinar.start_time', - type: 'date', - }, - 'zoom.webinar.timezone': { - category: 'zoom', - description: 'Timezone used for the dates related to the webinar ', - name: 'zoom.webinar.timezone', - type: 'keyword', - }, - 'zoom.webinar.duration': { - category: 'zoom', - description: 'Duration of the webinar in minutes ', - name: 'zoom.webinar.duration', - type: 'long', - }, - 'zoom.webinar.agenda': { - category: 'zoom', - description: 'The configured agenda of the webinar ', - name: 'zoom.webinar.agenda', - type: 'keyword', - }, - 'zoom.webinar.password': { - category: 'zoom', - description: 'Password configured to access the webinar ', - name: 'zoom.webinar.password', - type: 'keyword', - }, - 'zoom.webinar.issues': { - category: 'zoom', - description: 'Any reported issues about a webinar is reported in this field ', - name: 'zoom.webinar.issues', - type: 'keyword', - }, - 'zoom.zoomroom.id': { - category: 'zoom', - description: 'Unique ID of the Zoom room ', - name: 'zoom.zoomroom.id', - type: 'keyword', - }, - 'zoom.zoomroom.room_name': { - category: 'zoom', - description: 'The configured name of the Zoom room ', - name: 'zoom.zoomroom.room_name', - type: 'keyword', - }, - 'zoom.zoomroom.calendar_name': { - category: 'zoom', - description: 'Calendar name of the Zoom room ', - name: 'zoom.zoomroom.calendar_name', - type: 'keyword', - }, - 'zoom.zoomroom.calendar_id': { - category: 'zoom', - description: 'Unique ID of the calendar used by the Zoom room ', - name: 'zoom.zoomroom.calendar_id', - type: 'keyword', - }, - 'zoom.zoomroom.event_id': { - category: 'zoom', - description: 'Unique ID of the calendar event associated with the Zoom Room ', - name: 'zoom.zoomroom.event_id', - type: 'keyword', - }, - 'zoom.zoomroom.change_key': { - category: 'zoom', - description: - 'Key used by Microsoft products integration that represents a specific version of a calendar ', - name: 'zoom.zoomroom.change_key', - type: 'keyword', - }, - 'zoom.zoomroom.resource_email': { - category: 'zoom', - description: 'Email address associated with the calendar in use by the Zoom room ', - name: 'zoom.zoomroom.resource_email', - type: 'keyword', - }, - 'zoom.zoomroom.email': { - category: 'zoom', - description: 'Email address associated with the Zoom room itself ', - name: 'zoom.zoomroom.email', - type: 'keyword', - }, - 'zoom.zoomroom.issue': { - category: 'zoom', - description: 'Any reported alerts or issues related to the Zoom room or its equipment ', - name: 'zoom.zoomroom.issue', - type: 'keyword', - }, - 'zoom.zoomroom.alert_type': { - category: 'zoom', - description: - 'An integer value representing the type of alert. The list of alert types can be found in the Zoom documentation ', - name: 'zoom.zoomroom.alert_type', - type: 'keyword', - }, - 'zoom.zoomroom.component': { - category: 'zoom', - description: - 'An integer value representing the type of equipment or component, The list of component types can be found in the Zoom documentation ', - name: 'zoom.zoomroom.component', - type: 'keyword', - }, - 'zoom.zoomroom.alert_kind': { - category: 'zoom', - description: - 'An integer value showing if the Zoom room alert has been either 1(Triggered) or 2(Cleared) ', - name: 'zoom.zoomroom.alert_kind', - type: 'keyword', - }, - 'zoom.registrant.id': { - category: 'zoom', - description: 'Unique ID of the user registering to a meeting or webinar ', - name: 'zoom.registrant.id', - type: 'keyword', - }, - 'zoom.registrant.status': { - category: 'zoom', - description: 'Status of the specific user registration ', - name: 'zoom.registrant.status', - type: 'keyword', - }, - 'zoom.registrant.email': { - category: 'zoom', - description: 'Email of the user registering to a meeting or webinar ', - name: 'zoom.registrant.email', - type: 'keyword', - }, - 'zoom.registrant.first_name': { - category: 'zoom', - description: 'First name of the user registering to a meeting or webinar ', - name: 'zoom.registrant.first_name', - type: 'keyword', - }, - 'zoom.registrant.last_name': { - category: 'zoom', - description: 'Last name of the user registering to a meeting or webinar ', - name: 'zoom.registrant.last_name', - type: 'keyword', - }, - 'zoom.registrant.address': { - category: 'zoom', - description: 'Address of the user registering to a meeting or webinar ', - name: 'zoom.registrant.address', - type: 'keyword', - }, - 'zoom.registrant.city': { - category: 'zoom', - description: 'City of the user registering to a meeting or webinar ', - name: 'zoom.registrant.city', - type: 'keyword', - }, - 'zoom.registrant.country': { - category: 'zoom', - description: 'Country of the user registering to a meeting or webinar ', - name: 'zoom.registrant.country', - type: 'keyword', - }, - 'zoom.registrant.zip': { - category: 'zoom', - description: 'Zip code of the user registering to a meeting or webinar ', - name: 'zoom.registrant.zip', - type: 'keyword', - }, - 'zoom.registrant.state': { - category: 'zoom', - description: 'State of the user registering to a meeting or webinar ', - name: 'zoom.registrant.state', - type: 'keyword', - }, - 'zoom.registrant.phone': { - category: 'zoom', - description: 'Phone number of the user registering to a meeting or webinar ', - name: 'zoom.registrant.phone', - type: 'keyword', - }, - 'zoom.registrant.industry': { - category: 'zoom', - description: 'Related industry of the user registering to a meeting or webinar ', - name: 'zoom.registrant.industry', - type: 'keyword', - }, - 'zoom.registrant.org': { - category: 'zoom', - description: 'Organization related to the user registering to a meeting or webinar ', - name: 'zoom.registrant.org', - type: 'keyword', - }, - 'zoom.registrant.job_title': { - category: 'zoom', - description: 'Job title of the user registering to a meeting or webinar ', - name: 'zoom.registrant.job_title', - type: 'keyword', - }, - 'zoom.registrant.purchasing_time_frame': { - category: 'zoom', - description: 'Choosen purchase timeframe of the user registering to a meeting or webinar ', - name: 'zoom.registrant.purchasing_time_frame', - type: 'keyword', - }, - 'zoom.registrant.role_in_purchase_process': { - category: 'zoom', - description: - 'Choosen role in a purchase process related to the user registering to a meeting or webinar ', - name: 'zoom.registrant.role_in_purchase_process', - type: 'keyword', - }, - 'zoom.registrant.no_of_employees': { - category: 'zoom', - description: 'Number of employees choosen by the user registering to a meeting or webinar ', - name: 'zoom.registrant.no_of_employees', - type: 'keyword', - }, - 'zoom.registrant.comments': { - category: 'zoom', - description: 'Comments left by the user registering to a meeting or webinar ', - name: 'zoom.registrant.comments', - type: 'keyword', - }, - 'zoom.registrant.join_url': { - category: 'zoom', - description: 'The URL that the registrant can use to join the webinar ', - name: 'zoom.registrant.join_url', - type: 'keyword', - }, - 'zoom.participant.id': { - category: 'zoom', - description: 'Unique ID of the participant related to a meeting ', - name: 'zoom.participant.id', - type: 'keyword', - }, - 'zoom.participant.user_id': { - category: 'zoom', - description: 'UserID of the participant related to a meeting ', - name: 'zoom.participant.user_id', - type: 'keyword', - }, - 'zoom.participant.user_name': { - category: 'zoom', - description: 'Username of the participant related to a meeting ', - name: 'zoom.participant.user_name', - type: 'keyword', - }, - 'zoom.participant.join_time': { - category: 'zoom', - description: 'The date and time a participant joined a meeting ', - name: 'zoom.participant.join_time', - type: 'date', - }, - 'zoom.participant.leave_time': { - category: 'zoom', - description: 'The date and time a participant left a meeting ', - name: 'zoom.participant.leave_time', - type: 'date', - }, - 'zoom.participant.sharing_details.link_source': { - category: 'zoom', - description: 'Method of sharing with dropbox integration ', - name: 'zoom.participant.sharing_details.link_source', - type: 'keyword', - }, - 'zoom.participant.sharing_details.content': { - category: 'zoom', - description: 'Type of content that was shared ', - name: 'zoom.participant.sharing_details.content', - type: 'keyword', - }, - 'zoom.participant.sharing_details.file_link': { - category: 'zoom', - description: 'The file link that was shared ', - name: 'zoom.participant.sharing_details.file_link', - type: 'keyword', - }, - 'zoom.participant.sharing_details.date_time': { - category: 'zoom', - description: 'Timestamp the sharing started ', - name: 'zoom.participant.sharing_details.date_time', - type: 'keyword', - }, - 'zoom.participant.sharing_details.source': { - category: 'zoom', - description: 'The file source that was share ', - name: 'zoom.participant.sharing_details.source', - type: 'keyword', - }, - 'zoom.old_values': { - category: 'zoom', - description: - 'Includes the old values when updating a object like user, meeting, account or webinar ', - name: 'zoom.old_values', - type: 'flattened', - }, - 'zoom.settings': { - category: 'zoom', - description: - 'The current active settings related to a object like user, meeting, account or webinar ', - name: 'zoom.settings', - type: 'flattened', - }, - 'aws-cloudwatch.log_group': { - category: 'aws-cloudwatch', - description: 'The name of the log group to which this event belongs.', - name: 'aws-cloudwatch.log_group', - type: 'keyword', - }, - 'aws-cloudwatch.log_stream': { - category: 'aws-cloudwatch', - description: 'The name of the log stream to which this event belongs.', - name: 'aws-cloudwatch.log_stream', - type: 'keyword', - }, - 'aws-cloudwatch.ingestion_time': { - category: 'aws-cloudwatch', - description: 'The time the event was ingested in AWS CloudWatch.', - name: 'aws-cloudwatch.ingestion_time', - type: 'keyword', - }, - 'bucket.name': { - category: 'bucket', - description: 'Name of the S3 bucket that this log retrieved from. ', - name: 'bucket.name', - type: 'keyword', - }, - 'bucket.arn': { - category: 'bucket', - description: 'ARN of the S3 bucket that this log retrieved from. ', - name: 'bucket.arn', - type: 'keyword', - }, - 'object.key': { - category: 'object', - description: 'Name of the S3 object that this log retrieved from. ', - name: 'object.key', - type: 'keyword', - }, - metadata: { - category: 'base', - description: 'AWS S3 object metadata values.', - name: 'metadata', - type: 'flattened', - }, - 'netflow.type': { - category: 'netflow', - description: 'The type of NetFlow record described by this event. ', - name: 'netflow.type', - type: 'keyword', - }, - 'netflow.exporter.address': { - category: 'netflow', - description: "Exporter's network address in IP:port format. ", - name: 'netflow.exporter.address', - type: 'keyword', - }, - 'netflow.exporter.source_id': { - category: 'netflow', - description: 'Observation domain ID to which this record belongs. ', - name: 'netflow.exporter.source_id', - type: 'long', - }, - 'netflow.exporter.timestamp': { - category: 'netflow', - description: 'Time and date of export. ', - name: 'netflow.exporter.timestamp', - type: 'date', - }, - 'netflow.exporter.uptime_millis': { - category: 'netflow', - description: 'How long the exporter process has been running, in milliseconds. ', - name: 'netflow.exporter.uptime_millis', - type: 'long', - }, - 'netflow.exporter.version': { - category: 'netflow', - description: 'NetFlow version used. ', - name: 'netflow.exporter.version', - type: 'integer', - }, - 'netflow.octet_delta_count': { - category: 'netflow', - name: 'netflow.octet_delta_count', - type: 'long', - }, - 'netflow.packet_delta_count': { - category: 'netflow', - name: 'netflow.packet_delta_count', - type: 'long', - }, - 'netflow.delta_flow_count': { - category: 'netflow', - name: 'netflow.delta_flow_count', - type: 'long', - }, - 'netflow.protocol_identifier': { - category: 'netflow', - name: 'netflow.protocol_identifier', - type: 'short', - }, - 'netflow.ip_class_of_service': { - category: 'netflow', - name: 'netflow.ip_class_of_service', - type: 'short', - }, - 'netflow.tcp_control_bits': { - category: 'netflow', - name: 'netflow.tcp_control_bits', - type: 'integer', - }, - 'netflow.source_transport_port': { - category: 'netflow', - name: 'netflow.source_transport_port', - type: 'integer', - }, - 'netflow.source_ipv4_address': { - category: 'netflow', - name: 'netflow.source_ipv4_address', - type: 'ip', - }, - 'netflow.source_ipv4_prefix_length': { - category: 'netflow', - name: 'netflow.source_ipv4_prefix_length', - type: 'short', - }, - 'netflow.ingress_interface': { - category: 'netflow', - name: 'netflow.ingress_interface', - type: 'long', - }, - 'netflow.destination_transport_port': { - category: 'netflow', - name: 'netflow.destination_transport_port', - type: 'integer', - }, - 'netflow.destination_ipv4_address': { - category: 'netflow', - name: 'netflow.destination_ipv4_address', - type: 'ip', - }, - 'netflow.destination_ipv4_prefix_length': { - category: 'netflow', - name: 'netflow.destination_ipv4_prefix_length', - type: 'short', - }, - 'netflow.egress_interface': { - category: 'netflow', - name: 'netflow.egress_interface', - type: 'long', - }, - 'netflow.ip_next_hop_ipv4_address': { - category: 'netflow', - name: 'netflow.ip_next_hop_ipv4_address', - type: 'ip', - }, - 'netflow.bgp_source_as_number': { - category: 'netflow', - name: 'netflow.bgp_source_as_number', - type: 'long', - }, - 'netflow.bgp_destination_as_number': { - category: 'netflow', - name: 'netflow.bgp_destination_as_number', - type: 'long', - }, - 'netflow.bgp_next_hop_ipv4_address': { - category: 'netflow', - name: 'netflow.bgp_next_hop_ipv4_address', - type: 'ip', - }, - 'netflow.post_mcast_packet_delta_count': { - category: 'netflow', - name: 'netflow.post_mcast_packet_delta_count', - type: 'long', - }, - 'netflow.post_mcast_octet_delta_count': { - category: 'netflow', - name: 'netflow.post_mcast_octet_delta_count', - type: 'long', - }, - 'netflow.flow_end_sys_up_time': { - category: 'netflow', - name: 'netflow.flow_end_sys_up_time', - type: 'long', - }, - 'netflow.flow_start_sys_up_time': { - category: 'netflow', - name: 'netflow.flow_start_sys_up_time', - type: 'long', - }, - 'netflow.post_octet_delta_count': { - category: 'netflow', - name: 'netflow.post_octet_delta_count', - type: 'long', - }, - 'netflow.post_packet_delta_count': { - category: 'netflow', - name: 'netflow.post_packet_delta_count', - type: 'long', - }, - 'netflow.minimum_ip_total_length': { - category: 'netflow', - name: 'netflow.minimum_ip_total_length', - type: 'long', - }, - 'netflow.maximum_ip_total_length': { - category: 'netflow', - name: 'netflow.maximum_ip_total_length', - type: 'long', - }, - 'netflow.source_ipv6_address': { - category: 'netflow', - name: 'netflow.source_ipv6_address', - type: 'ip', - }, - 'netflow.destination_ipv6_address': { - category: 'netflow', - name: 'netflow.destination_ipv6_address', - type: 'ip', - }, - 'netflow.source_ipv6_prefix_length': { - category: 'netflow', - name: 'netflow.source_ipv6_prefix_length', - type: 'short', - }, - 'netflow.destination_ipv6_prefix_length': { - category: 'netflow', - name: 'netflow.destination_ipv6_prefix_length', - type: 'short', - }, - 'netflow.flow_label_ipv6': { - category: 'netflow', - name: 'netflow.flow_label_ipv6', - type: 'long', - }, - 'netflow.icmp_type_code_ipv4': { - category: 'netflow', - name: 'netflow.icmp_type_code_ipv4', - type: 'integer', - }, - 'netflow.igmp_type': { - category: 'netflow', - name: 'netflow.igmp_type', - type: 'short', - }, - 'netflow.sampling_interval': { - category: 'netflow', - name: 'netflow.sampling_interval', - type: 'long', - }, - 'netflow.sampling_algorithm': { - category: 'netflow', - name: 'netflow.sampling_algorithm', - type: 'short', - }, - 'netflow.flow_active_timeout': { - category: 'netflow', - name: 'netflow.flow_active_timeout', - type: 'integer', - }, - 'netflow.flow_idle_timeout': { - category: 'netflow', - name: 'netflow.flow_idle_timeout', - type: 'integer', - }, - 'netflow.engine_type': { - category: 'netflow', - name: 'netflow.engine_type', - type: 'short', - }, - 'netflow.engine_id': { - category: 'netflow', - name: 'netflow.engine_id', - type: 'short', - }, - 'netflow.exported_octet_total_count': { - category: 'netflow', - name: 'netflow.exported_octet_total_count', - type: 'long', - }, - 'netflow.exported_message_total_count': { - category: 'netflow', - name: 'netflow.exported_message_total_count', - type: 'long', - }, - 'netflow.exported_flow_record_total_count': { - category: 'netflow', - name: 'netflow.exported_flow_record_total_count', - type: 'long', - }, - 'netflow.ipv4_router_sc': { - category: 'netflow', - name: 'netflow.ipv4_router_sc', - type: 'ip', - }, - 'netflow.source_ipv4_prefix': { - category: 'netflow', - name: 'netflow.source_ipv4_prefix', - type: 'ip', - }, - 'netflow.destination_ipv4_prefix': { - category: 'netflow', - name: 'netflow.destination_ipv4_prefix', - type: 'ip', - }, - 'netflow.mpls_top_label_type': { - category: 'netflow', - name: 'netflow.mpls_top_label_type', - type: 'short', - }, - 'netflow.mpls_top_label_ipv4_address': { - category: 'netflow', - name: 'netflow.mpls_top_label_ipv4_address', - type: 'ip', - }, - 'netflow.sampler_id': { - category: 'netflow', - name: 'netflow.sampler_id', - type: 'short', - }, - 'netflow.sampler_mode': { - category: 'netflow', - name: 'netflow.sampler_mode', - type: 'short', - }, - 'netflow.sampler_random_interval': { - category: 'netflow', - name: 'netflow.sampler_random_interval', - type: 'long', - }, - 'netflow.class_id': { - category: 'netflow', - name: 'netflow.class_id', - type: 'long', - }, - 'netflow.minimum_ttl': { - category: 'netflow', - name: 'netflow.minimum_ttl', - type: 'short', - }, - 'netflow.maximum_ttl': { - category: 'netflow', - name: 'netflow.maximum_ttl', - type: 'short', - }, - 'netflow.fragment_identification': { - category: 'netflow', - name: 'netflow.fragment_identification', - type: 'long', - }, - 'netflow.post_ip_class_of_service': { - category: 'netflow', - name: 'netflow.post_ip_class_of_service', - type: 'short', - }, - 'netflow.source_mac_address': { - category: 'netflow', - name: 'netflow.source_mac_address', - type: 'keyword', - }, - 'netflow.post_destination_mac_address': { - category: 'netflow', - name: 'netflow.post_destination_mac_address', - type: 'keyword', - }, - 'netflow.vlan_id': { - category: 'netflow', - name: 'netflow.vlan_id', - type: 'integer', - }, - 'netflow.post_vlan_id': { - category: 'netflow', - name: 'netflow.post_vlan_id', - type: 'integer', - }, - 'netflow.ip_version': { - category: 'netflow', - name: 'netflow.ip_version', - type: 'short', - }, - 'netflow.flow_direction': { - category: 'netflow', - name: 'netflow.flow_direction', - type: 'short', - }, - 'netflow.ip_next_hop_ipv6_address': { - category: 'netflow', - name: 'netflow.ip_next_hop_ipv6_address', - type: 'ip', - }, - 'netflow.bgp_next_hop_ipv6_address': { - category: 'netflow', - name: 'netflow.bgp_next_hop_ipv6_address', - type: 'ip', - }, - 'netflow.ipv6_extension_headers': { - category: 'netflow', - name: 'netflow.ipv6_extension_headers', - type: 'long', - }, - 'netflow.mpls_top_label_stack_section': { - category: 'netflow', - name: 'netflow.mpls_top_label_stack_section', - type: 'short', - }, - 'netflow.mpls_label_stack_section2': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section2', - type: 'short', - }, - 'netflow.mpls_label_stack_section3': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section3', - type: 'short', - }, - 'netflow.mpls_label_stack_section4': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section4', - type: 'short', - }, - 'netflow.mpls_label_stack_section5': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section5', - type: 'short', - }, - 'netflow.mpls_label_stack_section6': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section6', - type: 'short', - }, - 'netflow.mpls_label_stack_section7': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section7', - type: 'short', - }, - 'netflow.mpls_label_stack_section8': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section8', - type: 'short', - }, - 'netflow.mpls_label_stack_section9': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section9', - type: 'short', - }, - 'netflow.mpls_label_stack_section10': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section10', - type: 'short', - }, - 'netflow.destination_mac_address': { - category: 'netflow', - name: 'netflow.destination_mac_address', - type: 'keyword', - }, - 'netflow.post_source_mac_address': { - category: 'netflow', - name: 'netflow.post_source_mac_address', - type: 'keyword', - }, - 'netflow.interface_name': { - category: 'netflow', - name: 'netflow.interface_name', - type: 'keyword', - }, - 'netflow.interface_description': { - category: 'netflow', - name: 'netflow.interface_description', - type: 'keyword', - }, - 'netflow.sampler_name': { - category: 'netflow', - name: 'netflow.sampler_name', - type: 'keyword', - }, - 'netflow.octet_total_count': { - category: 'netflow', - name: 'netflow.octet_total_count', - type: 'long', - }, - 'netflow.packet_total_count': { - category: 'netflow', - name: 'netflow.packet_total_count', - type: 'long', - }, - 'netflow.flags_and_sampler_id': { - category: 'netflow', - name: 'netflow.flags_and_sampler_id', - type: 'long', - }, - 'netflow.fragment_offset': { - category: 'netflow', - name: 'netflow.fragment_offset', - type: 'integer', - }, - 'netflow.forwarding_status': { - category: 'netflow', - name: 'netflow.forwarding_status', - type: 'short', - }, - 'netflow.mpls_vpn_route_distinguisher': { - category: 'netflow', - name: 'netflow.mpls_vpn_route_distinguisher', - type: 'short', - }, - 'netflow.mpls_top_label_prefix_length': { - category: 'netflow', - name: 'netflow.mpls_top_label_prefix_length', - type: 'short', - }, - 'netflow.src_traffic_index': { - category: 'netflow', - name: 'netflow.src_traffic_index', - type: 'long', - }, - 'netflow.dst_traffic_index': { - category: 'netflow', - name: 'netflow.dst_traffic_index', - type: 'long', - }, - 'netflow.application_description': { - category: 'netflow', - name: 'netflow.application_description', - type: 'keyword', - }, - 'netflow.application_id': { - category: 'netflow', - name: 'netflow.application_id', - type: 'short', - }, - 'netflow.application_name': { - category: 'netflow', - name: 'netflow.application_name', - type: 'keyword', - }, - 'netflow.post_ip_diff_serv_code_point': { - category: 'netflow', - name: 'netflow.post_ip_diff_serv_code_point', - type: 'short', - }, - 'netflow.multicast_replication_factor': { - category: 'netflow', - name: 'netflow.multicast_replication_factor', - type: 'long', - }, - 'netflow.class_name': { - category: 'netflow', - name: 'netflow.class_name', - type: 'keyword', - }, - 'netflow.classification_engine_id': { - category: 'netflow', - name: 'netflow.classification_engine_id', - type: 'short', - }, - 'netflow.layer2packet_section_offset': { - category: 'netflow', - name: 'netflow.layer2packet_section_offset', - type: 'integer', - }, - 'netflow.layer2packet_section_size': { - category: 'netflow', - name: 'netflow.layer2packet_section_size', - type: 'integer', - }, - 'netflow.layer2packet_section_data': { - category: 'netflow', - name: 'netflow.layer2packet_section_data', - type: 'short', - }, - 'netflow.bgp_next_adjacent_as_number': { - category: 'netflow', - name: 'netflow.bgp_next_adjacent_as_number', - type: 'long', - }, - 'netflow.bgp_prev_adjacent_as_number': { - category: 'netflow', - name: 'netflow.bgp_prev_adjacent_as_number', - type: 'long', - }, - 'netflow.exporter_ipv4_address': { - category: 'netflow', - name: 'netflow.exporter_ipv4_address', - type: 'ip', - }, - 'netflow.exporter_ipv6_address': { - category: 'netflow', - name: 'netflow.exporter_ipv6_address', - type: 'ip', - }, - 'netflow.dropped_octet_delta_count': { - category: 'netflow', - name: 'netflow.dropped_octet_delta_count', - type: 'long', - }, - 'netflow.dropped_packet_delta_count': { - category: 'netflow', - name: 'netflow.dropped_packet_delta_count', - type: 'long', - }, - 'netflow.dropped_octet_total_count': { - category: 'netflow', - name: 'netflow.dropped_octet_total_count', - type: 'long', - }, - 'netflow.dropped_packet_total_count': { - category: 'netflow', - name: 'netflow.dropped_packet_total_count', - type: 'long', - }, - 'netflow.flow_end_reason': { - category: 'netflow', - name: 'netflow.flow_end_reason', - type: 'short', - }, - 'netflow.common_properties_id': { - category: 'netflow', - name: 'netflow.common_properties_id', - type: 'long', - }, - 'netflow.observation_point_id': { - category: 'netflow', - name: 'netflow.observation_point_id', - type: 'long', - }, - 'netflow.icmp_type_code_ipv6': { - category: 'netflow', - name: 'netflow.icmp_type_code_ipv6', - type: 'integer', - }, - 'netflow.mpls_top_label_ipv6_address': { - category: 'netflow', - name: 'netflow.mpls_top_label_ipv6_address', - type: 'ip', - }, - 'netflow.line_card_id': { - category: 'netflow', - name: 'netflow.line_card_id', - type: 'long', - }, - 'netflow.port_id': { - category: 'netflow', - name: 'netflow.port_id', - type: 'long', - }, - 'netflow.metering_process_id': { - category: 'netflow', - name: 'netflow.metering_process_id', - type: 'long', - }, - 'netflow.exporting_process_id': { - category: 'netflow', - name: 'netflow.exporting_process_id', - type: 'long', - }, - 'netflow.template_id': { - category: 'netflow', - name: 'netflow.template_id', - type: 'integer', - }, - 'netflow.wlan_channel_id': { - category: 'netflow', - name: 'netflow.wlan_channel_id', - type: 'short', - }, - 'netflow.wlan_ssid': { - category: 'netflow', - name: 'netflow.wlan_ssid', - type: 'keyword', - }, - 'netflow.flow_id': { - category: 'netflow', - name: 'netflow.flow_id', - type: 'long', - }, - 'netflow.observation_domain_id': { - category: 'netflow', - name: 'netflow.observation_domain_id', - type: 'long', - }, - 'netflow.flow_start_seconds': { - category: 'netflow', - name: 'netflow.flow_start_seconds', - type: 'date', - }, - 'netflow.flow_end_seconds': { - category: 'netflow', - name: 'netflow.flow_end_seconds', - type: 'date', - }, - 'netflow.flow_start_milliseconds': { - category: 'netflow', - name: 'netflow.flow_start_milliseconds', - type: 'date', - }, - 'netflow.flow_end_milliseconds': { - category: 'netflow', - name: 'netflow.flow_end_milliseconds', - type: 'date', - }, - 'netflow.flow_start_microseconds': { - category: 'netflow', - name: 'netflow.flow_start_microseconds', - type: 'date', - }, - 'netflow.flow_end_microseconds': { - category: 'netflow', - name: 'netflow.flow_end_microseconds', - type: 'date', - }, - 'netflow.flow_start_nanoseconds': { - category: 'netflow', - name: 'netflow.flow_start_nanoseconds', - type: 'date', - }, - 'netflow.flow_end_nanoseconds': { - category: 'netflow', - name: 'netflow.flow_end_nanoseconds', - type: 'date', - }, - 'netflow.flow_start_delta_microseconds': { - category: 'netflow', - name: 'netflow.flow_start_delta_microseconds', - type: 'long', - }, - 'netflow.flow_end_delta_microseconds': { - category: 'netflow', - name: 'netflow.flow_end_delta_microseconds', - type: 'long', - }, - 'netflow.system_init_time_milliseconds': { - category: 'netflow', - name: 'netflow.system_init_time_milliseconds', - type: 'date', - }, - 'netflow.flow_duration_milliseconds': { - category: 'netflow', - name: 'netflow.flow_duration_milliseconds', - type: 'long', - }, - 'netflow.flow_duration_microseconds': { - category: 'netflow', - name: 'netflow.flow_duration_microseconds', - type: 'long', - }, - 'netflow.observed_flow_total_count': { - category: 'netflow', - name: 'netflow.observed_flow_total_count', - type: 'long', - }, - 'netflow.ignored_packet_total_count': { - category: 'netflow', - name: 'netflow.ignored_packet_total_count', - type: 'long', - }, - 'netflow.ignored_octet_total_count': { - category: 'netflow', - name: 'netflow.ignored_octet_total_count', - type: 'long', - }, - 'netflow.not_sent_flow_total_count': { - category: 'netflow', - name: 'netflow.not_sent_flow_total_count', - type: 'long', - }, - 'netflow.not_sent_packet_total_count': { - category: 'netflow', - name: 'netflow.not_sent_packet_total_count', - type: 'long', - }, - 'netflow.not_sent_octet_total_count': { - category: 'netflow', - name: 'netflow.not_sent_octet_total_count', - type: 'long', - }, - 'netflow.destination_ipv6_prefix': { - category: 'netflow', - name: 'netflow.destination_ipv6_prefix', - type: 'ip', - }, - 'netflow.source_ipv6_prefix': { - category: 'netflow', - name: 'netflow.source_ipv6_prefix', - type: 'ip', - }, - 'netflow.post_octet_total_count': { - category: 'netflow', - name: 'netflow.post_octet_total_count', - type: 'long', - }, - 'netflow.post_packet_total_count': { - category: 'netflow', - name: 'netflow.post_packet_total_count', - type: 'long', - }, - 'netflow.flow_key_indicator': { - category: 'netflow', - name: 'netflow.flow_key_indicator', - type: 'long', - }, - 'netflow.post_mcast_packet_total_count': { - category: 'netflow', - name: 'netflow.post_mcast_packet_total_count', - type: 'long', - }, - 'netflow.post_mcast_octet_total_count': { - category: 'netflow', - name: 'netflow.post_mcast_octet_total_count', - type: 'long', - }, - 'netflow.icmp_type_ipv4': { - category: 'netflow', - name: 'netflow.icmp_type_ipv4', - type: 'short', - }, - 'netflow.icmp_code_ipv4': { - category: 'netflow', - name: 'netflow.icmp_code_ipv4', - type: 'short', - }, - 'netflow.icmp_type_ipv6': { - category: 'netflow', - name: 'netflow.icmp_type_ipv6', - type: 'short', - }, - 'netflow.icmp_code_ipv6': { - category: 'netflow', - name: 'netflow.icmp_code_ipv6', - type: 'short', - }, - 'netflow.udp_source_port': { - category: 'netflow', - name: 'netflow.udp_source_port', - type: 'integer', - }, - 'netflow.udp_destination_port': { - category: 'netflow', - name: 'netflow.udp_destination_port', - type: 'integer', - }, - 'netflow.tcp_source_port': { - category: 'netflow', - name: 'netflow.tcp_source_port', - type: 'integer', - }, - 'netflow.tcp_destination_port': { - category: 'netflow', - name: 'netflow.tcp_destination_port', - type: 'integer', - }, - 'netflow.tcp_sequence_number': { - category: 'netflow', - name: 'netflow.tcp_sequence_number', - type: 'long', - }, - 'netflow.tcp_acknowledgement_number': { - category: 'netflow', - name: 'netflow.tcp_acknowledgement_number', - type: 'long', - }, - 'netflow.tcp_window_size': { - category: 'netflow', - name: 'netflow.tcp_window_size', - type: 'integer', - }, - 'netflow.tcp_urgent_pointer': { - category: 'netflow', - name: 'netflow.tcp_urgent_pointer', - type: 'integer', - }, - 'netflow.tcp_header_length': { - category: 'netflow', - name: 'netflow.tcp_header_length', - type: 'short', - }, - 'netflow.ip_header_length': { - category: 'netflow', - name: 'netflow.ip_header_length', - type: 'short', - }, - 'netflow.total_length_ipv4': { - category: 'netflow', - name: 'netflow.total_length_ipv4', - type: 'integer', - }, - 'netflow.payload_length_ipv6': { - category: 'netflow', - name: 'netflow.payload_length_ipv6', - type: 'integer', - }, - 'netflow.ip_ttl': { - category: 'netflow', - name: 'netflow.ip_ttl', - type: 'short', - }, - 'netflow.next_header_ipv6': { - category: 'netflow', - name: 'netflow.next_header_ipv6', - type: 'short', - }, - 'netflow.mpls_payload_length': { - category: 'netflow', - name: 'netflow.mpls_payload_length', - type: 'long', - }, - 'netflow.ip_diff_serv_code_point': { - category: 'netflow', - name: 'netflow.ip_diff_serv_code_point', - type: 'short', - }, - 'netflow.ip_precedence': { - category: 'netflow', - name: 'netflow.ip_precedence', - type: 'short', - }, - 'netflow.fragment_flags': { - category: 'netflow', - name: 'netflow.fragment_flags', - type: 'short', - }, - 'netflow.octet_delta_sum_of_squares': { - category: 'netflow', - name: 'netflow.octet_delta_sum_of_squares', - type: 'long', - }, - 'netflow.octet_total_sum_of_squares': { - category: 'netflow', - name: 'netflow.octet_total_sum_of_squares', - type: 'long', - }, - 'netflow.mpls_top_label_ttl': { - category: 'netflow', - name: 'netflow.mpls_top_label_ttl', - type: 'short', - }, - 'netflow.mpls_label_stack_length': { - category: 'netflow', - name: 'netflow.mpls_label_stack_length', - type: 'long', - }, - 'netflow.mpls_label_stack_depth': { - category: 'netflow', - name: 'netflow.mpls_label_stack_depth', - type: 'long', - }, - 'netflow.mpls_top_label_exp': { - category: 'netflow', - name: 'netflow.mpls_top_label_exp', - type: 'short', - }, - 'netflow.ip_payload_length': { - category: 'netflow', - name: 'netflow.ip_payload_length', - type: 'long', - }, - 'netflow.udp_message_length': { - category: 'netflow', - name: 'netflow.udp_message_length', - type: 'integer', - }, - 'netflow.is_multicast': { - category: 'netflow', - name: 'netflow.is_multicast', - type: 'short', - }, - 'netflow.ipv4_ihl': { - category: 'netflow', - name: 'netflow.ipv4_ihl', - type: 'short', - }, - 'netflow.ipv4_options': { - category: 'netflow', - name: 'netflow.ipv4_options', - type: 'long', - }, - 'netflow.tcp_options': { - category: 'netflow', - name: 'netflow.tcp_options', - type: 'long', - }, - 'netflow.padding_octets': { - category: 'netflow', - name: 'netflow.padding_octets', - type: 'short', - }, - 'netflow.collector_ipv4_address': { - category: 'netflow', - name: 'netflow.collector_ipv4_address', - type: 'ip', - }, - 'netflow.collector_ipv6_address': { - category: 'netflow', - name: 'netflow.collector_ipv6_address', - type: 'ip', - }, - 'netflow.export_interface': { - category: 'netflow', - name: 'netflow.export_interface', - type: 'long', - }, - 'netflow.export_protocol_version': { - category: 'netflow', - name: 'netflow.export_protocol_version', - type: 'short', - }, - 'netflow.export_transport_protocol': { - category: 'netflow', - name: 'netflow.export_transport_protocol', - type: 'short', - }, - 'netflow.collector_transport_port': { - category: 'netflow', - name: 'netflow.collector_transport_port', - type: 'integer', - }, - 'netflow.exporter_transport_port': { - category: 'netflow', - name: 'netflow.exporter_transport_port', - type: 'integer', - }, - 'netflow.tcp_syn_total_count': { - category: 'netflow', - name: 'netflow.tcp_syn_total_count', - type: 'long', - }, - 'netflow.tcp_fin_total_count': { - category: 'netflow', - name: 'netflow.tcp_fin_total_count', - type: 'long', - }, - 'netflow.tcp_rst_total_count': { - category: 'netflow', - name: 'netflow.tcp_rst_total_count', - type: 'long', - }, - 'netflow.tcp_psh_total_count': { - category: 'netflow', - name: 'netflow.tcp_psh_total_count', - type: 'long', - }, - 'netflow.tcp_ack_total_count': { - category: 'netflow', - name: 'netflow.tcp_ack_total_count', - type: 'long', - }, - 'netflow.tcp_urg_total_count': { - category: 'netflow', - name: 'netflow.tcp_urg_total_count', - type: 'long', - }, - 'netflow.ip_total_length': { - category: 'netflow', - name: 'netflow.ip_total_length', - type: 'long', - }, - 'netflow.post_nat_source_ipv4_address': { - category: 'netflow', - name: 'netflow.post_nat_source_ipv4_address', - type: 'ip', - }, - 'netflow.post_nat_destination_ipv4_address': { - category: 'netflow', - name: 'netflow.post_nat_destination_ipv4_address', - type: 'ip', - }, - 'netflow.post_napt_source_transport_port': { - category: 'netflow', - name: 'netflow.post_napt_source_transport_port', - type: 'integer', - }, - 'netflow.post_napt_destination_transport_port': { - category: 'netflow', - name: 'netflow.post_napt_destination_transport_port', - type: 'integer', - }, - 'netflow.nat_originating_address_realm': { - category: 'netflow', - name: 'netflow.nat_originating_address_realm', - type: 'short', - }, - 'netflow.nat_event': { - category: 'netflow', - name: 'netflow.nat_event', - type: 'short', - }, - 'netflow.initiator_octets': { - category: 'netflow', - name: 'netflow.initiator_octets', - type: 'long', - }, - 'netflow.responder_octets': { - category: 'netflow', - name: 'netflow.responder_octets', - type: 'long', - }, - 'netflow.firewall_event': { - category: 'netflow', - name: 'netflow.firewall_event', - type: 'short', - }, - 'netflow.ingress_vrfid': { - category: 'netflow', - name: 'netflow.ingress_vrfid', - type: 'long', - }, - 'netflow.egress_vrfid': { - category: 'netflow', - name: 'netflow.egress_vrfid', - type: 'long', - }, - 'netflow.vr_fname': { - category: 'netflow', - name: 'netflow.vr_fname', - type: 'keyword', - }, - 'netflow.post_mpls_top_label_exp': { - category: 'netflow', - name: 'netflow.post_mpls_top_label_exp', - type: 'short', - }, - 'netflow.tcp_window_scale': { - category: 'netflow', - name: 'netflow.tcp_window_scale', - type: 'integer', - }, - 'netflow.biflow_direction': { - category: 'netflow', - name: 'netflow.biflow_direction', - type: 'short', - }, - 'netflow.ethernet_header_length': { - category: 'netflow', - name: 'netflow.ethernet_header_length', - type: 'short', - }, - 'netflow.ethernet_payload_length': { - category: 'netflow', - name: 'netflow.ethernet_payload_length', - type: 'integer', - }, - 'netflow.ethernet_total_length': { - category: 'netflow', - name: 'netflow.ethernet_total_length', - type: 'integer', - }, - 'netflow.dot1q_vlan_id': { - category: 'netflow', - name: 'netflow.dot1q_vlan_id', - type: 'integer', - }, - 'netflow.dot1q_priority': { - category: 'netflow', - name: 'netflow.dot1q_priority', - type: 'short', - }, - 'netflow.dot1q_customer_vlan_id': { - category: 'netflow', - name: 'netflow.dot1q_customer_vlan_id', - type: 'integer', - }, - 'netflow.dot1q_customer_priority': { - category: 'netflow', - name: 'netflow.dot1q_customer_priority', - type: 'short', - }, - 'netflow.metro_evc_id': { - category: 'netflow', - name: 'netflow.metro_evc_id', - type: 'keyword', - }, - 'netflow.metro_evc_type': { - category: 'netflow', - name: 'netflow.metro_evc_type', - type: 'short', - }, - 'netflow.pseudo_wire_id': { - category: 'netflow', - name: 'netflow.pseudo_wire_id', - type: 'long', - }, - 'netflow.pseudo_wire_type': { - category: 'netflow', - name: 'netflow.pseudo_wire_type', - type: 'integer', - }, - 'netflow.pseudo_wire_control_word': { - category: 'netflow', - name: 'netflow.pseudo_wire_control_word', - type: 'long', - }, - 'netflow.ingress_physical_interface': { - category: 'netflow', - name: 'netflow.ingress_physical_interface', - type: 'long', - }, - 'netflow.egress_physical_interface': { - category: 'netflow', - name: 'netflow.egress_physical_interface', - type: 'long', - }, - 'netflow.post_dot1q_vlan_id': { - category: 'netflow', - name: 'netflow.post_dot1q_vlan_id', - type: 'integer', - }, - 'netflow.post_dot1q_customer_vlan_id': { - category: 'netflow', - name: 'netflow.post_dot1q_customer_vlan_id', - type: 'integer', - }, - 'netflow.ethernet_type': { - category: 'netflow', - name: 'netflow.ethernet_type', - type: 'integer', - }, - 'netflow.post_ip_precedence': { - category: 'netflow', - name: 'netflow.post_ip_precedence', - type: 'short', - }, - 'netflow.collection_time_milliseconds': { - category: 'netflow', - name: 'netflow.collection_time_milliseconds', - type: 'date', - }, - 'netflow.export_sctp_stream_id': { - category: 'netflow', - name: 'netflow.export_sctp_stream_id', - type: 'integer', - }, - 'netflow.max_export_seconds': { - category: 'netflow', - name: 'netflow.max_export_seconds', - type: 'date', - }, - 'netflow.max_flow_end_seconds': { - category: 'netflow', - name: 'netflow.max_flow_end_seconds', - type: 'date', - }, - 'netflow.message_md5_checksum': { - category: 'netflow', - name: 'netflow.message_md5_checksum', - type: 'short', - }, - 'netflow.message_scope': { - category: 'netflow', - name: 'netflow.message_scope', - type: 'short', - }, - 'netflow.min_export_seconds': { - category: 'netflow', - name: 'netflow.min_export_seconds', - type: 'date', - }, - 'netflow.min_flow_start_seconds': { - category: 'netflow', - name: 'netflow.min_flow_start_seconds', - type: 'date', - }, - 'netflow.opaque_octets': { - category: 'netflow', - name: 'netflow.opaque_octets', - type: 'short', - }, - 'netflow.session_scope': { - category: 'netflow', - name: 'netflow.session_scope', - type: 'short', - }, - 'netflow.max_flow_end_microseconds': { - category: 'netflow', - name: 'netflow.max_flow_end_microseconds', - type: 'date', - }, - 'netflow.max_flow_end_milliseconds': { - category: 'netflow', - name: 'netflow.max_flow_end_milliseconds', - type: 'date', - }, - 'netflow.max_flow_end_nanoseconds': { - category: 'netflow', - name: 'netflow.max_flow_end_nanoseconds', - type: 'date', - }, - 'netflow.min_flow_start_microseconds': { - category: 'netflow', - name: 'netflow.min_flow_start_microseconds', - type: 'date', - }, - 'netflow.min_flow_start_milliseconds': { - category: 'netflow', - name: 'netflow.min_flow_start_milliseconds', - type: 'date', - }, - 'netflow.min_flow_start_nanoseconds': { - category: 'netflow', - name: 'netflow.min_flow_start_nanoseconds', - type: 'date', - }, - 'netflow.collector_certificate': { - category: 'netflow', - name: 'netflow.collector_certificate', - type: 'short', - }, - 'netflow.exporter_certificate': { - category: 'netflow', - name: 'netflow.exporter_certificate', - type: 'short', - }, - 'netflow.data_records_reliability': { - category: 'netflow', - name: 'netflow.data_records_reliability', - type: 'boolean', - }, - 'netflow.observation_point_type': { - category: 'netflow', - name: 'netflow.observation_point_type', - type: 'short', - }, - 'netflow.new_connection_delta_count': { - category: 'netflow', - name: 'netflow.new_connection_delta_count', - type: 'long', - }, - 'netflow.connection_sum_duration_seconds': { - category: 'netflow', - name: 'netflow.connection_sum_duration_seconds', - type: 'long', - }, - 'netflow.connection_transaction_id': { - category: 'netflow', - name: 'netflow.connection_transaction_id', - type: 'long', - }, - 'netflow.post_nat_source_ipv6_address': { - category: 'netflow', - name: 'netflow.post_nat_source_ipv6_address', - type: 'ip', - }, - 'netflow.post_nat_destination_ipv6_address': { - category: 'netflow', - name: 'netflow.post_nat_destination_ipv6_address', - type: 'ip', - }, - 'netflow.nat_pool_id': { - category: 'netflow', - name: 'netflow.nat_pool_id', - type: 'long', - }, - 'netflow.nat_pool_name': { - category: 'netflow', - name: 'netflow.nat_pool_name', - type: 'keyword', - }, - 'netflow.anonymization_flags': { - category: 'netflow', - name: 'netflow.anonymization_flags', - type: 'integer', - }, - 'netflow.anonymization_technique': { - category: 'netflow', - name: 'netflow.anonymization_technique', - type: 'integer', - }, - 'netflow.information_element_index': { - category: 'netflow', - name: 'netflow.information_element_index', - type: 'integer', - }, - 'netflow.p2p_technology': { - category: 'netflow', - name: 'netflow.p2p_technology', - type: 'keyword', - }, - 'netflow.tunnel_technology': { - category: 'netflow', - name: 'netflow.tunnel_technology', - type: 'keyword', - }, - 'netflow.encrypted_technology': { - category: 'netflow', - name: 'netflow.encrypted_technology', - type: 'keyword', - }, - 'netflow.bgp_validity_state': { - category: 'netflow', - name: 'netflow.bgp_validity_state', - type: 'short', - }, - 'netflow.ip_sec_spi': { - category: 'netflow', - name: 'netflow.ip_sec_spi', - type: 'long', - }, - 'netflow.gre_key': { - category: 'netflow', - name: 'netflow.gre_key', - type: 'long', - }, - 'netflow.nat_type': { - category: 'netflow', - name: 'netflow.nat_type', - type: 'short', - }, - 'netflow.initiator_packets': { - category: 'netflow', - name: 'netflow.initiator_packets', - type: 'long', - }, - 'netflow.responder_packets': { - category: 'netflow', - name: 'netflow.responder_packets', - type: 'long', - }, - 'netflow.observation_domain_name': { - category: 'netflow', - name: 'netflow.observation_domain_name', - type: 'keyword', - }, - 'netflow.selection_sequence_id': { - category: 'netflow', - name: 'netflow.selection_sequence_id', - type: 'long', - }, - 'netflow.selector_id': { - category: 'netflow', - name: 'netflow.selector_id', - type: 'long', - }, - 'netflow.information_element_id': { - category: 'netflow', - name: 'netflow.information_element_id', - type: 'integer', - }, - 'netflow.selector_algorithm': { - category: 'netflow', - name: 'netflow.selector_algorithm', - type: 'integer', - }, - 'netflow.sampling_packet_interval': { - category: 'netflow', - name: 'netflow.sampling_packet_interval', - type: 'long', - }, - 'netflow.sampling_packet_space': { - category: 'netflow', - name: 'netflow.sampling_packet_space', - type: 'long', - }, - 'netflow.sampling_time_interval': { - category: 'netflow', - name: 'netflow.sampling_time_interval', - type: 'long', - }, - 'netflow.sampling_time_space': { - category: 'netflow', - name: 'netflow.sampling_time_space', - type: 'long', - }, - 'netflow.sampling_size': { - category: 'netflow', - name: 'netflow.sampling_size', - type: 'long', - }, - 'netflow.sampling_population': { - category: 'netflow', - name: 'netflow.sampling_population', - type: 'long', - }, - 'netflow.sampling_probability': { - category: 'netflow', - name: 'netflow.sampling_probability', - type: 'double', - }, - 'netflow.data_link_frame_size': { - category: 'netflow', - name: 'netflow.data_link_frame_size', - type: 'integer', - }, - 'netflow.ip_header_packet_section': { - category: 'netflow', - name: 'netflow.ip_header_packet_section', - type: 'short', - }, - 'netflow.ip_payload_packet_section': { - category: 'netflow', - name: 'netflow.ip_payload_packet_section', - type: 'short', - }, - 'netflow.data_link_frame_section': { - category: 'netflow', - name: 'netflow.data_link_frame_section', - type: 'short', - }, - 'netflow.mpls_label_stack_section': { - category: 'netflow', - name: 'netflow.mpls_label_stack_section', - type: 'short', - }, - 'netflow.mpls_payload_packet_section': { - category: 'netflow', - name: 'netflow.mpls_payload_packet_section', - type: 'short', - }, - 'netflow.selector_id_total_pkts_observed': { - category: 'netflow', - name: 'netflow.selector_id_total_pkts_observed', - type: 'long', - }, - 'netflow.selector_id_total_pkts_selected': { - category: 'netflow', - name: 'netflow.selector_id_total_pkts_selected', - type: 'long', - }, - 'netflow.absolute_error': { - category: 'netflow', - name: 'netflow.absolute_error', - type: 'double', - }, - 'netflow.relative_error': { - category: 'netflow', - name: 'netflow.relative_error', - type: 'double', - }, - 'netflow.observation_time_seconds': { - category: 'netflow', - name: 'netflow.observation_time_seconds', - type: 'date', - }, - 'netflow.observation_time_milliseconds': { - category: 'netflow', - name: 'netflow.observation_time_milliseconds', - type: 'date', - }, - 'netflow.observation_time_microseconds': { - category: 'netflow', - name: 'netflow.observation_time_microseconds', - type: 'date', - }, - 'netflow.observation_time_nanoseconds': { - category: 'netflow', - name: 'netflow.observation_time_nanoseconds', - type: 'date', - }, - 'netflow.digest_hash_value': { - category: 'netflow', - name: 'netflow.digest_hash_value', - type: 'long', - }, - 'netflow.hash_ip_payload_offset': { - category: 'netflow', - name: 'netflow.hash_ip_payload_offset', - type: 'long', - }, - 'netflow.hash_ip_payload_size': { - category: 'netflow', - name: 'netflow.hash_ip_payload_size', - type: 'long', - }, - 'netflow.hash_output_range_min': { - category: 'netflow', - name: 'netflow.hash_output_range_min', - type: 'long', - }, - 'netflow.hash_output_range_max': { - category: 'netflow', - name: 'netflow.hash_output_range_max', - type: 'long', - }, - 'netflow.hash_selected_range_min': { - category: 'netflow', - name: 'netflow.hash_selected_range_min', - type: 'long', - }, - 'netflow.hash_selected_range_max': { - category: 'netflow', - name: 'netflow.hash_selected_range_max', - type: 'long', - }, - 'netflow.hash_digest_output': { - category: 'netflow', - name: 'netflow.hash_digest_output', - type: 'boolean', - }, - 'netflow.hash_initialiser_value': { - category: 'netflow', - name: 'netflow.hash_initialiser_value', - type: 'long', - }, - 'netflow.selector_name': { - category: 'netflow', - name: 'netflow.selector_name', - type: 'keyword', - }, - 'netflow.upper_ci_limit': { - category: 'netflow', - name: 'netflow.upper_ci_limit', - type: 'double', - }, - 'netflow.lower_ci_limit': { - category: 'netflow', - name: 'netflow.lower_ci_limit', - type: 'double', - }, - 'netflow.confidence_level': { - category: 'netflow', - name: 'netflow.confidence_level', - type: 'double', - }, - 'netflow.information_element_data_type': { - category: 'netflow', - name: 'netflow.information_element_data_type', - type: 'short', - }, - 'netflow.information_element_description': { - category: 'netflow', - name: 'netflow.information_element_description', - type: 'keyword', - }, - 'netflow.information_element_name': { - category: 'netflow', - name: 'netflow.information_element_name', - type: 'keyword', - }, - 'netflow.information_element_range_begin': { - category: 'netflow', - name: 'netflow.information_element_range_begin', - type: 'long', - }, - 'netflow.information_element_range_end': { - category: 'netflow', - name: 'netflow.information_element_range_end', - type: 'long', - }, - 'netflow.information_element_semantics': { - category: 'netflow', - name: 'netflow.information_element_semantics', - type: 'short', - }, - 'netflow.information_element_units': { - category: 'netflow', - name: 'netflow.information_element_units', - type: 'integer', - }, - 'netflow.private_enterprise_number': { - category: 'netflow', - name: 'netflow.private_enterprise_number', - type: 'long', - }, - 'netflow.virtual_station_interface_id': { - category: 'netflow', - name: 'netflow.virtual_station_interface_id', - type: 'short', - }, - 'netflow.virtual_station_interface_name': { - category: 'netflow', - name: 'netflow.virtual_station_interface_name', - type: 'keyword', - }, - 'netflow.virtual_station_uuid': { - category: 'netflow', - name: 'netflow.virtual_station_uuid', - type: 'short', - }, - 'netflow.virtual_station_name': { - category: 'netflow', - name: 'netflow.virtual_station_name', - type: 'keyword', - }, - 'netflow.layer2_segment_id': { - category: 'netflow', - name: 'netflow.layer2_segment_id', - type: 'long', - }, - 'netflow.layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.layer2_octet_delta_count', - type: 'long', - }, - 'netflow.layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.layer2_octet_total_count', - type: 'long', - }, - 'netflow.ingress_unicast_packet_total_count': { - category: 'netflow', - name: 'netflow.ingress_unicast_packet_total_count', - type: 'long', - }, - 'netflow.ingress_multicast_packet_total_count': { - category: 'netflow', - name: 'netflow.ingress_multicast_packet_total_count', - type: 'long', - }, - 'netflow.ingress_broadcast_packet_total_count': { - category: 'netflow', - name: 'netflow.ingress_broadcast_packet_total_count', - type: 'long', - }, - 'netflow.egress_unicast_packet_total_count': { - category: 'netflow', - name: 'netflow.egress_unicast_packet_total_count', - type: 'long', - }, - 'netflow.egress_broadcast_packet_total_count': { - category: 'netflow', - name: 'netflow.egress_broadcast_packet_total_count', - type: 'long', - }, - 'netflow.monitoring_interval_start_milli_seconds': { - category: 'netflow', - name: 'netflow.monitoring_interval_start_milli_seconds', - type: 'date', - }, - 'netflow.monitoring_interval_end_milli_seconds': { - category: 'netflow', - name: 'netflow.monitoring_interval_end_milli_seconds', - type: 'date', - }, - 'netflow.port_range_start': { - category: 'netflow', - name: 'netflow.port_range_start', - type: 'integer', - }, - 'netflow.port_range_end': { - category: 'netflow', - name: 'netflow.port_range_end', - type: 'integer', - }, - 'netflow.port_range_step_size': { - category: 'netflow', - name: 'netflow.port_range_step_size', - type: 'integer', - }, - 'netflow.port_range_num_ports': { - category: 'netflow', - name: 'netflow.port_range_num_ports', - type: 'integer', - }, - 'netflow.sta_mac_address': { - category: 'netflow', - name: 'netflow.sta_mac_address', - type: 'keyword', - }, - 'netflow.sta_ipv4_address': { - category: 'netflow', - name: 'netflow.sta_ipv4_address', - type: 'ip', - }, - 'netflow.wtp_mac_address': { - category: 'netflow', - name: 'netflow.wtp_mac_address', - type: 'keyword', - }, - 'netflow.ingress_interface_type': { - category: 'netflow', - name: 'netflow.ingress_interface_type', - type: 'long', - }, - 'netflow.egress_interface_type': { - category: 'netflow', - name: 'netflow.egress_interface_type', - type: 'long', - }, - 'netflow.rtp_sequence_number': { - category: 'netflow', - name: 'netflow.rtp_sequence_number', - type: 'integer', - }, - 'netflow.user_name': { - category: 'netflow', - name: 'netflow.user_name', - type: 'keyword', - }, - 'netflow.application_category_name': { - category: 'netflow', - name: 'netflow.application_category_name', - type: 'keyword', - }, - 'netflow.application_sub_category_name': { - category: 'netflow', - name: 'netflow.application_sub_category_name', - type: 'keyword', - }, - 'netflow.application_group_name': { - category: 'netflow', - name: 'netflow.application_group_name', - type: 'keyword', - }, - 'netflow.original_flows_present': { - category: 'netflow', - name: 'netflow.original_flows_present', - type: 'long', - }, - 'netflow.original_flows_initiated': { - category: 'netflow', - name: 'netflow.original_flows_initiated', - type: 'long', - }, - 'netflow.original_flows_completed': { - category: 'netflow', - name: 'netflow.original_flows_completed', - type: 'long', - }, - 'netflow.distinct_count_of_source_ip_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_source_ip_address', - type: 'long', - }, - 'netflow.distinct_count_of_destination_ip_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_destination_ip_address', - type: 'long', - }, - 'netflow.distinct_count_of_source_ipv4_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_source_ipv4_address', - type: 'long', - }, - 'netflow.distinct_count_of_destination_ipv4_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_destination_ipv4_address', - type: 'long', - }, - 'netflow.distinct_count_of_source_ipv6_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_source_ipv6_address', - type: 'long', - }, - 'netflow.distinct_count_of_destination_ipv6_address': { - category: 'netflow', - name: 'netflow.distinct_count_of_destination_ipv6_address', - type: 'long', - }, - 'netflow.value_distribution_method': { - category: 'netflow', - name: 'netflow.value_distribution_method', - type: 'short', - }, - 'netflow.rfc3550_jitter_milliseconds': { - category: 'netflow', - name: 'netflow.rfc3550_jitter_milliseconds', - type: 'long', - }, - 'netflow.rfc3550_jitter_microseconds': { - category: 'netflow', - name: 'netflow.rfc3550_jitter_microseconds', - type: 'long', - }, - 'netflow.rfc3550_jitter_nanoseconds': { - category: 'netflow', - name: 'netflow.rfc3550_jitter_nanoseconds', - type: 'long', - }, - 'netflow.dot1q_dei': { - category: 'netflow', - name: 'netflow.dot1q_dei', - type: 'boolean', - }, - 'netflow.dot1q_customer_dei': { - category: 'netflow', - name: 'netflow.dot1q_customer_dei', - type: 'boolean', - }, - 'netflow.flow_selector_algorithm': { - category: 'netflow', - name: 'netflow.flow_selector_algorithm', - type: 'integer', - }, - 'netflow.flow_selected_octet_delta_count': { - category: 'netflow', - name: 'netflow.flow_selected_octet_delta_count', - type: 'long', - }, - 'netflow.flow_selected_packet_delta_count': { - category: 'netflow', - name: 'netflow.flow_selected_packet_delta_count', - type: 'long', - }, - 'netflow.flow_selected_flow_delta_count': { - category: 'netflow', - name: 'netflow.flow_selected_flow_delta_count', - type: 'long', - }, - 'netflow.selector_id_total_flows_observed': { - category: 'netflow', - name: 'netflow.selector_id_total_flows_observed', - type: 'long', - }, - 'netflow.selector_id_total_flows_selected': { - category: 'netflow', - name: 'netflow.selector_id_total_flows_selected', - type: 'long', - }, - 'netflow.sampling_flow_interval': { - category: 'netflow', - name: 'netflow.sampling_flow_interval', - type: 'long', - }, - 'netflow.sampling_flow_spacing': { - category: 'netflow', - name: 'netflow.sampling_flow_spacing', - type: 'long', - }, - 'netflow.flow_sampling_time_interval': { - category: 'netflow', - name: 'netflow.flow_sampling_time_interval', - type: 'long', - }, - 'netflow.flow_sampling_time_spacing': { - category: 'netflow', - name: 'netflow.flow_sampling_time_spacing', - type: 'long', - }, - 'netflow.hash_flow_domain': { - category: 'netflow', - name: 'netflow.hash_flow_domain', - type: 'integer', - }, - 'netflow.transport_octet_delta_count': { - category: 'netflow', - name: 'netflow.transport_octet_delta_count', - type: 'long', - }, - 'netflow.transport_packet_delta_count': { - category: 'netflow', - name: 'netflow.transport_packet_delta_count', - type: 'long', - }, - 'netflow.original_exporter_ipv4_address': { - category: 'netflow', - name: 'netflow.original_exporter_ipv4_address', - type: 'ip', - }, - 'netflow.original_exporter_ipv6_address': { - category: 'netflow', - name: 'netflow.original_exporter_ipv6_address', - type: 'ip', - }, - 'netflow.original_observation_domain_id': { - category: 'netflow', - name: 'netflow.original_observation_domain_id', - type: 'long', - }, - 'netflow.intermediate_process_id': { - category: 'netflow', - name: 'netflow.intermediate_process_id', - type: 'long', - }, - 'netflow.ignored_data_record_total_count': { - category: 'netflow', - name: 'netflow.ignored_data_record_total_count', - type: 'long', - }, - 'netflow.data_link_frame_type': { - category: 'netflow', - name: 'netflow.data_link_frame_type', - type: 'integer', - }, - 'netflow.section_offset': { - category: 'netflow', - name: 'netflow.section_offset', - type: 'integer', - }, - 'netflow.section_exported_octets': { - category: 'netflow', - name: 'netflow.section_exported_octets', - type: 'integer', - }, - 'netflow.dot1q_service_instance_tag': { - category: 'netflow', - name: 'netflow.dot1q_service_instance_tag', - type: 'short', - }, - 'netflow.dot1q_service_instance_id': { - category: 'netflow', - name: 'netflow.dot1q_service_instance_id', - type: 'long', - }, - 'netflow.dot1q_service_instance_priority': { - category: 'netflow', - name: 'netflow.dot1q_service_instance_priority', - type: 'short', - }, - 'netflow.dot1q_customer_source_mac_address': { - category: 'netflow', - name: 'netflow.dot1q_customer_source_mac_address', - type: 'keyword', - }, - 'netflow.dot1q_customer_destination_mac_address': { - category: 'netflow', - name: 'netflow.dot1q_customer_destination_mac_address', - type: 'keyword', - }, - 'netflow.post_layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.post_layer2_octet_delta_count', - type: 'long', - }, - 'netflow.post_mcast_layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.post_mcast_layer2_octet_delta_count', - type: 'long', - }, - 'netflow.post_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.post_layer2_octet_total_count', - type: 'long', - }, - 'netflow.post_mcast_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.post_mcast_layer2_octet_total_count', - type: 'long', - }, - 'netflow.minimum_layer2_total_length': { - category: 'netflow', - name: 'netflow.minimum_layer2_total_length', - type: 'long', - }, - 'netflow.maximum_layer2_total_length': { - category: 'netflow', - name: 'netflow.maximum_layer2_total_length', - type: 'long', - }, - 'netflow.dropped_layer2_octet_delta_count': { - category: 'netflow', - name: 'netflow.dropped_layer2_octet_delta_count', - type: 'long', - }, - 'netflow.dropped_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.dropped_layer2_octet_total_count', - type: 'long', - }, - 'netflow.ignored_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.ignored_layer2_octet_total_count', - type: 'long', - }, - 'netflow.not_sent_layer2_octet_total_count': { - category: 'netflow', - name: 'netflow.not_sent_layer2_octet_total_count', - type: 'long', - }, - 'netflow.layer2_octet_delta_sum_of_squares': { - category: 'netflow', - name: 'netflow.layer2_octet_delta_sum_of_squares', - type: 'long', - }, - 'netflow.layer2_octet_total_sum_of_squares': { - category: 'netflow', - name: 'netflow.layer2_octet_total_sum_of_squares', - type: 'long', - }, - 'netflow.layer2_frame_delta_count': { - category: 'netflow', - name: 'netflow.layer2_frame_delta_count', - type: 'long', - }, - 'netflow.layer2_frame_total_count': { - category: 'netflow', - name: 'netflow.layer2_frame_total_count', - type: 'long', - }, - 'netflow.pseudo_wire_destination_ipv4_address': { - category: 'netflow', - name: 'netflow.pseudo_wire_destination_ipv4_address', - type: 'ip', - }, - 'netflow.ignored_layer2_frame_total_count': { - category: 'netflow', - name: 'netflow.ignored_layer2_frame_total_count', - type: 'long', - }, - 'netflow.mib_object_value_integer': { - category: 'netflow', - name: 'netflow.mib_object_value_integer', - type: 'integer', - }, - 'netflow.mib_object_value_octet_string': { - category: 'netflow', - name: 'netflow.mib_object_value_octet_string', - type: 'short', - }, - 'netflow.mib_object_value_oid': { - category: 'netflow', - name: 'netflow.mib_object_value_oid', - type: 'short', - }, - 'netflow.mib_object_value_bits': { - category: 'netflow', - name: 'netflow.mib_object_value_bits', - type: 'short', - }, - 'netflow.mib_object_value_ip_address': { - category: 'netflow', - name: 'netflow.mib_object_value_ip_address', - type: 'ip', - }, - 'netflow.mib_object_value_counter': { - category: 'netflow', - name: 'netflow.mib_object_value_counter', - type: 'long', - }, - 'netflow.mib_object_value_gauge': { - category: 'netflow', - name: 'netflow.mib_object_value_gauge', - type: 'long', - }, - 'netflow.mib_object_value_time_ticks': { - category: 'netflow', - name: 'netflow.mib_object_value_time_ticks', - type: 'long', - }, - 'netflow.mib_object_value_unsigned': { - category: 'netflow', - name: 'netflow.mib_object_value_unsigned', - type: 'long', - }, - 'netflow.mib_object_identifier': { - category: 'netflow', - name: 'netflow.mib_object_identifier', - type: 'short', - }, - 'netflow.mib_sub_identifier': { - category: 'netflow', - name: 'netflow.mib_sub_identifier', - type: 'long', - }, - 'netflow.mib_index_indicator': { - category: 'netflow', - name: 'netflow.mib_index_indicator', - type: 'long', - }, - 'netflow.mib_capture_time_semantics': { - category: 'netflow', - name: 'netflow.mib_capture_time_semantics', - type: 'short', - }, - 'netflow.mib_context_engine_id': { - category: 'netflow', - name: 'netflow.mib_context_engine_id', - type: 'short', - }, - 'netflow.mib_context_name': { - category: 'netflow', - name: 'netflow.mib_context_name', - type: 'keyword', - }, - 'netflow.mib_object_name': { - category: 'netflow', - name: 'netflow.mib_object_name', - type: 'keyword', - }, - 'netflow.mib_object_description': { - category: 'netflow', - name: 'netflow.mib_object_description', - type: 'keyword', - }, - 'netflow.mib_object_syntax': { - category: 'netflow', - name: 'netflow.mib_object_syntax', - type: 'keyword', - }, - 'netflow.mib_module_name': { - category: 'netflow', - name: 'netflow.mib_module_name', - type: 'keyword', - }, - 'netflow.mobile_imsi': { - category: 'netflow', - name: 'netflow.mobile_imsi', - type: 'keyword', - }, - 'netflow.mobile_msisdn': { - category: 'netflow', - name: 'netflow.mobile_msisdn', - type: 'keyword', - }, - 'netflow.http_status_code': { - category: 'netflow', - name: 'netflow.http_status_code', - type: 'integer', - }, - 'netflow.source_transport_ports_limit': { - category: 'netflow', - name: 'netflow.source_transport_ports_limit', - type: 'integer', - }, - 'netflow.http_request_method': { - category: 'netflow', - name: 'netflow.http_request_method', - type: 'keyword', - }, - 'netflow.http_request_host': { - category: 'netflow', - name: 'netflow.http_request_host', - type: 'keyword', - }, - 'netflow.http_request_target': { - category: 'netflow', - name: 'netflow.http_request_target', - type: 'keyword', - }, - 'netflow.http_message_version': { - category: 'netflow', - name: 'netflow.http_message_version', - type: 'keyword', - }, - 'netflow.nat_instance_id': { - category: 'netflow', - name: 'netflow.nat_instance_id', - type: 'long', - }, - 'netflow.internal_address_realm': { - category: 'netflow', - name: 'netflow.internal_address_realm', - type: 'short', - }, - 'netflow.external_address_realm': { - category: 'netflow', - name: 'netflow.external_address_realm', - type: 'short', - }, - 'netflow.nat_quota_exceeded_event': { - category: 'netflow', - name: 'netflow.nat_quota_exceeded_event', - type: 'long', - }, - 'netflow.nat_threshold_event': { - category: 'netflow', - name: 'netflow.nat_threshold_event', - type: 'long', - }, - 'netflow.http_user_agent': { - category: 'netflow', - name: 'netflow.http_user_agent', - type: 'keyword', - }, - 'netflow.http_content_type': { - category: 'netflow', - name: 'netflow.http_content_type', - type: 'keyword', - }, - 'netflow.http_reason_phrase': { - category: 'netflow', - name: 'netflow.http_reason_phrase', - type: 'keyword', - }, - 'netflow.max_session_entries': { - category: 'netflow', - name: 'netflow.max_session_entries', - type: 'long', - }, - 'netflow.max_bib_entries': { - category: 'netflow', - name: 'netflow.max_bib_entries', - type: 'long', - }, - 'netflow.max_entries_per_user': { - category: 'netflow', - name: 'netflow.max_entries_per_user', - type: 'long', - }, - 'netflow.max_subscribers': { - category: 'netflow', - name: 'netflow.max_subscribers', - type: 'long', - }, - 'netflow.max_fragments_pending_reassembly': { - category: 'netflow', - name: 'netflow.max_fragments_pending_reassembly', - type: 'long', - }, - 'netflow.address_pool_high_threshold': { - category: 'netflow', - name: 'netflow.address_pool_high_threshold', - type: 'long', - }, - 'netflow.address_pool_low_threshold': { - category: 'netflow', - name: 'netflow.address_pool_low_threshold', - type: 'long', - }, - 'netflow.address_port_mapping_high_threshold': { - category: 'netflow', - name: 'netflow.address_port_mapping_high_threshold', - type: 'long', - }, - 'netflow.address_port_mapping_low_threshold': { - category: 'netflow', - name: 'netflow.address_port_mapping_low_threshold', - type: 'long', - }, - 'netflow.address_port_mapping_per_user_high_threshold': { - category: 'netflow', - name: 'netflow.address_port_mapping_per_user_high_threshold', - type: 'long', - }, - 'netflow.global_address_mapping_high_threshold': { - category: 'netflow', - name: 'netflow.global_address_mapping_high_threshold', - type: 'long', - }, - 'netflow.vpn_identifier': { - category: 'netflow', - name: 'netflow.vpn_identifier', - type: 'short', - }, - 'cef.version': { - category: 'cef', - description: 'Version of the CEF specification used by the message. ', - name: 'cef.version', - type: 'keyword', - }, - 'cef.device.vendor': { - category: 'cef', - description: 'Vendor of the device that produced the message. ', - name: 'cef.device.vendor', - type: 'keyword', - }, - 'cef.device.product': { - category: 'cef', - description: 'Product of the device that produced the message. ', - name: 'cef.device.product', - type: 'keyword', - }, - 'cef.device.version': { - category: 'cef', - description: 'Version of the product that produced the message. ', - name: 'cef.device.version', - type: 'keyword', - }, - 'cef.device.event_class_id': { - category: 'cef', - description: 'Unique identifier of the event type. ', - name: 'cef.device.event_class_id', - type: 'keyword', - }, - 'cef.severity': { - category: 'cef', - description: - 'Importance of the event. The valid string values are Unknown, Low, Medium, High, and Very-High. The valid integer values are 0-3=Low, 4-6=Medium, 7- 8=High, and 9-10=Very-High. ', - example: 'Very-High', - name: 'cef.severity', - type: 'keyword', - }, - 'cef.name': { - category: 'cef', - description: 'Short description of the event. ', - name: 'cef.name', - type: 'keyword', - }, - 'cef.extensions.agentAddress': { - category: 'cef', - description: 'The IP address of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentAddress', - type: 'ip', - }, - 'cef.extensions.agentDnsDomain': { - category: 'cef', - description: 'The DNS domain name of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentDnsDomain', - type: 'keyword', - }, - 'cef.extensions.agentHostName': { - category: 'cef', - description: 'The hostname of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentHostName', - type: 'keyword', - }, - 'cef.extensions.agentId': { - category: 'cef', - description: 'The agent ID of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentId', - type: 'keyword', - }, - 'cef.extensions.agentMacAddress': { - category: 'cef', - description: 'The MAC address of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentMacAddress', - type: 'keyword', - }, - 'cef.extensions.agentNtDomain': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentNtDomain', - type: 'keyword', - }, - 'cef.extensions.agentReceiptTime': { - category: 'cef', - description: - 'The time at which information about the event was received by the ArcSight connector.', - name: 'cef.extensions.agentReceiptTime', - type: 'date', - }, - 'cef.extensions.agentTimeZone': { - category: 'cef', - description: 'The agent time zone of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentTimeZone', - type: 'keyword', - }, - 'cef.extensions.agentTranslatedAddress': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentTranslatedAddress', - type: 'ip', - }, - 'cef.extensions.agentTranslatedZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentTranslatedZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.agentTranslatedZoneURI': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentTranslatedZoneURI', - type: 'keyword', - }, - 'cef.extensions.agentType': { - category: 'cef', - description: 'The agent type of the ArcSight connector that processed the event', - name: 'cef.extensions.agentType', - type: 'keyword', - }, - 'cef.extensions.agentVersion': { - category: 'cef', - description: 'The version of the ArcSight connector that processed the event.', - name: 'cef.extensions.agentVersion', - type: 'keyword', - }, - 'cef.extensions.agentZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.agentZoneURI': { - category: 'cef', - description: 'null', - name: 'cef.extensions.agentZoneURI', - type: 'keyword', - }, - 'cef.extensions.applicationProtocol': { - category: 'cef', - description: - 'Application level protocol, example values are HTTP, HTTPS, SSHv2, Telnet, POP, IMPA, IMAPS, and so on.', - name: 'cef.extensions.applicationProtocol', - type: 'keyword', - }, - 'cef.extensions.baseEventCount': { - category: 'cef', - description: - 'A count associated with this event. How many times was this same event observed? Count can be omitted if it is 1.', - name: 'cef.extensions.baseEventCount', - type: 'long', - }, - 'cef.extensions.bytesIn': { - category: 'cef', - description: - 'Number of bytes transferred inbound, relative to the source to destination relationship, meaning that data was flowing from source to destination.', - name: 'cef.extensions.bytesIn', - type: 'long', - }, - 'cef.extensions.bytesOut': { - category: 'cef', - description: - 'Number of bytes transferred outbound relative to the source to destination relationship. For example, the byte number of data flowing from the destination to the source.', - name: 'cef.extensions.bytesOut', - type: 'long', - }, - 'cef.extensions.customerExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.customerExternalID', - type: 'keyword', - }, - 'cef.extensions.customerURI': { - category: 'cef', - description: 'null', - name: 'cef.extensions.customerURI', - type: 'keyword', - }, - 'cef.extensions.destinationAddress': { - category: 'cef', - description: - 'Identifies the destination address that the event refers to in an IP network. The format is an IPv4 address.', - name: 'cef.extensions.destinationAddress', - type: 'ip', - }, - 'cef.extensions.destinationDnsDomain': { - category: 'cef', - description: 'The DNS domain part of the complete fully qualified domain name (FQDN).', - name: 'cef.extensions.destinationDnsDomain', - type: 'keyword', - }, - 'cef.extensions.destinationGeoLatitude': { - category: 'cef', - description: "The latitudinal value from which the destination's IP address belongs.", - name: 'cef.extensions.destinationGeoLatitude', - type: 'double', - }, - 'cef.extensions.destinationGeoLongitude': { - category: 'cef', - description: "The longitudinal value from which the destination's IP address belongs.", - name: 'cef.extensions.destinationGeoLongitude', - type: 'double', - }, - 'cef.extensions.destinationHostName': { - category: 'cef', - description: - 'Identifies the destination that an event refers to in an IP network. The format should be a fully qualified domain name (FQDN) associated with the destination node, when a node is available.', - name: 'cef.extensions.destinationHostName', - type: 'keyword', - }, - 'cef.extensions.destinationMacAddress': { - category: 'cef', - description: 'Six colon-seperated hexadecimal numbers.', - name: 'cef.extensions.destinationMacAddress', - type: 'keyword', - }, - 'cef.extensions.destinationNtDomain': { - category: 'cef', - description: 'The Windows domain name of the destination address.', - name: 'cef.extensions.destinationNtDomain', - type: 'keyword', - }, - 'cef.extensions.destinationPort': { - category: 'cef', - description: 'The valid port numbers are between 0 and 65535.', - name: 'cef.extensions.destinationPort', - type: 'long', - }, - 'cef.extensions.destinationProcessId': { - category: 'cef', - description: - 'Provides the ID of the destination process associated with the event. For example, if an event contains process ID 105, "105" is the process ID.', - name: 'cef.extensions.destinationProcessId', - type: 'long', - }, - 'cef.extensions.destinationProcessName': { - category: 'cef', - description: "The name of the event's destination process.", - name: 'cef.extensions.destinationProcessName', - type: 'keyword', - }, - 'cef.extensions.destinationServiceName': { - category: 'cef', - description: 'The service targeted by this event.', - name: 'cef.extensions.destinationServiceName', - type: 'keyword', - }, - 'cef.extensions.destinationTranslatedAddress': { - category: 'cef', - description: 'Identifies the translated destination that the event refers to in an IP network.', - name: 'cef.extensions.destinationTranslatedAddress', - type: 'ip', - }, - 'cef.extensions.destinationTranslatedPort': { - category: 'cef', - description: - 'Port after it was translated; for example, a firewall. Valid port numbers are 0 to 65535.', - name: 'cef.extensions.destinationTranslatedPort', - type: 'long', - }, - 'cef.extensions.destinationTranslatedZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.destinationTranslatedZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.destinationTranslatedZoneURI': { - category: 'cef', - description: - 'The URI for the Translated Zone that the destination asset has been assigned to in ArcSight.', - name: 'cef.extensions.destinationTranslatedZoneURI', - type: 'keyword', - }, - 'cef.extensions.destinationUserId': { - category: 'cef', - description: - 'Identifies the destination user by ID. For example, in UNIX, the root user is generally associated with user ID 0.', - name: 'cef.extensions.destinationUserId', - type: 'keyword', - }, - 'cef.extensions.destinationUserName': { - category: 'cef', - description: - "Identifies the destination user by name. This is the user associated with the event's destination. Email addresses are often mapped into the UserName fields. The recipient is a candidate to put into this field.", - name: 'cef.extensions.destinationUserName', - type: 'keyword', - }, - 'cef.extensions.destinationUserPrivileges': { - category: 'cef', - description: - 'The typical values are "Administrator", "User", and "Guest". This identifies the destination user\'s privileges. In UNIX, for example, activity executed on the root user would be identified with destinationUser Privileges of "Administrator".', - name: 'cef.extensions.destinationUserPrivileges', - type: 'keyword', - }, - 'cef.extensions.destinationZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.destinationZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.destinationZoneURI': { - category: 'cef', - description: - 'The URI for the Zone that the destination asset has been assigned to in ArcSight.', - name: 'cef.extensions.destinationZoneURI', - type: 'keyword', - }, - 'cef.extensions.deviceAction': { - category: 'cef', - description: 'Action taken by the device.', - name: 'cef.extensions.deviceAction', - type: 'keyword', - }, - 'cef.extensions.deviceAddress': { - category: 'cef', - description: 'Identifies the device address that an event refers to in an IP network.', - name: 'cef.extensions.deviceAddress', - type: 'ip', - }, - 'cef.extensions.deviceCustomFloatingPoint1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomFloatingPoint1Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomFloatingPoint3Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomFloatingPoint3Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomFloatingPoint4Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomFloatingPoint4Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomDate1': { - category: 'cef', - description: - 'One of two timestamp fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomDate1', - type: 'date', - }, - 'cef.extensions.deviceCustomDate1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomDate1Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomDate2': { - category: 'cef', - description: - 'One of two timestamp fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomDate2', - type: 'date', - }, - 'cef.extensions.deviceCustomDate2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomDate2Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomFloatingPoint1': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomFloatingPoint1', - type: 'double', - }, - 'cef.extensions.deviceCustomFloatingPoint2': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomFloatingPoint2', - type: 'double', - }, - 'cef.extensions.deviceCustomFloatingPoint2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomFloatingPoint2Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomFloatingPoint3': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomFloatingPoint3', - type: 'double', - }, - 'cef.extensions.deviceCustomFloatingPoint4': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomFloatingPoint4', - type: 'double', - }, - 'cef.extensions.deviceCustomIPv6Address1': { - category: 'cef', - description: - 'One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomIPv6Address1', - type: 'ip', - }, - 'cef.extensions.deviceCustomIPv6Address1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomIPv6Address1Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomIPv6Address2': { - category: 'cef', - description: - 'One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomIPv6Address2', - type: 'ip', - }, - 'cef.extensions.deviceCustomIPv6Address2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomIPv6Address2Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomIPv6Address3': { - category: 'cef', - description: - 'One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomIPv6Address3', - type: 'ip', - }, - 'cef.extensions.deviceCustomIPv6Address3Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomIPv6Address3Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomIPv6Address4': { - category: 'cef', - description: - 'One of four IPv6 address fields available to map fields that do not apply to any other in this dictionary.', - name: 'cef.extensions.deviceCustomIPv6Address4', - type: 'ip', - }, - 'cef.extensions.deviceCustomIPv6Address4Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomIPv6Address4Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomNumber1': { - category: 'cef', - description: - 'One of three number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomNumber1', - type: 'long', - }, - 'cef.extensions.deviceCustomNumber1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomNumber1Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomNumber2': { - category: 'cef', - description: - 'One of three number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomNumber2', - type: 'long', - }, - 'cef.extensions.deviceCustomNumber2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomNumber2Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomNumber3': { - category: 'cef', - description: - 'One of three number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomNumber3', - type: 'long', - }, - 'cef.extensions.deviceCustomNumber3Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomNumber3Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString1': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString1', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString1Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString2': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString2', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString2Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString3': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString3', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString3Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString3Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString4': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString4', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString4Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString4Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString5': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString5', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString5Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString5Label', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString6': { - category: 'cef', - description: - 'One of six strings available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceCustomString6', - type: 'keyword', - }, - 'cef.extensions.deviceCustomString6Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceCustomString6Label', - type: 'keyword', - }, - 'cef.extensions.deviceDirection': { - category: 'cef', - description: - 'Any information about what direction the observed communication has taken. The following values are supported - "0" for inbound or "1" for outbound.', - name: 'cef.extensions.deviceDirection', - type: 'long', - }, - 'cef.extensions.deviceDnsDomain': { - category: 'cef', - description: 'The DNS domain part of the complete fully qualified domain name (FQDN).', - name: 'cef.extensions.deviceDnsDomain', - type: 'keyword', - }, - 'cef.extensions.deviceEventCategory': { - category: 'cef', - description: - 'Represents the category assigned by the originating device. Devices often use their own categorization schema to classify event. Example "/Monitor/Disk/Read".', - name: 'cef.extensions.deviceEventCategory', - type: 'keyword', - }, - 'cef.extensions.deviceExternalId': { - category: 'cef', - description: 'A name that uniquely identifies the device generating this event.', - name: 'cef.extensions.deviceExternalId', - type: 'keyword', - }, - 'cef.extensions.deviceFacility': { - category: 'cef', - description: - 'The facility generating this event. For example, Syslog has an explicit facility associated with every event.', - name: 'cef.extensions.deviceFacility', - type: 'keyword', - }, - 'cef.extensions.deviceFlexNumber1': { - category: 'cef', - description: - 'One of two alternative number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceFlexNumber1', - type: 'long', - }, - 'cef.extensions.deviceFlexNumber1Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceFlexNumber1Label', - type: 'keyword', - }, - 'cef.extensions.deviceFlexNumber2': { - category: 'cef', - description: - 'One of two alternative number fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible.', - name: 'cef.extensions.deviceFlexNumber2', - type: 'long', - }, - 'cef.extensions.deviceFlexNumber2Label': { - category: 'cef', - description: - 'All custom fields have a corresponding label field. Each of these fields is a string and describes the purpose of the custom field.', - name: 'cef.extensions.deviceFlexNumber2Label', - type: 'keyword', - }, - 'cef.extensions.deviceHostName': { - category: 'cef', - description: - 'The format should be a fully qualified domain name (FQDN) associated with the device node, when a node is available.', - name: 'cef.extensions.deviceHostName', - type: 'keyword', - }, - 'cef.extensions.deviceInboundInterface': { - category: 'cef', - description: 'Interface on which the packet or data entered the device.', - name: 'cef.extensions.deviceInboundInterface', - type: 'keyword', - }, - 'cef.extensions.deviceMacAddress': { - category: 'cef', - description: 'Six colon-separated hexadecimal numbers.', - name: 'cef.extensions.deviceMacAddress', - type: 'keyword', - }, - 'cef.extensions.deviceNtDomain': { - category: 'cef', - description: 'The Windows domain name of the device address.', - name: 'cef.extensions.deviceNtDomain', - type: 'keyword', - }, - 'cef.extensions.deviceOutboundInterface': { - category: 'cef', - description: 'Interface on which the packet or data left the device.', - name: 'cef.extensions.deviceOutboundInterface', - type: 'keyword', - }, - 'cef.extensions.devicePayloadId': { - category: 'cef', - description: 'Unique identifier for the payload associated with the event.', - name: 'cef.extensions.devicePayloadId', - type: 'keyword', - }, - 'cef.extensions.deviceProcessId': { - category: 'cef', - description: 'Provides the ID of the process on the device generating the event.', - name: 'cef.extensions.deviceProcessId', - type: 'long', - }, - 'cef.extensions.deviceProcessName': { - category: 'cef', - description: - 'Process name associated with the event. An example might be the process generating the syslog entry in UNIX.', - name: 'cef.extensions.deviceProcessName', - type: 'keyword', - }, - 'cef.extensions.deviceReceiptTime': { - category: 'cef', - description: - 'The time at which the event related to the activity was received. The format is MMM dd yyyy HH:mm:ss or milliseconds since epoch (Jan 1st 1970)', - name: 'cef.extensions.deviceReceiptTime', - type: 'date', - }, - 'cef.extensions.deviceTimeZone': { - category: 'cef', - description: 'The time zone for the device generating the event.', - name: 'cef.extensions.deviceTimeZone', - type: 'keyword', - }, - 'cef.extensions.deviceTranslatedAddress': { - category: 'cef', - description: - 'Identifies the translated device address that the event refers to in an IP network.', - name: 'cef.extensions.deviceTranslatedAddress', - type: 'ip', - }, - 'cef.extensions.deviceTranslatedZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.deviceTranslatedZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.deviceTranslatedZoneURI': { - category: 'cef', - description: - 'The URI for the Translated Zone that the device asset has been assigned to in ArcSight.', - name: 'cef.extensions.deviceTranslatedZoneURI', - type: 'keyword', - }, - 'cef.extensions.deviceZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.deviceZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.deviceZoneURI': { - category: 'cef', - description: 'Thee URI for the Zone that the device asset has been assigned to in ArcSight.', - name: 'cef.extensions.deviceZoneURI', - type: 'keyword', - }, - 'cef.extensions.endTime': { - category: 'cef', - description: - 'The time at which the activity related to the event ended. The format is MMM dd yyyy HH:mm:ss or milliseconds since epoch (Jan 1st1970). An example would be reporting the end of a session.', - name: 'cef.extensions.endTime', - type: 'date', - }, - 'cef.extensions.eventId': { - category: 'cef', - description: 'This is a unique ID that ArcSight assigns to each event.', - name: 'cef.extensions.eventId', - type: 'long', - }, - 'cef.extensions.eventOutcome': { - category: 'cef', - description: "Displays the outcome, usually as 'success' or 'failure'.", - name: 'cef.extensions.eventOutcome', - type: 'keyword', - }, - 'cef.extensions.externalId': { - category: 'cef', - description: - 'The ID used by an originating device. They are usually increasing numbers, associated with events.', - name: 'cef.extensions.externalId', - type: 'keyword', - }, - 'cef.extensions.fileCreateTime': { - category: 'cef', - description: 'Time when the file was created.', - name: 'cef.extensions.fileCreateTime', - type: 'date', - }, - 'cef.extensions.fileHash': { - category: 'cef', - description: 'Hash of a file.', - name: 'cef.extensions.fileHash', - type: 'keyword', - }, - 'cef.extensions.fileId': { - category: 'cef', - description: 'An ID associated with a file could be the inode.', - name: 'cef.extensions.fileId', - type: 'keyword', - }, - 'cef.extensions.fileModificationTime': { - category: 'cef', - description: 'Time when the file was last modified.', - name: 'cef.extensions.fileModificationTime', - type: 'date', - }, - 'cef.extensions.filename': { - category: 'cef', - description: 'Name of the file only (without its path).', - name: 'cef.extensions.filename', - type: 'keyword', - }, - 'cef.extensions.filePath': { - category: 'cef', - description: 'Full path to the file, including file name itself.', - name: 'cef.extensions.filePath', - type: 'keyword', - }, - 'cef.extensions.filePermission': { - category: 'cef', - description: 'Permissions of the file.', - name: 'cef.extensions.filePermission', - type: 'keyword', - }, - 'cef.extensions.fileSize': { - category: 'cef', - description: 'Size of the file.', - name: 'cef.extensions.fileSize', - type: 'long', - }, - 'cef.extensions.fileType': { - category: 'cef', - description: 'Type of file (pipe, socket, etc.)', - name: 'cef.extensions.fileType', - type: 'keyword', - }, - 'cef.extensions.flexDate1': { - category: 'cef', - description: - 'A timestamp field available to map a timestamp that does not apply to any other defined timestamp field in this dictionary. Use all flex fields sparingly and seek a more specific, dictionary supplied field when possible. These fields are typically reserved for customer use and should not be set by vendors unless necessary.', - name: 'cef.extensions.flexDate1', - type: 'date', - }, - 'cef.extensions.flexDate1Label': { - category: 'cef', - description: 'The label field is a string and describes the purpose of the flex field.', - name: 'cef.extensions.flexDate1Label', - type: 'keyword', - }, - 'cef.extensions.flexString1': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible. These fields are typically reserved for customer use and should not be set by vendors unless necessary.', - name: 'cef.extensions.flexString1', - type: 'keyword', - }, - 'cef.extensions.flexString2': { - category: 'cef', - description: - 'One of four floating point fields available to map fields that do not apply to any other in this dictionary. Use sparingly and seek a more specific, dictionary supplied field when possible. These fields are typically reserved for customer use and should not be set by vendors unless necessary.', - name: 'cef.extensions.flexString2', - type: 'keyword', - }, - 'cef.extensions.flexString1Label': { - category: 'cef', - description: 'The label field is a string and describes the purpose of the flex field.', - name: 'cef.extensions.flexString1Label', - type: 'keyword', - }, - 'cef.extensions.flexString2Label': { - category: 'cef', - description: 'The label field is a string and describes the purpose of the flex field.', - name: 'cef.extensions.flexString2Label', - type: 'keyword', - }, - 'cef.extensions.message': { - category: 'cef', - description: - 'An arbitrary message giving more details about the event. Multi-line entries can be produced by using \\n as the new line separator.', - name: 'cef.extensions.message', - type: 'keyword', - }, - 'cef.extensions.oldFileCreateTime': { - category: 'cef', - description: 'Time when old file was created.', - name: 'cef.extensions.oldFileCreateTime', - type: 'date', - }, - 'cef.extensions.oldFileHash': { - category: 'cef', - description: 'Hash of the old file.', - name: 'cef.extensions.oldFileHash', - type: 'keyword', - }, - 'cef.extensions.oldFileId': { - category: 'cef', - description: 'An ID associated with the old file could be the inode.', - name: 'cef.extensions.oldFileId', - type: 'keyword', - }, - 'cef.extensions.oldFileModificationTime': { - category: 'cef', - description: 'Time when old file was last modified.', - name: 'cef.extensions.oldFileModificationTime', - type: 'date', - }, - 'cef.extensions.oldFileName': { - category: 'cef', - description: 'Name of the old file.', - name: 'cef.extensions.oldFileName', - type: 'keyword', - }, - 'cef.extensions.oldFilePath': { - category: 'cef', - description: 'Full path to the old file, including the file name itself.', - name: 'cef.extensions.oldFilePath', - type: 'keyword', - }, - 'cef.extensions.oldFilePermission': { - category: 'cef', - description: 'Permissions of the old file.', - name: 'cef.extensions.oldFilePermission', - type: 'keyword', - }, - 'cef.extensions.oldFileSize': { - category: 'cef', - description: 'Size of the old file.', - name: 'cef.extensions.oldFileSize', - type: 'long', - }, - 'cef.extensions.oldFileType': { - category: 'cef', - description: 'Type of the old file (pipe, socket, etc.)', - name: 'cef.extensions.oldFileType', - type: 'keyword', - }, - 'cef.extensions.rawEvent': { - category: 'cef', - description: 'null', - name: 'cef.extensions.rawEvent', - type: 'keyword', - }, - 'cef.extensions.Reason': { - category: 'cef', - description: - 'The reason an audit event was generated. For example "bad password" or "unknown user". This could also be an error or return code. Example "0x1234".', - name: 'cef.extensions.Reason', - type: 'keyword', - }, - 'cef.extensions.requestClientApplication': { - category: 'cef', - description: 'The User-Agent associated with the request.', - name: 'cef.extensions.requestClientApplication', - type: 'keyword', - }, - 'cef.extensions.requestContext': { - category: 'cef', - description: - 'Description of the content from which the request originated (for example, HTTP Referrer)', - name: 'cef.extensions.requestContext', - type: 'keyword', - }, - 'cef.extensions.requestCookies': { - category: 'cef', - description: 'Cookies associated with the request.', - name: 'cef.extensions.requestCookies', - type: 'keyword', - }, - 'cef.extensions.requestMethod': { - category: 'cef', - description: 'The HTTP method used to access a URL.', - name: 'cef.extensions.requestMethod', - type: 'keyword', - }, - 'cef.extensions.requestUrl': { - category: 'cef', - description: - 'In the case of an HTTP request, this field contains the URL accessed. The URL should contain the protocol as well.', - name: 'cef.extensions.requestUrl', - type: 'keyword', - }, - 'cef.extensions.sourceAddress': { - category: 'cef', - description: 'Identifies the source that an event refers to in an IP network.', - name: 'cef.extensions.sourceAddress', - type: 'ip', - }, - 'cef.extensions.sourceDnsDomain': { - category: 'cef', - description: 'The DNS domain part of the complete fully qualified domain name (FQDN).', - name: 'cef.extensions.sourceDnsDomain', - type: 'keyword', - }, - 'cef.extensions.sourceGeoLatitude': { - category: 'cef', - description: 'null', - name: 'cef.extensions.sourceGeoLatitude', - type: 'double', - }, - 'cef.extensions.sourceGeoLongitude': { - category: 'cef', - description: 'null', - name: 'cef.extensions.sourceGeoLongitude', - type: 'double', - }, - 'cef.extensions.sourceHostName': { - category: 'cef', - description: - "Identifies the source that an event refers to in an IP network. The format should be a fully qualified domain name (FQDN) associated with the source node, when a mode is available. Examples: 'host' or 'host.domain.com'. ", - name: 'cef.extensions.sourceHostName', - type: 'keyword', - }, - 'cef.extensions.sourceMacAddress': { - category: 'cef', - description: 'Six colon-separated hexadecimal numbers.', - example: '00:0d:60:af:1b:61', - name: 'cef.extensions.sourceMacAddress', - type: 'keyword', - }, - 'cef.extensions.sourceNtDomain': { - category: 'cef', - description: 'The Windows domain name for the source address.', - name: 'cef.extensions.sourceNtDomain', - type: 'keyword', - }, - 'cef.extensions.sourcePort': { - category: 'cef', - description: 'The valid port numbers are 0 to 65535.', - name: 'cef.extensions.sourcePort', - type: 'long', - }, - 'cef.extensions.sourceProcessId': { - category: 'cef', - description: 'The ID of the source process associated with the event.', - name: 'cef.extensions.sourceProcessId', - type: 'long', - }, - 'cef.extensions.sourceProcessName': { - category: 'cef', - description: "The name of the event's source process.", - name: 'cef.extensions.sourceProcessName', - type: 'keyword', - }, - 'cef.extensions.sourceServiceName': { - category: 'cef', - description: 'The service that is responsible for generating this event.', - name: 'cef.extensions.sourceServiceName', - type: 'keyword', - }, - 'cef.extensions.sourceTranslatedAddress': { - category: 'cef', - description: 'Identifies the translated source that the event refers to in an IP network.', - name: 'cef.extensions.sourceTranslatedAddress', - type: 'ip', - }, - 'cef.extensions.sourceTranslatedPort': { - category: 'cef', - description: - 'A port number after being translated by, for example, a firewall. Valid port numbers are 0 to 65535.', - name: 'cef.extensions.sourceTranslatedPort', - type: 'long', - }, - 'cef.extensions.sourceTranslatedZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.sourceTranslatedZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.sourceTranslatedZoneURI': { - category: 'cef', - description: - 'The URI for the Translated Zone that the destination asset has been assigned to in ArcSight.', - name: 'cef.extensions.sourceTranslatedZoneURI', - type: 'keyword', - }, - 'cef.extensions.sourceUserId': { - category: 'cef', - description: - 'Identifies the source user by ID. This is the user associated with the source of the event. For example, in UNIX, the root user is generally associated with user ID 0.', - name: 'cef.extensions.sourceUserId', - type: 'keyword', - }, - 'cef.extensions.sourceUserName': { - category: 'cef', - description: - 'Identifies the source user by name. Email addresses are also mapped into the UserName fields. The sender is a candidate to put into this field.', - name: 'cef.extensions.sourceUserName', - type: 'keyword', - }, - 'cef.extensions.sourceUserPrivileges': { - category: 'cef', - description: - 'The typical values are "Administrator", "User", and "Guest". It identifies the source user\'s privileges. In UNIX, for example, activity executed by the root user would be identified with "Administrator".', - name: 'cef.extensions.sourceUserPrivileges', - type: 'keyword', - }, - 'cef.extensions.sourceZoneExternalID': { - category: 'cef', - description: 'null', - name: 'cef.extensions.sourceZoneExternalID', - type: 'keyword', - }, - 'cef.extensions.sourceZoneURI': { - category: 'cef', - description: 'The URI for the Zone that the source asset has been assigned to in ArcSight.', - name: 'cef.extensions.sourceZoneURI', - type: 'keyword', - }, - 'cef.extensions.startTime': { - category: 'cef', - description: - 'The time when the activity the event referred to started. The format is MMM dd yyyy HH:mm:ss or milliseconds since epoch (Jan 1st 1970)', - name: 'cef.extensions.startTime', - type: 'date', - }, - 'cef.extensions.transportProtocol': { - category: 'cef', - description: - 'Identifies the Layer-4 protocol used. The possible values are protocols such as TCP or UDP.', - name: 'cef.extensions.transportProtocol', - type: 'keyword', - }, - 'cef.extensions.type': { - category: 'cef', - description: - '0 means base event, 1 means aggregated, 2 means correlation, and 3 means action. This field can be omitted for base events (type 0).', - name: 'cef.extensions.type', - type: 'long', - }, - 'cef.extensions.categoryDeviceType': { - category: 'cef', - description: 'Device type. Examples - Proxy, IDS, Web Server', - name: 'cef.extensions.categoryDeviceType', - type: 'keyword', - }, - 'cef.extensions.categoryObject': { - category: 'cef', - description: - 'Object that the event is about. For example it can be an operating sytem, database, file, etc.', - name: 'cef.extensions.categoryObject', - type: 'keyword', - }, - 'cef.extensions.categoryBehavior': { - category: 'cef', - description: - "Action or a behavior associated with an event. It's what is being done to the object.", - name: 'cef.extensions.categoryBehavior', - type: 'keyword', - }, - 'cef.extensions.categoryTechnique': { - category: 'cef', - description: 'Technique being used (e.g. /DoS).', - name: 'cef.extensions.categoryTechnique', - type: 'keyword', - }, - 'cef.extensions.categoryDeviceGroup': { - category: 'cef', - description: 'General device group like Firewall.', - name: 'cef.extensions.categoryDeviceGroup', - type: 'keyword', - }, - 'cef.extensions.categorySignificance': { - category: 'cef', - description: 'Characterization of the importance of the event.', - name: 'cef.extensions.categorySignificance', - type: 'keyword', - }, - 'cef.extensions.categoryOutcome': { - category: 'cef', - description: 'Outcome of the event (e.g. sucess, failure, or attempt).', - name: 'cef.extensions.categoryOutcome', - type: 'keyword', - }, - 'cef.extensions.managerReceiptTime': { - category: 'cef', - description: 'When the Arcsight ESM received the event.', - name: 'cef.extensions.managerReceiptTime', - type: 'date', - }, - 'source.service.name': { - category: 'source', - description: 'Service that is the source of the event.', - name: 'source.service.name', - type: 'keyword', - }, - 'destination.service.name': { - category: 'destination', - description: 'Service that is the target of the event.', - name: 'destination.service.name', - type: 'keyword', - }, - type: { - category: 'base', - description: - 'The type of the transaction (for example, HTTP, MySQL, Redis, or RUM) or "flow" in case of flows. ', - name: 'type', - }, - 'server.process.name': { - category: 'server', - description: 'The name of the process that served the transaction. ', - name: 'server.process.name', - }, - 'server.process.args': { - category: 'server', - description: 'The command-line of the process that served the transaction. ', - name: 'server.process.args', - }, - 'server.process.executable': { - category: 'server', - description: 'Absolute path to the server process executable. ', - name: 'server.process.executable', - }, - 'server.process.working_directory': { - category: 'server', - description: 'The working directory of the server process. ', - name: 'server.process.working_directory', - }, - 'server.process.start': { - category: 'server', - description: 'The time the server process started. ', - name: 'server.process.start', - }, - 'client.process.name': { - category: 'client', - description: 'The name of the process that initiated the transaction. ', - name: 'client.process.name', - }, - 'client.process.args': { - category: 'client', - description: 'The command-line of the process that initiated the transaction. ', - name: 'client.process.args', - }, - 'client.process.executable': { - category: 'client', - description: 'Absolute path to the client process executable. ', - name: 'client.process.executable', - }, - 'client.process.working_directory': { - category: 'client', - description: 'The working directory of the client process. ', - name: 'client.process.working_directory', - }, - 'client.process.start': { - category: 'client', - description: 'The time the client process started. ', - name: 'client.process.start', - }, - real_ip: { - category: 'base', - description: - 'If the server initiating the transaction is a proxy, this field contains the original client IP address. For HTTP, for example, the IP address extracted from a configurable HTTP header, by default `X-Forwarded-For`. Unless this field is disabled, it always has a value, and it matches the `client_ip` for non proxy clients. ', - name: 'real_ip', - type: 'alias', - }, - transport: { - category: 'base', - description: - 'The transport protocol used for the transaction. If not specified, then tcp is assumed. ', - name: 'transport', - type: 'alias', - }, - 'flow.final': { - category: 'flow', - description: - 'Indicates if event is last event in flow. If final is false, the event reports an intermediate flow state only. ', - name: 'flow.final', - type: 'boolean', - }, - 'flow.id': { - category: 'flow', - description: 'Internal flow ID based on connection meta data and address. ', - name: 'flow.id', - }, - 'flow.vlan': { - category: 'flow', - description: - "VLAN identifier from the 802.1q frame. In case of a multi-tagged frame this field will be an array with the outer tag's VLAN identifier listed first. ", - name: 'flow.vlan', - type: 'long', - }, - flow_id: { - category: 'base', - name: 'flow_id', - type: 'alias', - }, - final: { - category: 'base', - name: 'final', - type: 'alias', - }, - vlan: { - category: 'base', - name: 'vlan', - type: 'alias', - }, - 'source.stats.net_bytes_total': { - category: 'source', - name: 'source.stats.net_bytes_total', - type: 'alias', - }, - 'source.stats.net_packets_total': { - category: 'source', - name: 'source.stats.net_packets_total', - type: 'alias', - }, - 'dest.stats.net_bytes_total': { - category: 'dest', - name: 'dest.stats.net_bytes_total', - type: 'alias', - }, - 'dest.stats.net_packets_total': { - category: 'dest', - name: 'dest.stats.net_packets_total', - type: 'alias', - }, - status: { - category: 'base', - description: - 'The high level status of the transaction. The way to compute this value depends on the protocol, but the result has a meaning independent of the protocol. ', - name: 'status', - }, - method: { - category: 'base', - description: - 'The command/verb/method of the transaction. For HTTP, this is the method name (GET, POST, PUT, and so on), for SQL this is the verb (SELECT, UPDATE, DELETE, and so on). ', - name: 'method', - }, - resource: { - category: 'base', - description: - 'The logical resource that this transaction refers to. For HTTP, this is the URL path up to the last slash (/). For example, if the URL is `/users/1`, the resource is `/users`. For databases, the resource is typically the table name. The field is not filled for all transaction types. ', - name: 'resource', - }, - path: { - category: 'base', - description: - 'The path the transaction refers to. For HTTP, this is the URL. For SQL databases, this is the table name. For key-value stores, this is the key. ', - name: 'path', - }, - query: { - category: 'base', - description: - 'The query in a human readable format. For HTTP, it will typically be something like `GET /users/_search?name=test`. For MySQL, it is something like `SELECT id from users where name=test`. ', - name: 'query', - type: 'keyword', - }, - params: { - category: 'base', - description: - 'The request parameters. For HTTP, these are the POST or GET parameters. For Thrift-RPC, these are the parameters from the request. ', - name: 'params', - type: 'text', - }, - notes: { - category: 'base', - description: - 'Messages from Packetbeat itself. This field usually contains error messages for interpreting the raw data. This information can be helpful for troubleshooting. ', - name: 'notes', - type: 'alias', - }, - request: { - category: 'base', - description: - 'For text protocols, this is the request as seen on the wire (application layer only). For binary protocols this is our representation of the request. ', - name: 'request', - type: 'text', - }, - response: { - category: 'base', - description: - 'For text protocols, this is the response as seen on the wire (application layer only). For binary protocols this is our representation of the request. ', - name: 'response', - type: 'text', - }, - bytes_in: { - category: 'base', - description: - 'The number of bytes of the request. Note that this size is the application layer message length, without the length of the IP or TCP headers. ', - name: 'bytes_in', - type: 'alias', - }, - bytes_out: { - category: 'base', - description: - 'The number of bytes of the response. Note that this size is the application layer message length, without the length of the IP or TCP headers. ', - name: 'bytes_out', - type: 'alias', - }, - 'amqp.reply-code': { - category: 'amqp', - description: 'AMQP reply code to an error, similar to http reply-code ', - example: 404, - name: 'amqp.reply-code', - type: 'long', - }, - 'amqp.reply-text': { - category: 'amqp', - description: 'Text explaining the error. ', - name: 'amqp.reply-text', - type: 'keyword', - }, - 'amqp.class-id': { - category: 'amqp', - description: 'Failing method class. ', - name: 'amqp.class-id', - type: 'long', - }, - 'amqp.method-id': { - category: 'amqp', - description: 'Failing method ID. ', - name: 'amqp.method-id', - type: 'long', - }, - 'amqp.exchange': { - category: 'amqp', - description: 'Name of the exchange. ', - name: 'amqp.exchange', - type: 'keyword', - }, - 'amqp.exchange-type': { - category: 'amqp', - description: 'Exchange type. ', - example: 'fanout', - name: 'amqp.exchange-type', - type: 'keyword', - }, - 'amqp.passive': { - category: 'amqp', - description: 'If set, do not create exchange/queue. ', - name: 'amqp.passive', - type: 'boolean', - }, - 'amqp.durable': { - category: 'amqp', - description: 'If set, request a durable exchange/queue. ', - name: 'amqp.durable', - type: 'boolean', - }, - 'amqp.exclusive': { - category: 'amqp', - description: 'If set, request an exclusive queue. ', - name: 'amqp.exclusive', - type: 'boolean', - }, - 'amqp.auto-delete': { - category: 'amqp', - description: 'If set, auto-delete queue when unused. ', - name: 'amqp.auto-delete', - type: 'boolean', - }, - 'amqp.no-wait': { - category: 'amqp', - description: 'If set, the server will not respond to the method. ', - name: 'amqp.no-wait', - type: 'boolean', - }, - 'amqp.consumer-tag': { - category: 'amqp', - description: 'Identifier for the consumer, valid within the current channel. ', - name: 'amqp.consumer-tag', - }, - 'amqp.delivery-tag': { - category: 'amqp', - description: 'The server-assigned and channel-specific delivery tag. ', - name: 'amqp.delivery-tag', - type: 'long', - }, - 'amqp.message-count': { - category: 'amqp', - description: - 'The number of messages in the queue, which will be zero for newly-declared queues. ', - name: 'amqp.message-count', - type: 'long', - }, - 'amqp.consumer-count': { - category: 'amqp', - description: 'The number of consumers of a queue. ', - name: 'amqp.consumer-count', - type: 'long', - }, - 'amqp.routing-key': { - category: 'amqp', - description: 'Message routing key. ', - name: 'amqp.routing-key', - type: 'keyword', - }, - 'amqp.no-ack': { - category: 'amqp', - description: 'If set, the server does not expect acknowledgements for messages. ', - name: 'amqp.no-ack', - type: 'boolean', - }, - 'amqp.no-local': { - category: 'amqp', - description: - 'If set, the server will not send messages to the connection that published them. ', - name: 'amqp.no-local', - type: 'boolean', - }, - 'amqp.if-unused': { - category: 'amqp', - description: 'Delete only if unused. ', - name: 'amqp.if-unused', - type: 'boolean', - }, - 'amqp.if-empty': { - category: 'amqp', - description: 'Delete only if empty. ', - name: 'amqp.if-empty', - type: 'boolean', - }, - 'amqp.queue': { - category: 'amqp', - description: 'The queue name identifies the queue within the vhost. ', - name: 'amqp.queue', - type: 'keyword', - }, - 'amqp.redelivered': { - category: 'amqp', - description: - 'Indicates that the message has been previously delivered to this or another client. ', - name: 'amqp.redelivered', - type: 'boolean', - }, - 'amqp.multiple': { - category: 'amqp', - description: 'Acknowledge multiple messages. ', - name: 'amqp.multiple', - type: 'boolean', - }, - 'amqp.arguments': { - category: 'amqp', - description: 'Optional additional arguments passed to some methods. Can be of various types. ', - name: 'amqp.arguments', - type: 'object', - }, - 'amqp.mandatory': { - category: 'amqp', - description: 'Indicates mandatory routing. ', - name: 'amqp.mandatory', - type: 'boolean', - }, - 'amqp.immediate': { - category: 'amqp', - description: 'Request immediate delivery. ', - name: 'amqp.immediate', - type: 'boolean', - }, - 'amqp.content-type': { - category: 'amqp', - description: 'MIME content type. ', - example: 'text/plain', - name: 'amqp.content-type', - type: 'keyword', - }, - 'amqp.content-encoding': { - category: 'amqp', - description: 'MIME content encoding. ', - name: 'amqp.content-encoding', - type: 'keyword', - }, - 'amqp.headers': { - category: 'amqp', - description: 'Message header field table. ', - name: 'amqp.headers', - type: 'object', - }, - 'amqp.delivery-mode': { - category: 'amqp', - description: 'Non-persistent (1) or persistent (2). ', - name: 'amqp.delivery-mode', - type: 'keyword', - }, - 'amqp.priority': { - category: 'amqp', - description: 'Message priority, 0 to 9. ', - name: 'amqp.priority', - type: 'long', - }, - 'amqp.correlation-id': { - category: 'amqp', - description: 'Application correlation identifier. ', - name: 'amqp.correlation-id', - type: 'keyword', - }, - 'amqp.reply-to': { - category: 'amqp', - description: 'Address to reply to. ', - name: 'amqp.reply-to', - type: 'keyword', - }, - 'amqp.expiration': { - category: 'amqp', - description: 'Message expiration specification. ', - name: 'amqp.expiration', - type: 'keyword', - }, - 'amqp.message-id': { - category: 'amqp', - description: 'Application message identifier. ', - name: 'amqp.message-id', - type: 'keyword', - }, - 'amqp.timestamp': { - category: 'amqp', - description: 'Message timestamp. ', - name: 'amqp.timestamp', - type: 'keyword', - }, - 'amqp.type': { - category: 'amqp', - description: 'Message type name. ', - name: 'amqp.type', - type: 'keyword', - }, - 'amqp.user-id': { - category: 'amqp', - description: 'Creating user id. ', - name: 'amqp.user-id', - type: 'keyword', - }, - 'amqp.app-id': { - category: 'amqp', - description: 'Creating application id. ', - name: 'amqp.app-id', - type: 'keyword', - }, - no_request: { - category: 'base', - name: 'no_request', - type: 'alias', - }, - 'cassandra.no_request': { - category: 'cassandra', - description: 'Indicates that there is no request because this is a PUSH message. ', - name: 'cassandra.no_request', - type: 'boolean', - }, - 'cassandra.request.headers.version': { - category: 'cassandra', - description: 'The version of the protocol.', - name: 'cassandra.request.headers.version', - type: 'long', - }, - 'cassandra.request.headers.flags': { - category: 'cassandra', - description: 'Flags applying to this frame.', - name: 'cassandra.request.headers.flags', - type: 'keyword', - }, - 'cassandra.request.headers.stream': { - category: 'cassandra', - description: - 'A frame has a stream id. If a client sends a request message with the stream id X, it is guaranteed that the stream id of the response to that message will be X.', - name: 'cassandra.request.headers.stream', - type: 'keyword', - }, - 'cassandra.request.headers.op': { - category: 'cassandra', - description: 'An operation type that distinguishes the actual message.', - name: 'cassandra.request.headers.op', - type: 'keyword', - }, - 'cassandra.request.headers.length': { - category: 'cassandra', - description: - 'A integer representing the length of the body of the frame (a frame is limited to 256MB in length).', - name: 'cassandra.request.headers.length', - type: 'long', - }, - 'cassandra.request.query': { - category: 'cassandra', - description: 'The CQL query which client send to cassandra.', - name: 'cassandra.request.query', - type: 'keyword', - }, - 'cassandra.response.headers.version': { - category: 'cassandra', - description: 'The version of the protocol.', - name: 'cassandra.response.headers.version', - type: 'long', - }, - 'cassandra.response.headers.flags': { - category: 'cassandra', - description: 'Flags applying to this frame.', - name: 'cassandra.response.headers.flags', - type: 'keyword', - }, - 'cassandra.response.headers.stream': { - category: 'cassandra', - description: - 'A frame has a stream id. If a client sends a request message with the stream id X, it is guaranteed that the stream id of the response to that message will be X.', - name: 'cassandra.response.headers.stream', - type: 'keyword', - }, - 'cassandra.response.headers.op': { - category: 'cassandra', - description: 'An operation type that distinguishes the actual message.', - name: 'cassandra.response.headers.op', - type: 'keyword', - }, - 'cassandra.response.headers.length': { - category: 'cassandra', - description: - 'A integer representing the length of the body of the frame (a frame is limited to 256MB in length).', - name: 'cassandra.response.headers.length', - type: 'long', - }, - 'cassandra.response.result.type': { - category: 'cassandra', - description: 'Cassandra result type.', - name: 'cassandra.response.result.type', - type: 'keyword', - }, - 'cassandra.response.result.rows.num_rows': { - category: 'cassandra', - description: 'Representing the number of rows present in this result.', - name: 'cassandra.response.result.rows.num_rows', - type: 'long', - }, - 'cassandra.response.result.rows.meta.keyspace': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the keyspace name.', - name: 'cassandra.response.result.rows.meta.keyspace', - type: 'keyword', - }, - 'cassandra.response.result.rows.meta.table': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the table name.', - name: 'cassandra.response.result.rows.meta.table', - type: 'keyword', - }, - 'cassandra.response.result.rows.meta.flags': { - category: 'cassandra', - description: 'Provides information on the formatting of the remaining information.', - name: 'cassandra.response.result.rows.meta.flags', - type: 'keyword', - }, - 'cassandra.response.result.rows.meta.col_count': { - category: 'cassandra', - description: - 'Representing the number of columns selected by the query that produced this result.', - name: 'cassandra.response.result.rows.meta.col_count', - type: 'long', - }, - 'cassandra.response.result.rows.meta.pkey_columns': { - category: 'cassandra', - description: 'Representing the PK columns index and counts.', - name: 'cassandra.response.result.rows.meta.pkey_columns', - type: 'long', - }, - 'cassandra.response.result.rows.meta.paging_state': { - category: 'cassandra', - description: - 'The paging_state is a bytes value that should be used in QUERY/EXECUTE to continue paging and retrieve the remainder of the result for this query.', - name: 'cassandra.response.result.rows.meta.paging_state', - type: 'keyword', - }, - 'cassandra.response.result.keyspace': { - category: 'cassandra', - description: 'Indicating the name of the keyspace that has been set.', - name: 'cassandra.response.result.keyspace', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.change': { - category: 'cassandra', - description: 'Representing the type of changed involved.', - name: 'cassandra.response.result.schema_change.change', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.keyspace': { - category: 'cassandra', - description: 'This describes which keyspace has changed.', - name: 'cassandra.response.result.schema_change.keyspace', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.table': { - category: 'cassandra', - description: 'This describes which table has changed.', - name: 'cassandra.response.result.schema_change.table', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.object': { - category: 'cassandra', - description: - 'This describes the name of said affected object (either the table, user type, function, or aggregate name).', - name: 'cassandra.response.result.schema_change.object', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.target': { - category: 'cassandra', - description: 'Target could be "FUNCTION" or "AGGREGATE", multiple arguments.', - name: 'cassandra.response.result.schema_change.target', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.name': { - category: 'cassandra', - description: 'The function/aggregate name.', - name: 'cassandra.response.result.schema_change.name', - type: 'keyword', - }, - 'cassandra.response.result.schema_change.args': { - category: 'cassandra', - description: 'One string for each argument type (as CQL type).', - name: 'cassandra.response.result.schema_change.args', - type: 'keyword', - }, - 'cassandra.response.result.prepared.prepared_id': { - category: 'cassandra', - description: 'Representing the prepared query ID.', - name: 'cassandra.response.result.prepared.prepared_id', - type: 'keyword', - }, - 'cassandra.response.result.prepared.req_meta.keyspace': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the keyspace name.', - name: 'cassandra.response.result.prepared.req_meta.keyspace', - type: 'keyword', - }, - 'cassandra.response.result.prepared.req_meta.table': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the table name.', - name: 'cassandra.response.result.prepared.req_meta.table', - type: 'keyword', - }, - 'cassandra.response.result.prepared.req_meta.flags': { - category: 'cassandra', - description: 'Provides information on the formatting of the remaining information.', - name: 'cassandra.response.result.prepared.req_meta.flags', - type: 'keyword', - }, - 'cassandra.response.result.prepared.req_meta.col_count': { - category: 'cassandra', - description: - 'Representing the number of columns selected by the query that produced this result.', - name: 'cassandra.response.result.prepared.req_meta.col_count', - type: 'long', - }, - 'cassandra.response.result.prepared.req_meta.pkey_columns': { - category: 'cassandra', - description: 'Representing the PK columns index and counts.', - name: 'cassandra.response.result.prepared.req_meta.pkey_columns', - type: 'long', - }, - 'cassandra.response.result.prepared.req_meta.paging_state': { - category: 'cassandra', - description: - 'The paging_state is a bytes value that should be used in QUERY/EXECUTE to continue paging and retrieve the remainder of the result for this query.', - name: 'cassandra.response.result.prepared.req_meta.paging_state', - type: 'keyword', - }, - 'cassandra.response.result.prepared.resp_meta.keyspace': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the keyspace name.', - name: 'cassandra.response.result.prepared.resp_meta.keyspace', - type: 'keyword', - }, - 'cassandra.response.result.prepared.resp_meta.table': { - category: 'cassandra', - description: 'Only present after set Global_tables_spec, the table name.', - name: 'cassandra.response.result.prepared.resp_meta.table', - type: 'keyword', - }, - 'cassandra.response.result.prepared.resp_meta.flags': { - category: 'cassandra', - description: 'Provides information on the formatting of the remaining information.', - name: 'cassandra.response.result.prepared.resp_meta.flags', - type: 'keyword', - }, - 'cassandra.response.result.prepared.resp_meta.col_count': { - category: 'cassandra', - description: - 'Representing the number of columns selected by the query that produced this result.', - name: 'cassandra.response.result.prepared.resp_meta.col_count', - type: 'long', - }, - 'cassandra.response.result.prepared.resp_meta.pkey_columns': { - category: 'cassandra', - description: 'Representing the PK columns index and counts.', - name: 'cassandra.response.result.prepared.resp_meta.pkey_columns', - type: 'long', - }, - 'cassandra.response.result.prepared.resp_meta.paging_state': { - category: 'cassandra', - description: - 'The paging_state is a bytes value that should be used in QUERY/EXECUTE to continue paging and retrieve the remainder of the result for this query.', - name: 'cassandra.response.result.prepared.resp_meta.paging_state', - type: 'keyword', - }, - 'cassandra.response.supported': { - category: 'cassandra', - description: - 'Indicates which startup options are supported by the server. This message comes as a response to an OPTIONS message.', - name: 'cassandra.response.supported', - type: 'object', - }, - 'cassandra.response.authentication.class': { - category: 'cassandra', - description: 'Indicates the full class name of the IAuthenticator in use', - name: 'cassandra.response.authentication.class', - type: 'keyword', - }, - 'cassandra.response.warnings': { - category: 'cassandra', - description: 'The text of the warnings, only occur when Warning flag was set.', - name: 'cassandra.response.warnings', - type: 'keyword', - }, - 'cassandra.response.event.type': { - category: 'cassandra', - description: 'Representing the event type.', - name: 'cassandra.response.event.type', - type: 'keyword', - }, - 'cassandra.response.event.change': { - category: 'cassandra', - description: - 'The message corresponding respectively to the type of change followed by the address of the new/removed node.', - name: 'cassandra.response.event.change', - type: 'keyword', - }, - 'cassandra.response.event.host': { - category: 'cassandra', - description: 'Representing the node ip.', - name: 'cassandra.response.event.host', - type: 'keyword', - }, - 'cassandra.response.event.port': { - category: 'cassandra', - description: 'Representing the node port.', - name: 'cassandra.response.event.port', - type: 'long', - }, - 'cassandra.response.event.schema_change.change': { - category: 'cassandra', - description: 'Representing the type of changed involved.', - name: 'cassandra.response.event.schema_change.change', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.keyspace': { - category: 'cassandra', - description: 'This describes which keyspace has changed.', - name: 'cassandra.response.event.schema_change.keyspace', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.table': { - category: 'cassandra', - description: 'This describes which table has changed.', - name: 'cassandra.response.event.schema_change.table', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.object': { - category: 'cassandra', - description: - 'This describes the name of said affected object (either the table, user type, function, or aggregate name).', - name: 'cassandra.response.event.schema_change.object', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.target': { - category: 'cassandra', - description: 'Target could be "FUNCTION" or "AGGREGATE", multiple arguments.', - name: 'cassandra.response.event.schema_change.target', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.name': { - category: 'cassandra', - description: 'The function/aggregate name.', - name: 'cassandra.response.event.schema_change.name', - type: 'keyword', - }, - 'cassandra.response.event.schema_change.args': { - category: 'cassandra', - description: 'One string for each argument type (as CQL type).', - name: 'cassandra.response.event.schema_change.args', - type: 'keyword', - }, - 'cassandra.response.error.code': { - category: 'cassandra', - description: 'The error code of the Cassandra response.', - name: 'cassandra.response.error.code', - type: 'long', - }, - 'cassandra.response.error.msg': { - category: 'cassandra', - description: 'The error message of the Cassandra response.', - name: 'cassandra.response.error.msg', - type: 'keyword', - }, - 'cassandra.response.error.type': { - category: 'cassandra', - description: 'The error type of the Cassandra response.', - name: 'cassandra.response.error.type', - type: 'keyword', - }, - 'cassandra.response.error.details.read_consistency': { - category: 'cassandra', - description: 'Representing the consistency level of the query that triggered the exception.', - name: 'cassandra.response.error.details.read_consistency', - type: 'keyword', - }, - 'cassandra.response.error.details.required': { - category: 'cassandra', - description: - 'Representing the number of nodes that should be alive to respect consistency level.', - name: 'cassandra.response.error.details.required', - type: 'long', - }, - 'cassandra.response.error.details.alive': { - category: 'cassandra', - description: - 'Representing the number of replicas that were known to be alive when the request had been processed (since an unavailable exception has been triggered).', - name: 'cassandra.response.error.details.alive', - type: 'long', - }, - 'cassandra.response.error.details.received': { - category: 'cassandra', - description: 'Representing the number of nodes having acknowledged the request.', - name: 'cassandra.response.error.details.received', - type: 'long', - }, - 'cassandra.response.error.details.blockfor': { - category: 'cassandra', - description: - 'Representing the number of replicas whose acknowledgement is required to achieve consistency level.', - name: 'cassandra.response.error.details.blockfor', - type: 'long', - }, - 'cassandra.response.error.details.write_type': { - category: 'cassandra', - description: 'Describe the type of the write that timed out.', - name: 'cassandra.response.error.details.write_type', - type: 'keyword', - }, - 'cassandra.response.error.details.data_present': { - category: 'cassandra', - description: 'It means the replica that was asked for data had responded.', - name: 'cassandra.response.error.details.data_present', - type: 'boolean', - }, - 'cassandra.response.error.details.keyspace': { - category: 'cassandra', - description: 'The keyspace of the failed function.', - name: 'cassandra.response.error.details.keyspace', - type: 'keyword', - }, - 'cassandra.response.error.details.table': { - category: 'cassandra', - description: 'The keyspace of the failed function.', - name: 'cassandra.response.error.details.table', - type: 'keyword', - }, - 'cassandra.response.error.details.stmt_id': { - category: 'cassandra', - description: 'Representing the unknown ID.', - name: 'cassandra.response.error.details.stmt_id', - type: 'keyword', - }, - 'cassandra.response.error.details.num_failures': { - category: 'cassandra', - description: - 'Representing the number of nodes that experience a failure while executing the request.', - name: 'cassandra.response.error.details.num_failures', - type: 'keyword', - }, - 'cassandra.response.error.details.function': { - category: 'cassandra', - description: 'The name of the failed function.', - name: 'cassandra.response.error.details.function', - type: 'keyword', - }, - 'cassandra.response.error.details.arg_types': { - category: 'cassandra', - description: 'One string for each argument type (as CQL type) of the failed function.', - name: 'cassandra.response.error.details.arg_types', - type: 'keyword', - }, - 'dhcpv4.transaction_id': { - category: 'dhcpv4', - description: - 'Transaction ID, a random number chosen by the client, used by the client and server to associate messages and responses between a client and a server. ', - name: 'dhcpv4.transaction_id', - type: 'keyword', - }, - 'dhcpv4.seconds': { - category: 'dhcpv4', - description: - 'Number of seconds elapsed since client began address acquisition or renewal process. ', - name: 'dhcpv4.seconds', - type: 'long', - }, - 'dhcpv4.flags': { - category: 'dhcpv4', - description: - 'Flags are set by the client to indicate how the DHCP server should its reply -- either unicast or broadcast. ', - name: 'dhcpv4.flags', - type: 'keyword', - }, - 'dhcpv4.client_ip': { - category: 'dhcpv4', - description: 'The current IP address of the client.', - name: 'dhcpv4.client_ip', - type: 'ip', - }, - 'dhcpv4.assigned_ip': { - category: 'dhcpv4', - description: - 'The IP address that the DHCP server is assigning to the client. This field is also known as "your" IP address. ', - name: 'dhcpv4.assigned_ip', - type: 'ip', - }, - 'dhcpv4.server_ip': { - category: 'dhcpv4', - description: - 'The IP address of the DHCP server that the client should use for the next step in the bootstrap process. ', - name: 'dhcpv4.server_ip', - type: 'ip', - }, - 'dhcpv4.relay_ip': { - category: 'dhcpv4', - description: - 'The relay IP address used by the client to contact the server (i.e. a DHCP relay server). ', - name: 'dhcpv4.relay_ip', - type: 'ip', - }, - 'dhcpv4.client_mac': { - category: 'dhcpv4', - description: "The client's MAC address (layer two).", - name: 'dhcpv4.client_mac', - type: 'keyword', - }, - 'dhcpv4.server_name': { - category: 'dhcpv4', - description: - 'The name of the server sending the message. Optional. Used in DHCPOFFER or DHCPACK messages. ', - name: 'dhcpv4.server_name', - type: 'keyword', - }, - 'dhcpv4.op_code': { - category: 'dhcpv4', - description: 'The message op code (bootrequest or bootreply). ', - example: 'bootreply', - name: 'dhcpv4.op_code', - type: 'keyword', - }, - 'dhcpv4.hops': { - category: 'dhcpv4', - description: 'The number of hops the DHCP message went through.', - name: 'dhcpv4.hops', - type: 'long', - }, - 'dhcpv4.hardware_type': { - category: 'dhcpv4', - description: 'The type of hardware used for the local network (Ethernet, LocalTalk, etc). ', - name: 'dhcpv4.hardware_type', - type: 'keyword', - }, - 'dhcpv4.option.message_type': { - category: 'dhcpv4', - description: - 'The specific type of DHCP message being sent (e.g. discover, offer, request, decline, ack, nak, release, inform). ', - example: 'ack', - name: 'dhcpv4.option.message_type', - type: 'keyword', - }, - 'dhcpv4.option.parameter_request_list': { - category: 'dhcpv4', - description: - 'This option is used by a DHCP client to request values for specified configuration parameters. ', - name: 'dhcpv4.option.parameter_request_list', - type: 'keyword', - }, - 'dhcpv4.option.requested_ip_address': { - category: 'dhcpv4', - description: - 'This option is used in a client request (DHCPDISCOVER) to allow the client to request that a particular IP address be assigned. ', - name: 'dhcpv4.option.requested_ip_address', - type: 'ip', - }, - 'dhcpv4.option.server_identifier': { - category: 'dhcpv4', - description: 'IP address of the individual DHCP server which handled this message. ', - name: 'dhcpv4.option.server_identifier', - type: 'ip', - }, - 'dhcpv4.option.broadcast_address': { - category: 'dhcpv4', - description: "This option specifies the broadcast address in use on the client's subnet. ", - name: 'dhcpv4.option.broadcast_address', - type: 'ip', - }, - 'dhcpv4.option.max_dhcp_message_size': { - category: 'dhcpv4', - description: - 'This option specifies the maximum length DHCP message that the client is willing to accept. ', - name: 'dhcpv4.option.max_dhcp_message_size', - type: 'long', - }, - 'dhcpv4.option.class_identifier': { - category: 'dhcpv4', - description: - "This option is used by DHCP clients to optionally identify the vendor type and configuration of a DHCP client. Vendors may choose to define specific vendor class identifiers to convey particular configuration or other identification information about a client. For example, the identifier may encode the client's hardware configuration. ", - name: 'dhcpv4.option.class_identifier', - type: 'keyword', - }, - 'dhcpv4.option.domain_name': { - category: 'dhcpv4', - description: - 'This option specifies the domain name that client should use when resolving hostnames via the Domain Name System. ', - name: 'dhcpv4.option.domain_name', - type: 'keyword', - }, - 'dhcpv4.option.dns_servers': { - category: 'dhcpv4', - description: - 'The domain name server option specifies a list of Domain Name System servers available to the client. ', - name: 'dhcpv4.option.dns_servers', - type: 'ip', - }, - 'dhcpv4.option.vendor_identifying_options': { - category: 'dhcpv4', - description: - 'A DHCP client may use this option to unambiguously identify the vendor that manufactured the hardware on which the client is running, the software in use, or an industry consortium to which the vendor belongs. This field is described in RFC 3925. ', - name: 'dhcpv4.option.vendor_identifying_options', - type: 'object', - }, - 'dhcpv4.option.subnet_mask': { - category: 'dhcpv4', - description: 'The subnet mask that the client should use on the currnet network. ', - name: 'dhcpv4.option.subnet_mask', - type: 'ip', - }, - 'dhcpv4.option.utc_time_offset_sec': { - category: 'dhcpv4', - description: - "The time offset field specifies the offset of the client's subnet in seconds from Coordinated Universal Time (UTC). ", - name: 'dhcpv4.option.utc_time_offset_sec', - type: 'long', - }, - 'dhcpv4.option.router': { - category: 'dhcpv4', - description: - "The router option specifies a list of IP addresses for routers on the client's subnet. ", - name: 'dhcpv4.option.router', - type: 'ip', - }, - 'dhcpv4.option.time_servers': { - category: 'dhcpv4', - description: - 'The time server option specifies a list of RFC 868 time servers available to the client. ', - name: 'dhcpv4.option.time_servers', - type: 'ip', - }, - 'dhcpv4.option.ntp_servers': { - category: 'dhcpv4', - description: - 'This option specifies a list of IP addresses indicating NTP servers available to the client. ', - name: 'dhcpv4.option.ntp_servers', - type: 'ip', - }, - 'dhcpv4.option.hostname': { - category: 'dhcpv4', - description: 'This option specifies the name of the client. ', - name: 'dhcpv4.option.hostname', - type: 'keyword', - }, - 'dhcpv4.option.ip_address_lease_time_sec': { - category: 'dhcpv4', - description: - 'This option is used in a client request (DHCPDISCOVER or DHCPREQUEST) to allow the client to request a lease time for the IP address. In a server reply (DHCPOFFER), a DHCP server uses this option to specify the lease time it is willing to offer. ', - name: 'dhcpv4.option.ip_address_lease_time_sec', - type: 'long', - }, - 'dhcpv4.option.message': { - category: 'dhcpv4', - description: - 'This option is used by a DHCP server to provide an error message to a DHCP client in a DHCPNAK message in the event of a failure. A client may use this option in a DHCPDECLINE message to indicate the why the client declined the offered parameters. ', - name: 'dhcpv4.option.message', - type: 'text', - }, - 'dhcpv4.option.renewal_time_sec': { - category: 'dhcpv4', - description: - 'This option specifies the time interval from address assignment until the client transitions to the RENEWING state. ', - name: 'dhcpv4.option.renewal_time_sec', - type: 'long', - }, - 'dhcpv4.option.rebinding_time_sec': { - category: 'dhcpv4', - description: - 'This option specifies the time interval from address assignment until the client transitions to the REBINDING state. ', - name: 'dhcpv4.option.rebinding_time_sec', - type: 'long', - }, - 'dhcpv4.option.boot_file_name': { - category: 'dhcpv4', - description: - "This option is used to identify a bootfile when the 'file' field in the DHCP header has been used for DHCP options. ", - name: 'dhcpv4.option.boot_file_name', - type: 'keyword', - }, - 'dns.flags.authoritative': { - category: 'dns', - description: - 'A DNS flag specifying that the responding server is an authority for the domain name used in the question. ', - name: 'dns.flags.authoritative', - type: 'boolean', - }, - 'dns.flags.recursion_available': { - category: 'dns', - description: - 'A DNS flag specifying whether recursive query support is available in the name server. ', - name: 'dns.flags.recursion_available', - type: 'boolean', - }, - 'dns.flags.recursion_desired': { - category: 'dns', - description: - 'A DNS flag specifying that the client directs the server to pursue a query recursively. Recursive query support is optional. ', - name: 'dns.flags.recursion_desired', - type: 'boolean', - }, - 'dns.flags.authentic_data': { - category: 'dns', - description: - 'A DNS flag specifying that the recursive server considers the response authentic. ', - name: 'dns.flags.authentic_data', - type: 'boolean', - }, - 'dns.flags.checking_disabled': { - category: 'dns', - description: - 'A DNS flag specifying that the client disables the server signature validation of the query. ', - name: 'dns.flags.checking_disabled', - type: 'boolean', - }, - 'dns.flags.truncated_response': { - category: 'dns', - description: 'A DNS flag specifying that only the first 512 bytes of the reply were returned. ', - name: 'dns.flags.truncated_response', - type: 'boolean', - }, - 'dns.question.etld_plus_one': { - category: 'dns', - description: - 'The effective top-level domain (eTLD) plus one more label. For example, the eTLD+1 for "foo.bar.golang.org." is "golang.org.". The data for determining the eTLD comes from an embedded copy of the data from http://publicsuffix.org.', - example: 'amazon.co.uk.', - name: 'dns.question.etld_plus_one', - }, - 'dns.answers_count': { - category: 'dns', - description: 'The number of resource records contained in the `dns.answers` field. ', - name: 'dns.answers_count', - type: 'long', - }, - 'dns.authorities': { - category: 'dns', - description: 'An array containing a dictionary for each authority section from the answer. ', - name: 'dns.authorities', - type: 'object', - }, - 'dns.authorities_count': { - category: 'dns', - description: - 'The number of resource records contained in the `dns.authorities` field. The `dns.authorities` field may or may not be included depending on the configuration of Packetbeat. ', - name: 'dns.authorities_count', - type: 'long', - }, - 'dns.authorities.name': { - category: 'dns', - description: 'The domain name to which this resource record pertains.', - example: 'example.com.', - name: 'dns.authorities.name', - }, - 'dns.authorities.type': { - category: 'dns', - description: 'The type of data contained in this resource record.', - example: 'NS', - name: 'dns.authorities.type', - }, - 'dns.authorities.class': { - category: 'dns', - description: 'The class of DNS data contained in this resource record.', - example: 'IN', - name: 'dns.authorities.class', - }, - 'dns.additionals': { - category: 'dns', - description: 'An array containing a dictionary for each additional section from the answer. ', - name: 'dns.additionals', - type: 'object', - }, - 'dns.additionals_count': { - category: 'dns', - description: - 'The number of resource records contained in the `dns.additionals` field. The `dns.additionals` field may or may not be included depending on the configuration of Packetbeat. ', - name: 'dns.additionals_count', - type: 'long', - }, - 'dns.additionals.name': { - category: 'dns', - description: 'The domain name to which this resource record pertains.', - example: 'example.com.', - name: 'dns.additionals.name', - }, - 'dns.additionals.type': { - category: 'dns', - description: 'The type of data contained in this resource record.', - example: 'NS', - name: 'dns.additionals.type', - }, - 'dns.additionals.class': { - category: 'dns', - description: 'The class of DNS data contained in this resource record.', - example: 'IN', - name: 'dns.additionals.class', - }, - 'dns.additionals.ttl': { - category: 'dns', - description: - 'The time interval in seconds that this resource record may be cached before it should be discarded. Zero values mean that the data should not be cached. ', - name: 'dns.additionals.ttl', - type: 'long', - }, - 'dns.additionals.data': { - category: 'dns', - description: - 'The data describing the resource. The meaning of this data depends on the type and class of the resource record. ', - name: 'dns.additionals.data', - }, - 'dns.opt.version': { - category: 'dns', - description: 'The EDNS version.', - example: '0', - name: 'dns.opt.version', - }, - 'dns.opt.do': { - category: 'dns', - description: 'If set, the transaction uses DNSSEC.', - name: 'dns.opt.do', - type: 'boolean', - }, - 'dns.opt.ext_rcode': { - category: 'dns', - description: 'Extended response code field.', - example: 'BADVERS', - name: 'dns.opt.ext_rcode', - }, - 'dns.opt.udp_size': { - category: 'dns', - description: "Requestor's UDP payload size (in bytes).", - name: 'dns.opt.udp_size', - type: 'long', - }, - 'http.request.headers': { - category: 'http', - description: - 'A map containing the captured header fields from the request. Which headers to capture is configurable. If headers with the same header name are present in the message, they will be separated by commas. ', - name: 'http.request.headers', - type: 'object', - }, - 'http.request.params': { - category: 'http', - name: 'http.request.params', - type: 'alias', - }, - 'http.response.status_phrase': { - category: 'http', - description: 'The HTTP status phrase.', - example: 'Not Found', - name: 'http.response.status_phrase', - }, - 'http.response.headers': { - category: 'http', - description: - 'A map containing the captured header fields from the response. Which headers to capture is configurable. If headers with the same header name are present in the message, they will be separated by commas. ', - name: 'http.response.headers', - type: 'object', - }, - 'http.response.code': { - category: 'http', - name: 'http.response.code', - type: 'alias', - }, - 'http.response.phrase': { - category: 'http', - name: 'http.response.phrase', - type: 'alias', - }, - 'icmp.version': { - category: 'icmp', - description: 'The version of the ICMP protocol.', - name: 'icmp.version', - }, - 'icmp.request.message': { - category: 'icmp', - description: 'A human readable form of the request.', - name: 'icmp.request.message', - type: 'keyword', - }, - 'icmp.request.type': { - category: 'icmp', - description: 'The request type.', - name: 'icmp.request.type', - type: 'long', - }, - 'icmp.request.code': { - category: 'icmp', - description: 'The request code.', - name: 'icmp.request.code', - type: 'long', - }, - 'icmp.response.message': { - category: 'icmp', - description: 'A human readable form of the response.', - name: 'icmp.response.message', - type: 'keyword', - }, - 'icmp.response.type': { - category: 'icmp', - description: 'The response type.', - name: 'icmp.response.type', - type: 'long', - }, - 'icmp.response.code': { - category: 'icmp', - description: 'The response code.', - name: 'icmp.response.code', - type: 'long', - }, - 'memcache.protocol_type': { - category: 'memcache', - description: - 'The memcache protocol implementation. The value can be "binary" for binary-based, "text" for text-based, or "unknown" for an unknown memcache protocol type. ', - name: 'memcache.protocol_type', - type: 'keyword', - }, - 'memcache.request.line': { - category: 'memcache', - description: 'The raw command line for unknown commands ONLY. ', - name: 'memcache.request.line', - type: 'keyword', - }, - 'memcache.request.command': { - category: 'memcache', - description: - 'The memcache command being requested in the memcache text protocol. For example "set" or "get". The binary protocol opcodes are translated into memcache text protocol commands. ', - name: 'memcache.request.command', - type: 'keyword', - }, - 'memcache.response.command': { - category: 'memcache', - description: - 'Either the text based protocol response message type or the name of the originating request if binary protocol is used. ', - name: 'memcache.response.command', - type: 'keyword', - }, - 'memcache.request.type': { - category: 'memcache', - description: - 'The memcache command classification. This value can be "UNKNOWN", "Load", "Store", "Delete", "Counter", "Info", "SlabCtrl", "LRUCrawler", "Stats", "Success", "Fail", or "Auth". ', - name: 'memcache.request.type', - type: 'keyword', - }, - 'memcache.response.type': { - category: 'memcache', - description: - 'The memcache command classification. This value can be "UNKNOWN", "Load", "Store", "Delete", "Counter", "Info", "SlabCtrl", "LRUCrawler", "Stats", "Success", "Fail", or "Auth". The text based protocol will employ any of these, whereas the binary based protocol will mirror the request commands only (see `memcache.response.status` for binary protocol). ', - name: 'memcache.response.type', - type: 'keyword', - }, - 'memcache.response.error_msg': { - category: 'memcache', - description: 'The optional error message in the memcache response (text based protocol only). ', - name: 'memcache.response.error_msg', - type: 'keyword', - }, - 'memcache.request.opcode': { - category: 'memcache', - description: 'The binary protocol message opcode name. ', - name: 'memcache.request.opcode', - type: 'keyword', - }, - 'memcache.response.opcode': { - category: 'memcache', - description: 'The binary protocol message opcode name. ', - name: 'memcache.response.opcode', - type: 'keyword', - }, - 'memcache.request.opcode_value': { - category: 'memcache', - description: 'The binary protocol message opcode value. ', - name: 'memcache.request.opcode_value', - type: 'long', - }, - 'memcache.response.opcode_value': { - category: 'memcache', - description: 'The binary protocol message opcode value. ', - name: 'memcache.response.opcode_value', - type: 'long', - }, - 'memcache.request.opaque': { - category: 'memcache', - description: - 'The binary protocol opaque header value used for correlating request with response messages. ', - name: 'memcache.request.opaque', - type: 'long', - }, - 'memcache.response.opaque': { - category: 'memcache', - description: - 'The binary protocol opaque header value used for correlating request with response messages. ', - name: 'memcache.response.opaque', - type: 'long', - }, - 'memcache.request.vbucket': { - category: 'memcache', - description: 'The vbucket index sent in the binary message. ', - name: 'memcache.request.vbucket', - type: 'long', - }, - 'memcache.response.status': { - category: 'memcache', - description: 'The textual representation of the response error code (binary protocol only). ', - name: 'memcache.response.status', - type: 'keyword', - }, - 'memcache.response.status_code': { - category: 'memcache', - description: 'The status code value returned in the response (binary protocol only). ', - name: 'memcache.response.status_code', - type: 'long', - }, - 'memcache.request.keys': { - category: 'memcache', - description: 'The list of keys sent in the store or load commands. ', - name: 'memcache.request.keys', - type: 'array', - }, - 'memcache.response.keys': { - category: 'memcache', - description: 'The list of keys returned for the load command (if present). ', - name: 'memcache.response.keys', - type: 'array', - }, - 'memcache.request.count_values': { - category: 'memcache', - description: - 'The number of values found in the memcache request message. If the command does not send any data, this field is missing. ', - name: 'memcache.request.count_values', - type: 'long', - }, - 'memcache.response.count_values': { - category: 'memcache', - description: - 'The number of values found in the memcache response message. If the command does not send any data, this field is missing. ', - name: 'memcache.response.count_values', - type: 'long', - }, - 'memcache.request.values': { - category: 'memcache', - description: 'The list of base64 encoded values sent with the request (if present). ', - name: 'memcache.request.values', - type: 'array', - }, - 'memcache.response.values': { - category: 'memcache', - description: 'The list of base64 encoded values sent with the response (if present). ', - name: 'memcache.response.values', - type: 'array', - }, - 'memcache.request.bytes': { - category: 'memcache', - description: 'The byte count of the values being transferred. ', - name: 'memcache.request.bytes', - type: 'long', - format: 'bytes', - }, - 'memcache.response.bytes': { - category: 'memcache', - description: 'The byte count of the values being transferred. ', - name: 'memcache.response.bytes', - type: 'long', - format: 'bytes', - }, - 'memcache.request.delta': { - category: 'memcache', - description: 'The counter increment/decrement delta value. ', - name: 'memcache.request.delta', - type: 'long', - }, - 'memcache.request.initial': { - category: 'memcache', - description: 'The counter increment/decrement initial value parameter (binary protocol only). ', - name: 'memcache.request.initial', - type: 'long', - }, - 'memcache.request.verbosity': { - category: 'memcache', - description: 'The value of the memcache "verbosity" command. ', - name: 'memcache.request.verbosity', - type: 'long', - }, - 'memcache.request.raw_args': { - category: 'memcache', - description: - 'The text protocol raw arguments for the "stats ..." and "lru crawl ..." commands. ', - name: 'memcache.request.raw_args', - type: 'keyword', - }, - 'memcache.request.source_class': { - category: 'memcache', - description: "The source class id in 'slab reassign' command. ", - name: 'memcache.request.source_class', - type: 'long', - }, - 'memcache.request.dest_class': { - category: 'memcache', - description: "The destination class id in 'slab reassign' command. ", - name: 'memcache.request.dest_class', - type: 'long', - }, - 'memcache.request.automove': { - category: 'memcache', - description: - 'The automove mode in the \'slab automove\' command expressed as a string. This value can be "standby"(=0), "slow"(=1), "aggressive"(=2), or the raw value if the value is unknown. ', - name: 'memcache.request.automove', - type: 'keyword', - }, - 'memcache.request.flags': { - category: 'memcache', - description: 'The memcache command flags sent in the request (if present). ', - name: 'memcache.request.flags', - type: 'long', - }, - 'memcache.response.flags': { - category: 'memcache', - description: 'The memcache message flags sent in the response (if present). ', - name: 'memcache.response.flags', - type: 'long', - }, - 'memcache.request.exptime': { - category: 'memcache', - description: - 'The data expiry time in seconds sent with the memcache command (if present). If the value is <30 days, the expiry time is relative to "now", or else it is an absolute Unix time in seconds (32-bit). ', - name: 'memcache.request.exptime', - type: 'long', - }, - 'memcache.request.sleep_us': { - category: 'memcache', - description: "The sleep setting in microseconds for the 'lru_crawler sleep' command. ", - name: 'memcache.request.sleep_us', - type: 'long', - }, - 'memcache.response.value': { - category: 'memcache', - description: 'The counter value returned by a counter operation. ', - name: 'memcache.response.value', - type: 'long', - }, - 'memcache.request.noreply': { - category: 'memcache', - description: - 'Set to true if noreply was set in the request. The `memcache.response` field will be missing. ', - name: 'memcache.request.noreply', - type: 'boolean', - }, - 'memcache.request.quiet': { - category: 'memcache', - description: 'Set to true if the binary protocol message is to be treated as a quiet message. ', - name: 'memcache.request.quiet', - type: 'boolean', - }, - 'memcache.request.cas_unique': { - category: 'memcache', - description: 'The CAS (compare-and-swap) identifier if present. ', - name: 'memcache.request.cas_unique', - type: 'long', - }, - 'memcache.response.cas_unique': { - category: 'memcache', - description: - 'The CAS (compare-and-swap) identifier to be used with CAS-based updates (if present). ', - name: 'memcache.response.cas_unique', - type: 'long', - }, - 'memcache.response.stats': { - category: 'memcache', - description: - 'The list of statistic values returned. Each entry is a dictionary with the fields "name" and "value". ', - name: 'memcache.response.stats', - type: 'array', - }, - 'memcache.response.version': { - category: 'memcache', - description: 'The returned memcache version string. ', - name: 'memcache.response.version', - type: 'keyword', - }, - 'mongodb.error': { - category: 'mongodb', - description: - 'If the MongoDB request has resulted in an error, this field contains the error message returned by the server. ', - name: 'mongodb.error', - }, - 'mongodb.fullCollectionName': { - category: 'mongodb', - description: - 'The full collection name. The full collection name is the concatenation of the database name with the collection name, using a dot (.) for the concatenation. For example, for the database foo and the collection bar, the full collection name is foo.bar. ', - name: 'mongodb.fullCollectionName', - }, - 'mongodb.numberToSkip': { - category: 'mongodb', - description: - 'Sets the number of documents to omit - starting from the first document in the resulting dataset - when returning the result of the query. ', - name: 'mongodb.numberToSkip', - type: 'long', - }, - 'mongodb.numberToReturn': { - category: 'mongodb', - description: 'The requested maximum number of documents to be returned. ', - name: 'mongodb.numberToReturn', - type: 'long', - }, - 'mongodb.numberReturned': { - category: 'mongodb', - description: 'The number of documents in the reply. ', - name: 'mongodb.numberReturned', - type: 'long', - }, - 'mongodb.startingFrom': { - category: 'mongodb', - description: 'Where in the cursor this reply is starting. ', - name: 'mongodb.startingFrom', - }, - 'mongodb.query': { - category: 'mongodb', - description: - 'A JSON document that represents the query. The query will contain one or more elements, all of which must match for a document to be included in the result set. Possible elements include $query, $orderby, $hint, $explain, and $snapshot. ', - name: 'mongodb.query', - }, - 'mongodb.returnFieldsSelector': { - category: 'mongodb', - description: - 'A JSON document that limits the fields in the returned documents. The returnFieldsSelector contains one or more elements, each of which is the name of a field that should be returned, and the integer value 1. ', - name: 'mongodb.returnFieldsSelector', - }, - 'mongodb.selector': { - category: 'mongodb', - description: - 'A BSON document that specifies the query for selecting the document to update or delete. ', - name: 'mongodb.selector', - }, - 'mongodb.update': { - category: 'mongodb', - description: - 'A BSON document that specifies the update to be performed. For information on specifying updates, see the Update Operations documentation from the MongoDB Manual. ', - name: 'mongodb.update', - }, - 'mongodb.cursorId': { - category: 'mongodb', - description: - 'The cursor identifier returned in the OP_REPLY. This must be the value that was returned from the database. ', - name: 'mongodb.cursorId', - }, - 'mysql.affected_rows': { - category: 'mysql', - description: - 'If the MySQL command is successful, this field contains the affected number of rows of the last statement. ', - name: 'mysql.affected_rows', - type: 'long', - }, - 'mysql.insert_id': { - category: 'mysql', - description: - 'If the INSERT query is successful, this field contains the id of the newly inserted row. ', - name: 'mysql.insert_id', - }, - 'mysql.num_fields': { - category: 'mysql', - description: - 'If the SELECT query is successful, this field is set to the number of fields returned. ', - name: 'mysql.num_fields', - }, - 'mysql.num_rows': { - category: 'mysql', - description: - 'If the SELECT query is successful, this field is set to the number of rows returned. ', - name: 'mysql.num_rows', - }, - 'mysql.query': { - category: 'mysql', - description: "The row mysql query as read from the transaction's request. ", - name: 'mysql.query', - }, - 'mysql.error_code': { - category: 'mysql', - description: 'The error code returned by MySQL. ', - name: 'mysql.error_code', - type: 'long', - }, - 'mysql.error_message': { - category: 'mysql', - description: 'The error info message returned by MySQL. ', - name: 'mysql.error_message', - }, - 'nfs.version': { - category: 'nfs', - description: 'NFS protocol version number.', - name: 'nfs.version', - type: 'long', - }, - 'nfs.minor_version': { - category: 'nfs', - description: 'NFS protocol minor version number.', - name: 'nfs.minor_version', - type: 'long', - }, - 'nfs.tag': { - category: 'nfs', - description: 'NFS v4 COMPOUND operation tag.', - name: 'nfs.tag', - }, - 'nfs.opcode': { - category: 'nfs', - description: 'NFS operation name, or main operation name, in case of COMPOUND calls. ', - name: 'nfs.opcode', - }, - 'nfs.status': { - category: 'nfs', - description: 'NFS operation reply status.', - name: 'nfs.status', - }, - 'rpc.xid': { - category: 'rpc', - description: 'RPC message transaction identifier.', - name: 'rpc.xid', - }, - 'rpc.status': { - category: 'rpc', - description: 'RPC message reply status.', - name: 'rpc.status', - }, - 'rpc.auth_flavor': { - category: 'rpc', - description: 'RPC authentication flavor.', - name: 'rpc.auth_flavor', - }, - 'rpc.cred.uid': { - category: 'rpc', - description: "RPC caller's user id, in case of auth-unix.", - name: 'rpc.cred.uid', - type: 'long', - }, - 'rpc.cred.gid': { - category: 'rpc', - description: "RPC caller's group id, in case of auth-unix.", - name: 'rpc.cred.gid', - type: 'long', - }, - 'rpc.cred.gids': { - category: 'rpc', - description: "RPC caller's secondary group ids, in case of auth-unix.", - name: 'rpc.cred.gids', - }, - 'rpc.cred.stamp': { - category: 'rpc', - description: 'Arbitrary ID which the caller machine may generate.', - name: 'rpc.cred.stamp', - type: 'long', - }, - 'rpc.cred.machinename': { - category: 'rpc', - description: "The name of the caller's machine.", - name: 'rpc.cred.machinename', - }, - 'rpc.call_size': { - category: 'rpc', - description: 'RPC call size with argument.', - name: 'rpc.call_size', - type: 'alias', - }, - 'rpc.reply_size': { - category: 'rpc', - description: 'RPC reply size with argument.', - name: 'rpc.reply_size', - type: 'alias', - }, - 'pgsql.error_code': { - category: 'pgsql', - description: 'The PostgreSQL error code.', - name: 'pgsql.error_code', - type: 'long', - }, - 'pgsql.error_message': { - category: 'pgsql', - description: 'The PostgreSQL error message.', - name: 'pgsql.error_message', - }, - 'pgsql.error_severity': { - category: 'pgsql', - description: 'The PostgreSQL error severity.', - name: 'pgsql.error_severity', - }, - 'pgsql.num_fields': { - category: 'pgsql', - description: - 'If the SELECT query if successful, this field is set to the number of fields returned. ', - name: 'pgsql.num_fields', - }, - 'pgsql.num_rows': { - category: 'pgsql', - description: - 'If the SELECT query if successful, this field is set to the number of rows returned. ', - name: 'pgsql.num_rows', - }, - 'redis.return_value': { - category: 'redis', - description: 'The return value of the Redis command in a human readable format. ', - name: 'redis.return_value', - }, - 'redis.error': { - category: 'redis', - description: - 'If the Redis command has resulted in an error, this field contains the error message returned by the Redis server. ', - name: 'redis.error', - }, - 'sip.code': { - category: 'sip', - description: 'Response status code.', - name: 'sip.code', - type: 'keyword', - }, - 'sip.method': { - category: 'sip', - description: 'Request method.', - name: 'sip.method', - type: 'keyword', - }, - 'sip.status': { - category: 'sip', - description: 'Response status phrase.', - name: 'sip.status', - type: 'keyword', - }, - 'sip.type': { - category: 'sip', - description: 'Either request or response.', - name: 'sip.type', - type: 'keyword', - }, - 'sip.version': { - category: 'sip', - description: 'SIP protocol version.', - name: 'sip.version', - type: 'keyword', - }, - 'sip.uri.original': { - category: 'sip', - description: 'The original URI.', - name: 'sip.uri.original', - type: 'keyword', - }, - 'sip.uri.scheme': { - category: 'sip', - description: 'The URI scheme.', - name: 'sip.uri.scheme', - type: 'keyword', - }, - 'sip.uri.username': { - category: 'sip', - description: 'The URI user name.', - name: 'sip.uri.username', - type: 'keyword', - }, - 'sip.uri.host': { - category: 'sip', - description: 'The URI host.', - name: 'sip.uri.host', - type: 'keyword', - }, - 'sip.uri.port': { - category: 'sip', - description: 'The URI port.', - name: 'sip.uri.port', - type: 'keyword', - }, - 'sip.accept': { - category: 'sip', - description: 'Accept header value.', - name: 'sip.accept', - type: 'keyword', - }, - 'sip.allow': { - category: 'sip', - description: 'Allowed methods.', - name: 'sip.allow', - type: 'keyword', - }, - 'sip.call_id': { - category: 'sip', - description: 'Call ID.', - name: 'sip.call_id', - type: 'keyword', - }, - 'sip.content_length': { - category: 'sip', - name: 'sip.content_length', - type: 'long', - }, - 'sip.content_type': { - category: 'sip', - name: 'sip.content_type', - type: 'keyword', - }, - 'sip.max_forwards': { - category: 'sip', - name: 'sip.max_forwards', - type: 'long', - }, - 'sip.supported': { - category: 'sip', - description: 'Supported methods.', - name: 'sip.supported', - type: 'keyword', - }, - 'sip.user_agent.original': { - category: 'sip', - name: 'sip.user_agent.original', - type: 'keyword', - }, - 'sip.private.uri.original': { - category: 'sip', - description: 'Private original URI.', - name: 'sip.private.uri.original', - type: 'keyword', - }, - 'sip.private.uri.scheme': { - category: 'sip', - description: 'Private URI scheme.', - name: 'sip.private.uri.scheme', - type: 'keyword', - }, - 'sip.private.uri.username': { - category: 'sip', - description: 'Private URI user name.', - name: 'sip.private.uri.username', - type: 'keyword', - }, - 'sip.private.uri.host': { - category: 'sip', - description: 'Private URI host.', - name: 'sip.private.uri.host', - type: 'keyword', - }, - 'sip.private.uri.port': { - category: 'sip', - description: 'Private URI port.', - name: 'sip.private.uri.port', - type: 'keyword', - }, - 'sip.cseq.code': { - category: 'sip', - description: 'Sequence code.', - name: 'sip.cseq.code', - type: 'keyword', - }, - 'sip.cseq.method': { - category: 'sip', - description: 'Sequence method.', - name: 'sip.cseq.method', - type: 'keyword', - }, - 'sip.via.original': { - category: 'sip', - description: 'The original Via value.', - name: 'sip.via.original', - type: 'keyword', - }, - 'sip.to.display_info': { - category: 'sip', - description: 'To display info', - name: 'sip.to.display_info', - type: 'keyword', - }, - 'sip.to.uri.original': { - category: 'sip', - description: 'To original URI', - name: 'sip.to.uri.original', - type: 'keyword', - }, - 'sip.to.uri.scheme': { - category: 'sip', - description: 'To URI scheme', - name: 'sip.to.uri.scheme', - type: 'keyword', - }, - 'sip.to.uri.username': { - category: 'sip', - description: 'To URI user name', - name: 'sip.to.uri.username', - type: 'keyword', - }, - 'sip.to.uri.host': { - category: 'sip', - description: 'To URI host', - name: 'sip.to.uri.host', - type: 'keyword', - }, - 'sip.to.uri.port': { - category: 'sip', - description: 'To URI port', - name: 'sip.to.uri.port', - type: 'keyword', - }, - 'sip.to.tag': { - category: 'sip', - description: 'To tag', - name: 'sip.to.tag', - type: 'keyword', - }, - 'sip.from.display_info': { - category: 'sip', - description: 'From display info', - name: 'sip.from.display_info', - type: 'keyword', - }, - 'sip.from.uri.original': { - category: 'sip', - description: 'From original URI', - name: 'sip.from.uri.original', - type: 'keyword', - }, - 'sip.from.uri.scheme': { - category: 'sip', - description: 'From URI scheme', - name: 'sip.from.uri.scheme', - type: 'keyword', - }, - 'sip.from.uri.username': { - category: 'sip', - description: 'From URI user name', - name: 'sip.from.uri.username', - type: 'keyword', - }, - 'sip.from.uri.host': { - category: 'sip', - description: 'From URI host', - name: 'sip.from.uri.host', - type: 'keyword', - }, - 'sip.from.uri.port': { - category: 'sip', - description: 'From URI port', - name: 'sip.from.uri.port', - type: 'keyword', - }, - 'sip.from.tag': { - category: 'sip', - description: 'From tag', - name: 'sip.from.tag', - type: 'keyword', - }, - 'sip.contact.display_info': { - category: 'sip', - description: 'Contact display info', - name: 'sip.contact.display_info', - type: 'keyword', - }, - 'sip.contact.uri.original': { - category: 'sip', - description: 'Contact original URI', - name: 'sip.contact.uri.original', - type: 'keyword', - }, - 'sip.contact.uri.scheme': { - category: 'sip', - description: 'Contat URI scheme', - name: 'sip.contact.uri.scheme', - type: 'keyword', - }, - 'sip.contact.uri.username': { - category: 'sip', - description: 'Contact URI user name', - name: 'sip.contact.uri.username', - type: 'keyword', - }, - 'sip.contact.uri.host': { - category: 'sip', - description: 'Contact URI host', - name: 'sip.contact.uri.host', - type: 'keyword', - }, - 'sip.contact.uri.port': { - category: 'sip', - description: 'Contact URI port', - name: 'sip.contact.uri.port', - type: 'keyword', - }, - 'sip.contact.transport': { - category: 'sip', - description: 'Contact transport', - name: 'sip.contact.transport', - type: 'keyword', - }, - 'sip.contact.line': { - category: 'sip', - description: 'Contact line', - name: 'sip.contact.line', - type: 'keyword', - }, - 'sip.contact.expires': { - category: 'sip', - description: 'Contact expires', - name: 'sip.contact.expires', - type: 'keyword', - }, - 'sip.contact.q': { - category: 'sip', - description: 'Contact Q', - name: 'sip.contact.q', - type: 'keyword', - }, - 'sip.auth.scheme': { - category: 'sip', - description: 'Auth scheme', - name: 'sip.auth.scheme', - type: 'keyword', - }, - 'sip.auth.realm': { - category: 'sip', - description: 'Auth realm', - name: 'sip.auth.realm', - type: 'keyword', - }, - 'sip.auth.uri.original': { - category: 'sip', - description: 'Auth original URI', - name: 'sip.auth.uri.original', - type: 'keyword', - }, - 'sip.auth.uri.scheme': { - category: 'sip', - description: 'Auth URI scheme', - name: 'sip.auth.uri.scheme', - type: 'keyword', - }, - 'sip.auth.uri.host': { - category: 'sip', - description: 'Auth URI host', - name: 'sip.auth.uri.host', - type: 'keyword', - }, - 'sip.auth.uri.port': { - category: 'sip', - description: 'Auth URI port', - name: 'sip.auth.uri.port', - type: 'keyword', - }, - 'sip.sdp.version': { - category: 'sip', - description: 'SDP version', - name: 'sip.sdp.version', - type: 'keyword', - }, - 'sip.sdp.owner.username': { - category: 'sip', - description: 'SDP owner user name', - name: 'sip.sdp.owner.username', - type: 'keyword', - }, - 'sip.sdp.owner.session_id': { - category: 'sip', - description: 'SDP owner session ID', - name: 'sip.sdp.owner.session_id', - type: 'keyword', - }, - 'sip.sdp.owner.version': { - category: 'sip', - description: 'SDP owner version', - name: 'sip.sdp.owner.version', - type: 'keyword', - }, - 'sip.sdp.owner.ip': { - category: 'sip', - description: 'SDP owner IP', - name: 'sip.sdp.owner.ip', - type: 'ip', - }, - 'sip.sdp.session.name': { - category: 'sip', - description: 'SDP session name', - name: 'sip.sdp.session.name', - type: 'keyword', - }, - 'sip.sdp.connection.info': { - category: 'sip', - description: 'SDP connection info', - name: 'sip.sdp.connection.info', - type: 'keyword', - }, - 'sip.sdp.connection.address': { - category: 'sip', - description: 'SDP connection address', - name: 'sip.sdp.connection.address', - type: 'keyword', - }, - 'sip.sdp.body.original': { - category: 'sip', - description: 'SDP original body', - name: 'sip.sdp.body.original', - type: 'keyword', - }, - 'thrift.params': { - category: 'thrift', - description: - 'The RPC method call parameters in a human readable format. If the IDL files are available, the parameters use names whenever possible. Otherwise, the IDs from the message are used. ', - name: 'thrift.params', - }, - 'thrift.service': { - category: 'thrift', - description: 'The name of the Thrift-RPC service as defined in the IDL files. ', - name: 'thrift.service', - }, - 'thrift.return_value': { - category: 'thrift', - description: - 'The value returned by the Thrift-RPC call. This is encoded in a human readable format. ', - name: 'thrift.return_value', - }, - 'thrift.exceptions': { - category: 'thrift', - description: - 'If the call resulted in exceptions, this field contains the exceptions in a human readable format. ', - name: 'thrift.exceptions', - }, - 'tls.client.x509.version': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.client.x509.version', - type: 'keyword', - }, - 'tls.client.x509.issuer.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.client.x509.issuer.province', - type: 'keyword', - }, - 'tls.client.x509.subject.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.client.x509.subject.province', - type: 'keyword', - }, - 'tls.server.x509.version': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.server.x509.version', - type: 'keyword', - }, - 'tls.server.x509.issuer.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.server.x509.issuer.province', - type: 'keyword', - }, - 'tls.server.x509.subject.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.server.x509.subject.province', - type: 'keyword', - }, - 'tls.detailed.version': { - category: 'tls', - description: 'The version of the TLS protocol used. ', - example: 'TLS 1.3', - name: 'tls.detailed.version', - type: 'keyword', - }, - 'tls.detailed.resumption_method': { - category: 'tls', - description: - 'If the session has been resumed, the underlying method used. One of "id" for TLS session ID or "ticket" for TLS ticket extension. ', - name: 'tls.detailed.resumption_method', - type: 'keyword', - }, - 'tls.detailed.client_certificate_requested': { - category: 'tls', - description: - 'Whether the server has requested the client to authenticate itself using a client certificate. ', - name: 'tls.detailed.client_certificate_requested', - type: 'boolean', - }, - 'tls.detailed.client_hello.version': { - category: 'tls', - description: - 'The version of the TLS protocol by which the client wishes to communicate during this session. ', - name: 'tls.detailed.client_hello.version', - type: 'keyword', - }, - 'tls.detailed.client_hello.session_id': { - category: 'tls', - description: - 'Unique number to identify the session for the corresponding connection with the client. ', - name: 'tls.detailed.client_hello.session_id', - type: 'keyword', - }, - 'tls.detailed.client_hello.supported_compression_methods': { - category: 'tls', - description: - 'The list of compression methods the client supports. See https://www.iana.org/assignments/comp-meth-ids/comp-meth-ids.xhtml ', - name: 'tls.detailed.client_hello.supported_compression_methods', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.server_name_indication': { - category: 'tls', - description: 'List of hostnames', - name: 'tls.detailed.client_hello.extensions.server_name_indication', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.application_layer_protocol_negotiation': { - category: 'tls', - description: 'List of application-layer protocols the client is willing to use. ', - name: 'tls.detailed.client_hello.extensions.application_layer_protocol_negotiation', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.session_ticket': { - category: 'tls', - description: - 'Length of the session ticket, if provided, or an empty string to advertise support for tickets. ', - name: 'tls.detailed.client_hello.extensions.session_ticket', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.supported_versions': { - category: 'tls', - description: 'List of TLS versions that the client is willing to use. ', - name: 'tls.detailed.client_hello.extensions.supported_versions', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.supported_groups': { - category: 'tls', - description: 'List of Elliptic Curve Cryptography (ECC) curve groups supported by the client. ', - name: 'tls.detailed.client_hello.extensions.supported_groups', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.signature_algorithms': { - category: 'tls', - description: 'List of signature algorithms that may be use in digital signatures. ', - name: 'tls.detailed.client_hello.extensions.signature_algorithms', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions.ec_points_formats': { - category: 'tls', - description: - 'List of Elliptic Curve (EC) point formats. Indicates the set of point formats that the client can parse. ', - name: 'tls.detailed.client_hello.extensions.ec_points_formats', - type: 'keyword', - }, - 'tls.detailed.client_hello.extensions._unparsed_': { - category: 'tls', - description: 'List of extensions that were left unparsed by Packetbeat. ', - name: 'tls.detailed.client_hello.extensions._unparsed_', - type: 'keyword', - }, - 'tls.detailed.server_hello.version': { - category: 'tls', - description: - 'The version of the TLS protocol that is used for this session. It is the highest version supported by the server not exceeding the version requested in the client hello. ', - name: 'tls.detailed.server_hello.version', - type: 'keyword', - }, - 'tls.detailed.server_hello.selected_compression_method': { - category: 'tls', - description: - 'The compression method selected by the server from the list provided in the client hello. ', - name: 'tls.detailed.server_hello.selected_compression_method', - type: 'keyword', - }, - 'tls.detailed.server_hello.session_id': { - category: 'tls', - description: - 'Unique number to identify the session for the corresponding connection with the client. ', - name: 'tls.detailed.server_hello.session_id', - type: 'keyword', - }, - 'tls.detailed.server_hello.extensions.application_layer_protocol_negotiation': { - category: 'tls', - description: 'Negotiated application layer protocol', - name: 'tls.detailed.server_hello.extensions.application_layer_protocol_negotiation', - type: 'keyword', - }, - 'tls.detailed.server_hello.extensions.session_ticket': { - category: 'tls', - description: - 'Used to announce that a session ticket will be provided by the server. Always an empty string. ', - name: 'tls.detailed.server_hello.extensions.session_ticket', - type: 'keyword', - }, - 'tls.detailed.server_hello.extensions.supported_versions': { - category: 'tls', - description: 'Negotiated TLS version to be used. ', - name: 'tls.detailed.server_hello.extensions.supported_versions', - type: 'keyword', - }, - 'tls.detailed.server_hello.extensions.ec_points_formats': { - category: 'tls', - description: - 'List of Elliptic Curve (EC) point formats. Indicates the set of point formats that the server can parse. ', - name: 'tls.detailed.server_hello.extensions.ec_points_formats', - type: 'keyword', - }, - 'tls.detailed.server_hello.extensions._unparsed_': { - category: 'tls', - description: 'List of extensions that were left unparsed by Packetbeat. ', - name: 'tls.detailed.server_hello.extensions._unparsed_', - type: 'keyword', - }, - 'tls.detailed.client_certificate.version': { - category: 'tls', - description: 'X509 format version.', - name: 'tls.detailed.client_certificate.version', - type: 'long', - }, - 'tls.detailed.client_certificate.version_number': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.detailed.client_certificate.version_number', - type: 'keyword', - }, - 'tls.detailed.client_certificate.serial_number': { - category: 'tls', - description: "The certificate's serial number.", - name: 'tls.detailed.client_certificate.serial_number', - type: 'keyword', - }, - 'tls.detailed.client_certificate.not_before': { - category: 'tls', - description: 'Date before which the certificate is not valid.', - name: 'tls.detailed.client_certificate.not_before', - type: 'date', - }, - 'tls.detailed.client_certificate.not_after': { - category: 'tls', - description: 'Date after which the certificate expires.', - name: 'tls.detailed.client_certificate.not_after', - type: 'date', - }, - 'tls.detailed.client_certificate.public_key_algorithm': { - category: 'tls', - description: "The algorithm used for this certificate's public key. One of RSA, DSA or ECDSA. ", - name: 'tls.detailed.client_certificate.public_key_algorithm', - type: 'keyword', - }, - 'tls.detailed.client_certificate.public_key_size': { - category: 'tls', - description: 'Size of the public key.', - name: 'tls.detailed.client_certificate.public_key_size', - type: 'long', - }, - 'tls.detailed.client_certificate.signature_algorithm': { - category: 'tls', - description: "The algorithm used for the certificate's signature. ", - name: 'tls.detailed.client_certificate.signature_algorithm', - type: 'keyword', - }, - 'tls.detailed.client_certificate.alternative_names': { - category: 'tls', - description: 'Subject Alternative Names for this certificate.', - name: 'tls.detailed.client_certificate.alternative_names', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.country': { - category: 'tls', - description: 'Country code.', - name: 'tls.detailed.client_certificate.subject.country', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.organization': { - category: 'tls', - description: 'Organization name.', - name: 'tls.detailed.client_certificate.subject.organization', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.organizational_unit': { - category: 'tls', - description: 'Unit within organization.', - name: 'tls.detailed.client_certificate.subject.organizational_unit', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.client_certificate.subject.province', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.common_name': { - category: 'tls', - description: 'Name or host name identified by the certificate.', - name: 'tls.detailed.client_certificate.subject.common_name', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.locality': { - category: 'tls', - description: 'Locality.', - name: 'tls.detailed.client_certificate.subject.locality', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Fastly, Inc., CN=r2.shared.global.fastly.net', - name: 'tls.detailed.client_certificate.subject.distinguished_name', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.country': { - category: 'tls', - description: 'Country code.', - name: 'tls.detailed.client_certificate.issuer.country', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.organization': { - category: 'tls', - description: 'Organization name.', - name: 'tls.detailed.client_certificate.issuer.organization', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.organizational_unit': { - category: 'tls', - description: 'Unit within organization.', - name: 'tls.detailed.client_certificate.issuer.organizational_unit', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.client_certificate.issuer.province', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.common_name': { - category: 'tls', - description: 'Name or host name identified by the certificate.', - name: 'tls.detailed.client_certificate.issuer.common_name', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.locality': { - category: 'tls', - description: 'Locality.', - name: 'tls.detailed.client_certificate.issuer.locality', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate issuer entity.', - example: 'C=US, ST=California, L=San Francisco, O=Fastly, Inc., CN=r2.shared.global.fastly.net', - name: 'tls.detailed.client_certificate.issuer.distinguished_name', - type: 'keyword', - }, - 'tls.detailed.server_certificate.version': { - category: 'tls', - description: 'X509 format version.', - name: 'tls.detailed.server_certificate.version', - type: 'long', - }, - 'tls.detailed.server_certificate.version_number': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.detailed.server_certificate.version_number', - type: 'keyword', - }, - 'tls.detailed.server_certificate.serial_number': { - category: 'tls', - description: "The certificate's serial number.", - name: 'tls.detailed.server_certificate.serial_number', - type: 'keyword', - }, - 'tls.detailed.server_certificate.not_before': { - category: 'tls', - description: 'Date before which the certificate is not valid.', - name: 'tls.detailed.server_certificate.not_before', - type: 'date', - }, - 'tls.detailed.server_certificate.not_after': { - category: 'tls', - description: 'Date after which the certificate expires.', - name: 'tls.detailed.server_certificate.not_after', - type: 'date', - }, - 'tls.detailed.server_certificate.public_key_algorithm': { - category: 'tls', - description: "The algorithm used for this certificate's public key. One of RSA, DSA or ECDSA. ", - name: 'tls.detailed.server_certificate.public_key_algorithm', - type: 'keyword', - }, - 'tls.detailed.server_certificate.public_key_size': { - category: 'tls', - description: 'Size of the public key.', - name: 'tls.detailed.server_certificate.public_key_size', - type: 'long', - }, - 'tls.detailed.server_certificate.signature_algorithm': { - category: 'tls', - description: "The algorithm used for the certificate's signature. ", - name: 'tls.detailed.server_certificate.signature_algorithm', - type: 'keyword', - }, - 'tls.detailed.server_certificate.alternative_names': { - category: 'tls', - description: 'Subject Alternative Names for this certificate.', - name: 'tls.detailed.server_certificate.alternative_names', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.country': { - category: 'tls', - description: 'Country code.', - name: 'tls.detailed.server_certificate.subject.country', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.organization': { - category: 'tls', - description: 'Organization name.', - name: 'tls.detailed.server_certificate.subject.organization', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.organizational_unit': { - category: 'tls', - description: 'Unit within organization.', - name: 'tls.detailed.server_certificate.subject.organizational_unit', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.server_certificate.subject.province', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.state_or_province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.server_certificate.subject.state_or_province', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.common_name': { - category: 'tls', - description: 'Name or host name identified by the certificate.', - name: 'tls.detailed.server_certificate.subject.common_name', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.locality': { - category: 'tls', - description: 'Locality.', - name: 'tls.detailed.server_certificate.subject.locality', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Fastly, Inc., CN=r2.shared.global.fastly.net', - name: 'tls.detailed.server_certificate.subject.distinguished_name', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.country': { - category: 'tls', - description: 'Country code.', - name: 'tls.detailed.server_certificate.issuer.country', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.organization': { - category: 'tls', - description: 'Organization name.', - name: 'tls.detailed.server_certificate.issuer.organization', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.organizational_unit': { - category: 'tls', - description: 'Unit within organization.', - name: 'tls.detailed.server_certificate.issuer.organizational_unit', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.server_certificate.issuer.province', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.state_or_province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.server_certificate.issuer.state_or_province', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.common_name': { - category: 'tls', - description: 'Name or host name identified by the certificate.', - name: 'tls.detailed.server_certificate.issuer.common_name', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.locality': { - category: 'tls', - description: 'Locality.', - name: 'tls.detailed.server_certificate.issuer.locality', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate issuer entity.', - example: 'C=US, ST=California, L=San Francisco, O=Fastly, Inc., CN=r2.shared.global.fastly.net', - name: 'tls.detailed.server_certificate.issuer.distinguished_name', - type: 'keyword', - }, - 'tls.detailed.server_certificate_chain': { - category: 'tls', - description: 'Chain of trust for the server certificate.', - name: 'tls.detailed.server_certificate_chain', - type: 'array', - }, - 'tls.detailed.client_certificate_chain': { - category: 'tls', - description: 'Chain of trust for the client certificate.', - name: 'tls.detailed.client_certificate_chain', - type: 'array', - }, - 'tls.detailed.alert_types': { - category: 'tls', - description: 'An array containing the TLS alert type for every alert received. ', - name: 'tls.detailed.alert_types', - type: 'keyword', - }, - 'tls.handshake_completed': { - category: 'tls', - name: 'tls.handshake_completed', - type: 'alias', - }, - 'tls.client_hello.supported_ciphers': { - category: 'tls', - name: 'tls.client_hello.supported_ciphers', - type: 'alias', - }, - 'tls.server_hello.selected_cipher': { - category: 'tls', - name: 'tls.server_hello.selected_cipher', - type: 'alias', - }, - 'tls.fingerprints.ja3': { - category: 'tls', - name: 'tls.fingerprints.ja3', - type: 'alias', - }, - 'tls.resumption_method': { - category: 'tls', - name: 'tls.resumption_method', - type: 'alias', - }, - 'tls.client_certificate_requested': { - category: 'tls', - name: 'tls.client_certificate_requested', - type: 'alias', - }, - 'tls.client_hello.version': { - category: 'tls', - name: 'tls.client_hello.version', - type: 'alias', - }, - 'tls.client_hello.session_id': { - category: 'tls', - name: 'tls.client_hello.session_id', - type: 'alias', - }, - 'tls.client_hello.supported_compression_methods': { - category: 'tls', - name: 'tls.client_hello.supported_compression_methods', - type: 'alias', - }, - 'tls.client_hello.extensions.server_name_indication': { - category: 'tls', - name: 'tls.client_hello.extensions.server_name_indication', - type: 'alias', - }, - 'tls.client_hello.extensions.application_layer_protocol_negotiation': { - category: 'tls', - name: 'tls.client_hello.extensions.application_layer_protocol_negotiation', - type: 'alias', - }, - 'tls.client_hello.extensions.session_ticket': { - category: 'tls', - name: 'tls.client_hello.extensions.session_ticket', - type: 'alias', - }, - 'tls.client_hello.extensions.supported_versions': { - category: 'tls', - name: 'tls.client_hello.extensions.supported_versions', - type: 'alias', - }, - 'tls.client_hello.extensions.supported_groups': { - category: 'tls', - name: 'tls.client_hello.extensions.supported_groups', - type: 'alias', - }, - 'tls.client_hello.extensions.signature_algorithms': { - category: 'tls', - name: 'tls.client_hello.extensions.signature_algorithms', - type: 'alias', - }, - 'tls.client_hello.extensions.ec_points_formats': { - category: 'tls', - name: 'tls.client_hello.extensions.ec_points_formats', - type: 'alias', - }, - 'tls.client_hello.extensions._unparsed_': { - category: 'tls', - name: 'tls.client_hello.extensions._unparsed_', - type: 'alias', - }, - 'tls.server_hello.version': { - category: 'tls', - name: 'tls.server_hello.version', - type: 'alias', - }, - 'tls.server_hello.selected_compression_method': { - category: 'tls', - name: 'tls.server_hello.selected_compression_method', - type: 'alias', - }, - 'tls.server_hello.session_id': { - category: 'tls', - name: 'tls.server_hello.session_id', - type: 'alias', - }, - 'tls.server_hello.extensions.application_layer_protocol_negotiation': { - category: 'tls', - name: 'tls.server_hello.extensions.application_layer_protocol_negotiation', - type: 'alias', - }, - 'tls.server_hello.extensions.session_ticket': { - category: 'tls', - name: 'tls.server_hello.extensions.session_ticket', - type: 'alias', - }, - 'tls.server_hello.extensions.supported_versions': { - category: 'tls', - name: 'tls.server_hello.extensions.supported_versions', - type: 'alias', - }, - 'tls.server_hello.extensions.ec_points_formats': { - category: 'tls', - name: 'tls.server_hello.extensions.ec_points_formats', - type: 'alias', - }, - 'tls.server_hello.extensions._unparsed_': { - category: 'tls', - name: 'tls.server_hello.extensions._unparsed_', - type: 'alias', - }, - 'tls.client_certificate.version': { - category: 'tls', - name: 'tls.client_certificate.version', - type: 'alias', - }, - 'tls.client_certificate.serial_number': { - category: 'tls', - name: 'tls.client_certificate.serial_number', - type: 'alias', - }, - 'tls.client_certificate.not_before': { - category: 'tls', - name: 'tls.client_certificate.not_before', - type: 'alias', - }, - 'tls.client_certificate.not_after': { - category: 'tls', - name: 'tls.client_certificate.not_after', - type: 'alias', - }, - 'tls.client_certificate.public_key_algorithm': { - category: 'tls', - name: 'tls.client_certificate.public_key_algorithm', - type: 'alias', - }, - 'tls.client_certificate.public_key_size': { - category: 'tls', - name: 'tls.client_certificate.public_key_size', - type: 'alias', - }, - 'tls.client_certificate.signature_algorithm': { - category: 'tls', - name: 'tls.client_certificate.signature_algorithm', - type: 'alias', - }, - 'tls.client_certificate.alternative_names': { - category: 'tls', - name: 'tls.client_certificate.alternative_names', - type: 'alias', - }, - 'tls.client_certificate.subject.country': { - category: 'tls', - name: 'tls.client_certificate.subject.country', - type: 'alias', - }, - 'tls.client_certificate.subject.organization': { - category: 'tls', - name: 'tls.client_certificate.subject.organization', - type: 'alias', - }, - 'tls.client_certificate.subject.organizational_unit': { - category: 'tls', - name: 'tls.client_certificate.subject.organizational_unit', - type: 'alias', - }, - 'tls.client_certificate.subject.province': { - category: 'tls', - name: 'tls.client_certificate.subject.province', - type: 'alias', - }, - 'tls.client_certificate.subject.common_name': { - category: 'tls', - name: 'tls.client_certificate.subject.common_name', - type: 'alias', - }, - 'tls.client_certificate.subject.locality': { - category: 'tls', - name: 'tls.client_certificate.subject.locality', - type: 'alias', - }, - 'tls.client_certificate.issuer.country': { - category: 'tls', - name: 'tls.client_certificate.issuer.country', - type: 'alias', - }, - 'tls.client_certificate.issuer.organization': { - category: 'tls', - name: 'tls.client_certificate.issuer.organization', - type: 'alias', - }, - 'tls.client_certificate.issuer.organizational_unit': { - category: 'tls', - name: 'tls.client_certificate.issuer.organizational_unit', - type: 'alias', - }, - 'tls.client_certificate.issuer.province': { - category: 'tls', - name: 'tls.client_certificate.issuer.province', - type: 'alias', - }, - 'tls.client_certificate.issuer.common_name': { - category: 'tls', - name: 'tls.client_certificate.issuer.common_name', - type: 'alias', - }, - 'tls.client_certificate.issuer.locality': { - category: 'tls', - name: 'tls.client_certificate.issuer.locality', - type: 'alias', - }, - 'tls.server_certificate.version': { - category: 'tls', - name: 'tls.server_certificate.version', - type: 'alias', - }, - 'tls.server_certificate.serial_number': { - category: 'tls', - name: 'tls.server_certificate.serial_number', - type: 'alias', - }, - 'tls.server_certificate.not_before': { - category: 'tls', - name: 'tls.server_certificate.not_before', - type: 'alias', - }, - 'tls.server_certificate.not_after': { - category: 'tls', - name: 'tls.server_certificate.not_after', - type: 'alias', - }, - 'tls.server_certificate.public_key_algorithm': { - category: 'tls', - name: 'tls.server_certificate.public_key_algorithm', - type: 'alias', - }, - 'tls.server_certificate.public_key_size': { - category: 'tls', - name: 'tls.server_certificate.public_key_size', - type: 'alias', - }, - 'tls.server_certificate.signature_algorithm': { - category: 'tls', - name: 'tls.server_certificate.signature_algorithm', - type: 'alias', - }, - 'tls.server_certificate.alternative_names': { - category: 'tls', - name: 'tls.server_certificate.alternative_names', - type: 'alias', - }, - 'tls.server_certificate.subject.country': { - category: 'tls', - name: 'tls.server_certificate.subject.country', - type: 'alias', - }, - 'tls.server_certificate.subject.organization': { - category: 'tls', - name: 'tls.server_certificate.subject.organization', - type: 'alias', - }, - 'tls.server_certificate.subject.organizational_unit': { - category: 'tls', - name: 'tls.server_certificate.subject.organizational_unit', - type: 'alias', - }, - 'tls.server_certificate.subject.province': { - category: 'tls', - name: 'tls.server_certificate.subject.province', - type: 'alias', - }, - 'tls.server_certificate.subject.common_name': { - category: 'tls', - name: 'tls.server_certificate.subject.common_name', - type: 'alias', - }, - 'tls.server_certificate.subject.locality': { - category: 'tls', - name: 'tls.server_certificate.subject.locality', - type: 'alias', - }, - 'tls.server_certificate.issuer.country': { - category: 'tls', - name: 'tls.server_certificate.issuer.country', - type: 'alias', - }, - 'tls.server_certificate.issuer.organization': { - category: 'tls', - name: 'tls.server_certificate.issuer.organization', - type: 'alias', - }, - 'tls.server_certificate.issuer.organizational_unit': { - category: 'tls', - name: 'tls.server_certificate.issuer.organizational_unit', - type: 'alias', - }, - 'tls.server_certificate.issuer.province': { - category: 'tls', - name: 'tls.server_certificate.issuer.province', - type: 'alias', - }, - 'tls.server_certificate.issuer.common_name': { - category: 'tls', - name: 'tls.server_certificate.issuer.common_name', - type: 'alias', - }, - 'tls.server_certificate.issuer.locality': { - category: 'tls', - name: 'tls.server_certificate.issuer.locality', - type: 'alias', - }, - 'tls.alert_types': { - category: 'tls', - name: 'tls.alert_types', - type: 'alias', - }, - 'winlog.api': { - category: 'winlog', - description: - 'The event log API type used to read the record. The possible values are "wineventlog" for the Windows Event Log API or "wineventlog-experimental" for its experimental implementation. ', - name: 'winlog.api', - }, - 'winlog.activity_id': { - category: 'winlog', - description: - 'A globally unique identifier that identifies the current activity. The events that are published with this identifier are part of the same activity. ', - name: 'winlog.activity_id', - type: 'keyword', - }, - 'winlog.computer_name': { - category: 'winlog', - description: - 'The name of the computer that generated the record. When using Windows event forwarding, this name can differ from `agent.hostname`. ', - name: 'winlog.computer_name', - type: 'keyword', - }, - 'winlog.event_data': { - category: 'winlog', - description: - 'The event-specific data. This field is mutually exclusive with `user_data`. If you are capturing event data on versions prior to Windows Vista, the parameters in `event_data` are named `param1`, `param2`, and so on, because event log parameters are unnamed in earlier versions of Windows. ', - name: 'winlog.event_data', - type: 'object', - }, - 'winlog.event_data.AuthenticationPackageName': { - category: 'winlog', - name: 'winlog.event_data.AuthenticationPackageName', - type: 'keyword', - }, - 'winlog.event_data.Binary': { - category: 'winlog', - name: 'winlog.event_data.Binary', - type: 'keyword', - }, - 'winlog.event_data.BitlockerUserInputTime': { - category: 'winlog', - name: 'winlog.event_data.BitlockerUserInputTime', - type: 'keyword', - }, - 'winlog.event_data.BootMode': { - category: 'winlog', - name: 'winlog.event_data.BootMode', - type: 'keyword', - }, - 'winlog.event_data.BootType': { - category: 'winlog', - name: 'winlog.event_data.BootType', - type: 'keyword', - }, - 'winlog.event_data.BuildVersion': { - category: 'winlog', - name: 'winlog.event_data.BuildVersion', - type: 'keyword', - }, - 'winlog.event_data.Company': { - category: 'winlog', - name: 'winlog.event_data.Company', - type: 'keyword', - }, - 'winlog.event_data.CorruptionActionState': { - category: 'winlog', - name: 'winlog.event_data.CorruptionActionState', - type: 'keyword', - }, - 'winlog.event_data.CreationUtcTime': { - category: 'winlog', - name: 'winlog.event_data.CreationUtcTime', - type: 'keyword', - }, - 'winlog.event_data.Description': { - category: 'winlog', - name: 'winlog.event_data.Description', - type: 'keyword', - }, - 'winlog.event_data.Detail': { - category: 'winlog', - name: 'winlog.event_data.Detail', - type: 'keyword', - }, - 'winlog.event_data.DeviceName': { - category: 'winlog', - name: 'winlog.event_data.DeviceName', - type: 'keyword', - }, - 'winlog.event_data.DeviceNameLength': { - category: 'winlog', - name: 'winlog.event_data.DeviceNameLength', - type: 'keyword', - }, - 'winlog.event_data.DeviceTime': { - category: 'winlog', - name: 'winlog.event_data.DeviceTime', - type: 'keyword', - }, - 'winlog.event_data.DeviceVersionMajor': { - category: 'winlog', - name: 'winlog.event_data.DeviceVersionMajor', - type: 'keyword', - }, - 'winlog.event_data.DeviceVersionMinor': { - category: 'winlog', - name: 'winlog.event_data.DeviceVersionMinor', - type: 'keyword', - }, - 'winlog.event_data.DriveName': { - category: 'winlog', - name: 'winlog.event_data.DriveName', - type: 'keyword', - }, - 'winlog.event_data.DriverName': { - category: 'winlog', - name: 'winlog.event_data.DriverName', - type: 'keyword', - }, - 'winlog.event_data.DriverNameLength': { - category: 'winlog', - name: 'winlog.event_data.DriverNameLength', - type: 'keyword', - }, - 'winlog.event_data.DwordVal': { - category: 'winlog', - name: 'winlog.event_data.DwordVal', - type: 'keyword', - }, - 'winlog.event_data.EntryCount': { - category: 'winlog', - name: 'winlog.event_data.EntryCount', - type: 'keyword', - }, - 'winlog.event_data.ExtraInfo': { - category: 'winlog', - name: 'winlog.event_data.ExtraInfo', - type: 'keyword', - }, - 'winlog.event_data.FailureName': { - category: 'winlog', - name: 'winlog.event_data.FailureName', - type: 'keyword', - }, - 'winlog.event_data.FailureNameLength': { - category: 'winlog', - name: 'winlog.event_data.FailureNameLength', - type: 'keyword', - }, - 'winlog.event_data.FileVersion': { - category: 'winlog', - name: 'winlog.event_data.FileVersion', - type: 'keyword', - }, - 'winlog.event_data.FinalStatus': { - category: 'winlog', - name: 'winlog.event_data.FinalStatus', - type: 'keyword', - }, - 'winlog.event_data.Group': { - category: 'winlog', - name: 'winlog.event_data.Group', - type: 'keyword', - }, - 'winlog.event_data.IdleImplementation': { - category: 'winlog', - name: 'winlog.event_data.IdleImplementation', - type: 'keyword', - }, - 'winlog.event_data.IdleStateCount': { - category: 'winlog', - name: 'winlog.event_data.IdleStateCount', - type: 'keyword', - }, - 'winlog.event_data.ImpersonationLevel': { - category: 'winlog', - name: 'winlog.event_data.ImpersonationLevel', - type: 'keyword', - }, - 'winlog.event_data.IntegrityLevel': { - category: 'winlog', - name: 'winlog.event_data.IntegrityLevel', - type: 'keyword', - }, - 'winlog.event_data.IpAddress': { - category: 'winlog', - name: 'winlog.event_data.IpAddress', - type: 'keyword', - }, - 'winlog.event_data.IpPort': { - category: 'winlog', - name: 'winlog.event_data.IpPort', - type: 'keyword', - }, - 'winlog.event_data.KeyLength': { - category: 'winlog', - name: 'winlog.event_data.KeyLength', - type: 'keyword', - }, - 'winlog.event_data.LastBootGood': { - category: 'winlog', - name: 'winlog.event_data.LastBootGood', - type: 'keyword', - }, - 'winlog.event_data.LastShutdownGood': { - category: 'winlog', - name: 'winlog.event_data.LastShutdownGood', - type: 'keyword', - }, - 'winlog.event_data.LmPackageName': { - category: 'winlog', - name: 'winlog.event_data.LmPackageName', - type: 'keyword', - }, - 'winlog.event_data.LogonGuid': { - category: 'winlog', - name: 'winlog.event_data.LogonGuid', - type: 'keyword', - }, - 'winlog.event_data.LogonId': { - category: 'winlog', - name: 'winlog.event_data.LogonId', - type: 'keyword', - }, - 'winlog.event_data.LogonProcessName': { - category: 'winlog', - name: 'winlog.event_data.LogonProcessName', - type: 'keyword', - }, - 'winlog.event_data.LogonType': { - category: 'winlog', - name: 'winlog.event_data.LogonType', - type: 'keyword', - }, - 'winlog.event_data.MajorVersion': { - category: 'winlog', - name: 'winlog.event_data.MajorVersion', - type: 'keyword', - }, - 'winlog.event_data.MaximumPerformancePercent': { - category: 'winlog', - name: 'winlog.event_data.MaximumPerformancePercent', - type: 'keyword', - }, - 'winlog.event_data.MemberName': { - category: 'winlog', - name: 'winlog.event_data.MemberName', - type: 'keyword', - }, - 'winlog.event_data.MemberSid': { - category: 'winlog', - name: 'winlog.event_data.MemberSid', - type: 'keyword', - }, - 'winlog.event_data.MinimumPerformancePercent': { - category: 'winlog', - name: 'winlog.event_data.MinimumPerformancePercent', - type: 'keyword', - }, - 'winlog.event_data.MinimumThrottlePercent': { - category: 'winlog', - name: 'winlog.event_data.MinimumThrottlePercent', - type: 'keyword', - }, - 'winlog.event_data.MinorVersion': { - category: 'winlog', - name: 'winlog.event_data.MinorVersion', - type: 'keyword', - }, - 'winlog.event_data.NewProcessId': { - category: 'winlog', - name: 'winlog.event_data.NewProcessId', - type: 'keyword', - }, - 'winlog.event_data.NewProcessName': { - category: 'winlog', - name: 'winlog.event_data.NewProcessName', - type: 'keyword', - }, - 'winlog.event_data.NewSchemeGuid': { - category: 'winlog', - name: 'winlog.event_data.NewSchemeGuid', - type: 'keyword', - }, - 'winlog.event_data.NewTime': { - category: 'winlog', - name: 'winlog.event_data.NewTime', - type: 'keyword', - }, - 'winlog.event_data.NominalFrequency': { - category: 'winlog', - name: 'winlog.event_data.NominalFrequency', - type: 'keyword', - }, - 'winlog.event_data.Number': { - category: 'winlog', - name: 'winlog.event_data.Number', - type: 'keyword', - }, - 'winlog.event_data.OldSchemeGuid': { - category: 'winlog', - name: 'winlog.event_data.OldSchemeGuid', - type: 'keyword', - }, - 'winlog.event_data.OldTime': { - category: 'winlog', - name: 'winlog.event_data.OldTime', - type: 'keyword', - }, - 'winlog.event_data.OriginalFileName': { - category: 'winlog', - name: 'winlog.event_data.OriginalFileName', - type: 'keyword', - }, - 'winlog.event_data.Path': { - category: 'winlog', - name: 'winlog.event_data.Path', - type: 'keyword', - }, - 'winlog.event_data.PerformanceImplementation': { - category: 'winlog', - name: 'winlog.event_data.PerformanceImplementation', - type: 'keyword', - }, - 'winlog.event_data.PreviousCreationUtcTime': { - category: 'winlog', - name: 'winlog.event_data.PreviousCreationUtcTime', - type: 'keyword', - }, - 'winlog.event_data.PreviousTime': { - category: 'winlog', - name: 'winlog.event_data.PreviousTime', - type: 'keyword', - }, - 'winlog.event_data.PrivilegeList': { - category: 'winlog', - name: 'winlog.event_data.PrivilegeList', - type: 'keyword', - }, - 'winlog.event_data.ProcessId': { - category: 'winlog', - name: 'winlog.event_data.ProcessId', - type: 'keyword', - }, - 'winlog.event_data.ProcessName': { - category: 'winlog', - name: 'winlog.event_data.ProcessName', - type: 'keyword', - }, - 'winlog.event_data.ProcessPath': { - category: 'winlog', - name: 'winlog.event_data.ProcessPath', - type: 'keyword', - }, - 'winlog.event_data.ProcessPid': { - category: 'winlog', - name: 'winlog.event_data.ProcessPid', - type: 'keyword', - }, - 'winlog.event_data.Product': { - category: 'winlog', - name: 'winlog.event_data.Product', - type: 'keyword', - }, - 'winlog.event_data.PuaCount': { - category: 'winlog', - name: 'winlog.event_data.PuaCount', - type: 'keyword', - }, - 'winlog.event_data.PuaPolicyId': { - category: 'winlog', - name: 'winlog.event_data.PuaPolicyId', - type: 'keyword', - }, - 'winlog.event_data.QfeVersion': { - category: 'winlog', - name: 'winlog.event_data.QfeVersion', - type: 'keyword', - }, - 'winlog.event_data.Reason': { - category: 'winlog', - name: 'winlog.event_data.Reason', - type: 'keyword', - }, - 'winlog.event_data.SchemaVersion': { - category: 'winlog', - name: 'winlog.event_data.SchemaVersion', - type: 'keyword', - }, - 'winlog.event_data.ScriptBlockText': { - category: 'winlog', - name: 'winlog.event_data.ScriptBlockText', - type: 'keyword', - }, - 'winlog.event_data.ServiceName': { - category: 'winlog', - name: 'winlog.event_data.ServiceName', - type: 'keyword', - }, - 'winlog.event_data.ServiceVersion': { - category: 'winlog', - name: 'winlog.event_data.ServiceVersion', - type: 'keyword', - }, - 'winlog.event_data.ShutdownActionType': { - category: 'winlog', - name: 'winlog.event_data.ShutdownActionType', - type: 'keyword', - }, - 'winlog.event_data.ShutdownEventCode': { - category: 'winlog', - name: 'winlog.event_data.ShutdownEventCode', - type: 'keyword', - }, - 'winlog.event_data.ShutdownReason': { - category: 'winlog', - name: 'winlog.event_data.ShutdownReason', - type: 'keyword', - }, - 'winlog.event_data.Signature': { - category: 'winlog', - name: 'winlog.event_data.Signature', - type: 'keyword', - }, - 'winlog.event_data.SignatureStatus': { - category: 'winlog', - name: 'winlog.event_data.SignatureStatus', - type: 'keyword', - }, - 'winlog.event_data.Signed': { - category: 'winlog', - name: 'winlog.event_data.Signed', - type: 'keyword', - }, - 'winlog.event_data.StartTime': { - category: 'winlog', - name: 'winlog.event_data.StartTime', - type: 'keyword', - }, - 'winlog.event_data.State': { - category: 'winlog', - name: 'winlog.event_data.State', - type: 'keyword', - }, - 'winlog.event_data.Status': { - category: 'winlog', - name: 'winlog.event_data.Status', - type: 'keyword', - }, - 'winlog.event_data.StopTime': { - category: 'winlog', - name: 'winlog.event_data.StopTime', - type: 'keyword', - }, - 'winlog.event_data.SubjectDomainName': { - category: 'winlog', - name: 'winlog.event_data.SubjectDomainName', - type: 'keyword', - }, - 'winlog.event_data.SubjectLogonId': { - category: 'winlog', - name: 'winlog.event_data.SubjectLogonId', - type: 'keyword', - }, - 'winlog.event_data.SubjectUserName': { - category: 'winlog', - name: 'winlog.event_data.SubjectUserName', - type: 'keyword', - }, - 'winlog.event_data.SubjectUserSid': { - category: 'winlog', - name: 'winlog.event_data.SubjectUserSid', - type: 'keyword', - }, - 'winlog.event_data.TSId': { - category: 'winlog', - name: 'winlog.event_data.TSId', - type: 'keyword', - }, - 'winlog.event_data.TargetDomainName': { - category: 'winlog', - name: 'winlog.event_data.TargetDomainName', - type: 'keyword', - }, - 'winlog.event_data.TargetInfo': { - category: 'winlog', - name: 'winlog.event_data.TargetInfo', - type: 'keyword', - }, - 'winlog.event_data.TargetLogonGuid': { - category: 'winlog', - name: 'winlog.event_data.TargetLogonGuid', - type: 'keyword', - }, - 'winlog.event_data.TargetLogonId': { - category: 'winlog', - name: 'winlog.event_data.TargetLogonId', - type: 'keyword', - }, - 'winlog.event_data.TargetServerName': { - category: 'winlog', - name: 'winlog.event_data.TargetServerName', - type: 'keyword', - }, - 'winlog.event_data.TargetUserName': { - category: 'winlog', - name: 'winlog.event_data.TargetUserName', - type: 'keyword', - }, - 'winlog.event_data.TargetUserSid': { - category: 'winlog', - name: 'winlog.event_data.TargetUserSid', - type: 'keyword', - }, - 'winlog.event_data.TerminalSessionId': { - category: 'winlog', - name: 'winlog.event_data.TerminalSessionId', - type: 'keyword', - }, - 'winlog.event_data.TokenElevationType': { - category: 'winlog', - name: 'winlog.event_data.TokenElevationType', - type: 'keyword', - }, - 'winlog.event_data.TransmittedServices': { - category: 'winlog', - name: 'winlog.event_data.TransmittedServices', - type: 'keyword', - }, - 'winlog.event_data.UserSid': { - category: 'winlog', - name: 'winlog.event_data.UserSid', - type: 'keyword', - }, - 'winlog.event_data.Version': { - category: 'winlog', - name: 'winlog.event_data.Version', - type: 'keyword', - }, - 'winlog.event_data.Workstation': { - category: 'winlog', - name: 'winlog.event_data.Workstation', - type: 'keyword', - }, - 'winlog.event_data.param1': { - category: 'winlog', - name: 'winlog.event_data.param1', - type: 'keyword', - }, - 'winlog.event_data.param2': { - category: 'winlog', - name: 'winlog.event_data.param2', - type: 'keyword', - }, - 'winlog.event_data.param3': { - category: 'winlog', - name: 'winlog.event_data.param3', - type: 'keyword', - }, - 'winlog.event_data.param4': { - category: 'winlog', - name: 'winlog.event_data.param4', - type: 'keyword', - }, - 'winlog.event_data.param5': { - category: 'winlog', - name: 'winlog.event_data.param5', - type: 'keyword', - }, - 'winlog.event_data.param6': { - category: 'winlog', - name: 'winlog.event_data.param6', - type: 'keyword', - }, - 'winlog.event_data.param7': { - category: 'winlog', - name: 'winlog.event_data.param7', - type: 'keyword', - }, - 'winlog.event_data.param8': { - category: 'winlog', - name: 'winlog.event_data.param8', - type: 'keyword', - }, - 'winlog.event_id': { - category: 'winlog', - description: 'The event identifier. The value is specific to the source of the event. ', - name: 'winlog.event_id', - type: 'keyword', - }, - 'winlog.keywords': { - category: 'winlog', - description: 'The keywords are used to classify an event. ', - name: 'winlog.keywords', - type: 'keyword', - }, - 'winlog.channel': { - category: 'winlog', - description: - 'The name of the channel from which this record was read. This value is one of the names from the `event_logs` collection in the configuration. ', - name: 'winlog.channel', - type: 'keyword', - }, - 'winlog.record_id': { - category: 'winlog', - description: - 'The record ID of the event log record. The first record written to an event log is record number 1, and other records are numbered sequentially. If the record number reaches the maximum value (2^32^ for the Event Logging API and 2^64^ for the Windows Event Log API), the next record number will be 0. ', - name: 'winlog.record_id', - type: 'keyword', - }, - 'winlog.related_activity_id': { - category: 'winlog', - description: - 'A globally unique identifier that identifies the activity to which control was transferred to. The related events would then have this identifier as their `activity_id` identifier. ', - name: 'winlog.related_activity_id', - type: 'keyword', - }, - 'winlog.opcode': { - category: 'winlog', - description: - 'The opcode defined in the event. Task and opcode are typically used to identify the location in the application from where the event was logged. ', - name: 'winlog.opcode', - type: 'keyword', - }, - 'winlog.provider_guid': { - category: 'winlog', - description: - 'A globally unique identifier that identifies the provider that logged the event. ', - name: 'winlog.provider_guid', - type: 'keyword', - }, - 'winlog.process.pid': { - category: 'winlog', - description: 'The process_id of the Client Server Runtime Process. ', - name: 'winlog.process.pid', - type: 'long', - }, - 'winlog.provider_name': { - category: 'winlog', - description: - 'The source of the event log record (the application or service that logged the record). ', - name: 'winlog.provider_name', - type: 'keyword', - }, - 'winlog.task': { - category: 'winlog', - description: - 'The task defined in the event. Task and opcode are typically used to identify the location in the application from where the event was logged. The category used by the Event Logging API (on pre Windows Vista operating systems) is written to this field. ', - name: 'winlog.task', - type: 'keyword', - }, - 'winlog.time_created': { - category: 'winlog', - description: 'The event creation time. ', - name: 'winlog.time_created', - type: 'date', - }, - 'winlog.process.thread.id': { - category: 'winlog', - name: 'winlog.process.thread.id', - type: 'long', - }, - 'winlog.user_data': { - category: 'winlog', - description: 'The event specific data. This field is mutually exclusive with `event_data`. ', - name: 'winlog.user_data', - type: 'object', - }, - 'winlog.user.identifier': { - category: 'winlog', - description: - 'The Windows security identifier (SID) of the account associated with this event. If Winlogbeat cannot resolve the SID to a name, then the `user.name`, `user.domain`, and `user.type` fields will be omitted from the event. If you discover Winlogbeat not resolving SIDs, review the log for clues as to what the problem may be. ', - example: 'S-1-5-21-3541430928-2051711210-1391384369-1001', - name: 'winlog.user.identifier', - type: 'keyword', - }, - 'winlog.user.name': { - category: 'winlog', - description: 'Name of the user associated with this event. ', - name: 'winlog.user.name', - type: 'keyword', - }, - 'winlog.user.domain': { - category: 'winlog', - description: 'The domain that the account associated with this event is a member of. ', - name: 'winlog.user.domain', - type: 'keyword', - }, - 'winlog.user.type': { - category: 'winlog', - description: 'The type of account associated with this event. ', - name: 'winlog.user.type', - type: 'keyword', - }, - 'winlog.version': { - category: 'winlog', - description: "The version number of the event's definition.", - name: 'winlog.version', - type: 'long', - }, - activity_id: { - category: 'base', - name: 'activity_id', - type: 'alias', - }, - computer_name: { - category: 'base', - name: 'computer_name', - type: 'alias', - }, - event_id: { - category: 'base', - name: 'event_id', - type: 'alias', - }, - keywords: { - category: 'base', - name: 'keywords', - type: 'alias', - }, - log_name: { - category: 'base', - name: 'log_name', - type: 'alias', - }, - message_error: { - category: 'base', - name: 'message_error', - type: 'alias', - }, - record_number: { - category: 'base', - name: 'record_number', - type: 'alias', - }, - related_activity_id: { - category: 'base', - name: 'related_activity_id', - type: 'alias', - }, - opcode: { - category: 'base', - name: 'opcode', - type: 'alias', - }, - provider_guid: { - category: 'base', - name: 'provider_guid', - type: 'alias', - }, - process_id: { - category: 'base', - name: 'process_id', - type: 'alias', - }, - source_name: { - category: 'base', - name: 'source_name', - type: 'alias', - }, - task: { - category: 'base', - name: 'task', - type: 'alias', - }, - thread_id: { - category: 'base', - name: 'thread_id', - type: 'alias', - }, - 'user.identifier': { - category: 'user', - name: 'user.identifier', - type: 'alias', - }, - 'user.type': { - category: 'user', - name: 'user.type', - type: 'alias', - }, - version: { - category: 'base', - name: 'version', - type: 'alias', - }, - xml: { - category: 'base', - name: 'xml', - type: 'alias', - }, - 'powershell.id': { - category: 'powershell', - description: 'Shell Id.', - example: 'Microsoft Powershell', - name: 'powershell.id', - type: 'keyword', - }, - 'powershell.pipeline_id': { - category: 'powershell', - description: 'Pipeline id.', - example: '1', - name: 'powershell.pipeline_id', - type: 'keyword', - }, - 'powershell.runspace_id': { - category: 'powershell', - description: 'Runspace id.', - example: '4fa9074d-45ab-4e53-9195-e91981ac2bbb', - name: 'powershell.runspace_id', - type: 'keyword', - }, - 'powershell.sequence': { - category: 'powershell', - description: 'Sequence number of the powershell execution.', - example: 1, - name: 'powershell.sequence', - type: 'long', - }, - 'powershell.total': { - category: 'powershell', - description: 'Total number of messages in the sequence.', - example: 10, - name: 'powershell.total', - type: 'long', - }, - 'powershell.command.path': { - category: 'powershell', - description: 'Path of the executed command.', - example: 'C:\\Windows\\system32\\cmd.exe', - name: 'powershell.command.path', - type: 'keyword', - }, - 'powershell.command.name': { - category: 'powershell', - description: 'Name of the executed command.', - example: 'cmd.exe', - name: 'powershell.command.name', - type: 'keyword', - }, - 'powershell.command.type': { - category: 'powershell', - description: 'Type of the executed command.', - example: 'Application', - name: 'powershell.command.type', - type: 'keyword', - }, - 'powershell.command.value': { - category: 'powershell', - description: 'The invoked command.', - example: 'Import-LocalizedData LocalizedData -filename ArchiveResources', - name: 'powershell.command.value', - type: 'text', - }, - 'powershell.command.invocation_details': { - category: 'powershell', - description: 'An array of objects containing detailed information of the executed command. ', - name: 'powershell.command.invocation_details', - type: 'array', - }, - 'powershell.command.invocation_details.type': { - category: 'powershell', - description: 'The type of detail.', - example: 'CommandInvocation', - name: 'powershell.command.invocation_details.type', - type: 'keyword', - }, - 'powershell.command.invocation_details.related_command': { - category: 'powershell', - description: 'The command to which the detail is related to.', - example: 'Add-Type', - name: 'powershell.command.invocation_details.related_command', - type: 'keyword', - }, - 'powershell.command.invocation_details.name': { - category: 'powershell', - description: 'Only used for ParameterBinding detail type. Indicates the parameter name. ', - example: 'AssemblyName', - name: 'powershell.command.invocation_details.name', - type: 'keyword', - }, - 'powershell.command.invocation_details.value': { - category: 'powershell', - description: 'The value of the detail. The meaning of it will depend on the detail type. ', - example: 'System.IO.Compression.FileSystem', - name: 'powershell.command.invocation_details.value', - type: 'text', - }, - 'powershell.connected_user.domain': { - category: 'powershell', - description: 'User domain.', - example: 'VAGRANT', - name: 'powershell.connected_user.domain', - type: 'keyword', - }, - 'powershell.connected_user.name': { - category: 'powershell', - description: 'User name.', - example: 'vagrant', - name: 'powershell.connected_user.name', - type: 'keyword', - }, - 'powershell.engine.version': { - category: 'powershell', - description: 'Version of the PowerShell engine version used to execute the command.', - example: '5.1.17763.1007', - name: 'powershell.engine.version', - type: 'keyword', - }, - 'powershell.engine.previous_state': { - category: 'powershell', - description: 'Previous state of the PowerShell engine. ', - example: 'Available', - name: 'powershell.engine.previous_state', - type: 'keyword', - }, - 'powershell.engine.new_state': { - category: 'powershell', - description: 'New state of the PowerShell engine. ', - example: 'Stopped', - name: 'powershell.engine.new_state', - type: 'keyword', - }, - 'powershell.file.script_block_id': { - category: 'powershell', - description: 'Id of the executed script block.', - example: '50d2dbda-7361-4926-a94d-d9eadfdb43fa', - name: 'powershell.file.script_block_id', - type: 'keyword', - }, - 'powershell.file.script_block_text': { - category: 'powershell', - description: 'Text of the executed script block. ', - example: '.\\a_script.ps1', - name: 'powershell.file.script_block_text', - type: 'text', - }, - 'powershell.process.executable_version': { - category: 'powershell', - description: 'Version of the engine hosting process executable.', - example: '5.1.17763.1007', - name: 'powershell.process.executable_version', - type: 'keyword', - }, - 'powershell.provider.new_state': { - category: 'powershell', - description: 'New state of the PowerShell provider. ', - example: 'Active', - name: 'powershell.provider.new_state', - type: 'keyword', - }, - 'powershell.provider.name': { - category: 'powershell', - description: 'Provider name. ', - example: 'Variable', - name: 'powershell.provider.name', - type: 'keyword', - }, - 'winlog.logon.type': { - category: 'winlog', - description: - 'Logon type name. This is the descriptive version of the `winlog.event_data.LogonType` ordinal. This is an enrichment added by the Security module. ', - example: 'RemoteInteractive', - name: 'winlog.logon.type', - type: 'keyword', - }, - 'winlog.logon.id': { - category: 'winlog', - description: - 'Logon ID that can be used to associate this logon with other events related to the same logon session. ', - name: 'winlog.logon.id', - type: 'keyword', - }, - 'winlog.logon.failure.reason': { - category: 'winlog', - description: 'The reason the logon failed. ', - name: 'winlog.logon.failure.reason', - type: 'keyword', - }, - 'winlog.logon.failure.status': { - category: 'winlog', - description: - 'The reason the logon failed. This is textual description based on the value of the hexadecimal `Status` field. ', - name: 'winlog.logon.failure.status', - type: 'keyword', - }, - 'winlog.logon.failure.sub_status': { - category: 'winlog', - description: - 'Additional information about the logon failure. This is a textual description based on the value of the hexidecimal `SubStatus` field. ', - name: 'winlog.logon.failure.sub_status', - type: 'keyword', - }, - 'sysmon.dns.status': { - category: 'sysmon', - description: 'Windows status code returned for the DNS query.', - name: 'sysmon.dns.status', - type: 'keyword', - }, - 'sysmon.file.archived': { - category: 'sysmon', - description: 'Indicates if the deleted file was archived.', - name: 'sysmon.file.archived', - type: 'boolean', - }, - 'sysmon.file.is_executable': { - category: 'sysmon', - description: 'Indicates if the deleted file was an executable.', - name: 'sysmon.file.is_executable', - type: 'boolean', - }, -}; diff --git a/x-pack/plugins/task_manager/server/task_running/ephemeral_task_runner.ts b/x-pack/plugins/task_manager/server/task_running/ephemeral_task_runner.ts index 0085329cd66e61..a9d1d8b6f2f168 100644 --- a/x-pack/plugins/task_manager/server/task_running/ephemeral_task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/ephemeral_task_runner.ts @@ -304,6 +304,7 @@ export class EphemeralTaskManagerRunner implements TaskRunner { public async cancel() { const { task } = this; if (task?.cancel) { + // it will cause the task state of "running" to be cleared this.task = undefined; return task.cancel(); } diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index e21e418c904615..48927435c4bdf9 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -431,6 +431,7 @@ export class TaskManagerRunner implements TaskRunner { public async cancel() { const { task } = this; if (task?.cancel) { + // it will cause the task state of "running" to be cleared this.task = undefined; return task.cancel(); } diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json index 02ad35bd0916cf..799b183f7bbd64 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -6986,6 +6986,30 @@ "_meta": { "description": "Number of cases attached to query detection rule alerts" } + }, + "legacy_notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications enabled" + } + }, + "legacy_notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications disabled" + } + }, + "notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } + }, + "notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } } } }, @@ -7014,6 +7038,30 @@ "_meta": { "description": "Number of cases attached to threshold detection rule alerts" } + }, + "legacy_notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications enabled" + } + }, + "legacy_notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications disabled" + } + }, + "notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } + }, + "notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } } } }, @@ -7042,6 +7090,30 @@ "_meta": { "description": "Number of cases attached to eql detection rule alerts" } + }, + "legacy_notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications enabled" + } + }, + "legacy_notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications disabled" + } + }, + "notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } + }, + "notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } } } }, @@ -7070,6 +7142,30 @@ "_meta": { "description": "Number of cases attached to machine_learning detection rule alerts" } + }, + "legacy_notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications enabled" + } + }, + "legacy_notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications disabled" + } + }, + "notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } + }, + "notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } } } }, @@ -7098,15 +7194,29 @@ "_meta": { "description": "Number of cases attached to threat_match detection rule alerts" } - } - } - }, - "legacy_notifications": { - "properties": { - "total": { + }, + "legacy_notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications enabled" + } + }, + "legacy_notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications disabled" + } + }, + "notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } + }, + "notifications_disabled": { "type": "long", "_meta": { - "description": "Number of legacy notifications still in use" + "description": "Number of notifications enabled" } } } @@ -7136,6 +7246,30 @@ "_meta": { "description": "Number of cases attached to elastic detection rule alerts" } + }, + "legacy_notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications enabled" + } + }, + "legacy_notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications disabled" + } + }, + "notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } + }, + "notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } } } }, @@ -7164,6 +7298,30 @@ "_meta": { "description": "Number of cases attached to custom detection rule alerts" } + }, + "legacy_notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications enabled" + } + }, + "legacy_notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of legacy notifications disabled" + } + }, + "notifications_enabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } + }, + "notifications_disabled": { + "type": "long", + "_meta": { + "description": "Number of notifications enabled" + } } } } @@ -7232,6 +7390,18 @@ "_meta": { "description": "The number of total cases generated by a rule" } + }, + "has_legacy_notification": { + "type": "boolean", + "_meta": { + "description": "True if this rule has a legacy notification" + } + }, + "has_notification": { + "type": "boolean", + "_meta": { + "description": "True if this rule has a notification" + } } } } diff --git a/x-pack/plugins/timelines/public/components/hover_actions/actions/add_to_timeline.test.tsx b/x-pack/plugins/timelines/public/components/hover_actions/actions/add_to_timeline.test.tsx index 4c43bdde50df0b..26300400dbcfd4 100644 --- a/x-pack/plugins/timelines/public/components/hover_actions/actions/add_to_timeline.test.tsx +++ b/x-pack/plugins/timelines/public/components/hover_actions/actions/add_to_timeline.test.tsx @@ -11,9 +11,19 @@ import React from 'react'; import AddToTimelineButton, { ADD_TO_TIMELINE_KEYBOARD_SHORTCUT } from './add_to_timeline'; import { DataProvider, IS_OPERATOR } from '../../../../common/types'; +import { useDeepEqualSelector } from '../../../hooks/use_selector'; import { TestProviders } from '../../../mock'; import * as i18n from './translations'; +const mockAddSuccess = jest.fn(); +jest.mock('../../../hooks/use_app_toasts', () => ({ + useAppToasts: () => ({ + addSuccess: mockAddSuccess, + }), +})); + +jest.mock('../../../hooks/use_selector'); + const mockDispatch = jest.fn(); jest.mock('react-redux', () => { const originalModule = jest.requireActual('react-redux'); @@ -72,6 +82,7 @@ const providerB: DataProvider = { describe('add to timeline', () => { beforeEach(() => { jest.resetAllMocks(); + (useDeepEqualSelector as jest.Mock).mockReturnValue({ timelineType: 'default' }); }); const field = 'user.name'; @@ -369,4 +380,32 @@ describe('add to timeline', () => { }); }); }); + + describe('it shows the appropriate text based on timeline type', () => { + test('Add success is called with "timeline" if timeline type is timeline', () => { + render( + + + + ); + + fireEvent.click(screen.getByRole('button')); + + expect(mockAddSuccess).toBeCalledWith('Added a to timeline'); + }); + + test('Add success is called with "template" if timeline type is template', () => { + (useDeepEqualSelector as jest.Mock).mockReturnValue({ timelineType: 'template' }); + + render( + + + + ); + + fireEvent.click(screen.getByRole('button')); + + expect(mockAddSuccess).toBeCalledWith('Added a to template'); + }); + }); }); diff --git a/x-pack/plugins/timelines/public/components/hover_actions/actions/add_to_timeline.tsx b/x-pack/plugins/timelines/public/components/hover_actions/actions/add_to_timeline.tsx index 0ab5cb09565516..6cbfee6bec99f8 100644 --- a/x-pack/plugins/timelines/public/components/hover_actions/actions/add_to_timeline.tsx +++ b/x-pack/plugins/timelines/public/components/hover_actions/actions/add_to_timeline.tsx @@ -9,10 +9,12 @@ import React, { useCallback, useEffect, useMemo } from 'react'; import { EuiContextMenuItem, EuiButtonEmpty, EuiButtonIcon, EuiToolTip } from '@elastic/eui'; import { DraggableId } from 'react-beautiful-dnd'; import { useDispatch } from 'react-redux'; - import { isEmpty } from 'lodash'; + import { stopPropagationAndPreventDefault } from '../../../../common/utils/accessibility'; import { DataProvider, TimelineId } from '../../../../common/types'; +import { useDeepEqualSelector } from '../../../hooks/use_selector'; +import { tGridSelectors } from '../../../types'; import { TooltipWithKeyboardShortcut } from '../../tooltip_with_keyboard_shortcut'; import { getAdditionalScreenReaderOnlyContext } from '../utils'; import { useAddToTimeline } from '../../../hooks/use_add_to_timeline'; @@ -67,6 +69,12 @@ const AddToTimelineButton: React.FC = React.memo( const dispatch = useDispatch(); const { addSuccess } = useAppToasts(); const startDragToTimeline = useGetHandleStartDragToTimeline({ draggableId, field }); + const getTGrid = tGridSelectors.getTGridByIdSelector(); + + const { timelineType } = useDeepEqualSelector((state) => { + return getTGrid(state, TimelineId.active); + }); + const handleStartDragToTimeline = useCallback(() => { if (draggableId != null) { startDragToTimeline(); @@ -80,7 +88,9 @@ const AddToTimelineButton: React.FC = React.memo( dataProvider: provider, }) ); - addSuccess(i18n.ADDED_TO_TIMELINE_MESSAGE(provider.name)); + addSuccess( + i18n.ADDED_TO_TIMELINE_OR_TEMPLATE_MESSAGE(provider.name, timelineType === 'default') + ); } }); } @@ -88,7 +98,15 @@ const AddToTimelineButton: React.FC = React.memo( if (onClick != null) { onClick(); } - }, [addSuccess, onClick, dataProvider, dispatch, draggableId, startDragToTimeline]); + }, [ + addSuccess, + dataProvider, + dispatch, + draggableId, + onClick, + startDragToTimeline, + timelineType, + ]); useEffect(() => { if (!ownFocus) { diff --git a/x-pack/plugins/timelines/public/components/hover_actions/actions/translations.tsx b/x-pack/plugins/timelines/public/components/hover_actions/actions/translations.tsx index 2f8587ddfab497..10b20377f6c1c5 100644 --- a/x-pack/plugins/timelines/public/components/hover_actions/actions/translations.tsx +++ b/x-pack/plugins/timelines/public/components/hover_actions/actions/translations.tsx @@ -11,8 +11,8 @@ export const ADD_TO_TIMELINE = i18n.translate('xpack.timelines.hoverActions.addT defaultMessage: 'Add to timeline investigation', }); -export const ADDED_TO_TIMELINE_MESSAGE = (fieldOrValue: string) => +export const ADDED_TO_TIMELINE_OR_TEMPLATE_MESSAGE = (fieldOrValue: string, isTimeline: boolean) => i18n.translate('xpack.timelines.hoverActions.addToTimeline.addedFieldMessage', { - values: { fieldOrValue }, - defaultMessage: `Added {fieldOrValue} to timeline`, + values: { fieldOrValue, isTimeline }, + defaultMessage: `Added {fieldOrValue} to {isTimeline, select, true {timeline} false {template}}`, }); diff --git a/x-pack/plugins/timelines/public/components/t_grid/body/helpers.tsx b/x-pack/plugins/timelines/public/components/t_grid/body/helpers.tsx index 017ddfd62cc2f5..afe7c5954cdada 100644 --- a/x-pack/plugins/timelines/public/components/t_grid/body/helpers.tsx +++ b/x-pack/plugins/timelines/public/components/t_grid/body/helpers.tsx @@ -165,32 +165,21 @@ export const allowSorting = ({ 'kibana.alert.original_event.timezone', 'kibana.alert.original_event.type', 'kibana.alert.original_time', - 'kibana.alert.parent.depth', - 'kibana.alert.parent.id', - 'kibana.alert.parent.index', - 'kibana.alert.parent.rule', - 'kibana.alert.parent.type', 'kibana.alert.reason', 'kibana.alert.rule.created_by', 'kibana.alert.rule.description', 'kibana.alert.rule.enabled', 'kibana.alert.rule.false_positives', - 'kibana.alert.rule.filters', 'kibana.alert.rule.from', 'kibana.alert.rule.uuid', 'kibana.alert.rule.immutable', - 'kibana.alert.rule.index', 'kibana.alert.rule.interval', - 'kibana.alert.rule.language', 'kibana.alert.rule.max_signals', 'kibana.alert.rule.name', 'kibana.alert.rule.note', - 'kibana.alert.rule.output_index', - 'kibana.alert.rule.query', 'kibana.alert.rule.references', 'kibana.alert.risk_score', 'kibana.alert.rule.rule_id', - 'kibana.alert.rule.saved_id', 'kibana.alert.severity', 'kibana.alert.rule.size', 'kibana.alert.rule.tags', diff --git a/x-pack/plugins/timelines/public/mock/global_state.ts b/x-pack/plugins/timelines/public/mock/global_state.ts index f02abfd50ae7e5..fea8aa57b88dd3 100644 --- a/x-pack/plugins/timelines/public/mock/global_state.ts +++ b/x-pack/plugins/timelines/public/mock/global_state.ts @@ -53,6 +53,7 @@ export const mockGlobalState: TimelineState = { queryFields: [], selectAll: false, title: 'Events', + timelineType: 'default', }, }, }; diff --git a/x-pack/plugins/timelines/public/mock/mock_timeline_data.ts b/x-pack/plugins/timelines/public/mock/mock_timeline_data.ts index 3f59ae3a15b681..363a67a30b978e 100644 --- a/x-pack/plugins/timelines/public/mock/mock_timeline_data.ts +++ b/x-pack/plugins/timelines/public/mock/mock_timeline_data.ts @@ -1588,4 +1588,5 @@ export const mockTgridModel: TGridModel = { ], title: 'Test rule', version: '1', + timelineType: 'default', }; diff --git a/x-pack/plugins/timelines/public/store/t_grid/model.ts b/x-pack/plugins/timelines/public/store/t_grid/model.ts index 29e8b08d0e0e5d..0640cfb845d9c9 100644 --- a/x-pack/plugins/timelines/public/store/t_grid/model.ts +++ b/x-pack/plugins/timelines/public/store/t_grid/model.ts @@ -84,6 +84,7 @@ export interface TGridModel extends TGridModelSettings { /** Events selected on this timeline -- eventId to TimelineNonEcsData[] mapping of data required for bulk actions **/ selectedEventIds: Record; savedObjectId: string | null; + timelineType: 'default' | 'template'; version: string | null; initialized?: boolean; } diff --git a/x-pack/plugins/timelines/server/search_strategy/index_fields/index.test.ts b/x-pack/plugins/timelines/server/search_strategy/index_fields/index.test.ts index c4e7f6538d16da..1e3ffd72ece732 100644 --- a/x-pack/plugins/timelines/server/search_strategy/index_fields/index.test.ts +++ b/x-pack/plugins/timelines/server/search_strategy/index_fields/index.test.ts @@ -87,8 +87,7 @@ describe('Index Fields', () => { esTypes: [], }, { - description: - 'Deprecated - use agent.name or agent.id to identify an agent. Hostname of the agent. ', + description: 'Deprecated - use agent.name or agent.id to identify an agent. ', name: 'agent.hostname', searchable: true, type: 'string', @@ -126,7 +125,7 @@ describe('Index Fields', () => { }, { description: - 'Type of the agent. The agent type stays always the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', + 'Type of the agent. The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', example: 'filebeat', name: 'agent.type', type: 'string', @@ -252,7 +251,7 @@ describe('Index Fields', () => { { category: 'agent', description: - 'Type of the agent. The agent type stays always the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', + 'Type of the agent. The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', example: 'filebeat', name: 'agent.type', type: 'string', @@ -337,8 +336,7 @@ describe('Index Fields', () => { }, { category: 'agent', - description: - 'Deprecated - use agent.name or agent.id to identify an agent. Hostname of the agent. ', + description: 'Deprecated - use agent.name or agent.id to identify an agent. ', name: 'agent.hostname', type: 'string', searchable: true, @@ -426,7 +424,7 @@ describe('Index Fields', () => { { category: 'agent', description: - 'Type of the agent. The agent type stays always the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', + 'Type of the agent. The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', example: 'filebeat', name: 'agent.type', type: 'string', @@ -504,7 +502,7 @@ describe('Index Fields', () => { }, { description: - 'Type of the agent. The agent type stays always the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', + 'Type of the agent. The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', example: 'filebeat', name: 'agent.type', type: 'string', @@ -641,7 +639,7 @@ describe('Index Fields', () => { }, { description: - 'Type of the agent. The agent type stays always the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', + 'Type of the agent. The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', example: 'filebeat', name: 'agent.type', type: 'string', @@ -714,7 +712,7 @@ describe('Index Fields', () => { }, { description: - 'Type of the agent. The agent type stays always the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', + 'Type of the agent. The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', example: 'filebeat', name: 'agent.type', type: 'string', diff --git a/x-pack/plugins/timelines/server/search_strategy/timeline/factory/helpers/constants.ts b/x-pack/plugins/timelines/server/search_strategy/timeline/factory/helpers/constants.ts index 43c638b2bb4535..e764e32243c183 100644 --- a/x-pack/plugins/timelines/server/search_strategy/timeline/factory/helpers/constants.ts +++ b/x-pack/plugins/timelines/server/search_strategy/timeline/factory/helpers/constants.ts @@ -49,14 +49,10 @@ export const TIMELINE_EVENTS_FIELDS = [ 'kibana.alert.group.id', 'kibana.alert.original_time', 'kibana.alert.reason', - 'kibana.alert.rule.filters', 'kibana.alert.rule.from', - 'kibana.alert.rule.language', - 'kibana.alert.rule.query', 'kibana.alert.rule.name', 'kibana.alert.rule.to', 'kibana.alert.rule.uuid', - 'kibana.alert.rule.index', 'kibana.alert.rule.type', 'kibana.alert.original_event.kind', 'kibana.alert.original_event.module', @@ -175,12 +171,9 @@ export const TIMELINE_EVENTS_FIELDS = [ 'endgame.target_domain_name', 'endgame.target_logon_id', 'endgame.target_user_name', - 'kibana.alert.rule.saved_id', 'kibana.alert.rule.timeline_id', 'kibana.alert.rule.timeline_title', - 'kibana.alert.rule.output_index', 'kibana.alert.rule.note', - 'kibana.alert.rule.threshold', 'kibana.alert.rule.exceptions_list', 'kibana.alert.rule.building_block_type', 'suricata.eve.proto', diff --git a/x-pack/plugins/timelines/server/search_strategy/timeline/factory/helpers/format_timeline_data.test.ts b/x-pack/plugins/timelines/server/search_strategy/timeline/factory/helpers/format_timeline_data.test.ts index 17a3dbcbd56275..4c850665a903b2 100644 --- a/x-pack/plugins/timelines/server/search_strategy/timeline/factory/helpers/format_timeline_data.test.ts +++ b/x-pack/plugins/timelines/server/search_strategy/timeline/factory/helpers/format_timeline_data.test.ts @@ -139,13 +139,6 @@ describe('formatTimelineData', () => { count: 10000, value: '2a990c11-f61b-4c8e-b210-da2574e9f9db', }, - parent: { - depth: 0, - index: - 'apm-*-transaction*,traces-apm*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,winlogbeat-*', - id: '0268af90-d8da-576a-9747-2a191519416a', - type: 'event', - }, depth: 1, _meta: { version: 14, @@ -158,13 +151,7 @@ describe('formatTimelineData', () => { references: [], description: 'asdasd', created_at: '2021-01-09T11:25:45.046Z', - language: 'kuery', - threshold: { - field: '', - value: 200, - }, building_block_type: null, - output_index: '.siem-signals-patrykkopycinski-default', type: 'threshold', rule_name_override: null, enabled: true, @@ -176,54 +163,8 @@ describe('formatTimelineData', () => { timeline_id: null, max_signals: 100, author: [], - query: '_id :*', - index: [ - 'apm-*-transaction*', - 'traces-apm*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ], - filters: [ - { - $state: { - store: 'appState', - }, - meta: { - negate: false, - alias: null, - disabled: false, - type: 'exists', - value: 'exists', - key: '_index', - }, - exists: { - field: '_index', - }, - }, - { - $state: { - store: 'appState', - }, - meta: { - negate: false, - alias: 'id_exists', - disabled: false, - type: 'exists', - value: 'exists', - key: '_id', - }, - exists: { - field: '_id', - }, - }, - ], created_by: 'patryk_test_user', version: 1, - saved_id: null, tags: [], rule_id: '2a990c11-f61b-4c8e-b210-da2574e9f9db', license: '', @@ -251,25 +192,13 @@ describe('formatTimelineData', () => { type: 'event', }, ], - parents: [ - { - depth: 0, - index: - 'apm-*-transaction*,traces-apm*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,winlogbeat-*', - id: '0268af90-d8da-576a-9747-2a191519416a', - type: 'event', - }, - ], workflow_status: 'open', }, }, }, fields: { - 'kibana.alert.rule.output_index': ['.siem-signals-patrykkopycinski-default'], 'kibana.alert.rule.from': ['now-360s'], - 'kibana.alert.rule.language': ['kuery'], '@timestamp': ['2021-01-09T13:41:40.517Z'], - 'kibana.alert.rule.query': ['_id :*'], 'kibana.alert.rule.type': ['threshold'], 'kibana.alert.rule.uuid': ['696c24e0-526d-11eb-836c-e1620268b945'], 'kibana.alert.risk_score': [21], @@ -278,16 +207,6 @@ describe('formatTimelineData', () => { 'kibana.alert.original_time': ['2021-01-09T13:39:32.595Z'], 'kibana.alert.severity': ['low'], 'kibana.alert.rule.version': ['1'], - 'kibana.alert.rule.index': [ - 'apm-*-transaction*', - 'traces-apm*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ], 'kibana.alert.rule.name': ['Threshold test'], 'kibana.alert.rule.to': ['now'], }, @@ -334,67 +253,13 @@ describe('formatTimelineData', () => { exceptions_list: [], from: ['now-360s'], uuid: ['696c24e0-526d-11eb-836c-e1620268b945'], - index: [ - 'apm-*-transaction*', - 'traces-apm*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ], - language: ['kuery'], name: ['Threshold test'], - output_index: ['.siem-signals-patrykkopycinski-default'], - query: ['_id :*'], to: ['now'], type: ['threshold'], version: ['1'], timeline_id: [], timeline_title: [], - saved_id: [], note: [], - threshold: [ - JSON.stringify({ - field: '', - value: 200, - }), - ], - filters: [ - JSON.stringify({ - $state: { - store: 'appState', - }, - meta: { - negate: false, - alias: null, - disabled: false, - type: 'exists', - value: 'exists', - key: '_index', - }, - exists: { - field: '_index', - }, - }), - JSON.stringify({ - $state: { - store: 'appState', - }, - meta: { - negate: false, - alias: 'id_exists', - disabled: false, - type: 'exists', - value: 'exists', - key: '_id', - }, - exists: { - field: '_id', - }, - }), - ], }, }, }, diff --git a/x-pack/plugins/timelines/server/utils/beat_schema/fields.ts b/x-pack/plugins/timelines/server/utils/beat_schema/fields.ts index 4f1dc0079b2360..aee466d58c9af1 100644 --- a/x-pack/plugins/timelines/server/utils/beat_schema/fields.ts +++ b/x-pack/plugins/timelines/server/utils/beat_schema/fields.ts @@ -46,7 +46,7 @@ export const fieldsBeat: BeatFields = { 'For log events the message field contains the log message, optimized for viewing in a log viewer. For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. If multiple messages exist, they can be combined into one message.', example: 'Hello World', name: 'message', - type: 'text', + type: 'match_only_text', }, tags: { category: 'base', @@ -55,6 +55,15 @@ export const fieldsBeat: BeatFields = { name: 'tags', type: 'keyword', }, + 'agent.build.original': { + category: 'agent', + description: + 'Extended build information for the agent. This field is intended to contain any build information that a data source may provide, no specific formatting is required.', + example: + 'metricbeat version 7.6.0 (amd64), libbeat 7.6.0 [6a23e8f8f30f5001ba344e4e54d8d9cb82cb107c built 2020-02-05 23:10:10 +0000 UTC]', + name: 'agent.build.original', + type: 'keyword', + }, 'agent.ephemeral_id': { category: 'agent', description: @@ -82,7 +91,7 @@ export const fieldsBeat: BeatFields = { 'agent.type': { category: 'agent', description: - 'Type of the agent. The agent type stays always the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', + 'Type of the agent. The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine.', example: 'filebeat', name: 'agent.type', type: 'keyword', @@ -152,6 +161,13 @@ export const fieldsBeat: BeatFields = { name: 'client.geo.city_name', type: 'keyword', }, + 'client.geo.continent_code': { + category: 'client', + description: "Two-letter code representing continent's name.", + example: 'NA', + name: 'client.geo.continent_code', + type: 'keyword', + }, 'client.geo.continent_name': { category: 'client', description: 'Name of the continent.', @@ -188,6 +204,14 @@ export const fieldsBeat: BeatFields = { name: 'client.geo.name', type: 'keyword', }, + 'client.geo.postal_code': { + category: 'client', + description: + 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', + example: 94040, + name: 'client.geo.postal_code', + type: 'keyword', + }, 'client.geo.region_iso_code': { category: 'client', description: 'Region ISO code.', @@ -202,15 +226,24 @@ export const fieldsBeat: BeatFields = { name: 'client.geo.region_name', type: 'keyword', }, + 'client.geo.timezone': { + category: 'client', + description: 'The time zone of the location, such as IANA time zone name.', + example: 'America/Argentina/Buenos_Aires', + name: 'client.geo.timezone', + type: 'keyword', + }, 'client.ip': { category: 'client', - description: 'IP address of the client. Can be one or multiple IPv4 or IPv6 addresses.', + description: 'IP address of the client (IPv4 or IPv6).', name: 'client.ip', type: 'ip', }, 'client.mac': { category: 'client', - description: 'MAC address of the client.', + description: + 'MAC address of the client. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', + example: '00-00-5E-00-53-23', name: 'client.mac', type: 'keyword', }, @@ -246,15 +279,23 @@ export const fieldsBeat: BeatFields = { 'client.registered_domain': { category: 'client', description: - 'The highest registered client domain, stripped of the subdomain. For example, the registered domain for "foo.google.com" is "google.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'google.com', + 'The highest registered client domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', + example: 'example.com', name: 'client.registered_domain', type: 'keyword', }, + 'client.subdomain': { + category: 'client', + description: + 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', + example: 'east', + name: 'client.subdomain', + type: 'keyword', + }, 'client.top_level_domain': { category: 'client', description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for google.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', + 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', example: 'co.uk', name: 'client.top_level_domain', type: 'keyword', @@ -307,17 +348,25 @@ export const fieldsBeat: BeatFields = { }, 'client.user.id': { category: 'client', - description: 'Unique identifiers of the user.', + description: 'Unique identifier of the user.', + example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', name: 'client.user.id', type: 'keyword', }, 'client.user.name': { category: 'client', description: 'Short name or login of the user.', - example: 'albert', + example: 'a.einstein', name: 'client.user.name', type: 'keyword', }, + 'client.user.roles': { + category: 'client', + description: 'Array of user roles at the time of the event.', + example: '["kibana_admin", "reporting_user"]', + name: 'client.user.roles', + type: 'keyword', + }, 'cloud.account.id': { category: 'cloud', description: @@ -326,9 +375,17 @@ export const fieldsBeat: BeatFields = { name: 'cloud.account.id', type: 'keyword', }, + 'cloud.account.name': { + category: 'cloud', + description: + 'The cloud account name or alias used to identify different entities in a multi-tenant environment. Examples: AWS account name, Google Cloud ORG display name.', + example: 'elastic-dev', + name: 'cloud.account.name', + type: 'keyword', + }, 'cloud.availability_zone': { category: 'cloud', - description: 'Availability zone in which this host is running.', + description: 'Availability zone in which this host, resource, or service is located.', example: 'us-east-1c', name: 'cloud.availability_zone', type: 'keyword', @@ -353,6 +410,101 @@ export const fieldsBeat: BeatFields = { name: 'cloud.machine.type', type: 'keyword', }, + 'cloud.origin.account.id': { + category: 'cloud', + description: + 'The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.', + example: 666777888999, + name: 'cloud.origin.account.id', + type: 'keyword', + }, + 'cloud.origin.account.name': { + category: 'cloud', + description: + 'The cloud account name or alias used to identify different entities in a multi-tenant environment. Examples: AWS account name, Google Cloud ORG display name.', + example: 'elastic-dev', + name: 'cloud.origin.account.name', + type: 'keyword', + }, + 'cloud.origin.availability_zone': { + category: 'cloud', + description: 'Availability zone in which this host, resource, or service is located.', + example: 'us-east-1c', + name: 'cloud.origin.availability_zone', + type: 'keyword', + }, + 'cloud.origin.instance.id': { + category: 'cloud', + description: 'Instance ID of the host machine.', + example: 'i-1234567890abcdef0', + name: 'cloud.origin.instance.id', + type: 'keyword', + }, + 'cloud.origin.instance.name': { + category: 'cloud', + description: 'Instance name of the host machine.', + name: 'cloud.origin.instance.name', + type: 'keyword', + }, + 'cloud.origin.machine.type': { + category: 'cloud', + description: 'Machine type of the host machine.', + example: 't2.medium', + name: 'cloud.origin.machine.type', + type: 'keyword', + }, + 'cloud.origin.project.id': { + category: 'cloud', + description: + 'The cloud project identifier. Examples: Google Cloud Project id, Azure Project id.', + example: 'my-project', + name: 'cloud.origin.project.id', + type: 'keyword', + }, + 'cloud.origin.project.name': { + category: 'cloud', + description: 'The cloud project name. Examples: Google Cloud Project name, Azure Project name.', + example: 'my project', + name: 'cloud.origin.project.name', + type: 'keyword', + }, + 'cloud.origin.provider': { + category: 'cloud', + description: 'Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.', + example: 'aws', + name: 'cloud.origin.provider', + type: 'keyword', + }, + 'cloud.origin.region': { + category: 'cloud', + description: 'Region in which this host, resource, or service is located.', + example: 'us-east-1', + name: 'cloud.origin.region', + type: 'keyword', + }, + 'cloud.origin.service.name': { + category: 'cloud', + description: + 'The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda.', + example: 'lambda', + name: 'cloud.origin.service.name', + type: 'keyword', + }, + 'cloud.project.id': { + category: 'cloud', + description: + 'The cloud project identifier. Examples: Google Cloud Project id, Azure Project id.', + example: 'my-project', + name: 'cloud.project.id', + type: 'keyword', + }, + 'cloud.project.name': { + category: 'cloud', + description: 'The cloud project name. Examples: Google Cloud Project name, Azure Project name.', + example: 'my project', + name: 'cloud.project.name', + type: 'keyword', + }, 'cloud.provider': { category: 'cloud', description: 'Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.', @@ -362,11 +514,107 @@ export const fieldsBeat: BeatFields = { }, 'cloud.region': { category: 'cloud', - description: 'Region in which this host is running.', + description: 'Region in which this host, resource, or service is located.', example: 'us-east-1', name: 'cloud.region', type: 'keyword', }, + 'cloud.service.name': { + category: 'cloud', + description: + 'The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda.', + example: 'lambda', + name: 'cloud.service.name', + type: 'keyword', + }, + 'cloud.target.account.id': { + category: 'cloud', + description: + 'The cloud account or organization id used to identify different entities in a multi-tenant environment. Examples: AWS account id, Google Cloud ORG Id, or other unique identifier.', + example: 666777888999, + name: 'cloud.target.account.id', + type: 'keyword', + }, + 'cloud.target.account.name': { + category: 'cloud', + description: + 'The cloud account name or alias used to identify different entities in a multi-tenant environment. Examples: AWS account name, Google Cloud ORG display name.', + example: 'elastic-dev', + name: 'cloud.target.account.name', + type: 'keyword', + }, + 'cloud.target.availability_zone': { + category: 'cloud', + description: 'Availability zone in which this host, resource, or service is located.', + example: 'us-east-1c', + name: 'cloud.target.availability_zone', + type: 'keyword', + }, + 'cloud.target.instance.id': { + category: 'cloud', + description: 'Instance ID of the host machine.', + example: 'i-1234567890abcdef0', + name: 'cloud.target.instance.id', + type: 'keyword', + }, + 'cloud.target.instance.name': { + category: 'cloud', + description: 'Instance name of the host machine.', + name: 'cloud.target.instance.name', + type: 'keyword', + }, + 'cloud.target.machine.type': { + category: 'cloud', + description: 'Machine type of the host machine.', + example: 't2.medium', + name: 'cloud.target.machine.type', + type: 'keyword', + }, + 'cloud.target.project.id': { + category: 'cloud', + description: + 'The cloud project identifier. Examples: Google Cloud Project id, Azure Project id.', + example: 'my-project', + name: 'cloud.target.project.id', + type: 'keyword', + }, + 'cloud.target.project.name': { + category: 'cloud', + description: 'The cloud project name. Examples: Google Cloud Project name, Azure Project name.', + example: 'my project', + name: 'cloud.target.project.name', + type: 'keyword', + }, + 'cloud.target.provider': { + category: 'cloud', + description: 'Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.', + example: 'aws', + name: 'cloud.target.provider', + type: 'keyword', + }, + 'cloud.target.region': { + category: 'cloud', + description: 'Region in which this host, resource, or service is located.', + example: 'us-east-1', + name: 'cloud.target.region', + type: 'keyword', + }, + 'cloud.target.service.name': { + category: 'cloud', + description: + 'The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. Examples: app engine, app service, cloud run, fargate, lambda.', + example: 'lambda', + name: 'cloud.target.service.name', + type: 'keyword', + }, + 'code_signature.digest_algorithm': { + category: 'code_signature', + description: + 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', + example: 'sha256', + name: 'code_signature.digest_algorithm', + type: 'keyword', + }, 'code_signature.exists': { category: 'code_signature', description: 'Boolean to capture if a signature is present.', @@ -374,6 +622,14 @@ export const fieldsBeat: BeatFields = { name: 'code_signature.exists', type: 'boolean', }, + 'code_signature.signing_id': { + category: 'code_signature', + description: + 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', + example: 'com.apple.xpc.proxy', + name: 'code_signature.signing_id', + type: 'keyword', + }, 'code_signature.status': { category: 'code_signature', description: @@ -389,6 +645,21 @@ export const fieldsBeat: BeatFields = { name: 'code_signature.subject_name', type: 'keyword', }, + 'code_signature.team_id': { + category: 'code_signature', + description: + 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', + example: 'EQHXZ8M8AV', + name: 'code_signature.team_id', + type: 'keyword', + }, + 'code_signature.timestamp': { + category: 'code_signature', + description: 'Date and time when the code signature was generated and signed.', + example: '2021-01-01T12:10:30Z', + name: 'code_signature.timestamp', + type: 'date', + }, 'code_signature.trusted': { category: 'code_signature', description: @@ -442,6 +713,30 @@ export const fieldsBeat: BeatFields = { name: 'container.runtime', type: 'keyword', }, + 'data_stream.dataset': { + category: 'data_stream', + description: + 'The field can contain anything that makes sense to signify the source of the data. Examples include `nginx.access`, `prometheus`, `endpoint` etc. For data streams that otherwise fit, but that do not have dataset set we use the value "generic" for the dataset value. `event.dataset` should have the same value as `data_stream.dataset`. Beyond the Elasticsearch data stream naming criteria noted above, the `dataset` value has additional restrictions: * Must not contain `-` * No longer than 100 characters', + example: 'nginx.access', + name: 'data_stream.dataset', + type: 'constant_keyword', + }, + 'data_stream.namespace': { + category: 'data_stream', + description: + 'A user defined namespace. Namespaces are useful to allow grouping of data. Many users already organize their indices this way, and the data stream naming scheme now provides this best practice as a default. Many users will populate this field with `default`. If no value is used, it falls back to `default`. Beyond the Elasticsearch index naming criteria noted above, `namespace` value has the additional restrictions: * Must not contain `-` * No longer than 100 characters', + example: 'production', + name: 'data_stream.namespace', + type: 'constant_keyword', + }, + 'data_stream.type': { + category: 'data_stream', + description: + 'An overarching type for the data stream. Currently allowed values are "logs" and "metrics". We expect to also add "traces" and "synthetics" in the near future.', + example: 'logs', + name: 'data_stream.type', + type: 'constant_keyword', + }, 'destination.address': { category: 'destination', description: @@ -485,6 +780,13 @@ export const fieldsBeat: BeatFields = { name: 'destination.geo.city_name', type: 'keyword', }, + 'destination.geo.continent_code': { + category: 'destination', + description: "Two-letter code representing continent's name.", + example: 'NA', + name: 'destination.geo.continent_code', + type: 'keyword', + }, 'destination.geo.continent_name': { category: 'destination', description: 'Name of the continent.', @@ -521,6 +823,14 @@ export const fieldsBeat: BeatFields = { name: 'destination.geo.name', type: 'keyword', }, + 'destination.geo.postal_code': { + category: 'destination', + description: + 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', + example: 94040, + name: 'destination.geo.postal_code', + type: 'keyword', + }, 'destination.geo.region_iso_code': { category: 'destination', description: 'Region ISO code.', @@ -535,15 +845,24 @@ export const fieldsBeat: BeatFields = { name: 'destination.geo.region_name', type: 'keyword', }, + 'destination.geo.timezone': { + category: 'destination', + description: 'The time zone of the location, such as IANA time zone name.', + example: 'America/Argentina/Buenos_Aires', + name: 'destination.geo.timezone', + type: 'keyword', + }, 'destination.ip': { category: 'destination', - description: 'IP address of the destination. Can be one or multiple IPv4 or IPv6 addresses.', + description: 'IP address of the destination (IPv4 or IPv6).', name: 'destination.ip', type: 'ip', }, 'destination.mac': { category: 'destination', - description: 'MAC address of the destination.', + description: + 'MAC address of the destination. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', + example: '00-00-5E-00-53-23', name: 'destination.mac', type: 'keyword', }, @@ -579,15 +898,23 @@ export const fieldsBeat: BeatFields = { 'destination.registered_domain': { category: 'destination', description: - 'The highest registered destination domain, stripped of the subdomain. For example, the registered domain for "foo.google.com" is "google.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'google.com', + 'The highest registered destination domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', + example: 'example.com', name: 'destination.registered_domain', type: 'keyword', }, + 'destination.subdomain': { + category: 'destination', + description: + 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', + example: 'east', + name: 'destination.subdomain', + type: 'keyword', + }, 'destination.top_level_domain': { category: 'destination', description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for google.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', + 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', example: 'co.uk', name: 'destination.top_level_domain', type: 'keyword', @@ -640,17 +967,33 @@ export const fieldsBeat: BeatFields = { }, 'destination.user.id': { category: 'destination', - description: 'Unique identifiers of the user.', + description: 'Unique identifier of the user.', + example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', name: 'destination.user.id', type: 'keyword', }, 'destination.user.name': { category: 'destination', description: 'Short name or login of the user.', - example: 'albert', + example: 'a.einstein', name: 'destination.user.name', type: 'keyword', }, + 'destination.user.roles': { + category: 'destination', + description: 'Array of user roles at the time of the event.', + example: '["kibana_admin", "reporting_user"]', + name: 'destination.user.roles', + type: 'keyword', + }, + 'dll.code_signature.digest_algorithm': { + category: 'dll', + description: + 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', + example: 'sha256', + name: 'dll.code_signature.digest_algorithm', + type: 'keyword', + }, 'dll.code_signature.exists': { category: 'dll', description: 'Boolean to capture if a signature is present.', @@ -658,6 +1001,14 @@ export const fieldsBeat: BeatFields = { name: 'dll.code_signature.exists', type: 'boolean', }, + 'dll.code_signature.signing_id': { + category: 'dll', + description: + 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', + example: 'com.apple.xpc.proxy', + name: 'dll.code_signature.signing_id', + type: 'keyword', + }, 'dll.code_signature.status': { category: 'dll', description: @@ -673,6 +1024,21 @@ export const fieldsBeat: BeatFields = { name: 'dll.code_signature.subject_name', type: 'keyword', }, + 'dll.code_signature.team_id': { + category: 'dll', + description: + 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', + example: 'EQHXZ8M8AV', + name: 'dll.code_signature.team_id', + type: 'keyword', + }, + 'dll.code_signature.timestamp': { + category: 'dll', + description: 'Date and time when the code signature was generated and signed.', + example: '2021-01-01T12:10:30Z', + name: 'dll.code_signature.timestamp', + type: 'date', + }, 'dll.code_signature.trusted': { category: 'dll', description: @@ -713,6 +1079,12 @@ export const fieldsBeat: BeatFields = { name: 'dll.hash.sha512', type: 'keyword', }, + 'dll.hash.ssdeep': { + category: 'dll', + description: 'SSDEEP hash.', + name: 'dll.hash.ssdeep', + type: 'keyword', + }, 'dll.name': { category: 'dll', description: 'Name of the library. This generally maps to the name of the file on disk.', @@ -727,6 +1099,13 @@ export const fieldsBeat: BeatFields = { name: 'dll.path', type: 'keyword', }, + 'dll.pe.architecture': { + category: 'dll', + description: 'CPU architecture target for the file.', + example: 'x64', + name: 'dll.pe.architecture', + type: 'keyword', + }, 'dll.pe.company': { category: 'dll', description: 'Internal company name of the file, provided at compile-time.', @@ -748,6 +1127,14 @@ export const fieldsBeat: BeatFields = { name: 'dll.pe.file_version', type: 'keyword', }, + 'dll.pe.imphash': { + category: 'dll', + description: + 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', + example: '0c6803c4e922103c4dca5963aad36ddf', + name: 'dll.pe.imphash', + type: 'keyword', + }, 'dll.pe.original_file_name': { category: 'dll', description: 'Internal name of the file, provided at compile-time.', @@ -788,7 +1175,7 @@ export const fieldsBeat: BeatFields = { category: 'dns', description: "The domain name to which this resource record pertains. If a chain of CNAME is being resolved, each answer's `name` should be the one that corresponds with the answer's `data`. It should not simply be the original `question.name` repeated.", - example: 'www.google.com', + example: 'www.example.com', name: 'dns.answers.name', type: 'keyword', }, @@ -811,7 +1198,7 @@ export const fieldsBeat: BeatFields = { category: 'dns', description: 'Array of 2 letter DNS header flags. Expected values are: AA, TC, RD, RA, AD, CD, DO.', - example: '["RD","RA"]', + example: '["RD", "RA"]', name: 'dns.header_flags', type: 'keyword', }, @@ -842,15 +1229,15 @@ export const fieldsBeat: BeatFields = { category: 'dns', description: 'The name being queried. If the name field contains non-printable characters (below 32 or above 126), those characters should be represented as escaped base 10 integers (\\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, and line feeds should be converted to \\t, \\r, and \\n respectively.', - example: 'www.google.com', + example: 'www.example.com', name: 'dns.question.name', type: 'keyword', }, 'dns.question.registered_domain': { category: 'dns', description: - 'The highest registered domain, stripped of the subdomain. For example, the registered domain for "foo.google.com" is "google.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'google.com', + 'The highest registered domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', + example: 'example.com', name: 'dns.question.registered_domain', type: 'keyword', }, @@ -865,7 +1252,7 @@ export const fieldsBeat: BeatFields = { 'dns.question.top_level_domain': { category: 'dns', description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for google.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', + 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', example: 'co.uk', name: 'dns.question.top_level_domain', type: 'keyword', @@ -881,7 +1268,7 @@ export const fieldsBeat: BeatFields = { category: 'dns', description: 'Array containing all IPs seen in `answers.data`. The `answers` array can be difficult to use, because of the variety of data formats it can contain. Extracting all IP addresses seen in there to `dns.resolved_ip` makes it possible to index them as IP addresses, and makes them easier to visualize and query for.', - example: '["10.10.10.10","10.10.10.11"]', + example: '["10.10.10.10", "10.10.10.11"]', name: 'dns.resolved_ip', type: 'ip', }, @@ -908,6 +1295,192 @@ export const fieldsBeat: BeatFields = { name: 'ecs.version', type: 'keyword', }, + 'elf.architecture': { + category: 'elf', + description: 'Machine architecture of the ELF file.', + example: 'x86-64', + name: 'elf.architecture', + type: 'keyword', + }, + 'elf.byte_order': { + category: 'elf', + description: 'Byte sequence of ELF file.', + example: 'Little Endian', + name: 'elf.byte_order', + type: 'keyword', + }, + 'elf.cpu_type': { + category: 'elf', + description: 'CPU type of the ELF file.', + example: 'Intel', + name: 'elf.cpu_type', + type: 'keyword', + }, + 'elf.creation_date': { + category: 'elf', + description: + "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", + name: 'elf.creation_date', + type: 'date', + }, + 'elf.exports': { + category: 'elf', + description: 'List of exported element names and types.', + name: 'elf.exports', + type: 'flattened', + }, + 'elf.header.abi_version': { + category: 'elf', + description: 'Version of the ELF Application Binary Interface (ABI).', + name: 'elf.header.abi_version', + type: 'keyword', + }, + 'elf.header.class': { + category: 'elf', + description: 'Header class of the ELF file.', + name: 'elf.header.class', + type: 'keyword', + }, + 'elf.header.data': { + category: 'elf', + description: 'Data table of the ELF header.', + name: 'elf.header.data', + type: 'keyword', + }, + 'elf.header.entrypoint': { + category: 'elf', + description: 'Header entrypoint of the ELF file.', + name: 'elf.header.entrypoint', + type: 'long', + format: 'string', + }, + 'elf.header.object_version': { + category: 'elf', + description: '"0x1" for original ELF files.', + name: 'elf.header.object_version', + type: 'keyword', + }, + 'elf.header.os_abi': { + category: 'elf', + description: 'Application Binary Interface (ABI) of the Linux OS.', + name: 'elf.header.os_abi', + type: 'keyword', + }, + 'elf.header.type': { + category: 'elf', + description: 'Header type of the ELF file.', + name: 'elf.header.type', + type: 'keyword', + }, + 'elf.header.version': { + category: 'elf', + description: 'Version of the ELF header.', + name: 'elf.header.version', + type: 'keyword', + }, + 'elf.imports': { + category: 'elf', + description: 'List of imported element names and types.', + name: 'elf.imports', + type: 'flattened', + }, + 'elf.sections': { + category: 'elf', + description: + 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', + name: 'elf.sections', + type: 'nested', + }, + 'elf.sections.chi2': { + category: 'elf', + description: 'Chi-square probability distribution of the section.', + name: 'elf.sections.chi2', + type: 'long', + format: 'number', + }, + 'elf.sections.entropy': { + category: 'elf', + description: 'Shannon entropy calculation from the section.', + name: 'elf.sections.entropy', + type: 'long', + format: 'number', + }, + 'elf.sections.flags': { + category: 'elf', + description: 'ELF Section List flags.', + name: 'elf.sections.flags', + type: 'keyword', + }, + 'elf.sections.name': { + category: 'elf', + description: 'ELF Section List name.', + name: 'elf.sections.name', + type: 'keyword', + }, + 'elf.sections.physical_offset': { + category: 'elf', + description: 'ELF Section List offset.', + name: 'elf.sections.physical_offset', + type: 'keyword', + }, + 'elf.sections.physical_size': { + category: 'elf', + description: 'ELF Section List physical size.', + name: 'elf.sections.physical_size', + type: 'long', + format: 'bytes', + }, + 'elf.sections.type': { + category: 'elf', + description: 'ELF Section List type.', + name: 'elf.sections.type', + type: 'keyword', + }, + 'elf.sections.virtual_address': { + category: 'elf', + description: 'ELF Section List virtual address.', + name: 'elf.sections.virtual_address', + type: 'long', + format: 'string', + }, + 'elf.sections.virtual_size': { + category: 'elf', + description: 'ELF Section List virtual size.', + name: 'elf.sections.virtual_size', + type: 'long', + format: 'string', + }, + 'elf.segments': { + category: 'elf', + description: + 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', + name: 'elf.segments', + type: 'nested', + }, + 'elf.segments.sections': { + category: 'elf', + description: 'ELF object segment sections.', + name: 'elf.segments.sections', + type: 'keyword', + }, + 'elf.segments.type': { + category: 'elf', + description: 'ELF object segment type.', + name: 'elf.segments.type', + type: 'keyword', + }, + 'elf.shared_libraries': { + category: 'elf', + description: 'List of shared libraries used by this ELF object.', + name: 'elf.shared_libraries', + type: 'keyword', + }, + 'elf.telfhash': { + category: 'elf', + description: 'telfhash symbol hash for ELF file.', + name: 'elf.telfhash', + type: 'keyword', + }, 'error.code': { category: 'error', description: 'Error code describing the error.', @@ -924,13 +1497,13 @@ export const fieldsBeat: BeatFields = { category: 'error', description: 'Error message.', name: 'error.message', - type: 'text', + type: 'match_only_text', }, 'error.stack_trace': { category: 'error', description: 'The stack trace of this error in plain text.', name: 'error.stack_trace', - type: 'keyword', + type: 'wildcard', }, 'error.type': { category: 'error', @@ -947,6 +1520,14 @@ export const fieldsBeat: BeatFields = { name: 'event.action', type: 'keyword', }, + 'event.agent_id_status': { + category: 'event', + description: + "Agents are normally responsible for populating the `agent.id` field value. If the system receiving events is capable of validating the value based on authentication information for the client then this field can be used to reflect the outcome of that validation. For example if the agent's connection is authenticated with mTLS and the client cert contains the ID of the agent to which the cert was issued then the `agent.id` value in events can be checked against the certificate. If the values match then `event.agent_id_status: verified` is added to the event, otherwise one of the other allowed values should be used. If no validation is performed then the field should be omitted. The allowed values are: `verified` - The `agent.id` field value matches expected value obtained from auth metadata. `mismatch` - The `agent.id` field value does not match the expected value obtained from auth metadata. `missing` - There was no `agent.id` field in the event to validate. `auth_metadata_missing` - There was no auth metadata or it was missing information about the agent ID.", + example: 'verified', + name: 'event.agent_id_status', + type: 'keyword', + }, 'event.category': { category: 'event', description: @@ -1036,7 +1617,7 @@ export const fieldsBeat: BeatFields = { 'event.original': { category: 'event', description: - 'Raw text message of entire event. Used to demonstrate log integrity. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`.', + 'Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`.', example: 'Sep 19 08:26:10 host CEF:0|Security| threatmanager|1.0|100| worm successfully stopped|10|src=10.0.0.1 dst=2.1.2.2spt=1232', name: 'event.original', @@ -1058,11 +1639,19 @@ export const fieldsBeat: BeatFields = { name: 'event.provider', type: 'keyword', }, + 'event.reason': { + category: 'event', + description: + 'Reason why this event happened, according to the source. This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`).', + example: 'Terminated an unexpected process', + name: 'event.reason', + type: 'keyword', + }, 'event.reference': { category: 'event', description: - 'Reference URL linking to additional information about this event. This URL links to a static definition of the this event. Alert events, indicated by `event.kind:alert`, are a common use case for this field.', - example: 'https://system.vendor.com/event/#0001234', + 'Reference URL linking to additional information about this event. This URL links to a static definition of this event. Alert events, indicated by `event.kind:alert`, are a common use case for this field.', + example: 'https://system.example.com/event/#0001234', name: 'event.reference', type: 'keyword', }, @@ -1121,11 +1710,45 @@ export const fieldsBeat: BeatFields = { 'event.url': { category: 'event', description: - 'URL linking to an external system to continue investigation of this event. This URL links to another system where in-depth investigation of the specific occurence of this event can take place. Alert events, indicated by `event.kind:alert`, are a common use case for this field.', - example: 'https://mysystem.mydomain.com/alert/5271dedb-f5b0-4218-87f0-4ac4870a38fe', + 'URL linking to an external system to continue investigation of this event. This URL links to another system where in-depth investigation of the specific occurrence of this event can take place. Alert events, indicated by `event.kind:alert`, are a common use case for this field.', + example: 'https://mysystem.example.com/alert/5271dedb-f5b0-4218-87f0-4ac4870a38fe', name: 'event.url', type: 'keyword', }, + 'faas.coldstart': { + category: 'faas', + description: 'Boolean value indicating a cold start of a function.', + name: 'faas.coldstart', + type: 'boolean', + }, + 'faas.execution': { + category: 'faas', + description: 'The execution ID of the current function execution.', + example: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28', + name: 'faas.execution', + type: 'keyword', + }, + 'faas.trigger': { + category: 'faas', + description: 'Details about the function trigger.', + name: 'faas.trigger', + type: 'nested', + }, + 'faas.trigger.request_id': { + category: 'faas', + description: 'The ID of the trigger request , message, event, etc.', + example: 123456789, + name: 'faas.trigger.request_id', + type: 'keyword', + }, + 'faas.trigger.type': { + category: 'faas', + description: + 'The trigger for the function execution. Expected values are: * http * pubsub * datasource * timer * other', + example: 'http', + name: 'faas.trigger.type', + type: 'keyword', + }, 'file.accessed': { category: 'file', description: @@ -1141,6 +1764,14 @@ export const fieldsBeat: BeatFields = { name: 'file.attributes', type: 'keyword', }, + 'file.code_signature.digest_algorithm': { + category: 'file', + description: + 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', + example: 'sha256', + name: 'file.code_signature.digest_algorithm', + type: 'keyword', + }, 'file.code_signature.exists': { category: 'file', description: 'Boolean to capture if a signature is present.', @@ -1148,6 +1779,14 @@ export const fieldsBeat: BeatFields = { name: 'file.code_signature.exists', type: 'boolean', }, + 'file.code_signature.signing_id': { + category: 'file', + description: + 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', + example: 'com.apple.xpc.proxy', + name: 'file.code_signature.signing_id', + type: 'keyword', + }, 'file.code_signature.status': { category: 'file', description: @@ -1163,6 +1802,21 @@ export const fieldsBeat: BeatFields = { name: 'file.code_signature.subject_name', type: 'keyword', }, + 'file.code_signature.team_id': { + category: 'file', + description: + 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', + example: 'EQHXZ8M8AV', + name: 'file.code_signature.team_id', + type: 'keyword', + }, + 'file.code_signature.timestamp': { + category: 'file', + description: 'Date and time when the code signature was generated and signed.', + example: '2021-01-01T12:10:30Z', + name: 'file.code_signature.timestamp', + type: 'date', + }, 'file.code_signature.trusted': { category: 'file', description: @@ -1215,13 +1869,208 @@ export const fieldsBeat: BeatFields = { name: 'file.drive_letter', type: 'keyword', }, + 'file.elf.architecture': { + category: 'file', + description: 'Machine architecture of the ELF file.', + example: 'x86-64', + name: 'file.elf.architecture', + type: 'keyword', + }, + 'file.elf.byte_order': { + category: 'file', + description: 'Byte sequence of ELF file.', + example: 'Little Endian', + name: 'file.elf.byte_order', + type: 'keyword', + }, + 'file.elf.cpu_type': { + category: 'file', + description: 'CPU type of the ELF file.', + example: 'Intel', + name: 'file.elf.cpu_type', + type: 'keyword', + }, + 'file.elf.creation_date': { + category: 'file', + description: + "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", + name: 'file.elf.creation_date', + type: 'date', + }, + 'file.elf.exports': { + category: 'file', + description: 'List of exported element names and types.', + name: 'file.elf.exports', + type: 'flattened', + }, + 'file.elf.header.abi_version': { + category: 'file', + description: 'Version of the ELF Application Binary Interface (ABI).', + name: 'file.elf.header.abi_version', + type: 'keyword', + }, + 'file.elf.header.class': { + category: 'file', + description: 'Header class of the ELF file.', + name: 'file.elf.header.class', + type: 'keyword', + }, + 'file.elf.header.data': { + category: 'file', + description: 'Data table of the ELF header.', + name: 'file.elf.header.data', + type: 'keyword', + }, + 'file.elf.header.entrypoint': { + category: 'file', + description: 'Header entrypoint of the ELF file.', + name: 'file.elf.header.entrypoint', + type: 'long', + format: 'string', + }, + 'file.elf.header.object_version': { + category: 'file', + description: '"0x1" for original ELF files.', + name: 'file.elf.header.object_version', + type: 'keyword', + }, + 'file.elf.header.os_abi': { + category: 'file', + description: 'Application Binary Interface (ABI) of the Linux OS.', + name: 'file.elf.header.os_abi', + type: 'keyword', + }, + 'file.elf.header.type': { + category: 'file', + description: 'Header type of the ELF file.', + name: 'file.elf.header.type', + type: 'keyword', + }, + 'file.elf.header.version': { + category: 'file', + description: 'Version of the ELF header.', + name: 'file.elf.header.version', + type: 'keyword', + }, + 'file.elf.imports': { + category: 'file', + description: 'List of imported element names and types.', + name: 'file.elf.imports', + type: 'flattened', + }, + 'file.elf.sections': { + category: 'file', + description: + 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', + name: 'file.elf.sections', + type: 'nested', + }, + 'file.elf.sections.chi2': { + category: 'file', + description: 'Chi-square probability distribution of the section.', + name: 'file.elf.sections.chi2', + type: 'long', + format: 'number', + }, + 'file.elf.sections.entropy': { + category: 'file', + description: 'Shannon entropy calculation from the section.', + name: 'file.elf.sections.entropy', + type: 'long', + format: 'number', + }, + 'file.elf.sections.flags': { + category: 'file', + description: 'ELF Section List flags.', + name: 'file.elf.sections.flags', + type: 'keyword', + }, + 'file.elf.sections.name': { + category: 'file', + description: 'ELF Section List name.', + name: 'file.elf.sections.name', + type: 'keyword', + }, + 'file.elf.sections.physical_offset': { + category: 'file', + description: 'ELF Section List offset.', + name: 'file.elf.sections.physical_offset', + type: 'keyword', + }, + 'file.elf.sections.physical_size': { + category: 'file', + description: 'ELF Section List physical size.', + name: 'file.elf.sections.physical_size', + type: 'long', + format: 'bytes', + }, + 'file.elf.sections.type': { + category: 'file', + description: 'ELF Section List type.', + name: 'file.elf.sections.type', + type: 'keyword', + }, + 'file.elf.sections.virtual_address': { + category: 'file', + description: 'ELF Section List virtual address.', + name: 'file.elf.sections.virtual_address', + type: 'long', + format: 'string', + }, + 'file.elf.sections.virtual_size': { + category: 'file', + description: 'ELF Section List virtual size.', + name: 'file.elf.sections.virtual_size', + type: 'long', + format: 'string', + }, + 'file.elf.segments': { + category: 'file', + description: + 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', + name: 'file.elf.segments', + type: 'nested', + }, + 'file.elf.segments.sections': { + category: 'file', + description: 'ELF object segment sections.', + name: 'file.elf.segments.sections', + type: 'keyword', + }, + 'file.elf.segments.type': { + category: 'file', + description: 'ELF object segment type.', + name: 'file.elf.segments.type', + type: 'keyword', + }, + 'file.elf.shared_libraries': { + category: 'file', + description: 'List of shared libraries used by this ELF object.', + name: 'file.elf.shared_libraries', + type: 'keyword', + }, + 'file.elf.telfhash': { + category: 'file', + description: 'telfhash symbol hash for ELF file.', + name: 'file.elf.telfhash', + type: 'keyword', + }, 'file.extension': { category: 'file', - description: 'File extension.', + description: + 'File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', example: 'png', name: 'file.extension', type: 'keyword', }, + 'file.fork_name': { + category: 'file', + description: + 'A fork is additional data associated with a filesystem object. On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist. On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: `C:\\path\\to\\filename.extension:some_fork_name`, and `some_fork_name` is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name.', + example: 'Zone.Identifer', + name: 'file.fork_name', + type: 'keyword', + }, 'file.gid': { category: 'file', description: 'Primary group ID (GID) of the file.', @@ -1260,6 +2109,12 @@ export const fieldsBeat: BeatFields = { name: 'file.hash.sha512', type: 'keyword', }, + 'file.hash.ssdeep': { + category: 'file', + description: 'SSDEEP hash.', + name: 'file.hash.ssdeep', + type: 'keyword', + }, 'file.inode': { category: 'file', description: 'Inode representing the file in the filesystem.', @@ -1309,6 +2164,13 @@ export const fieldsBeat: BeatFields = { name: 'file.path', type: 'keyword', }, + 'file.pe.architecture': { + category: 'file', + description: 'CPU architecture target for the file.', + example: 'x64', + name: 'file.pe.architecture', + type: 'keyword', + }, 'file.pe.company': { category: 'file', description: 'Internal company name of the file, provided at compile-time.', @@ -1330,6 +2192,14 @@ export const fieldsBeat: BeatFields = { name: 'file.pe.file_version', type: 'keyword', }, + 'file.pe.imphash': { + category: 'file', + description: + 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', + example: '0c6803c4e922103c4dca5963aad36ddf', + name: 'file.pe.imphash', + type: 'keyword', + }, 'file.pe.original_file_name': { category: 'file', description: 'Internal name of the file, provided at compile-time.', @@ -1371,6 +2241,177 @@ export const fieldsBeat: BeatFields = { name: 'file.uid', type: 'keyword', }, + 'file.x509.alternative_names': { + category: 'file', + description: + 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', + example: '*.elastic.co', + name: 'file.x509.alternative_names', + type: 'keyword', + }, + 'file.x509.issuer.common_name': { + category: 'file', + description: 'List of common name (CN) of issuing certificate authority.', + example: 'Example SHA2 High Assurance Server CA', + name: 'file.x509.issuer.common_name', + type: 'keyword', + }, + 'file.x509.issuer.country': { + category: 'file', + description: 'List of country (C) codes', + example: 'US', + name: 'file.x509.issuer.country', + type: 'keyword', + }, + 'file.x509.issuer.distinguished_name': { + category: 'file', + description: 'Distinguished name (DN) of issuing certificate authority.', + example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', + name: 'file.x509.issuer.distinguished_name', + type: 'keyword', + }, + 'file.x509.issuer.locality': { + category: 'file', + description: 'List of locality names (L)', + example: 'Mountain View', + name: 'file.x509.issuer.locality', + type: 'keyword', + }, + 'file.x509.issuer.organization': { + category: 'file', + description: 'List of organizations (O) of issuing certificate authority.', + example: 'Example Inc', + name: 'file.x509.issuer.organization', + type: 'keyword', + }, + 'file.x509.issuer.organizational_unit': { + category: 'file', + description: 'List of organizational units (OU) of issuing certificate authority.', + example: 'www.example.com', + name: 'file.x509.issuer.organizational_unit', + type: 'keyword', + }, + 'file.x509.issuer.state_or_province': { + category: 'file', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'file.x509.issuer.state_or_province', + type: 'keyword', + }, + 'file.x509.not_after': { + category: 'file', + description: 'Time at which the certificate is no longer considered valid.', + example: '"2020-07-16T03:15:39.000Z"', + name: 'file.x509.not_after', + type: 'date', + }, + 'file.x509.not_before': { + category: 'file', + description: 'Time at which the certificate is first considered valid.', + example: '"2019-08-16T01:40:25.000Z"', + name: 'file.x509.not_before', + type: 'date', + }, + 'file.x509.public_key_algorithm': { + category: 'file', + description: 'Algorithm used to generate the public key.', + example: 'RSA', + name: 'file.x509.public_key_algorithm', + type: 'keyword', + }, + 'file.x509.public_key_curve': { + category: 'file', + description: + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + example: 'nistp521', + name: 'file.x509.public_key_curve', + type: 'keyword', + }, + 'file.x509.public_key_exponent': { + category: 'file', + description: 'Exponent used to derive the public key. This is algorithm specific.', + example: 65537, + name: 'file.x509.public_key_exponent', + type: 'long', + }, + 'file.x509.public_key_size': { + category: 'file', + description: 'The size of the public key space in bits.', + example: 2048, + name: 'file.x509.public_key_size', + type: 'long', + }, + 'file.x509.serial_number': { + category: 'file', + description: + 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', + example: '55FBB9C7DEBF09809D12CCAA', + name: 'file.x509.serial_number', + type: 'keyword', + }, + 'file.x509.signature_algorithm': { + category: 'file', + description: + 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', + example: 'SHA256-RSA', + name: 'file.x509.signature_algorithm', + type: 'keyword', + }, + 'file.x509.subject.common_name': { + category: 'file', + description: 'List of common names (CN) of subject.', + example: 'shared.global.example.net', + name: 'file.x509.subject.common_name', + type: 'keyword', + }, + 'file.x509.subject.country': { + category: 'file', + description: 'List of country (C) code', + example: 'US', + name: 'file.x509.subject.country', + type: 'keyword', + }, + 'file.x509.subject.distinguished_name': { + category: 'file', + description: 'Distinguished name (DN) of the certificate subject entity.', + example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', + name: 'file.x509.subject.distinguished_name', + type: 'keyword', + }, + 'file.x509.subject.locality': { + category: 'file', + description: 'List of locality names (L)', + example: 'San Francisco', + name: 'file.x509.subject.locality', + type: 'keyword', + }, + 'file.x509.subject.organization': { + category: 'file', + description: 'List of organizations (O) of subject.', + example: 'Example, Inc.', + name: 'file.x509.subject.organization', + type: 'keyword', + }, + 'file.x509.subject.organizational_unit': { + category: 'file', + description: 'List of organizational units (OU) of subject.', + name: 'file.x509.subject.organizational_unit', + type: 'keyword', + }, + 'file.x509.subject.state_or_province': { + category: 'file', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'file.x509.subject.state_or_province', + type: 'keyword', + }, + 'file.x509.version_number': { + category: 'file', + description: 'Version of x509 format.', + example: 3, + name: 'file.x509.version_number', + type: 'keyword', + }, 'geo.city_name': { category: 'geo', description: 'City name.', @@ -1378,6 +2419,13 @@ export const fieldsBeat: BeatFields = { name: 'geo.city_name', type: 'keyword', }, + 'geo.continent_code': { + category: 'geo', + description: "Two-letter code representing continent's name.", + example: 'NA', + name: 'geo.continent_code', + type: 'keyword', + }, 'geo.continent_name': { category: 'geo', description: 'Name of the continent.', @@ -1414,6 +2462,14 @@ export const fieldsBeat: BeatFields = { name: 'geo.name', type: 'keyword', }, + 'geo.postal_code': { + category: 'geo', + description: + 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', + example: 94040, + name: 'geo.postal_code', + type: 'keyword', + }, 'geo.region_iso_code': { category: 'geo', description: 'Region ISO code.', @@ -1428,6 +2484,13 @@ export const fieldsBeat: BeatFields = { name: 'geo.region_name', type: 'keyword', }, + 'geo.timezone': { + category: 'geo', + description: 'The time zone of the location, such as IANA time zone name.', + example: 'America/Argentina/Buenos_Aires', + name: 'geo.timezone', + type: 'keyword', + }, 'group.domain': { category: 'group', description: @@ -1471,6 +2534,12 @@ export const fieldsBeat: BeatFields = { name: 'hash.sha512', type: 'keyword', }, + 'hash.ssdeep': { + category: 'hash', + description: 'SSDEEP hash.', + name: 'hash.ssdeep', + type: 'keyword', + }, 'host.architecture': { category: 'host', description: 'Operating system architecture.', @@ -1478,6 +2547,27 @@ export const fieldsBeat: BeatFields = { name: 'host.architecture', type: 'keyword', }, + 'host.cpu.usage': { + category: 'host', + description: + 'Percent CPU used which is normalized by the number of CPU cores and it ranges from 0 to 1. Scaling factor: 1000. For example: For a two core host, this value should be the average of the two cores, between 0 and 1.', + name: 'host.cpu.usage', + type: 'scaled_float', + }, + 'host.disk.read.bytes': { + category: 'host', + description: + 'The total number of bytes (gauge) read successfully (aggregated from all disks) since the last metric collection.', + name: 'host.disk.read.bytes', + type: 'long', + }, + 'host.disk.write.bytes': { + category: 'host', + description: + 'The total number of bytes (gauge) written successfully (aggregated from all disks) since the last metric collection.', + name: 'host.disk.write.bytes', + type: 'long', + }, 'host.domain': { category: 'host', description: @@ -1493,6 +2583,13 @@ export const fieldsBeat: BeatFields = { name: 'host.geo.city_name', type: 'keyword', }, + 'host.geo.continent_code': { + category: 'host', + description: "Two-letter code representing continent's name.", + example: 'NA', + name: 'host.geo.continent_code', + type: 'keyword', + }, 'host.geo.continent_name': { category: 'host', description: 'Name of the continent.', @@ -1529,6 +2626,14 @@ export const fieldsBeat: BeatFields = { name: 'host.geo.name', type: 'keyword', }, + 'host.geo.postal_code': { + category: 'host', + description: + 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', + example: 94040, + name: 'host.geo.postal_code', + type: 'keyword', + }, 'host.geo.region_iso_code': { category: 'host', description: 'Region ISO code.', @@ -1543,6 +2648,13 @@ export const fieldsBeat: BeatFields = { name: 'host.geo.region_name', type: 'keyword', }, + 'host.geo.timezone': { + category: 'host', + description: 'The time zone of the location, such as IANA time zone name.', + example: 'America/Argentina/Buenos_Aires', + name: 'host.geo.timezone', + type: 'keyword', + }, 'host.hostname': { category: 'host', description: @@ -1565,7 +2677,9 @@ export const fieldsBeat: BeatFields = { }, 'host.mac': { category: 'host', - description: 'Host mac addresses.', + description: + 'Host MAC addresses. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', + example: '["00-00-5E-00-53-23", "00-00-5E-00-53-24"]', name: 'host.mac', type: 'keyword', }, @@ -1576,6 +2690,34 @@ export const fieldsBeat: BeatFields = { name: 'host.name', type: 'keyword', }, + 'host.network.egress.bytes': { + category: 'host', + description: + 'The number of bytes (gauge) sent out on all network interfaces by the host since the last metric collection.', + name: 'host.network.egress.bytes', + type: 'long', + }, + 'host.network.egress.packets': { + category: 'host', + description: + 'The number of packets (gauge) sent out on all network interfaces by the host since the last metric collection.', + name: 'host.network.egress.packets', + type: 'long', + }, + 'host.network.ingress.bytes': { + category: 'host', + description: + 'The number of bytes received (gauge) on all network interfaces by the host since the last metric collection.', + name: 'host.network.ingress.bytes', + type: 'long', + }, + 'host.network.ingress.packets': { + category: 'host', + description: + 'The number of packets (gauge) received on all network interfaces by the host since the last metric collection.', + name: 'host.network.ingress.packets', + type: 'long', + }, 'host.os.family': { category: 'host', description: 'OS family (such as redhat, debian, freebsd, windows).', @@ -1611,6 +2753,14 @@ export const fieldsBeat: BeatFields = { name: 'host.os.platform', type: 'keyword', }, + 'host.os.type': { + category: 'host', + description: + "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", + example: 'macos', + name: 'host.os.type', + type: 'keyword', + }, 'host.os.version': { category: 'host', description: 'Operating system version as a raw string.', @@ -1632,65 +2782,6 @@ export const fieldsBeat: BeatFields = { name: 'host.uptime', type: 'long', }, - 'host.user.domain': { - category: 'host', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'host.user.domain', - type: 'keyword', - }, - 'host.user.email': { - category: 'host', - description: 'User email address.', - name: 'host.user.email', - type: 'keyword', - }, - 'host.user.full_name': { - category: 'host', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'host.user.full_name', - type: 'keyword', - }, - 'host.user.group.domain': { - category: 'host', - description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'host.user.group.domain', - type: 'keyword', - }, - 'host.user.group.id': { - category: 'host', - description: 'Unique identifier for the group on the system/platform.', - name: 'host.user.group.id', - type: 'keyword', - }, - 'host.user.group.name': { - category: 'host', - description: 'Name of the group.', - name: 'host.user.group.name', - type: 'keyword', - }, - 'host.user.hash': { - category: 'host', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'host.user.hash', - type: 'keyword', - }, - 'host.user.id': { - category: 'host', - description: 'Unique identifiers of the user.', - name: 'host.user.id', - type: 'keyword', - }, - 'host.user.name': { - category: 'host', - description: 'Short name or login of the user.', - example: 'albert', - name: 'host.user.name', - type: 'keyword', - }, 'http.request.body.bytes': { category: 'http', description: 'Size in bytes of the request body.', @@ -1704,7 +2795,7 @@ export const fieldsBeat: BeatFields = { description: 'The full HTTP request body.', example: 'Hello world', name: 'http.request.body.content', - type: 'keyword', + type: 'wildcard', }, 'http.request.bytes': { category: 'http', @@ -1714,14 +2805,30 @@ export const fieldsBeat: BeatFields = { type: 'long', format: 'bytes', }, + 'http.request.id': { + category: 'http', + description: + 'A unique identifier for each HTTP request to correlate logs between clients and servers in transactions. The id may be contained in a non-standard HTTP header, such as `X-Request-ID` or `X-Correlation-ID`.', + example: '123e4567-e89b-12d3-a456-426614174000', + name: 'http.request.id', + type: 'keyword', + }, 'http.request.method': { category: 'http', description: - 'HTTP request method. The field value must be normalized to lowercase for querying. See the documentation section "Implementing ECS".', - example: 'get, post, put', + 'HTTP request method. The value should retain its casing from the original event. For example, `GET`, `get`, and `GeT` are all considered valid values for this field.', + example: 'POST', name: 'http.request.method', type: 'keyword', }, + 'http.request.mime_type': { + category: 'http', + description: + "Mime type of the body of the request. This value must only be populated based on the content of the request body, not on the `Content-Type` header. Comparing the mime type of a request with the request's Content-Type header can be helpful in detecting threats or misconfigured clients.", + example: 'image/gif', + name: 'http.request.mime_type', + type: 'keyword', + }, 'http.request.referrer': { category: 'http', description: 'Referrer for this HTTP request.', @@ -1742,7 +2849,7 @@ export const fieldsBeat: BeatFields = { description: 'The full HTTP response body.', example: 'Hello world', name: 'http.response.body.content', - type: 'keyword', + type: 'wildcard', }, 'http.response.bytes': { category: 'http', @@ -1752,6 +2859,14 @@ export const fieldsBeat: BeatFields = { type: 'long', format: 'bytes', }, + 'http.response.mime_type': { + category: 'http', + description: + "Mime type of the body of the response. This value must only be populated based on the content of the response body, not on the `Content-Type` header. Comparing the mime type of a response with the response's Content-Type header can be helpful in detecting misconfigured servers.", + example: 'image/gif', + name: 'http.response.mime_type', + type: 'keyword', + }, 'http.response.status_code': { category: 'http', description: 'HTTP response status code.', @@ -1789,6 +2904,14 @@ export const fieldsBeat: BeatFields = { name: 'interface.name', type: 'keyword', }, + 'log.file.path': { + category: 'log', + description: + "Full path to the log file this event came from, including the file name. It should include the drive letter, when appropriate. If the event wasn't read from a log file, do not populate this field.", + example: '/var/log/fun-times.log', + name: 'log.file.path', + type: 'keyword', + }, 'log.level': { category: 'log', description: @@ -1811,12 +2934,12 @@ export const fieldsBeat: BeatFields = { 'The line number of the file containing the source code which originated the log event.', example: 42, name: 'log.origin.file.line', - type: 'integer', + type: 'long', }, 'log.origin.file.name': { category: 'log', description: - 'The name of the file containing the source code which originated the log event. Note that this is not the name of the log file.', + 'The name of the file containing the source code which originated the log event. Note that this field is not meant to capture the log file. The correct field to capture the log file is `log.file.path`.', example: 'Bootstrap.java', name: 'log.origin.file.name', type: 'keyword', @@ -1828,14 +2951,6 @@ export const fieldsBeat: BeatFields = { name: 'log.origin.function', type: 'keyword', }, - 'log.original': { - category: 'log', - description: - "This is the original log message and contains the full log message before splitting it up in multiple parts. In contrast to the `message` field which can contain an extracted part of the log message, this field contains the original, full log message. It can have already some modifications applied like encoding or new lines removed to clean up the log message. This field is not indexed and doc_values are disabled so it can't be queried but the value can be retrieved from `_source`.", - example: 'Sep 19 08:26:10 localhost My log', - name: 'log.original', - type: 'keyword', - }, 'log.syslog': { category: 'log', description: @@ -1887,7 +3002,7 @@ export const fieldsBeat: BeatFields = { 'network.application': { category: 'network', description: - 'A name given to an application level protocol. This can be arbitrarily assigned for things like microservices, but also apply to things like skype, icq, facebook, twitter. This would be used in situations where the vendor or service can be decoded such as from the source/dest IP owners, ports, or wire format. The field value must be normalized to lowercase for querying. See the documentation section "Implementing ECS".', + "When a specific application or service is identified from network connection details (source/dest IPs, ports, certificates, or wire format), this field captures the application's or service's name. For example, the original event identifies the network connection being from a specific web service in a `https` network connection, like `facebook` or `twitter`. The field value must be normalized to lowercase for querying.", example: 'aim', name: 'network.application', type: 'keyword', @@ -1912,7 +3027,7 @@ export const fieldsBeat: BeatFields = { 'network.direction': { category: 'network', description: - "Direction of the network traffic. Recommended values are: * inbound * outbound * internal * external * unknown When mapping events from a host-based monitoring context, populate this field from the host's point of view. When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of your network perimeter.", + 'Direction of the network traffic. Recommended values are: * ingress * egress * inbound * outbound * internal * external * unknown When mapping events from a host-based monitoring context, populate this field from the host\'s point of view, using the values "ingress" or "egress". When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values "inbound", "outbound", "internal" or "external". Note that "internal" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that "external" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers.', example: 'inbound', name: 'network.direction', type: 'keyword', @@ -1935,7 +3050,7 @@ export const fieldsBeat: BeatFields = { 'network.inner': { category: 'network', description: - 'Network.inner fields are added in addition to network.vlan fields to describe the innermost VLAN when q-in-q VLAN tagging is present. Allowed fields include vlan.id and vlan.name. Inner vlan fields are typically used when sending traffic with multiple 802.1q encapsulations to a network sensor (e.g. Zeek, Wireshark.)', + 'Network.inner fields are added in addition to network.vlan fields to describe the innermost VLAN when q-in-q VLAN tagging is present. Allowed fields include vlan.id and vlan.name. Inner vlan fields are typically used when sending traffic with multiple 802.1q encapsulations to a network sensor (e.g. Zeek, Wireshark.)', name: 'network.inner', type: 'object', }, @@ -1971,7 +3086,7 @@ export const fieldsBeat: BeatFields = { 'network.protocol': { category: 'network', description: - 'L7 Network protocol name. ex. http, lumberjack, transport protocol. The field value must be normalized to lowercase for querying. See the documentation section "Implementing ECS".', + 'In the OSI Model this would be the Application Layer protocol. For example, `http`, `dns`, or `ssh`. The field value must be normalized to lowercase for querying.', example: 'http', name: 'network.protocol', type: 'keyword', @@ -1979,7 +3094,7 @@ export const fieldsBeat: BeatFields = { 'network.transport': { category: 'network', description: - 'Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) The field value must be normalized to lowercase for querying. See the documentation section "Implementing ECS".', + 'Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) The field value must be normalized to lowercase for querying.', example: 'tcp', name: 'network.transport', type: 'keyword', @@ -1987,7 +3102,7 @@ export const fieldsBeat: BeatFields = { 'network.type': { category: 'network', description: - 'In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc The field value must be normalized to lowercase for querying. See the documentation section "Implementing ECS".', + 'In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc The field value must be normalized to lowercase for querying.', example: 'ipv4', name: 'network.type', type: 'keyword', @@ -2009,7 +3124,7 @@ export const fieldsBeat: BeatFields = { 'observer.egress': { category: 'observer', description: - 'Observer.egress holds information like interface number and name, vlan, and zone information to classify egress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic.', + 'Observer.egress holds information like interface number and name, vlan, and zone information to classify egress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic.', name: 'observer.egress', type: 'object', }, @@ -2052,7 +3167,7 @@ export const fieldsBeat: BeatFields = { 'observer.egress.zone': { category: 'observer', description: - 'Network zone of outbound traffic as reported by the observer to categorize the destination area of egress traffic, e.g. Internal, External, DMZ, HR, Legal, etc.', + 'Network zone of outbound traffic as reported by the observer to categorize the destination area of egress traffic, e.g. Internal, External, DMZ, HR, Legal, etc.', example: 'Public_Internet', name: 'observer.egress.zone', type: 'keyword', @@ -2064,6 +3179,13 @@ export const fieldsBeat: BeatFields = { name: 'observer.geo.city_name', type: 'keyword', }, + 'observer.geo.continent_code': { + category: 'observer', + description: "Two-letter code representing continent's name.", + example: 'NA', + name: 'observer.geo.continent_code', + type: 'keyword', + }, 'observer.geo.continent_name': { category: 'observer', description: 'Name of the continent.', @@ -2100,6 +3222,14 @@ export const fieldsBeat: BeatFields = { name: 'observer.geo.name', type: 'keyword', }, + 'observer.geo.postal_code': { + category: 'observer', + description: + 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', + example: 94040, + name: 'observer.geo.postal_code', + type: 'keyword', + }, 'observer.geo.region_iso_code': { category: 'observer', description: 'Region ISO code.', @@ -2114,6 +3244,13 @@ export const fieldsBeat: BeatFields = { name: 'observer.geo.region_name', type: 'keyword', }, + 'observer.geo.timezone': { + category: 'observer', + description: 'The time zone of the location, such as IANA time zone name.', + example: 'America/Argentina/Buenos_Aires', + name: 'observer.geo.timezone', + type: 'keyword', + }, 'observer.hostname': { category: 'observer', description: 'Hostname of the observer.', @@ -2123,7 +3260,7 @@ export const fieldsBeat: BeatFields = { 'observer.ingress': { category: 'observer', description: - 'Observer.ingress holds information like interface number and name, vlan, and zone information to classify ingress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic.', + 'Observer.ingress holds information like interface number and name, vlan, and zone information to classify ingress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic.', name: 'observer.ingress', type: 'object', }, @@ -2166,7 +3303,7 @@ export const fieldsBeat: BeatFields = { 'observer.ingress.zone': { category: 'observer', description: - 'Network zone of incoming traffic as reported by the observer to categorize the source area of ingress traffic. e.g. internal, External, DMZ, HR, Legal, etc.', + 'Network zone of incoming traffic as reported by the observer to categorize the source area of ingress traffic. e.g. internal, External, DMZ, HR, Legal, etc.', example: 'DMZ', name: 'observer.ingress.zone', type: 'keyword', @@ -2179,7 +3316,9 @@ export const fieldsBeat: BeatFields = { }, 'observer.mac': { category: 'observer', - description: 'MAC addresses of the observer', + description: + 'MAC addresses of the observer. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', + example: '["00-00-5E-00-53-23", "00-00-5E-00-53-24"]', name: 'observer.mac', type: 'keyword', }, @@ -2226,6 +3365,14 @@ export const fieldsBeat: BeatFields = { name: 'observer.os.platform', type: 'keyword', }, + 'observer.os.type': { + category: 'observer', + description: + "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", + example: 'macos', + name: 'observer.os.type', + type: 'keyword', + }, 'observer.os.version': { category: 'observer', description: 'Operating system version as a raw string.', @@ -2267,6 +3414,66 @@ export const fieldsBeat: BeatFields = { name: 'observer.version', type: 'keyword', }, + 'orchestrator.api_version': { + category: 'orchestrator', + description: 'API version being used to carry out the action', + example: 'v1beta1', + name: 'orchestrator.api_version', + type: 'keyword', + }, + 'orchestrator.cluster.name': { + category: 'orchestrator', + description: 'Name of the cluster.', + name: 'orchestrator.cluster.name', + type: 'keyword', + }, + 'orchestrator.cluster.url': { + category: 'orchestrator', + description: 'URL of the API used to manage the cluster.', + name: 'orchestrator.cluster.url', + type: 'keyword', + }, + 'orchestrator.cluster.version': { + category: 'orchestrator', + description: 'The version of the cluster.', + name: 'orchestrator.cluster.version', + type: 'keyword', + }, + 'orchestrator.namespace': { + category: 'orchestrator', + description: 'Namespace in which the action is taking place.', + example: 'kube-system', + name: 'orchestrator.namespace', + type: 'keyword', + }, + 'orchestrator.organization': { + category: 'orchestrator', + description: 'Organization affected by the event (for multi-tenant orchestrator setups).', + example: 'elastic', + name: 'orchestrator.organization', + type: 'keyword', + }, + 'orchestrator.resource.name': { + category: 'orchestrator', + description: 'Name of the resource being acted upon.', + example: 'test-pod-cdcws', + name: 'orchestrator.resource.name', + type: 'keyword', + }, + 'orchestrator.resource.type': { + category: 'orchestrator', + description: 'Type of resource being acted upon.', + example: 'service', + name: 'orchestrator.resource.type', + type: 'keyword', + }, + 'orchestrator.type': { + category: 'orchestrator', + description: 'Orchestrator cluster type (e.g. kubernetes, nomad or cloudfoundry).', + example: 'kubernetes', + name: 'orchestrator.type', + type: 'keyword', + }, 'organization.id': { category: 'organization', description: 'Unique identifier for the organization.', @@ -2314,6 +3521,14 @@ export const fieldsBeat: BeatFields = { name: 'os.platform', type: 'keyword', }, + 'os.type': { + category: 'os', + description: + "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", + example: 'macos', + name: 'os.type', + type: 'keyword', + }, 'os.version': { category: 'os', description: 'Operating system version as a raw string.', @@ -2415,6 +3630,13 @@ export const fieldsBeat: BeatFields = { name: 'package.version', type: 'keyword', }, + 'pe.architecture': { + category: 'pe', + description: 'CPU architecture target for the file.', + example: 'x64', + name: 'pe.architecture', + type: 'keyword', + }, 'pe.company': { category: 'pe', description: 'Internal company name of the file, provided at compile-time.', @@ -2436,6 +3658,14 @@ export const fieldsBeat: BeatFields = { name: 'pe.file_version', type: 'keyword', }, + 'pe.imphash': { + category: 'pe', + description: + 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', + example: '0c6803c4e922103c4dca5963aad36ddf', + name: 'pe.imphash', + type: 'keyword', + }, 'pe.original_file_name': { category: 'pe', description: 'Internal name of the file, provided at compile-time.', @@ -2454,7 +3684,7 @@ export const fieldsBeat: BeatFields = { category: 'process', description: 'Array of process arguments, starting with the absolute path to the executable. May be filtered to protect sensitive information.', - example: '["/usr/bin/ssh","-l","user","10.0.0.16"]', + example: '["/usr/bin/ssh", "-l", "user", "10.0.0.16"]', name: 'process.args', type: 'keyword', }, @@ -2466,6 +3696,14 @@ export const fieldsBeat: BeatFields = { name: 'process.args_count', type: 'long', }, + 'process.code_signature.digest_algorithm': { + category: 'process', + description: + 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', + example: 'sha256', + name: 'process.code_signature.digest_algorithm', + type: 'keyword', + }, 'process.code_signature.exists': { category: 'process', description: 'Boolean to capture if a signature is present.', @@ -2473,6 +3711,14 @@ export const fieldsBeat: BeatFields = { name: 'process.code_signature.exists', type: 'boolean', }, + 'process.code_signature.signing_id': { + category: 'process', + description: + 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', + example: 'com.apple.xpc.proxy', + name: 'process.code_signature.signing_id', + type: 'keyword', + }, 'process.code_signature.status': { category: 'process', description: @@ -2488,6 +3734,21 @@ export const fieldsBeat: BeatFields = { name: 'process.code_signature.subject_name', type: 'keyword', }, + 'process.code_signature.team_id': { + category: 'process', + description: + 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', + example: 'EQHXZ8M8AV', + name: 'process.code_signature.team_id', + type: 'keyword', + }, + 'process.code_signature.timestamp': { + category: 'process', + description: 'Date and time when the code signature was generated and signed.', + example: '2021-01-01T12:10:30Z', + name: 'process.code_signature.timestamp', + type: 'date', + }, 'process.code_signature.trusted': { category: 'process', description: @@ -2510,8 +3771,201 @@ export const fieldsBeat: BeatFields = { 'Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information.', example: '/usr/bin/ssh -l user 10.0.0.16', name: 'process.command_line', + type: 'wildcard', + }, + 'process.elf.architecture': { + category: 'process', + description: 'Machine architecture of the ELF file.', + example: 'x86-64', + name: 'process.elf.architecture', type: 'keyword', }, + 'process.elf.byte_order': { + category: 'process', + description: 'Byte sequence of ELF file.', + example: 'Little Endian', + name: 'process.elf.byte_order', + type: 'keyword', + }, + 'process.elf.cpu_type': { + category: 'process', + description: 'CPU type of the ELF file.', + example: 'Intel', + name: 'process.elf.cpu_type', + type: 'keyword', + }, + 'process.elf.creation_date': { + category: 'process', + description: + "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", + name: 'process.elf.creation_date', + type: 'date', + }, + 'process.elf.exports': { + category: 'process', + description: 'List of exported element names and types.', + name: 'process.elf.exports', + type: 'flattened', + }, + 'process.elf.header.abi_version': { + category: 'process', + description: 'Version of the ELF Application Binary Interface (ABI).', + name: 'process.elf.header.abi_version', + type: 'keyword', + }, + 'process.elf.header.class': { + category: 'process', + description: 'Header class of the ELF file.', + name: 'process.elf.header.class', + type: 'keyword', + }, + 'process.elf.header.data': { + category: 'process', + description: 'Data table of the ELF header.', + name: 'process.elf.header.data', + type: 'keyword', + }, + 'process.elf.header.entrypoint': { + category: 'process', + description: 'Header entrypoint of the ELF file.', + name: 'process.elf.header.entrypoint', + type: 'long', + format: 'string', + }, + 'process.elf.header.object_version': { + category: 'process', + description: '"0x1" for original ELF files.', + name: 'process.elf.header.object_version', + type: 'keyword', + }, + 'process.elf.header.os_abi': { + category: 'process', + description: 'Application Binary Interface (ABI) of the Linux OS.', + name: 'process.elf.header.os_abi', + type: 'keyword', + }, + 'process.elf.header.type': { + category: 'process', + description: 'Header type of the ELF file.', + name: 'process.elf.header.type', + type: 'keyword', + }, + 'process.elf.header.version': { + category: 'process', + description: 'Version of the ELF header.', + name: 'process.elf.header.version', + type: 'keyword', + }, + 'process.elf.imports': { + category: 'process', + description: 'List of imported element names and types.', + name: 'process.elf.imports', + type: 'flattened', + }, + 'process.elf.sections': { + category: 'process', + description: + 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', + name: 'process.elf.sections', + type: 'nested', + }, + 'process.elf.sections.chi2': { + category: 'process', + description: 'Chi-square probability distribution of the section.', + name: 'process.elf.sections.chi2', + type: 'long', + format: 'number', + }, + 'process.elf.sections.entropy': { + category: 'process', + description: 'Shannon entropy calculation from the section.', + name: 'process.elf.sections.entropy', + type: 'long', + format: 'number', + }, + 'process.elf.sections.flags': { + category: 'process', + description: 'ELF Section List flags.', + name: 'process.elf.sections.flags', + type: 'keyword', + }, + 'process.elf.sections.name': { + category: 'process', + description: 'ELF Section List name.', + name: 'process.elf.sections.name', + type: 'keyword', + }, + 'process.elf.sections.physical_offset': { + category: 'process', + description: 'ELF Section List offset.', + name: 'process.elf.sections.physical_offset', + type: 'keyword', + }, + 'process.elf.sections.physical_size': { + category: 'process', + description: 'ELF Section List physical size.', + name: 'process.elf.sections.physical_size', + type: 'long', + format: 'bytes', + }, + 'process.elf.sections.type': { + category: 'process', + description: 'ELF Section List type.', + name: 'process.elf.sections.type', + type: 'keyword', + }, + 'process.elf.sections.virtual_address': { + category: 'process', + description: 'ELF Section List virtual address.', + name: 'process.elf.sections.virtual_address', + type: 'long', + format: 'string', + }, + 'process.elf.sections.virtual_size': { + category: 'process', + description: 'ELF Section List virtual size.', + name: 'process.elf.sections.virtual_size', + type: 'long', + format: 'string', + }, + 'process.elf.segments': { + category: 'process', + description: + 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', + name: 'process.elf.segments', + type: 'nested', + }, + 'process.elf.segments.sections': { + category: 'process', + description: 'ELF object segment sections.', + name: 'process.elf.segments.sections', + type: 'keyword', + }, + 'process.elf.segments.type': { + category: 'process', + description: 'ELF object segment type.', + name: 'process.elf.segments.type', + type: 'keyword', + }, + 'process.elf.shared_libraries': { + category: 'process', + description: 'List of shared libraries used by this ELF object.', + name: 'process.elf.shared_libraries', + type: 'keyword', + }, + 'process.elf.telfhash': { + category: 'process', + description: 'telfhash symbol hash for ELF file.', + name: 'process.elf.telfhash', + type: 'keyword', + }, + 'process.end': { + category: 'process', + description: 'The time the process ended.', + example: '2016-05-23T08:05:34.853Z', + name: 'process.end', + type: 'date', + }, 'process.entity_id': { category: 'process', description: @@ -2559,6 +4013,12 @@ export const fieldsBeat: BeatFields = { name: 'process.hash.sha512', type: 'keyword', }, + 'process.hash.ssdeep': { + category: 'process', + description: 'SSDEEP hash.', + name: 'process.hash.ssdeep', + type: 'keyword', + }, 'process.name': { category: 'process', description: 'Process name. Sometimes called program name or similar.', @@ -2568,8 +4028,9 @@ export const fieldsBeat: BeatFields = { }, 'process.parent.args': { category: 'process', - description: 'Array of process arguments. May be filtered to protect sensitive information.', - example: '["ssh","-l","user","10.0.0.16"]', + description: + 'Array of process arguments, starting with the absolute path to the executable. May be filtered to protect sensitive information.', + example: '["/usr/bin/ssh", "-l", "user", "10.0.0.16"]', name: 'process.parent.args', type: 'keyword', }, @@ -2581,6 +4042,14 @@ export const fieldsBeat: BeatFields = { name: 'process.parent.args_count', type: 'long', }, + 'process.parent.code_signature.digest_algorithm': { + category: 'process', + description: + 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', + example: 'sha256', + name: 'process.parent.code_signature.digest_algorithm', + type: 'keyword', + }, 'process.parent.code_signature.exists': { category: 'process', description: 'Boolean to capture if a signature is present.', @@ -2588,6 +4057,14 @@ export const fieldsBeat: BeatFields = { name: 'process.parent.code_signature.exists', type: 'boolean', }, + 'process.parent.code_signature.signing_id': { + category: 'process', + description: + 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', + example: 'com.apple.xpc.proxy', + name: 'process.parent.code_signature.signing_id', + type: 'keyword', + }, 'process.parent.code_signature.status': { category: 'process', description: @@ -2603,6 +4080,21 @@ export const fieldsBeat: BeatFields = { name: 'process.parent.code_signature.subject_name', type: 'keyword', }, + 'process.parent.code_signature.team_id': { + category: 'process', + description: + 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', + example: 'EQHXZ8M8AV', + name: 'process.parent.code_signature.team_id', + type: 'keyword', + }, + 'process.parent.code_signature.timestamp': { + category: 'process', + description: 'Date and time when the code signature was generated and signed.', + example: '2021-01-01T12:10:30Z', + name: 'process.parent.code_signature.timestamp', + type: 'date', + }, 'process.parent.code_signature.trusted': { category: 'process', description: @@ -2625,8 +4117,201 @@ export const fieldsBeat: BeatFields = { 'Full command line that started the process, including the absolute path to the executable, and all arguments. Some arguments may be filtered to protect sensitive information.', example: '/usr/bin/ssh -l user 10.0.0.16', name: 'process.parent.command_line', + type: 'wildcard', + }, + 'process.parent.elf.architecture': { + category: 'process', + description: 'Machine architecture of the ELF file.', + example: 'x86-64', + name: 'process.parent.elf.architecture', + type: 'keyword', + }, + 'process.parent.elf.byte_order': { + category: 'process', + description: 'Byte sequence of ELF file.', + example: 'Little Endian', + name: 'process.parent.elf.byte_order', + type: 'keyword', + }, + 'process.parent.elf.cpu_type': { + category: 'process', + description: 'CPU type of the ELF file.', + example: 'Intel', + name: 'process.parent.elf.cpu_type', + type: 'keyword', + }, + 'process.parent.elf.creation_date': { + category: 'process', + description: + "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", + name: 'process.parent.elf.creation_date', + type: 'date', + }, + 'process.parent.elf.exports': { + category: 'process', + description: 'List of exported element names and types.', + name: 'process.parent.elf.exports', + type: 'flattened', + }, + 'process.parent.elf.header.abi_version': { + category: 'process', + description: 'Version of the ELF Application Binary Interface (ABI).', + name: 'process.parent.elf.header.abi_version', + type: 'keyword', + }, + 'process.parent.elf.header.class': { + category: 'process', + description: 'Header class of the ELF file.', + name: 'process.parent.elf.header.class', + type: 'keyword', + }, + 'process.parent.elf.header.data': { + category: 'process', + description: 'Data table of the ELF header.', + name: 'process.parent.elf.header.data', + type: 'keyword', + }, + 'process.parent.elf.header.entrypoint': { + category: 'process', + description: 'Header entrypoint of the ELF file.', + name: 'process.parent.elf.header.entrypoint', + type: 'long', + format: 'string', + }, + 'process.parent.elf.header.object_version': { + category: 'process', + description: '"0x1" for original ELF files.', + name: 'process.parent.elf.header.object_version', + type: 'keyword', + }, + 'process.parent.elf.header.os_abi': { + category: 'process', + description: 'Application Binary Interface (ABI) of the Linux OS.', + name: 'process.parent.elf.header.os_abi', + type: 'keyword', + }, + 'process.parent.elf.header.type': { + category: 'process', + description: 'Header type of the ELF file.', + name: 'process.parent.elf.header.type', + type: 'keyword', + }, + 'process.parent.elf.header.version': { + category: 'process', + description: 'Version of the ELF header.', + name: 'process.parent.elf.header.version', + type: 'keyword', + }, + 'process.parent.elf.imports': { + category: 'process', + description: 'List of imported element names and types.', + name: 'process.parent.elf.imports', + type: 'flattened', + }, + 'process.parent.elf.sections': { + category: 'process', + description: + 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', + name: 'process.parent.elf.sections', + type: 'nested', + }, + 'process.parent.elf.sections.chi2': { + category: 'process', + description: 'Chi-square probability distribution of the section.', + name: 'process.parent.elf.sections.chi2', + type: 'long', + format: 'number', + }, + 'process.parent.elf.sections.entropy': { + category: 'process', + description: 'Shannon entropy calculation from the section.', + name: 'process.parent.elf.sections.entropy', + type: 'long', + format: 'number', + }, + 'process.parent.elf.sections.flags': { + category: 'process', + description: 'ELF Section List flags.', + name: 'process.parent.elf.sections.flags', + type: 'keyword', + }, + 'process.parent.elf.sections.name': { + category: 'process', + description: 'ELF Section List name.', + name: 'process.parent.elf.sections.name', + type: 'keyword', + }, + 'process.parent.elf.sections.physical_offset': { + category: 'process', + description: 'ELF Section List offset.', + name: 'process.parent.elf.sections.physical_offset', + type: 'keyword', + }, + 'process.parent.elf.sections.physical_size': { + category: 'process', + description: 'ELF Section List physical size.', + name: 'process.parent.elf.sections.physical_size', + type: 'long', + format: 'bytes', + }, + 'process.parent.elf.sections.type': { + category: 'process', + description: 'ELF Section List type.', + name: 'process.parent.elf.sections.type', + type: 'keyword', + }, + 'process.parent.elf.sections.virtual_address': { + category: 'process', + description: 'ELF Section List virtual address.', + name: 'process.parent.elf.sections.virtual_address', + type: 'long', + format: 'string', + }, + 'process.parent.elf.sections.virtual_size': { + category: 'process', + description: 'ELF Section List virtual size.', + name: 'process.parent.elf.sections.virtual_size', + type: 'long', + format: 'string', + }, + 'process.parent.elf.segments': { + category: 'process', + description: + 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', + name: 'process.parent.elf.segments', + type: 'nested', + }, + 'process.parent.elf.segments.sections': { + category: 'process', + description: 'ELF object segment sections.', + name: 'process.parent.elf.segments.sections', type: 'keyword', }, + 'process.parent.elf.segments.type': { + category: 'process', + description: 'ELF object segment type.', + name: 'process.parent.elf.segments.type', + type: 'keyword', + }, + 'process.parent.elf.shared_libraries': { + category: 'process', + description: 'List of shared libraries used by this ELF object.', + name: 'process.parent.elf.shared_libraries', + type: 'keyword', + }, + 'process.parent.elf.telfhash': { + category: 'process', + description: 'telfhash symbol hash for ELF file.', + name: 'process.parent.elf.telfhash', + type: 'keyword', + }, + 'process.parent.end': { + category: 'process', + description: 'The time the process ended.', + example: '2016-05-23T08:05:34.853Z', + name: 'process.parent.end', + type: 'date', + }, 'process.parent.entity_id': { category: 'process', description: @@ -2674,6 +4359,12 @@ export const fieldsBeat: BeatFields = { name: 'process.parent.hash.sha512', type: 'keyword', }, + 'process.parent.hash.ssdeep': { + category: 'process', + description: 'SSDEEP hash.', + name: 'process.parent.hash.ssdeep', + type: 'keyword', + }, 'process.parent.name': { category: 'process', description: 'Process name. Sometimes called program name or similar.', @@ -2681,6 +4372,56 @@ export const fieldsBeat: BeatFields = { name: 'process.parent.name', type: 'keyword', }, + 'process.parent.pe.architecture': { + category: 'process', + description: 'CPU architecture target for the file.', + example: 'x64', + name: 'process.parent.pe.architecture', + type: 'keyword', + }, + 'process.parent.pe.company': { + category: 'process', + description: 'Internal company name of the file, provided at compile-time.', + example: 'Microsoft Corporation', + name: 'process.parent.pe.company', + type: 'keyword', + }, + 'process.parent.pe.description': { + category: 'process', + description: 'Internal description of the file, provided at compile-time.', + example: 'Paint', + name: 'process.parent.pe.description', + type: 'keyword', + }, + 'process.parent.pe.file_version': { + category: 'process', + description: 'Internal version of the file, provided at compile-time.', + example: '6.3.9600.17415', + name: 'process.parent.pe.file_version', + type: 'keyword', + }, + 'process.parent.pe.imphash': { + category: 'process', + description: + 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', + example: '0c6803c4e922103c4dca5963aad36ddf', + name: 'process.parent.pe.imphash', + type: 'keyword', + }, + 'process.parent.pe.original_file_name': { + category: 'process', + description: 'Internal name of the file, provided at compile-time.', + example: 'MSPAINT.EXE', + name: 'process.parent.pe.original_file_name', + type: 'keyword', + }, + 'process.parent.pe.product': { + category: 'process', + description: 'Internal product name of the file, provided at compile-time.', + example: 'Microsoft® Windows® Operating System', + name: 'process.parent.pe.product', + type: 'keyword', + }, 'process.parent.pgid': { category: 'process', description: 'Identifier of the group of processes the process belongs to.', @@ -2696,14 +4437,6 @@ export const fieldsBeat: BeatFields = { type: 'long', format: 'string', }, - 'process.parent.ppid': { - category: 'process', - description: "Parent process' pid.", - example: 4241, - name: 'process.parent.ppid', - type: 'long', - format: 'string', - }, 'process.parent.start': { category: 'process', description: 'The time the process started.', @@ -2747,6 +4480,13 @@ export const fieldsBeat: BeatFields = { name: 'process.parent.working_directory', type: 'keyword', }, + 'process.pe.architecture': { + category: 'process', + description: 'CPU architecture target for the file.', + example: 'x64', + name: 'process.pe.architecture', + type: 'keyword', + }, 'process.pe.company': { category: 'process', description: 'Internal company name of the file, provided at compile-time.', @@ -2768,6 +4508,14 @@ export const fieldsBeat: BeatFields = { name: 'process.pe.file_version', type: 'keyword', }, + 'process.pe.imphash': { + category: 'process', + description: + 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', + example: '0c6803c4e922103c4dca5963aad36ddf', + name: 'process.pe.imphash', + type: 'keyword', + }, 'process.pe.original_file_name': { category: 'process', description: 'Internal name of the file, provided at compile-time.', @@ -2797,14 +4545,6 @@ export const fieldsBeat: BeatFields = { type: 'long', format: 'string', }, - 'process.ppid': { - category: 'process', - description: "Parent process' pid.", - example: 4241, - name: 'process.ppid', - type: 'long', - format: 'string', - }, 'process.start': { category: 'process', description: 'The time the process started.', @@ -2862,7 +4602,7 @@ export const fieldsBeat: BeatFields = { 'Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `"1"`).', example: '["C:\\rta\\red_ttp\\bin\\myapp.exe"]', name: 'registry.data.strings', - type: 'keyword', + type: 'wildcard', }, 'registry.data.type': { category: 'registry', @@ -2908,6 +4648,13 @@ export const fieldsBeat: BeatFields = { name: 'related.hash', type: 'keyword', }, + 'related.hosts': { + category: 'related', + description: + 'All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases.', + name: 'related.hosts', + type: 'keyword', + }, 'related.ip': { category: 'related', description: 'All of the IPs seen on your event.', @@ -2916,7 +4663,7 @@ export const fieldsBeat: BeatFields = { }, 'related.user': { category: 'related', - description: 'All the user names seen on your event.', + description: 'All the user names or other user identifiers seen on the event.', name: 'related.user', type: 'keyword', }, @@ -3040,6 +4787,13 @@ export const fieldsBeat: BeatFields = { name: 'server.geo.city_name', type: 'keyword', }, + 'server.geo.continent_code': { + category: 'server', + description: "Two-letter code representing continent's name.", + example: 'NA', + name: 'server.geo.continent_code', + type: 'keyword', + }, 'server.geo.continent_name': { category: 'server', description: 'Name of the continent.', @@ -3076,6 +4830,14 @@ export const fieldsBeat: BeatFields = { name: 'server.geo.name', type: 'keyword', }, + 'server.geo.postal_code': { + category: 'server', + description: + 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', + example: 94040, + name: 'server.geo.postal_code', + type: 'keyword', + }, 'server.geo.region_iso_code': { category: 'server', description: 'Region ISO code.', @@ -3090,15 +4852,24 @@ export const fieldsBeat: BeatFields = { name: 'server.geo.region_name', type: 'keyword', }, + 'server.geo.timezone': { + category: 'server', + description: 'The time zone of the location, such as IANA time zone name.', + example: 'America/Argentina/Buenos_Aires', + name: 'server.geo.timezone', + type: 'keyword', + }, 'server.ip': { category: 'server', - description: 'IP address of the server. Can be one or multiple IPv4 or IPv6 addresses.', + description: 'IP address of the server (IPv4 or IPv6).', name: 'server.ip', type: 'ip', }, 'server.mac': { category: 'server', - description: 'MAC address of the server.', + description: + 'MAC address of the server. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', + example: '00-00-5E-00-53-23', name: 'server.mac', type: 'keyword', }, @@ -3134,15 +4905,23 @@ export const fieldsBeat: BeatFields = { 'server.registered_domain': { category: 'server', description: - 'The highest registered server domain, stripped of the subdomain. For example, the registered domain for "foo.google.com" is "google.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'google.com', + 'The highest registered server domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', + example: 'example.com', name: 'server.registered_domain', type: 'keyword', }, + 'server.subdomain': { + category: 'server', + description: + 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', + example: 'east', + name: 'server.subdomain', + type: 'keyword', + }, 'server.top_level_domain': { category: 'server', description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for google.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', + 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', example: 'co.uk', name: 'server.top_level_domain', type: 'keyword', @@ -3195,17 +4974,41 @@ export const fieldsBeat: BeatFields = { }, 'server.user.id': { category: 'server', - description: 'Unique identifiers of the user.', + description: 'Unique identifier of the user.', + example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', name: 'server.user.id', type: 'keyword', }, 'server.user.name': { category: 'server', description: 'Short name or login of the user.', - example: 'albert', + example: 'a.einstein', name: 'server.user.name', type: 'keyword', }, + 'server.user.roles': { + category: 'server', + description: 'Array of user roles at the time of the event.', + example: '["kibana_admin", "reporting_user"]', + name: 'server.user.roles', + type: 'keyword', + }, + 'service.address': { + category: 'service', + description: + 'Address where data about this service was collected from. This should be a URI, network address (ipv4:port or [ipv6]:port) or a resource path (sockets).', + example: '172.26.0.2:5432', + name: 'service.address', + type: 'keyword', + }, + 'service.environment': { + category: 'service', + description: + 'Identifies the environment where the service is running. If the same service runs in different environments (production, staging, QA, development, etc.), the environment can identify other instances of the same service. Can also group services and applications from the same environment.', + example: 'production', + name: 'service.environment', + type: 'keyword', + }, 'service.ephemeral_id': { category: 'service', description: @@ -3238,12 +5041,152 @@ export const fieldsBeat: BeatFields = { name: 'service.node.name', type: 'keyword', }, + 'service.origin.address': { + category: 'service', + description: + 'Address where data about this service was collected from. This should be a URI, network address (ipv4:port or [ipv6]:port) or a resource path (sockets).', + example: '172.26.0.2:5432', + name: 'service.origin.address', + type: 'keyword', + }, + 'service.origin.environment': { + category: 'service', + description: + 'Identifies the environment where the service is running. If the same service runs in different environments (production, staging, QA, development, etc.), the environment can identify other instances of the same service. Can also group services and applications from the same environment.', + example: 'production', + name: 'service.origin.environment', + type: 'keyword', + }, + 'service.origin.ephemeral_id': { + category: 'service', + description: + 'Ephemeral identifier of this service (if one exists). This id normally changes across restarts, but `service.id` does not.', + example: '8a4f500f', + name: 'service.origin.ephemeral_id', + type: 'keyword', + }, + 'service.origin.id': { + category: 'service', + description: + 'Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead.', + example: 'd37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6', + name: 'service.origin.id', + type: 'keyword', + }, + 'service.origin.name': { + category: 'service', + description: + 'Name of the service data is collected from. The name of the service is normally user given. This allows for distributed services that run on multiple hosts to correlate the related instances based on the name. In the case of Elasticsearch the `service.name` could contain the cluster name. For Beats the `service.name` is by default a copy of the `service.type` field if no name is specified.', + example: 'elasticsearch-metrics', + name: 'service.origin.name', + type: 'keyword', + }, + 'service.origin.node.name': { + category: 'service', + description: + "Name of a service node. This allows for two nodes of the same service running on the same host to be differentiated. Therefore, `service.node.name` should typically be unique across nodes of a given service. In the case of Elasticsearch, the `service.node.name` could contain the unique node name within the Elasticsearch cluster. In cases where the service doesn't have the concept of a node name, the host name or container name can be used to distinguish running instances that make up this service. If those do not provide uniqueness (e.g. multiple instances of the service running on the same host) - the node name can be manually set.", + example: 'instance-0000000016', + name: 'service.origin.node.name', + type: 'keyword', + }, + 'service.origin.state': { + category: 'service', + description: 'Current state of the service.', + name: 'service.origin.state', + type: 'keyword', + }, + 'service.origin.type': { + category: 'service', + description: + 'The type of the service data is collected from. The type can be used to group and correlate logs and metrics from one service type. Example: If logs or metrics are collected from Elasticsearch, `service.type` would be `elasticsearch`.', + example: 'elasticsearch', + name: 'service.origin.type', + type: 'keyword', + }, + 'service.origin.version': { + category: 'service', + description: + 'Version of the service the data was collected from. This allows to look at a data set only for a specific version of a service.', + example: '3.2.4', + name: 'service.origin.version', + type: 'keyword', + }, 'service.state': { category: 'service', description: 'Current state of the service.', name: 'service.state', type: 'keyword', }, + 'service.target.address': { + category: 'service', + description: + 'Address where data about this service was collected from. This should be a URI, network address (ipv4:port or [ipv6]:port) or a resource path (sockets).', + example: '172.26.0.2:5432', + name: 'service.target.address', + type: 'keyword', + }, + 'service.target.environment': { + category: 'service', + description: + 'Identifies the environment where the service is running. If the same service runs in different environments (production, staging, QA, development, etc.), the environment can identify other instances of the same service. Can also group services and applications from the same environment.', + example: 'production', + name: 'service.target.environment', + type: 'keyword', + }, + 'service.target.ephemeral_id': { + category: 'service', + description: + 'Ephemeral identifier of this service (if one exists). This id normally changes across restarts, but `service.id` does not.', + example: '8a4f500f', + name: 'service.target.ephemeral_id', + type: 'keyword', + }, + 'service.target.id': { + category: 'service', + description: + 'Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead.', + example: 'd37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6', + name: 'service.target.id', + type: 'keyword', + }, + 'service.target.name': { + category: 'service', + description: + 'Name of the service data is collected from. The name of the service is normally user given. This allows for distributed services that run on multiple hosts to correlate the related instances based on the name. In the case of Elasticsearch the `service.name` could contain the cluster name. For Beats the `service.name` is by default a copy of the `service.type` field if no name is specified.', + example: 'elasticsearch-metrics', + name: 'service.target.name', + type: 'keyword', + }, + 'service.target.node.name': { + category: 'service', + description: + "Name of a service node. This allows for two nodes of the same service running on the same host to be differentiated. Therefore, `service.node.name` should typically be unique across nodes of a given service. In the case of Elasticsearch, the `service.node.name` could contain the unique node name within the Elasticsearch cluster. In cases where the service doesn't have the concept of a node name, the host name or container name can be used to distinguish running instances that make up this service. If those do not provide uniqueness (e.g. multiple instances of the service running on the same host) - the node name can be manually set.", + example: 'instance-0000000016', + name: 'service.target.node.name', + type: 'keyword', + }, + 'service.target.state': { + category: 'service', + description: 'Current state of the service.', + name: 'service.target.state', + type: 'keyword', + }, + 'service.target.type': { + category: 'service', + description: + 'The type of the service data is collected from. The type can be used to group and correlate logs and metrics from one service type. Example: If logs or metrics are collected from Elasticsearch, `service.type` would be `elasticsearch`.', + example: 'elasticsearch', + name: 'service.target.type', + type: 'keyword', + }, + 'service.target.version': { + category: 'service', + description: + 'Version of the service the data was collected from. This allows to look at a data set only for a specific version of a service.', + example: '3.2.4', + name: 'service.target.version', + type: 'keyword', + }, 'service.type': { category: 'service', description: @@ -3303,6 +5246,13 @@ export const fieldsBeat: BeatFields = { name: 'source.geo.city_name', type: 'keyword', }, + 'source.geo.continent_code': { + category: 'source', + description: "Two-letter code representing continent's name.", + example: 'NA', + name: 'source.geo.continent_code', + type: 'keyword', + }, 'source.geo.continent_name': { category: 'source', description: 'Name of the continent.', @@ -3339,6 +5289,14 @@ export const fieldsBeat: BeatFields = { name: 'source.geo.name', type: 'keyword', }, + 'source.geo.postal_code': { + category: 'source', + description: + 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', + example: 94040, + name: 'source.geo.postal_code', + type: 'keyword', + }, 'source.geo.region_iso_code': { category: 'source', description: 'Region ISO code.', @@ -3353,15 +5311,24 @@ export const fieldsBeat: BeatFields = { name: 'source.geo.region_name', type: 'keyword', }, + 'source.geo.timezone': { + category: 'source', + description: 'The time zone of the location, such as IANA time zone name.', + example: 'America/Argentina/Buenos_Aires', + name: 'source.geo.timezone', + type: 'keyword', + }, 'source.ip': { category: 'source', - description: 'IP address of the source. Can be one or multiple IPv4 or IPv6 addresses.', + description: 'IP address of the source (IPv4 or IPv6).', name: 'source.ip', type: 'ip', }, 'source.mac': { category: 'source', - description: 'MAC address of the source.', + description: + 'MAC address of the source. The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen.', + example: '00-00-5E-00-53-23', name: 'source.mac', type: 'keyword', }, @@ -3397,15 +5364,23 @@ export const fieldsBeat: BeatFields = { 'source.registered_domain': { category: 'source', description: - 'The highest registered source domain, stripped of the subdomain. For example, the registered domain for "foo.google.com" is "google.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'google.com', + 'The highest registered source domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', + example: 'example.com', name: 'source.registered_domain', type: 'keyword', }, + 'source.subdomain': { + category: 'source', + description: + 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', + example: 'east', + name: 'source.subdomain', + type: 'keyword', + }, 'source.top_level_domain': { category: 'source', description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for google.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', + 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', example: 'co.uk', name: 'source.top_level_domain', type: 'keyword', @@ -3458,27055 +5433,38765 @@ export const fieldsBeat: BeatFields = { }, 'source.user.id': { category: 'source', - description: 'Unique identifiers of the user.', + description: 'Unique identifier of the user.', + example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', name: 'source.user.id', type: 'keyword', }, 'source.user.name': { category: 'source', description: 'Short name or login of the user.', - example: 'albert', + example: 'a.einstein', name: 'source.user.name', type: 'keyword', }, - 'threat.framework': { - category: 'threat', - description: - 'Name of the threat framework used to further categorize and classify the tactic and technique of the reported threat. Framework classification can be provided by detecting systems, evaluated at ingest time, or retrospectively tagged to events.', - example: 'MITRE ATT&CK', - name: 'threat.framework', + 'source.user.roles': { + category: 'source', + description: 'Array of user roles at the time of the event.', + example: '["kibana_admin", "reporting_user"]', + name: 'source.user.roles', type: 'keyword', }, - 'threat.tactic.id': { + 'threat.enrichments': { category: 'threat', description: - 'The id of tactic used by this threat. You can use the Mitre ATT&CK Matrix Tactic categorization, for example. (ex. https://attack.mitre.org/tactics/TA0040/ )', - example: 'TA0040', - name: 'threat.tactic.id', - type: 'keyword', + 'A list of associated indicators objects enriching the event, and the context of that association/enrichment.', + name: 'threat.enrichments', + type: 'nested', }, - 'threat.tactic.name': { + 'threat.enrichments.indicator': { category: 'threat', - description: - 'Name of the type of tactic used by this threat. You can use the Mitre ATT&CK Matrix Tactic categorization, for example. (ex. https://attack.mitre.org/tactics/TA0040/ )', - example: 'impact', - name: 'threat.tactic.name', - type: 'keyword', + description: 'Object containing associated indicators enriching the event.', + name: 'threat.enrichments.indicator', + type: 'object', }, - 'threat.tactic.reference': { + 'threat.enrichments.indicator.as.number': { category: 'threat', description: - 'The reference url of tactic used by this threat. You can use the Mitre ATT&CK Matrix Tactic categorization, for example. (ex. https://attack.mitre.org/tactics/TA0040/ )', - example: 'https://attack.mitre.org/tactics/TA0040/', - name: 'threat.tactic.reference', - type: 'keyword', + 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', + example: 15169, + name: 'threat.enrichments.indicator.as.number', + type: 'long', }, - 'threat.technique.id': { + 'threat.enrichments.indicator.as.organization.name': { category: 'threat', - description: - 'The id of technique used by this tactic. You can use the Mitre ATT&CK Matrix Tactic categorization, for example. (ex. https://attack.mitre.org/techniques/T1499/ )', - example: 'T1499', - name: 'threat.technique.id', + description: 'Organization name.', + example: 'Google LLC', + name: 'threat.enrichments.indicator.as.organization.name', type: 'keyword', }, - 'threat.technique.name': { + 'threat.enrichments.indicator.confidence': { category: 'threat', description: - 'The name of technique used by this tactic. You can use the Mitre ATT&CK Matrix Tactic categorization, for example. (ex. https://attack.mitre.org/techniques/T1499/ )', - example: 'endpoint denial of service', - name: 'threat.technique.name', + 'Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. Expected values are: * Not Specified * None * Low * Medium * High', + example: 'Medium', + name: 'threat.enrichments.indicator.confidence', type: 'keyword', }, - 'threat.technique.reference': { + 'threat.enrichments.indicator.description': { category: 'threat', - description: - 'The reference url of technique used by this tactic. You can use the Mitre ATT&CK Matrix Tactic categorization, for example. (ex. https://attack.mitre.org/techniques/T1499/ )', - example: 'https://attack.mitre.org/techniques/T1499/', - name: 'threat.technique.reference', + description: 'Describes the type of action conducted by the threat.', + example: 'IP x.x.x.x was observed delivering the Angler EK.', + name: 'threat.enrichments.indicator.description', type: 'keyword', }, - 'tls.cipher': { - category: 'tls', - description: 'String indicating the cipher used during the current connection.', - example: 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256', - name: 'tls.cipher', + 'threat.enrichments.indicator.email.address': { + category: 'threat', + description: 'Identifies a threat indicator as an email address (irrespective of direction).', + example: 'phish@example.com', + name: 'threat.enrichments.indicator.email.address', type: 'keyword', }, - 'tls.client.certificate': { - category: 'tls', + 'threat.enrichments.indicator.file.accessed': { + category: 'threat', description: - 'PEM-encoded stand-alone certificate offered by the client. This is usually mutually-exclusive of `client.certificate_chain` since this value also exists in that list.', - example: 'MII...', - name: 'tls.client.certificate', - type: 'keyword', + 'Last time the file was accessed. Note that not all filesystems keep track of access time.', + name: 'threat.enrichments.indicator.file.accessed', + type: 'date', }, - 'tls.client.certificate_chain': { - category: 'tls', + 'threat.enrichments.indicator.file.attributes': { + category: 'threat', description: - 'Array of PEM-encoded certificates that make up the certificate chain offered by the client. This is usually mutually-exclusive of `client.certificate` since that value should be the first certificate in the chain.', - example: '["MII...","MII..."]', - name: 'tls.client.certificate_chain', + "Array of file attributes. Attributes names will vary by platform. Here's a non-exhaustive list of values that are expected in this field: archive, compressed, directory, encrypted, execute, hidden, read, readonly, system, write.", + example: '["readonly", "system"]', + name: 'threat.enrichments.indicator.file.attributes', type: 'keyword', }, - 'tls.client.hash.md5': { - category: 'tls', + 'threat.enrichments.indicator.file.code_signature.digest_algorithm': { + category: 'threat', description: - 'Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC', - name: 'tls.client.hash.md5', + 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', + example: 'sha256', + name: 'threat.enrichments.indicator.file.code_signature.digest_algorithm', type: 'keyword', }, - 'tls.client.hash.sha1': { - category: 'tls', + 'threat.enrichments.indicator.file.code_signature.exists': { + category: 'threat', + description: 'Boolean to capture if a signature is present.', + example: 'true', + name: 'threat.enrichments.indicator.file.code_signature.exists', + type: 'boolean', + }, + 'threat.enrichments.indicator.file.code_signature.signing_id': { + category: 'threat', description: - 'Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '9E393D93138888D288266C2D915214D1D1CCEB2A', - name: 'tls.client.hash.sha1', + 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', + example: 'com.apple.xpc.proxy', + name: 'threat.enrichments.indicator.file.code_signature.signing_id', type: 'keyword', }, - 'tls.client.hash.sha256': { - category: 'tls', + 'threat.enrichments.indicator.file.code_signature.status': { + category: 'threat', description: - 'Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0', - name: 'tls.client.hash.sha256', + 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', + example: 'ERROR_UNTRUSTED_ROOT', + name: 'threat.enrichments.indicator.file.code_signature.status', type: 'keyword', }, - 'tls.client.issuer': { - category: 'tls', - description: - 'Distinguished name of subject of the issuer of the x.509 certificate presented by the client.', - example: 'CN=MyDomain Root CA, OU=Infrastructure Team, DC=mydomain, DC=com', - name: 'tls.client.issuer', + 'threat.enrichments.indicator.file.code_signature.subject_name': { + category: 'threat', + description: 'Subject name of the code signer', + example: 'Microsoft Corporation', + name: 'threat.enrichments.indicator.file.code_signature.subject_name', type: 'keyword', }, - 'tls.client.ja3': { - category: 'tls', - description: 'A hash that identifies clients based on how they perform an SSL/TLS handshake.', - example: 'd4e5b18d6b55c71272893221c96ba240', - name: 'tls.client.ja3', + 'threat.enrichments.indicator.file.code_signature.team_id': { + category: 'threat', + description: + 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', + example: 'EQHXZ8M8AV', + name: 'threat.enrichments.indicator.file.code_signature.team_id', type: 'keyword', }, - 'tls.client.not_after': { - category: 'tls', - description: 'Date/Time indicating when client certificate is no longer considered valid.', - example: '2021-01-01T00:00:00.000Z', - name: 'tls.client.not_after', + 'threat.enrichments.indicator.file.code_signature.timestamp': { + category: 'threat', + description: 'Date and time when the code signature was generated and signed.', + example: '2021-01-01T12:10:30Z', + name: 'threat.enrichments.indicator.file.code_signature.timestamp', type: 'date', }, - 'tls.client.not_before': { - category: 'tls', - description: 'Date/Time indicating when client certificate is first considered valid.', - example: '1970-01-01T00:00:00.000Z', - name: 'tls.client.not_before', + 'threat.enrichments.indicator.file.code_signature.trusted': { + category: 'threat', + description: + 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', + example: 'true', + name: 'threat.enrichments.indicator.file.code_signature.trusted', + type: 'boolean', + }, + 'threat.enrichments.indicator.file.code_signature.valid': { + category: 'threat', + description: + 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', + example: 'true', + name: 'threat.enrichments.indicator.file.code_signature.valid', + type: 'boolean', + }, + 'threat.enrichments.indicator.file.created': { + category: 'threat', + description: 'File creation time. Note that not all filesystems store the creation time.', + name: 'threat.enrichments.indicator.file.created', type: 'date', }, - 'tls.client.server_name': { - category: 'tls', + 'threat.enrichments.indicator.file.ctime': { + category: 'threat', description: - 'Also called an SNI, this tells the server which hostname to which the client is attempting to connect. When this value is available, it should get copied to `destination.domain`.', - example: 'www.elastic.co', - name: 'tls.client.server_name', + 'Last time the file attributes or metadata changed. Note that changes to the file content will update `mtime`. This implies `ctime` will be adjusted at the same time, since `mtime` is an attribute of the file.', + name: 'threat.enrichments.indicator.file.ctime', + type: 'date', + }, + 'threat.enrichments.indicator.file.device': { + category: 'threat', + description: 'Device that is the source of the file.', + example: 'sda', + name: 'threat.enrichments.indicator.file.device', type: 'keyword', }, - 'tls.client.subject': { - category: 'tls', - description: 'Distinguished name of subject of the x.509 certificate presented by the client.', - example: 'CN=myclient, OU=Documentation Team, DC=mydomain, DC=com', - name: 'tls.client.subject', + 'threat.enrichments.indicator.file.directory': { + category: 'threat', + description: + 'Directory where the file is located. It should include the drive letter, when appropriate.', + example: '/home/alice', + name: 'threat.enrichments.indicator.file.directory', type: 'keyword', }, - 'tls.client.supported_ciphers': { - category: 'tls', - description: 'Array of ciphers offered by the client during the client hello.', - example: - '["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384","TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384","..."]', - name: 'tls.client.supported_ciphers', + 'threat.enrichments.indicator.file.drive_letter': { + category: 'threat', + description: + 'Drive letter where the file is located. This field is only relevant on Windows. The value should be uppercase, and not include the colon.', + example: 'C', + name: 'threat.enrichments.indicator.file.drive_letter', type: 'keyword', }, - 'tls.curve': { - category: 'tls', - description: 'String indicating the curve used for the given cipher, when applicable.', - example: 'secp256r1', - name: 'tls.curve', + 'threat.enrichments.indicator.file.elf.architecture': { + category: 'threat', + description: 'Machine architecture of the ELF file.', + example: 'x86-64', + name: 'threat.enrichments.indicator.file.elf.architecture', type: 'keyword', }, - 'tls.established': { - category: 'tls', - description: - 'Boolean flag indicating if the TLS negotiation was successful and transitioned to an encrypted tunnel.', - name: 'tls.established', - type: 'boolean', + 'threat.enrichments.indicator.file.elf.byte_order': { + category: 'threat', + description: 'Byte sequence of ELF file.', + example: 'Little Endian', + name: 'threat.enrichments.indicator.file.elf.byte_order', + type: 'keyword', }, - 'tls.next_protocol': { - category: 'tls', - description: - 'String indicating the protocol being tunneled. Per the values in the IANA registry (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), this string should be lower case.', - example: 'http/1.1', - name: 'tls.next_protocol', + 'threat.enrichments.indicator.file.elf.cpu_type': { + category: 'threat', + description: 'CPU type of the ELF file.', + example: 'Intel', + name: 'threat.enrichments.indicator.file.elf.cpu_type', type: 'keyword', }, - 'tls.resumed': { - category: 'tls', + 'threat.enrichments.indicator.file.elf.creation_date': { + category: 'threat', description: - 'Boolean flag indicating if this TLS connection was resumed from an existing TLS negotiation.', - name: 'tls.resumed', - type: 'boolean', + "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", + name: 'threat.enrichments.indicator.file.elf.creation_date', + type: 'date', }, - 'tls.server.certificate': { - category: 'tls', - description: - 'PEM-encoded stand-alone certificate offered by the server. This is usually mutually-exclusive of `server.certificate_chain` since this value also exists in that list.', - example: 'MII...', - name: 'tls.server.certificate', + 'threat.enrichments.indicator.file.elf.exports': { + category: 'threat', + description: 'List of exported element names and types.', + name: 'threat.enrichments.indicator.file.elf.exports', + type: 'flattened', + }, + 'threat.enrichments.indicator.file.elf.header.abi_version': { + category: 'threat', + description: 'Version of the ELF Application Binary Interface (ABI).', + name: 'threat.enrichments.indicator.file.elf.header.abi_version', type: 'keyword', }, - 'tls.server.certificate_chain': { - category: 'tls', - description: - 'Array of PEM-encoded certificates that make up the certificate chain offered by the server. This is usually mutually-exclusive of `server.certificate` since that value should be the first certificate in the chain.', - example: '["MII...","MII..."]', - name: 'tls.server.certificate_chain', + 'threat.enrichments.indicator.file.elf.header.class': { + category: 'threat', + description: 'Header class of the ELF file.', + name: 'threat.enrichments.indicator.file.elf.header.class', type: 'keyword', }, - 'tls.server.hash.md5': { - category: 'tls', - description: - 'Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC', - name: 'tls.server.hash.md5', + 'threat.enrichments.indicator.file.elf.header.data': { + category: 'threat', + description: 'Data table of the ELF header.', + name: 'threat.enrichments.indicator.file.elf.header.data', type: 'keyword', }, - 'tls.server.hash.sha1': { - category: 'tls', - description: - 'Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '9E393D93138888D288266C2D915214D1D1CCEB2A', - name: 'tls.server.hash.sha1', + 'threat.enrichments.indicator.file.elf.header.entrypoint': { + category: 'threat', + description: 'Header entrypoint of the ELF file.', + name: 'threat.enrichments.indicator.file.elf.header.entrypoint', + type: 'long', + format: 'string', + }, + 'threat.enrichments.indicator.file.elf.header.object_version': { + category: 'threat', + description: '"0x1" for original ELF files.', + name: 'threat.enrichments.indicator.file.elf.header.object_version', type: 'keyword', }, - 'tls.server.hash.sha256': { - category: 'tls', - description: - 'Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', - example: '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0', - name: 'tls.server.hash.sha256', + 'threat.enrichments.indicator.file.elf.header.os_abi': { + category: 'threat', + description: 'Application Binary Interface (ABI) of the Linux OS.', + name: 'threat.enrichments.indicator.file.elf.header.os_abi', type: 'keyword', }, - 'tls.server.issuer': { - category: 'tls', - description: 'Subject of the issuer of the x.509 certificate presented by the server.', - example: 'CN=MyDomain Root CA, OU=Infrastructure Team, DC=mydomain, DC=com', - name: 'tls.server.issuer', + 'threat.enrichments.indicator.file.elf.header.type': { + category: 'threat', + description: 'Header type of the ELF file.', + name: 'threat.enrichments.indicator.file.elf.header.type', type: 'keyword', }, - 'tls.server.ja3s': { - category: 'tls', - description: 'A hash that identifies servers based on how they perform an SSL/TLS handshake.', - example: '394441ab65754e2207b1e1b457b3641d', - name: 'tls.server.ja3s', + 'threat.enrichments.indicator.file.elf.header.version': { + category: 'threat', + description: 'Version of the ELF header.', + name: 'threat.enrichments.indicator.file.elf.header.version', type: 'keyword', }, - 'tls.server.not_after': { - category: 'tls', - description: 'Timestamp indicating when server certificate is no longer considered valid.', - example: '2021-01-01T00:00:00.000Z', - name: 'tls.server.not_after', - type: 'date', + 'threat.enrichments.indicator.file.elf.imports': { + category: 'threat', + description: 'List of imported element names and types.', + name: 'threat.enrichments.indicator.file.elf.imports', + type: 'flattened', }, - 'tls.server.not_before': { - category: 'tls', - description: 'Timestamp indicating when server certificate is first considered valid.', - example: '1970-01-01T00:00:00.000Z', - name: 'tls.server.not_before', - type: 'date', + 'threat.enrichments.indicator.file.elf.sections': { + category: 'threat', + description: + 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', + name: 'threat.enrichments.indicator.file.elf.sections', + type: 'nested', }, - 'tls.server.subject': { - category: 'tls', - description: 'Subject of the x.509 certificate presented by the server.', - example: 'CN=www.mydomain.com, OU=Infrastructure Team, DC=mydomain, DC=com', - name: 'tls.server.subject', + 'threat.enrichments.indicator.file.elf.sections.chi2': { + category: 'threat', + description: 'Chi-square probability distribution of the section.', + name: 'threat.enrichments.indicator.file.elf.sections.chi2', + type: 'long', + format: 'number', + }, + 'threat.enrichments.indicator.file.elf.sections.entropy': { + category: 'threat', + description: 'Shannon entropy calculation from the section.', + name: 'threat.enrichments.indicator.file.elf.sections.entropy', + type: 'long', + format: 'number', + }, + 'threat.enrichments.indicator.file.elf.sections.flags': { + category: 'threat', + description: 'ELF Section List flags.', + name: 'threat.enrichments.indicator.file.elf.sections.flags', type: 'keyword', }, - 'tls.version': { - category: 'tls', - description: 'Numeric part of the version parsed from the original string.', - example: '1.2', - name: 'tls.version', + 'threat.enrichments.indicator.file.elf.sections.name': { + category: 'threat', + description: 'ELF Section List name.', + name: 'threat.enrichments.indicator.file.elf.sections.name', type: 'keyword', }, - 'tls.version_protocol': { - category: 'tls', - description: 'Normalized lowercase protocol name parsed from original string.', - example: 'tls', - name: 'tls.version_protocol', + 'threat.enrichments.indicator.file.elf.sections.physical_offset': { + category: 'threat', + description: 'ELF Section List offset.', + name: 'threat.enrichments.indicator.file.elf.sections.physical_offset', type: 'keyword', }, - 'tracing.trace.id': { - category: 'tracing', - description: - 'Unique identifier of the trace. A trace groups multiple events like transactions that belong together. For example, a user request handled by multiple inter-connected services.', - example: '4bf92f3577b34da6a3ce929d0e0e4736', - name: 'tracing.trace.id', + 'threat.enrichments.indicator.file.elf.sections.physical_size': { + category: 'threat', + description: 'ELF Section List physical size.', + name: 'threat.enrichments.indicator.file.elf.sections.physical_size', + type: 'long', + format: 'bytes', + }, + 'threat.enrichments.indicator.file.elf.sections.type': { + category: 'threat', + description: 'ELF Section List type.', + name: 'threat.enrichments.indicator.file.elf.sections.type', type: 'keyword', }, - 'tracing.transaction.id': { - category: 'tracing', + 'threat.enrichments.indicator.file.elf.sections.virtual_address': { + category: 'threat', + description: 'ELF Section List virtual address.', + name: 'threat.enrichments.indicator.file.elf.sections.virtual_address', + type: 'long', + format: 'string', + }, + 'threat.enrichments.indicator.file.elf.sections.virtual_size': { + category: 'threat', + description: 'ELF Section List virtual size.', + name: 'threat.enrichments.indicator.file.elf.sections.virtual_size', + type: 'long', + format: 'string', + }, + 'threat.enrichments.indicator.file.elf.segments': { + category: 'threat', description: - 'Unique identifier of the transaction. A transaction is the highest level of work measured within a service, such as a request to a server.', - example: '00f067aa0ba902b7', - name: 'tracing.transaction.id', + 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', + name: 'threat.enrichments.indicator.file.elf.segments', + type: 'nested', + }, + 'threat.enrichments.indicator.file.elf.segments.sections': { + category: 'threat', + description: 'ELF object segment sections.', + name: 'threat.enrichments.indicator.file.elf.segments.sections', type: 'keyword', }, - 'url.domain': { - category: 'url', - description: - 'Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field.', - example: 'www.elastic.co', - name: 'url.domain', + 'threat.enrichments.indicator.file.elf.segments.type': { + category: 'threat', + description: 'ELF object segment type.', + name: 'threat.enrichments.indicator.file.elf.segments.type', type: 'keyword', }, - 'url.extension': { - category: 'url', + 'threat.enrichments.indicator.file.elf.shared_libraries': { + category: 'threat', + description: 'List of shared libraries used by this ELF object.', + name: 'threat.enrichments.indicator.file.elf.shared_libraries', + type: 'keyword', + }, + 'threat.enrichments.indicator.file.elf.telfhash': { + category: 'threat', + description: 'telfhash symbol hash for ELF file.', + name: 'threat.enrichments.indicator.file.elf.telfhash', + type: 'keyword', + }, + 'threat.enrichments.indicator.file.extension': { + category: 'threat', description: - 'The field contains the file extension from the original request url. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png".', + 'File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', example: 'png', - name: 'url.extension', + name: 'threat.enrichments.indicator.file.extension', type: 'keyword', }, - 'url.fragment': { - category: 'url', + 'threat.enrichments.indicator.file.fork_name': { + category: 'threat', description: - 'Portion of the url after the `#`, such as "top". The `#` is not part of the fragment.', - name: 'url.fragment', + 'A fork is additional data associated with a filesystem object. On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist. On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: `C:\\path\\to\\filename.extension:some_fork_name`, and `some_fork_name` is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name.', + example: 'Zone.Identifer', + name: 'threat.enrichments.indicator.file.fork_name', type: 'keyword', }, - 'url.full': { - category: 'url', - description: - 'If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.', - example: 'https://www.elastic.co:443/search?q=elasticsearch#top', - name: 'url.full', + 'threat.enrichments.indicator.file.gid': { + category: 'threat', + description: 'Primary group ID (GID) of the file.', + example: '1001', + name: 'threat.enrichments.indicator.file.gid', type: 'keyword', }, - 'url.original': { - category: 'url', - description: - 'Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.', - example: 'https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch', - name: 'url.original', + 'threat.enrichments.indicator.file.group': { + category: 'threat', + description: 'Primary group name of the file.', + example: 'alice', + name: 'threat.enrichments.indicator.file.group', type: 'keyword', }, - 'url.password': { - category: 'url', - description: 'Password of the request.', - name: 'url.password', + 'threat.enrichments.indicator.file.hash.md5': { + category: 'threat', + description: 'MD5 hash.', + name: 'threat.enrichments.indicator.file.hash.md5', type: 'keyword', }, - 'url.path': { - category: 'url', - description: 'Path of the request, such as "/search".', - name: 'url.path', + 'threat.enrichments.indicator.file.hash.sha1': { + category: 'threat', + description: 'SHA1 hash.', + name: 'threat.enrichments.indicator.file.hash.sha1', type: 'keyword', }, - 'url.port': { - category: 'url', - description: 'Port of the request, such as 443.', - example: 443, - name: 'url.port', - type: 'long', - format: 'string', + 'threat.enrichments.indicator.file.hash.sha256': { + category: 'threat', + description: 'SHA256 hash.', + name: 'threat.enrichments.indicator.file.hash.sha256', + type: 'keyword', }, - 'url.query': { - category: 'url', - description: - 'The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.', - name: 'url.query', + 'threat.enrichments.indicator.file.hash.sha512': { + category: 'threat', + description: 'SHA512 hash.', + name: 'threat.enrichments.indicator.file.hash.sha512', type: 'keyword', }, - 'url.registered_domain': { - category: 'url', - description: - 'The highest registered url domain, stripped of the subdomain. For example, the registered domain for "foo.google.com" is "google.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', - example: 'google.com', - name: 'url.registered_domain', + 'threat.enrichments.indicator.file.hash.ssdeep': { + category: 'threat', + description: 'SSDEEP hash.', + name: 'threat.enrichments.indicator.file.hash.ssdeep', type: 'keyword', }, - 'url.scheme': { - category: 'url', - description: 'Scheme of the request, such as "https". Note: The `:` is not part of the scheme.', - example: 'https', - name: 'url.scheme', + 'threat.enrichments.indicator.file.inode': { + category: 'threat', + description: 'Inode representing the file in the filesystem.', + example: '256383', + name: 'threat.enrichments.indicator.file.inode', type: 'keyword', }, - 'url.top_level_domain': { - category: 'url', + 'threat.enrichments.indicator.file.mime_type': { + category: 'threat', description: - 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for google.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', - example: 'co.uk', - name: 'url.top_level_domain', + 'MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used.', + name: 'threat.enrichments.indicator.file.mime_type', type: 'keyword', }, - 'url.username': { - category: 'url', - description: 'Username of the request.', - name: 'url.username', + 'threat.enrichments.indicator.file.mode': { + category: 'threat', + description: 'Mode of the file in octal representation.', + example: '0640', + name: 'threat.enrichments.indicator.file.mode', type: 'keyword', }, - 'user.domain': { - category: 'user', - description: - 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.domain', - type: 'keyword', + 'threat.enrichments.indicator.file.mtime': { + category: 'threat', + description: 'Last time the file content was modified.', + name: 'threat.enrichments.indicator.file.mtime', + type: 'date', }, - 'user.email': { - category: 'user', - description: 'User email address.', - name: 'user.email', + 'threat.enrichments.indicator.file.name': { + category: 'threat', + description: 'Name of the file including the extension, without the directory.', + example: 'example.png', + name: 'threat.enrichments.indicator.file.name', type: 'keyword', }, - 'user.full_name': { - category: 'user', - description: "User's full name, if available.", - example: 'Albert Einstein', - name: 'user.full_name', + 'threat.enrichments.indicator.file.owner': { + category: 'threat', + description: "File owner's username.", + example: 'alice', + name: 'threat.enrichments.indicator.file.owner', type: 'keyword', }, - 'user.group.domain': { - category: 'user', + 'threat.enrichments.indicator.file.path': { + category: 'threat', description: - 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', - name: 'user.group.domain', + 'Full path to the file, including the file name. It should include the drive letter, when appropriate.', + example: '/home/alice/example.png', + name: 'threat.enrichments.indicator.file.path', type: 'keyword', }, - 'user.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform.', - name: 'user.group.id', + 'threat.enrichments.indicator.file.pe.architecture': { + category: 'threat', + description: 'CPU architecture target for the file.', + example: 'x64', + name: 'threat.enrichments.indicator.file.pe.architecture', type: 'keyword', }, - 'user.group.name': { - category: 'user', - description: 'Name of the group.', - name: 'user.group.name', + 'threat.enrichments.indicator.file.pe.company': { + category: 'threat', + description: 'Internal company name of the file, provided at compile-time.', + example: 'Microsoft Corporation', + name: 'threat.enrichments.indicator.file.pe.company', type: 'keyword', }, - 'user.hash': { - category: 'user', - description: - 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', - name: 'user.hash', + 'threat.enrichments.indicator.file.pe.description': { + category: 'threat', + description: 'Internal description of the file, provided at compile-time.', + example: 'Paint', + name: 'threat.enrichments.indicator.file.pe.description', type: 'keyword', }, - 'user.id': { - category: 'user', - description: 'Unique identifiers of the user.', - name: 'user.id', + 'threat.enrichments.indicator.file.pe.file_version': { + category: 'threat', + description: 'Internal version of the file, provided at compile-time.', + example: '6.3.9600.17415', + name: 'threat.enrichments.indicator.file.pe.file_version', type: 'keyword', }, - 'user.name': { - category: 'user', - description: 'Short name or login of the user.', - example: 'albert', - name: 'user.name', + 'threat.enrichments.indicator.file.pe.imphash': { + category: 'threat', + description: + 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', + example: '0c6803c4e922103c4dca5963aad36ddf', + name: 'threat.enrichments.indicator.file.pe.imphash', type: 'keyword', }, - 'user_agent.device.name': { - category: 'user_agent', - description: 'Name of the device.', - example: 'iPhone', - name: 'user_agent.device.name', + 'threat.enrichments.indicator.file.pe.original_file_name': { + category: 'threat', + description: 'Internal name of the file, provided at compile-time.', + example: 'MSPAINT.EXE', + name: 'threat.enrichments.indicator.file.pe.original_file_name', type: 'keyword', }, - 'user_agent.name': { - category: 'user_agent', - description: 'Name of the user agent.', - example: 'Safari', - name: 'user_agent.name', + 'threat.enrichments.indicator.file.pe.product': { + category: 'threat', + description: 'Internal product name of the file, provided at compile-time.', + example: 'Microsoft® Windows® Operating System', + name: 'threat.enrichments.indicator.file.pe.product', type: 'keyword', }, - 'user_agent.original': { - category: 'user_agent', - description: 'Unparsed user_agent string.', - example: - 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1', - name: 'user_agent.original', - type: 'keyword', + 'threat.enrichments.indicator.file.size': { + category: 'threat', + description: 'File size in bytes. Only relevant when `file.type` is "file".', + example: 16384, + name: 'threat.enrichments.indicator.file.size', + type: 'long', }, - 'user_agent.os.family': { - category: 'user_agent', - description: 'OS family (such as redhat, debian, freebsd, windows).', - example: 'debian', - name: 'user_agent.os.family', + 'threat.enrichments.indicator.file.target_path': { + category: 'threat', + description: 'Target path for symlinks.', + name: 'threat.enrichments.indicator.file.target_path', type: 'keyword', }, - 'user_agent.os.full': { - category: 'user_agent', - description: 'Operating system name, including the version or code name.', - example: 'Mac OS Mojave', - name: 'user_agent.os.full', + 'threat.enrichments.indicator.file.type': { + category: 'threat', + description: 'File type (file, dir, or symlink).', + example: 'file', + name: 'threat.enrichments.indicator.file.type', type: 'keyword', }, - 'user_agent.os.kernel': { - category: 'user_agent', - description: 'Operating system kernel version as a raw string.', - example: '4.4.0-112-generic', - name: 'user_agent.os.kernel', + 'threat.enrichments.indicator.file.uid': { + category: 'threat', + description: 'The user ID (UID) or security identifier (SID) of the file owner.', + example: '1001', + name: 'threat.enrichments.indicator.file.uid', type: 'keyword', }, - 'user_agent.os.name': { - category: 'user_agent', - description: 'Operating system name, without the version.', - example: 'Mac OS X', - name: 'user_agent.os.name', + 'threat.enrichments.indicator.file.x509.alternative_names': { + category: 'threat', + description: + 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', + example: '*.elastic.co', + name: 'threat.enrichments.indicator.file.x509.alternative_names', type: 'keyword', }, - 'user_agent.os.platform': { - category: 'user_agent', - description: 'Operating system platform (such centos, ubuntu, windows).', - example: 'darwin', - name: 'user_agent.os.platform', + 'threat.enrichments.indicator.file.x509.issuer.common_name': { + category: 'threat', + description: 'List of common name (CN) of issuing certificate authority.', + example: 'Example SHA2 High Assurance Server CA', + name: 'threat.enrichments.indicator.file.x509.issuer.common_name', type: 'keyword', }, - 'user_agent.os.version': { - category: 'user_agent', - description: 'Operating system version as a raw string.', - example: '10.14.1', - name: 'user_agent.os.version', + 'threat.enrichments.indicator.file.x509.issuer.country': { + category: 'threat', + description: 'List of country (C) codes', + example: 'US', + name: 'threat.enrichments.indicator.file.x509.issuer.country', type: 'keyword', }, - 'user_agent.version': { - category: 'user_agent', - description: 'Version of the user agent.', - example: 12, - name: 'user_agent.version', + 'threat.enrichments.indicator.file.x509.issuer.distinguished_name': { + category: 'threat', + description: 'Distinguished name (DN) of issuing certificate authority.', + example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', + name: 'threat.enrichments.indicator.file.x509.issuer.distinguished_name', type: 'keyword', }, - 'vlan.id': { - category: 'vlan', - description: 'VLAN ID as reported by the observer.', - example: 10, - name: 'vlan.id', + 'threat.enrichments.indicator.file.x509.issuer.locality': { + category: 'threat', + description: 'List of locality names (L)', + example: 'Mountain View', + name: 'threat.enrichments.indicator.file.x509.issuer.locality', type: 'keyword', }, - 'vlan.name': { - category: 'vlan', - description: 'Optional VLAN name as reported by the observer.', - example: 'outside', - name: 'vlan.name', + 'threat.enrichments.indicator.file.x509.issuer.organization': { + category: 'threat', + description: 'List of organizations (O) of issuing certificate authority.', + example: 'Example Inc', + name: 'threat.enrichments.indicator.file.x509.issuer.organization', type: 'keyword', }, - 'vulnerability.category': { - category: 'vulnerability', - description: - 'The type of system or architecture that the vulnerability affects. These may be platform-specific (for example, Debian or SUSE) or general (for example, Database or Firewall). For example (https://qualysguard.qualys.com/qwebhelp/fo_portal/knowledgebase/vulnerability_categories.htm[Qualys vulnerability categories]) This field must be an array.', - example: '["Firewall"]', - name: 'vulnerability.category', + 'threat.enrichments.indicator.file.x509.issuer.organizational_unit': { + category: 'threat', + description: 'List of organizational units (OU) of issuing certificate authority.', + example: 'www.example.com', + name: 'threat.enrichments.indicator.file.x509.issuer.organizational_unit', type: 'keyword', }, - 'vulnerability.classification': { - category: 'vulnerability', - description: - 'The classification of the vulnerability scoring system. For example (https://www.first.org/cvss/)', - example: 'CVSS', - name: 'vulnerability.classification', + 'threat.enrichments.indicator.file.x509.issuer.state_or_province': { + category: 'threat', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'threat.enrichments.indicator.file.x509.issuer.state_or_province', type: 'keyword', }, - 'vulnerability.description': { - category: 'vulnerability', - description: - 'The description of the vulnerability that provides additional context of the vulnerability. For example (https://cve.mitre.org/about/faqs.html#cve_entry_descriptions_created[Common Vulnerabilities and Exposure CVE description])', - example: 'In macOS before 2.12.6, there is a vulnerability in the RPC...', - name: 'vulnerability.description', + 'threat.enrichments.indicator.file.x509.not_after': { + category: 'threat', + description: 'Time at which the certificate is no longer considered valid.', + example: '"2020-07-16T03:15:39.000Z"', + name: 'threat.enrichments.indicator.file.x509.not_after', + type: 'date', + }, + 'threat.enrichments.indicator.file.x509.not_before': { + category: 'threat', + description: 'Time at which the certificate is first considered valid.', + example: '"2019-08-16T01:40:25.000Z"', + name: 'threat.enrichments.indicator.file.x509.not_before', + type: 'date', + }, + 'threat.enrichments.indicator.file.x509.public_key_algorithm': { + category: 'threat', + description: 'Algorithm used to generate the public key.', + example: 'RSA', + name: 'threat.enrichments.indicator.file.x509.public_key_algorithm', type: 'keyword', }, - 'vulnerability.enumeration': { - category: 'vulnerability', + 'threat.enrichments.indicator.file.x509.public_key_curve': { + category: 'threat', description: - 'The type of identifier used for this vulnerability. For example (https://cve.mitre.org/about/)', - example: 'CVE', - name: 'vulnerability.enumeration', + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + example: 'nistp521', + name: 'threat.enrichments.indicator.file.x509.public_key_curve', type: 'keyword', }, - 'vulnerability.id': { - category: 'vulnerability', + 'threat.enrichments.indicator.file.x509.public_key_exponent': { + category: 'threat', + description: 'Exponent used to derive the public key. This is algorithm specific.', + example: 65537, + name: 'threat.enrichments.indicator.file.x509.public_key_exponent', + type: 'long', + }, + 'threat.enrichments.indicator.file.x509.public_key_size': { + category: 'threat', + description: 'The size of the public key space in bits.', + example: 2048, + name: 'threat.enrichments.indicator.file.x509.public_key_size', + type: 'long', + }, + 'threat.enrichments.indicator.file.x509.serial_number': { + category: 'threat', description: - 'The identification (ID) is the number portion of a vulnerability entry. It includes a unique identification number for the vulnerability. For example (https://cve.mitre.org/about/faqs.html#what_is_cve_id)[Common Vulnerabilities and Exposure CVE ID]', - example: 'CVE-2019-00001', - name: 'vulnerability.id', + 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', + example: '55FBB9C7DEBF09809D12CCAA', + name: 'threat.enrichments.indicator.file.x509.serial_number', type: 'keyword', }, - 'vulnerability.reference': { - category: 'vulnerability', + 'threat.enrichments.indicator.file.x509.signature_algorithm': { + category: 'threat', description: - 'A resource that provides additional information, context, and mitigations for the identified vulnerability.', - example: 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6111', - name: 'vulnerability.reference', + 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', + example: 'SHA256-RSA', + name: 'threat.enrichments.indicator.file.x509.signature_algorithm', type: 'keyword', }, - 'vulnerability.report_id': { - category: 'vulnerability', - description: 'The report or scan identification number.', - example: 20191018.0001, - name: 'vulnerability.report_id', + 'threat.enrichments.indicator.file.x509.subject.common_name': { + category: 'threat', + description: 'List of common names (CN) of subject.', + example: 'shared.global.example.net', + name: 'threat.enrichments.indicator.file.x509.subject.common_name', type: 'keyword', }, - 'vulnerability.scanner.vendor': { - category: 'vulnerability', - description: 'The name of the vulnerability scanner vendor.', - example: 'Tenable', - name: 'vulnerability.scanner.vendor', + 'threat.enrichments.indicator.file.x509.subject.country': { + category: 'threat', + description: 'List of country (C) code', + example: 'US', + name: 'threat.enrichments.indicator.file.x509.subject.country', type: 'keyword', }, - 'vulnerability.score.base': { - category: 'vulnerability', - description: - 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Base scores cover an assessment for exploitability metrics (attack vector, complexity, privileges, and user interaction), impact metrics (confidentiality, integrity, and availability), and scope. For example (https://www.first.org/cvss/specification-document)', - example: 5.5, - name: 'vulnerability.score.base', - type: 'float', - }, - 'vulnerability.score.environmental': { - category: 'vulnerability', - description: - 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Environmental scores cover an assessment for any modified Base metrics, confidentiality, integrity, and availability requirements. For example (https://www.first.org/cvss/specification-document)', - example: 5.5, - name: 'vulnerability.score.environmental', - type: 'float', + 'threat.enrichments.indicator.file.x509.subject.distinguished_name': { + category: 'threat', + description: 'Distinguished name (DN) of the certificate subject entity.', + example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', + name: 'threat.enrichments.indicator.file.x509.subject.distinguished_name', + type: 'keyword', }, - 'vulnerability.score.temporal': { - category: 'vulnerability', - description: - 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Temporal scores cover an assessment for code maturity, remediation level, and confidence. For example (https://www.first.org/cvss/specification-document)', - name: 'vulnerability.score.temporal', - type: 'float', + 'threat.enrichments.indicator.file.x509.subject.locality': { + category: 'threat', + description: 'List of locality names (L)', + example: 'San Francisco', + name: 'threat.enrichments.indicator.file.x509.subject.locality', + type: 'keyword', }, - 'vulnerability.score.version': { - category: 'vulnerability', - description: - 'The National Vulnerability Database (NVD) provides qualitative severity rankings of "Low", "Medium", and "High" for CVSS v2.0 base score ranges in addition to the severity ratings for CVSS v3.0 as they are defined in the CVSS v3.0 specification. CVSS is owned and managed by FIRST.Org, Inc. (FIRST), a US-based non-profit organization, whose mission is to help computer security incident response teams across the world. For example (https://nvd.nist.gov/vuln-metrics/cvss)', - example: 2, - name: 'vulnerability.score.version', + 'threat.enrichments.indicator.file.x509.subject.organization': { + category: 'threat', + description: 'List of organizations (O) of subject.', + example: 'Example, Inc.', + name: 'threat.enrichments.indicator.file.x509.subject.organization', type: 'keyword', }, - 'vulnerability.severity': { - category: 'vulnerability', - description: - 'The severity of the vulnerability can help with metrics and internal prioritization regarding remediation. For example (https://nvd.nist.gov/vuln-metrics/cvss)', - example: 'Critical', - name: 'vulnerability.severity', + 'threat.enrichments.indicator.file.x509.subject.organizational_unit': { + category: 'threat', + description: 'List of organizational units (OU) of subject.', + name: 'threat.enrichments.indicator.file.x509.subject.organizational_unit', type: 'keyword', }, - 'agent.hostname': { - category: 'agent', - description: - 'Deprecated - use agent.name or agent.id to identify an agent. Hostname of the agent. ', - name: 'agent.hostname', + 'threat.enrichments.indicator.file.x509.subject.state_or_province': { + category: 'threat', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'threat.enrichments.indicator.file.x509.subject.state_or_province', type: 'keyword', }, - 'beat.timezone': { - category: 'beat', - name: 'beat.timezone', - type: 'alias', + 'threat.enrichments.indicator.file.x509.version_number': { + category: 'threat', + description: 'Version of x509 format.', + example: 3, + name: 'threat.enrichments.indicator.file.x509.version_number', + type: 'keyword', }, - fields: { - category: 'base', - description: 'Contains user configurable fields. ', - name: 'fields', - type: 'object', + 'threat.enrichments.indicator.first_seen': { + category: 'threat', + description: + 'The date and time when intelligence source first reported sighting this indicator.', + example: '2020-11-05T17:25:47.000Z', + name: 'threat.enrichments.indicator.first_seen', + type: 'date', }, - 'beat.name': { - category: 'beat', - name: 'beat.name', - type: 'alias', + 'threat.enrichments.indicator.geo.city_name': { + category: 'threat', + description: 'City name.', + example: 'Montreal', + name: 'threat.enrichments.indicator.geo.city_name', + type: 'keyword', }, - 'beat.hostname': { - category: 'beat', - name: 'beat.hostname', - type: 'alias', + 'threat.enrichments.indicator.geo.continent_code': { + category: 'threat', + description: "Two-letter code representing continent's name.", + example: 'NA', + name: 'threat.enrichments.indicator.geo.continent_code', + type: 'keyword', }, - 'timeseries.instance': { - category: 'timeseries', - description: 'Time series instance id', - name: 'timeseries.instance', + 'threat.enrichments.indicator.geo.continent_name': { + category: 'threat', + description: 'Name of the continent.', + example: 'North America', + name: 'threat.enrichments.indicator.geo.continent_name', type: 'keyword', }, - 'cloud.project.id': { - category: 'cloud', - description: 'Name of the project in Google Cloud. ', - example: 'project-x', - name: 'cloud.project.id', + 'threat.enrichments.indicator.geo.country_iso_code': { + category: 'threat', + description: 'Country ISO code.', + example: 'CA', + name: 'threat.enrichments.indicator.geo.country_iso_code', + type: 'keyword', }, - 'cloud.image.id': { - category: 'cloud', - description: 'Image ID for the cloud instance. ', - example: 'ami-abcd1234', - name: 'cloud.image.id', + 'threat.enrichments.indicator.geo.country_name': { + category: 'threat', + description: 'Country name.', + example: 'Canada', + name: 'threat.enrichments.indicator.geo.country_name', + type: 'keyword', }, - 'meta.cloud.provider': { - category: 'meta', - name: 'meta.cloud.provider', - type: 'alias', + 'threat.enrichments.indicator.geo.location': { + category: 'threat', + description: 'Longitude and latitude.', + example: '{ "lon": -73.614830, "lat": 45.505918 }', + name: 'threat.enrichments.indicator.geo.location', + type: 'geo_point', }, - 'meta.cloud.instance_id': { - category: 'meta', - name: 'meta.cloud.instance_id', - type: 'alias', + 'threat.enrichments.indicator.geo.name': { + category: 'threat', + description: + 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', + example: 'boston-dc', + name: 'threat.enrichments.indicator.geo.name', + type: 'keyword', }, - 'meta.cloud.instance_name': { - category: 'meta', - name: 'meta.cloud.instance_name', - type: 'alias', + 'threat.enrichments.indicator.geo.postal_code': { + category: 'threat', + description: + 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', + example: 94040, + name: 'threat.enrichments.indicator.geo.postal_code', + type: 'keyword', }, - 'meta.cloud.machine_type': { - category: 'meta', - name: 'meta.cloud.machine_type', - type: 'alias', + 'threat.enrichments.indicator.geo.region_iso_code': { + category: 'threat', + description: 'Region ISO code.', + example: 'CA-QC', + name: 'threat.enrichments.indicator.geo.region_iso_code', + type: 'keyword', }, - 'meta.cloud.availability_zone': { - category: 'meta', - name: 'meta.cloud.availability_zone', - type: 'alias', + 'threat.enrichments.indicator.geo.region_name': { + category: 'threat', + description: 'Region name.', + example: 'Quebec', + name: 'threat.enrichments.indicator.geo.region_name', + type: 'keyword', }, - 'meta.cloud.project_id': { - category: 'meta', - name: 'meta.cloud.project_id', - type: 'alias', + 'threat.enrichments.indicator.geo.timezone': { + category: 'threat', + description: 'The time zone of the location, such as IANA time zone name.', + example: 'America/Argentina/Buenos_Aires', + name: 'threat.enrichments.indicator.geo.timezone', + type: 'keyword', }, - 'meta.cloud.region': { - category: 'meta', - name: 'meta.cloud.region', - type: 'alias', + 'threat.enrichments.indicator.ip': { + category: 'threat', + description: 'Identifies a threat indicator as an IP address (irrespective of direction).', + example: '1.2.3.4', + name: 'threat.enrichments.indicator.ip', + type: 'ip', }, - 'docker.container.id': { - category: 'docker', - name: 'docker.container.id', - type: 'alias', + 'threat.enrichments.indicator.last_seen': { + category: 'threat', + description: + 'The date and time when intelligence source last reported sighting this indicator.', + example: '2020-11-05T17:25:47.000Z', + name: 'threat.enrichments.indicator.last_seen', + type: 'date', }, - 'docker.container.image': { - category: 'docker', - name: 'docker.container.image', - type: 'alias', + 'threat.enrichments.indicator.marking.tlp': { + category: 'threat', + description: + 'Traffic Light Protocol sharing markings. Recommended values are: * WHITE * GREEN * AMBER * RED', + example: 'White', + name: 'threat.enrichments.indicator.marking.tlp', + type: 'keyword', }, - 'docker.container.name': { - category: 'docker', - name: 'docker.container.name', - type: 'alias', + 'threat.enrichments.indicator.modified_at': { + category: 'threat', + description: + 'The date and time when intelligence source last modified information for this indicator.', + example: '2020-11-05T17:25:47.000Z', + name: 'threat.enrichments.indicator.modified_at', + type: 'date', }, - 'docker.container.labels': { - category: 'docker', - description: 'Image labels. ', - name: 'docker.container.labels', - type: 'object', + 'threat.enrichments.indicator.port': { + category: 'threat', + description: 'Identifies a threat indicator as a port number (irrespective of direction).', + example: 443, + name: 'threat.enrichments.indicator.port', + type: 'long', }, - 'host.containerized': { - category: 'host', - description: 'If the host is a container. ', - name: 'host.containerized', - type: 'boolean', + 'threat.enrichments.indicator.provider': { + category: 'threat', + description: "The name of the indicator's provider.", + example: 'lrz_urlhaus', + name: 'threat.enrichments.indicator.provider', + type: 'keyword', }, - 'host.os.build': { - category: 'host', - description: 'OS build information. ', - example: '18D109', - name: 'host.os.build', + 'threat.enrichments.indicator.reference': { + category: 'threat', + description: 'Reference URL linking to additional information about this indicator.', + example: 'https://system.example.com/indicator/0001234', + name: 'threat.enrichments.indicator.reference', type: 'keyword', }, - 'host.os.codename': { - category: 'host', - description: 'OS codename, if any. ', - example: 'stretch', - name: 'host.os.codename', + 'threat.enrichments.indicator.registry.data.bytes': { + category: 'threat', + description: + 'Original bytes written with base64 encoding. For Windows registry operations, such as SetValueEx and RegQueryValueEx, this corresponds to the data pointed by `lp_data`. This is optional but provides better recoverability and should be populated for REG_BINARY encoded values.', + example: 'ZQBuAC0AVQBTAAAAZQBuAAAAAAA=', + name: 'threat.enrichments.indicator.registry.data.bytes', type: 'keyword', }, - 'kubernetes.pod.name': { - category: 'kubernetes', - description: 'Kubernetes pod name ', - name: 'kubernetes.pod.name', - type: 'keyword', + 'threat.enrichments.indicator.registry.data.strings': { + category: 'threat', + description: + 'Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `"1"`).', + example: '["C:\\rta\\red_ttp\\bin\\myapp.exe"]', + name: 'threat.enrichments.indicator.registry.data.strings', + type: 'wildcard', }, - 'kubernetes.pod.uid': { - category: 'kubernetes', - description: 'Kubernetes Pod UID ', - name: 'kubernetes.pod.uid', + 'threat.enrichments.indicator.registry.data.type': { + category: 'threat', + description: 'Standard registry type for encoding contents', + example: 'REG_SZ', + name: 'threat.enrichments.indicator.registry.data.type', type: 'keyword', }, - 'kubernetes.namespace': { - category: 'kubernetes', - description: 'Kubernetes namespace ', - name: 'kubernetes.namespace', + 'threat.enrichments.indicator.registry.hive': { + category: 'threat', + description: 'Abbreviated name for the hive.', + example: 'HKLM', + name: 'threat.enrichments.indicator.registry.hive', type: 'keyword', }, - 'kubernetes.node.name': { - category: 'kubernetes', - description: 'Kubernetes node name ', - name: 'kubernetes.node.name', + 'threat.enrichments.indicator.registry.key': { + category: 'threat', + description: 'Hive-relative path of keys.', + example: + 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe', + name: 'threat.enrichments.indicator.registry.key', type: 'keyword', }, - 'kubernetes.labels.*': { - category: 'kubernetes', - description: 'Kubernetes labels map ', - name: 'kubernetes.labels.*', - type: 'object', - }, - 'kubernetes.annotations.*': { - category: 'kubernetes', - description: 'Kubernetes annotations map ', - name: 'kubernetes.annotations.*', - type: 'object', - }, - 'kubernetes.replicaset.name': { - category: 'kubernetes', - description: 'Kubernetes replicaset name ', - name: 'kubernetes.replicaset.name', + 'threat.enrichments.indicator.registry.path': { + category: 'threat', + description: 'Full path, including hive, key and value', + example: + 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe\\Debugger', + name: 'threat.enrichments.indicator.registry.path', type: 'keyword', }, - 'kubernetes.deployment.name': { - category: 'kubernetes', - description: 'Kubernetes deployment name ', - name: 'kubernetes.deployment.name', + 'threat.enrichments.indicator.registry.value': { + category: 'threat', + description: 'Name of the value written.', + example: 'Debugger', + name: 'threat.enrichments.indicator.registry.value', type: 'keyword', }, - 'kubernetes.statefulset.name': { - category: 'kubernetes', - description: 'Kubernetes statefulset name ', - name: 'kubernetes.statefulset.name', - type: 'keyword', + 'threat.enrichments.indicator.scanner_stats': { + category: 'threat', + description: 'Count of AV/EDR vendors that successfully detected malicious file or URL.', + example: 4, + name: 'threat.enrichments.indicator.scanner_stats', + type: 'long', }, - 'kubernetes.container.name': { - category: 'kubernetes', - description: 'Kubernetes container name ', - name: 'kubernetes.container.name', - type: 'keyword', + 'threat.enrichments.indicator.sightings': { + category: 'threat', + description: 'Number of times this indicator was observed conducting threat activity.', + example: 20, + name: 'threat.enrichments.indicator.sightings', + type: 'long', }, - 'kubernetes.container.image': { - category: 'kubernetes', - description: 'Kubernetes container image ', - name: 'kubernetes.container.image', + 'threat.enrichments.indicator.type': { + category: 'threat', + description: + 'Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: * autonomous-system * artifact * directory * domain-name * email-addr * file * ipv4-addr * ipv6-addr * mac-addr * mutex * port * process * software * url * user-account * windows-registry-key * x509-certificate', + example: 'ipv4-addr', + name: 'threat.enrichments.indicator.type', type: 'keyword', }, - 'process.exe': { - category: 'process', - name: 'process.exe', - type: 'alias', - }, - 'jolokia.agent.version': { - category: 'jolokia', - description: 'Version number of jolokia agent. ', - name: 'jolokia.agent.version', + 'threat.enrichments.indicator.url.domain': { + category: 'threat', + description: + 'Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field.', + example: 'www.elastic.co', + name: 'threat.enrichments.indicator.url.domain', type: 'keyword', }, - 'jolokia.agent.id': { - category: 'jolokia', + 'threat.enrichments.indicator.url.extension': { + category: 'threat', description: - 'Each agent has a unique id which can be either provided during startup of the agent in form of a configuration parameter or being autodetected. If autodected, the id has several parts: The IP, the process id, hashcode of the agent and its type. ', - name: 'jolokia.agent.id', + 'The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', + example: 'png', + name: 'threat.enrichments.indicator.url.extension', type: 'keyword', }, - 'jolokia.server.product': { - category: 'jolokia', - description: 'The container product if detected. ', - name: 'jolokia.server.product', + 'threat.enrichments.indicator.url.fragment': { + category: 'threat', + description: + 'Portion of the url after the `#`, such as "top". The `#` is not part of the fragment.', + name: 'threat.enrichments.indicator.url.fragment', type: 'keyword', }, - 'jolokia.server.version': { - category: 'jolokia', - description: "The container's version (if detected). ", - name: 'jolokia.server.version', - type: 'keyword', + 'threat.enrichments.indicator.url.full': { + category: 'threat', + description: + 'If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.', + example: 'https://www.elastic.co:443/search?q=elasticsearch#top', + name: 'threat.enrichments.indicator.url.full', + type: 'wildcard', }, - 'jolokia.server.vendor': { - category: 'jolokia', - description: 'The vendor of the container the agent is running in. ', - name: 'jolokia.server.vendor', - type: 'keyword', + 'threat.enrichments.indicator.url.original': { + category: 'threat', + description: + 'Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.', + example: 'https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch', + name: 'threat.enrichments.indicator.url.original', + type: 'wildcard', }, - 'jolokia.url': { - category: 'jolokia', - description: 'The URL how this agent can be contacted. ', - name: 'jolokia.url', + 'threat.enrichments.indicator.url.password': { + category: 'threat', + description: 'Password of the request.', + name: 'threat.enrichments.indicator.url.password', type: 'keyword', }, - 'jolokia.secured': { - category: 'jolokia', - description: 'Whether the agent was configured for authentication or not. ', - name: 'jolokia.secured', - type: 'boolean', - }, - 'file.setuid': { - category: 'file', - description: 'Set if the file has the `setuid` bit set. Omitted otherwise.', - example: 'true', - name: 'file.setuid', - type: 'boolean', + 'threat.enrichments.indicator.url.path': { + category: 'threat', + description: 'Path of the request, such as "/search".', + name: 'threat.enrichments.indicator.url.path', + type: 'wildcard', }, - 'file.setgid': { - category: 'file', - description: 'Set if the file has the `setgid` bit set. Omitted otherwise.', - example: 'true', - name: 'file.setgid', - type: 'boolean', + 'threat.enrichments.indicator.url.port': { + category: 'threat', + description: 'Port of the request, such as 443.', + example: 443, + name: 'threat.enrichments.indicator.url.port', + type: 'long', + format: 'string', }, - 'file.origin': { - category: 'file', + 'threat.enrichments.indicator.url.query': { + category: 'threat', description: - 'An array of strings describing a possible external origin for this file. For example, the URL it was downloaded from. Only supported in macOS, via the kMDItemWhereFroms attribute. Omitted if origin information is not available. ', - name: 'file.origin', - type: 'keyword', - }, - 'file.selinux.user': { - category: 'file', - description: 'The owner of the object.', - name: 'file.selinux.user', + 'The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.', + name: 'threat.enrichments.indicator.url.query', type: 'keyword', }, - 'file.selinux.role': { - category: 'file', - description: "The object's SELinux role.", - name: 'file.selinux.role', + 'threat.enrichments.indicator.url.registered_domain': { + category: 'threat', + description: + 'The highest registered url domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', + example: 'example.com', + name: 'threat.enrichments.indicator.url.registered_domain', type: 'keyword', }, - 'file.selinux.domain': { - category: 'file', - description: "The object's SELinux domain or type.", - name: 'file.selinux.domain', + 'threat.enrichments.indicator.url.scheme': { + category: 'threat', + description: 'Scheme of the request, such as "https". Note: The `:` is not part of the scheme.', + example: 'https', + name: 'threat.enrichments.indicator.url.scheme', type: 'keyword', }, - 'file.selinux.level': { - category: 'file', - description: "The object's SELinux level.", - example: 's0', - name: 'file.selinux.level', + 'threat.enrichments.indicator.url.subdomain': { + category: 'threat', + description: + 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', + example: 'east', + name: 'threat.enrichments.indicator.url.subdomain', type: 'keyword', }, - 'user.audit.id': { - category: 'user', - description: 'Audit user ID.', - name: 'user.audit.id', + 'threat.enrichments.indicator.url.top_level_domain': { + category: 'threat', + description: + 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', + example: 'co.uk', + name: 'threat.enrichments.indicator.url.top_level_domain', type: 'keyword', }, - 'user.audit.name': { - category: 'user', - description: 'Audit user name.', - name: 'user.audit.name', + 'threat.enrichments.indicator.url.username': { + category: 'threat', + description: 'Username of the request.', + name: 'threat.enrichments.indicator.url.username', type: 'keyword', }, - 'user.effective.id': { - category: 'user', - description: 'Effective user ID.', - name: 'user.effective.id', + 'threat.enrichments.indicator.x509.alternative_names': { + category: 'threat', + description: + 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', + example: '*.elastic.co', + name: 'threat.enrichments.indicator.x509.alternative_names', type: 'keyword', }, - 'user.effective.name': { - category: 'user', - description: 'Effective user name.', - name: 'user.effective.name', + 'threat.enrichments.indicator.x509.issuer.common_name': { + category: 'threat', + description: 'List of common name (CN) of issuing certificate authority.', + example: 'Example SHA2 High Assurance Server CA', + name: 'threat.enrichments.indicator.x509.issuer.common_name', type: 'keyword', }, - 'user.effective.group.id': { - category: 'user', - description: 'Effective group ID.', - name: 'user.effective.group.id', + 'threat.enrichments.indicator.x509.issuer.country': { + category: 'threat', + description: 'List of country (C) codes', + example: 'US', + name: 'threat.enrichments.indicator.x509.issuer.country', type: 'keyword', }, - 'user.effective.group.name': { - category: 'user', - description: 'Effective group name.', - name: 'user.effective.group.name', + 'threat.enrichments.indicator.x509.issuer.distinguished_name': { + category: 'threat', + description: 'Distinguished name (DN) of issuing certificate authority.', + example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', + name: 'threat.enrichments.indicator.x509.issuer.distinguished_name', type: 'keyword', }, - 'user.filesystem.id': { - category: 'user', - description: 'Filesystem user ID.', - name: 'user.filesystem.id', + 'threat.enrichments.indicator.x509.issuer.locality': { + category: 'threat', + description: 'List of locality names (L)', + example: 'Mountain View', + name: 'threat.enrichments.indicator.x509.issuer.locality', type: 'keyword', }, - 'user.filesystem.name': { - category: 'user', - description: 'Filesystem user name.', - name: 'user.filesystem.name', + 'threat.enrichments.indicator.x509.issuer.organization': { + category: 'threat', + description: 'List of organizations (O) of issuing certificate authority.', + example: 'Example Inc', + name: 'threat.enrichments.indicator.x509.issuer.organization', type: 'keyword', }, - 'user.filesystem.group.id': { - category: 'user', - description: 'Filesystem group ID.', - name: 'user.filesystem.group.id', + 'threat.enrichments.indicator.x509.issuer.organizational_unit': { + category: 'threat', + description: 'List of organizational units (OU) of issuing certificate authority.', + example: 'www.example.com', + name: 'threat.enrichments.indicator.x509.issuer.organizational_unit', type: 'keyword', }, - 'user.filesystem.group.name': { - category: 'user', - description: 'Filesystem group name.', - name: 'user.filesystem.group.name', + 'threat.enrichments.indicator.x509.issuer.state_or_province': { + category: 'threat', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'threat.enrichments.indicator.x509.issuer.state_or_province', type: 'keyword', }, - 'user.saved.id': { - category: 'user', - description: 'Saved user ID.', - name: 'user.saved.id', - type: 'keyword', + 'threat.enrichments.indicator.x509.not_after': { + category: 'threat', + description: 'Time at which the certificate is no longer considered valid.', + example: '"2020-07-16T03:15:39.000Z"', + name: 'threat.enrichments.indicator.x509.not_after', + type: 'date', }, - 'user.saved.name': { - category: 'user', - description: 'Saved user name.', - name: 'user.saved.name', - type: 'keyword', + 'threat.enrichments.indicator.x509.not_before': { + category: 'threat', + description: 'Time at which the certificate is first considered valid.', + example: '"2019-08-16T01:40:25.000Z"', + name: 'threat.enrichments.indicator.x509.not_before', + type: 'date', }, - 'user.saved.group.id': { - category: 'user', - description: 'Saved group ID.', - name: 'user.saved.group.id', + 'threat.enrichments.indicator.x509.public_key_algorithm': { + category: 'threat', + description: 'Algorithm used to generate the public key.', + example: 'RSA', + name: 'threat.enrichments.indicator.x509.public_key_algorithm', type: 'keyword', }, - 'user.saved.group.name': { - category: 'user', - description: 'Saved group name.', - name: 'user.saved.group.name', + 'threat.enrichments.indicator.x509.public_key_curve': { + category: 'threat', + description: + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + example: 'nistp521', + name: 'threat.enrichments.indicator.x509.public_key_curve', type: 'keyword', }, - 'user.auid': { - category: 'user', - name: 'user.auid', - type: 'alias', - }, - 'user.uid': { - category: 'user', - name: 'user.uid', - type: 'alias', - }, - 'user.euid': { - category: 'user', - name: 'user.euid', - type: 'alias', - }, - 'user.fsuid': { - category: 'user', - name: 'user.fsuid', - type: 'alias', - }, - 'user.suid': { - category: 'user', - name: 'user.suid', - type: 'alias', - }, - 'user.gid': { - category: 'user', - name: 'user.gid', - type: 'alias', - }, - 'user.egid': { - category: 'user', - name: 'user.egid', - type: 'alias', - }, - 'user.sgid': { - category: 'user', - name: 'user.sgid', - type: 'alias', - }, - 'user.fsgid': { - category: 'user', - name: 'user.fsgid', - type: 'alias', - }, - 'user.name_map.auid': { - category: 'user', - name: 'user.name_map.auid', - type: 'alias', + 'threat.enrichments.indicator.x509.public_key_exponent': { + category: 'threat', + description: 'Exponent used to derive the public key. This is algorithm specific.', + example: 65537, + name: 'threat.enrichments.indicator.x509.public_key_exponent', + type: 'long', }, - 'user.name_map.uid': { - category: 'user', - name: 'user.name_map.uid', - type: 'alias', + 'threat.enrichments.indicator.x509.public_key_size': { + category: 'threat', + description: 'The size of the public key space in bits.', + example: 2048, + name: 'threat.enrichments.indicator.x509.public_key_size', + type: 'long', }, - 'user.name_map.euid': { - category: 'user', - name: 'user.name_map.euid', - type: 'alias', + 'threat.enrichments.indicator.x509.serial_number': { + category: 'threat', + description: + 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', + example: '55FBB9C7DEBF09809D12CCAA', + name: 'threat.enrichments.indicator.x509.serial_number', + type: 'keyword', }, - 'user.name_map.fsuid': { - category: 'user', - name: 'user.name_map.fsuid', - type: 'alias', + 'threat.enrichments.indicator.x509.signature_algorithm': { + category: 'threat', + description: + 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', + example: 'SHA256-RSA', + name: 'threat.enrichments.indicator.x509.signature_algorithm', + type: 'keyword', }, - 'user.name_map.suid': { - category: 'user', - name: 'user.name_map.suid', - type: 'alias', + 'threat.enrichments.indicator.x509.subject.common_name': { + category: 'threat', + description: 'List of common names (CN) of subject.', + example: 'shared.global.example.net', + name: 'threat.enrichments.indicator.x509.subject.common_name', + type: 'keyword', }, - 'user.name_map.gid': { - category: 'user', - name: 'user.name_map.gid', - type: 'alias', + 'threat.enrichments.indicator.x509.subject.country': { + category: 'threat', + description: 'List of country (C) code', + example: 'US', + name: 'threat.enrichments.indicator.x509.subject.country', + type: 'keyword', }, - 'user.name_map.egid': { - category: 'user', - name: 'user.name_map.egid', - type: 'alias', + 'threat.enrichments.indicator.x509.subject.distinguished_name': { + category: 'threat', + description: 'Distinguished name (DN) of the certificate subject entity.', + example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', + name: 'threat.enrichments.indicator.x509.subject.distinguished_name', + type: 'keyword', }, - 'user.name_map.sgid': { - category: 'user', - name: 'user.name_map.sgid', - type: 'alias', + 'threat.enrichments.indicator.x509.subject.locality': { + category: 'threat', + description: 'List of locality names (L)', + example: 'San Francisco', + name: 'threat.enrichments.indicator.x509.subject.locality', + type: 'keyword', }, - 'user.name_map.fsgid': { - category: 'user', - name: 'user.name_map.fsgid', - type: 'alias', + 'threat.enrichments.indicator.x509.subject.organization': { + category: 'threat', + description: 'List of organizations (O) of subject.', + example: 'Example, Inc.', + name: 'threat.enrichments.indicator.x509.subject.organization', + type: 'keyword', }, - 'user.selinux.user': { - category: 'user', - description: 'account submitted for authentication', - name: 'user.selinux.user', + 'threat.enrichments.indicator.x509.subject.organizational_unit': { + category: 'threat', + description: 'List of organizational units (OU) of subject.', + name: 'threat.enrichments.indicator.x509.subject.organizational_unit', type: 'keyword', }, - 'user.selinux.role': { - category: 'user', - description: "user's SELinux role", - name: 'user.selinux.role', + 'threat.enrichments.indicator.x509.subject.state_or_province': { + category: 'threat', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'threat.enrichments.indicator.x509.subject.state_or_province', type: 'keyword', }, - 'user.selinux.domain': { - category: 'user', - description: "The actor's SELinux domain or type.", - name: 'user.selinux.domain', + 'threat.enrichments.indicator.x509.version_number': { + category: 'threat', + description: 'Version of x509 format.', + example: 3, + name: 'threat.enrichments.indicator.x509.version_number', type: 'keyword', }, - 'user.selinux.level': { - category: 'user', - description: "The actor's SELinux level.", - example: 's0', - name: 'user.selinux.level', + 'threat.enrichments.matched.atomic': { + category: 'threat', + description: + 'Identifies the atomic indicator value that matched a local environment endpoint or network event.', + example: 'bad-domain.com', + name: 'threat.enrichments.matched.atomic', type: 'keyword', }, - 'user.selinux.category': { - category: 'user', - description: "The actor's SELinux category or compartments.", - name: 'user.selinux.category', + 'threat.enrichments.matched.field': { + category: 'threat', + description: + 'Identifies the field of the atomic indicator that matched a local environment endpoint or network event.', + example: 'file.hash.sha256', + name: 'threat.enrichments.matched.field', type: 'keyword', }, - 'process.cwd': { - category: 'process', - description: 'The current working directory.', - name: 'process.cwd', - type: 'alias', + 'threat.enrichments.matched.id': { + category: 'threat', + description: 'Identifies the _id of the indicator document enriching the event.', + example: 'ff93aee5-86a1-4a61-b0e6-0cdc313d01b5', + name: 'threat.enrichments.matched.id', + type: 'keyword', }, - 'source.path': { - category: 'source', - description: 'This is the path associated with a unix socket.', - name: 'source.path', + 'threat.enrichments.matched.index': { + category: 'threat', + description: 'Identifies the _index of the indicator document enriching the event.', + example: 'filebeat-8.0.0-2021.05.23-000011', + name: 'threat.enrichments.matched.index', type: 'keyword', }, - 'destination.path': { - category: 'destination', - description: 'This is the path associated with a unix socket.', - name: 'destination.path', + 'threat.enrichments.matched.type': { + category: 'threat', + description: + 'Identifies the type of match that caused the event to be enriched with the given indicator', + example: 'indicator_match_rule', + name: 'threat.enrichments.matched.type', type: 'keyword', }, - 'auditd.message_type': { - category: 'auditd', - description: 'The audit message type (e.g. syscall or apparmor_denied). ', - example: 'syscall', - name: 'auditd.message_type', + 'threat.framework': { + category: 'threat', + description: + 'Name of the threat framework used to further categorize and classify the tactic and technique of the reported threat. Framework classification can be provided by detecting systems, evaluated at ingest time, or retrospectively tagged to events.', + example: 'MITRE ATT&CK', + name: 'threat.framework', type: 'keyword', }, - 'auditd.sequence': { - category: 'auditd', + 'threat.group.alias': { + category: 'threat', description: - 'The sequence number of the event as assigned by the kernel. Sequence numbers are stored as a uint32 in the kernel and can rollover. ', - name: 'auditd.sequence', - type: 'long', + 'The alias(es) of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group alias(es).', + example: '[ "Magecart Group 6" ]', + name: 'threat.group.alias', + type: 'keyword', }, - 'auditd.session': { - category: 'auditd', + 'threat.group.id': { + category: 'threat', description: - 'The session ID assigned to a login. All events related to a login session will have the same value. ', - name: 'auditd.session', + 'The id of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group id.', + example: 'G0037', + name: 'threat.group.id', type: 'keyword', }, - 'auditd.result': { - category: 'auditd', - description: 'The result of the audited operation (success/fail).', - example: 'success or fail', - name: 'auditd.result', + 'threat.group.name': { + category: 'threat', + description: + 'The name of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group name.', + example: 'FIN6', + name: 'threat.group.name', type: 'keyword', }, - 'auditd.summary.actor.primary': { - category: 'auditd', + 'threat.group.reference': { + category: 'threat', description: - "The primary identity of the actor. This is the actor's original login ID. It will not change even if the user changes to another account. ", - name: 'auditd.summary.actor.primary', + 'The reference URL of the group for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® group reference URL.', + example: 'https://attack.mitre.org/groups/G0037/', + name: 'threat.group.reference', type: 'keyword', }, - 'auditd.summary.actor.secondary': { - category: 'auditd', + 'threat.indicator.as.number': { + category: 'threat', description: - 'The secondary identity of the actor. This is typically the same as the primary, except for when the user has used `su`.', - name: 'auditd.summary.actor.secondary', + 'Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet.', + example: 15169, + name: 'threat.indicator.as.number', + type: 'long', + }, + 'threat.indicator.as.organization.name': { + category: 'threat', + description: 'Organization name.', + example: 'Google LLC', + name: 'threat.indicator.as.organization.name', type: 'keyword', }, - 'auditd.summary.object.type': { - category: 'auditd', - description: 'A description of the what the "thing" is (e.g. file, socket, user-session). ', - name: 'auditd.summary.object.type', + 'threat.indicator.confidence': { + category: 'threat', + description: + 'Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. Expected values are: * Not Specified * None * Low * Medium * High', + example: 'Medium', + name: 'threat.indicator.confidence', type: 'keyword', }, - 'auditd.summary.object.primary': { - category: 'auditd', - description: '', - name: 'auditd.summary.object.primary', + 'threat.indicator.description': { + category: 'threat', + description: 'Describes the type of action conducted by the threat.', + example: 'IP x.x.x.x was observed delivering the Angler EK.', + name: 'threat.indicator.description', type: 'keyword', }, - 'auditd.summary.object.secondary': { - category: 'auditd', - description: '', - name: 'auditd.summary.object.secondary', + 'threat.indicator.email.address': { + category: 'threat', + description: 'Identifies a threat indicator as an email address (irrespective of direction).', + example: 'phish@example.com', + name: 'threat.indicator.email.address', type: 'keyword', }, - 'auditd.summary.how': { - category: 'auditd', + 'threat.indicator.file.accessed': { + category: 'threat', description: - 'This describes how the action was performed. Usually this is the exe or command that was being executed that triggered the event. ', - name: 'auditd.summary.how', - type: 'keyword', + 'Last time the file was accessed. Note that not all filesystems keep track of access time.', + name: 'threat.indicator.file.accessed', + type: 'date', }, - 'auditd.paths.inode': { - category: 'auditd', - description: 'inode number', - name: 'auditd.paths.inode', + 'threat.indicator.file.attributes': { + category: 'threat', + description: + "Array of file attributes. Attributes names will vary by platform. Here's a non-exhaustive list of values that are expected in this field: archive, compressed, directory, encrypted, execute, hidden, read, readonly, system, write.", + example: '["readonly", "system"]', + name: 'threat.indicator.file.attributes', type: 'keyword', }, - 'auditd.paths.dev': { - category: 'auditd', - description: 'device name as found in /dev', - name: 'auditd.paths.dev', + 'threat.indicator.file.code_signature.digest_algorithm': { + category: 'threat', + description: + 'The hashing algorithm used to sign the process. This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm.', + example: 'sha256', + name: 'threat.indicator.file.code_signature.digest_algorithm', type: 'keyword', }, - 'auditd.paths.obj_user': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_user', - type: 'keyword', + 'threat.indicator.file.code_signature.exists': { + category: 'threat', + description: 'Boolean to capture if a signature is present.', + example: 'true', + name: 'threat.indicator.file.code_signature.exists', + type: 'boolean', }, - 'auditd.paths.obj_role': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_role', + 'threat.indicator.file.code_signature.signing_id': { + category: 'threat', + description: + 'The identifier used to sign the process. This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only.', + example: 'com.apple.xpc.proxy', + name: 'threat.indicator.file.code_signature.signing_id', type: 'keyword', }, - 'auditd.paths.obj_domain': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_domain', + 'threat.indicator.file.code_signature.status': { + category: 'threat', + description: + 'Additional information about the certificate status. This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked.', + example: 'ERROR_UNTRUSTED_ROOT', + name: 'threat.indicator.file.code_signature.status', type: 'keyword', }, - 'auditd.paths.obj_level': { - category: 'auditd', - description: '', - name: 'auditd.paths.obj_level', + 'threat.indicator.file.code_signature.subject_name': { + category: 'threat', + description: 'Subject name of the code signer', + example: 'Microsoft Corporation', + name: 'threat.indicator.file.code_signature.subject_name', type: 'keyword', }, - 'auditd.paths.objtype': { - category: 'auditd', - description: '', - name: 'auditd.paths.objtype', + 'threat.indicator.file.code_signature.team_id': { + category: 'threat', + description: + 'The team identifier used to sign the process. This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only.', + example: 'EQHXZ8M8AV', + name: 'threat.indicator.file.code_signature.team_id', type: 'keyword', }, - 'auditd.paths.ouid': { - category: 'auditd', - description: 'file owner user ID', - name: 'auditd.paths.ouid', - type: 'keyword', + 'threat.indicator.file.code_signature.timestamp': { + category: 'threat', + description: 'Date and time when the code signature was generated and signed.', + example: '2021-01-01T12:10:30Z', + name: 'threat.indicator.file.code_signature.timestamp', + type: 'date', }, - 'auditd.paths.rdev': { - category: 'auditd', - description: 'the device identifier (special files only)', - name: 'auditd.paths.rdev', - type: 'keyword', + 'threat.indicator.file.code_signature.trusted': { + category: 'threat', + description: + 'Stores the trust status of the certificate chain. Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status.', + example: 'true', + name: 'threat.indicator.file.code_signature.trusted', + type: 'boolean', }, - 'auditd.paths.nametype': { - category: 'auditd', - description: 'kind of file operation being referenced', - name: 'auditd.paths.nametype', - type: 'keyword', + 'threat.indicator.file.code_signature.valid': { + category: 'threat', + description: + 'Boolean to capture if the digital signature is verified against the binary content. Leave unpopulated if a certificate was unchecked.', + example: 'true', + name: 'threat.indicator.file.code_signature.valid', + type: 'boolean', }, - 'auditd.paths.ogid': { - category: 'auditd', - description: 'file owner group ID', - name: 'auditd.paths.ogid', - type: 'keyword', + 'threat.indicator.file.created': { + category: 'threat', + description: 'File creation time. Note that not all filesystems store the creation time.', + name: 'threat.indicator.file.created', + type: 'date', }, - 'auditd.paths.item': { - category: 'auditd', - description: 'which item is being recorded', - name: 'auditd.paths.item', - type: 'keyword', + 'threat.indicator.file.ctime': { + category: 'threat', + description: + 'Last time the file attributes or metadata changed. Note that changes to the file content will update `mtime`. This implies `ctime` will be adjusted at the same time, since `mtime` is an attribute of the file.', + name: 'threat.indicator.file.ctime', + type: 'date', }, - 'auditd.paths.mode': { - category: 'auditd', - description: 'mode flags on a file', - name: 'auditd.paths.mode', + 'threat.indicator.file.device': { + category: 'threat', + description: 'Device that is the source of the file.', + example: 'sda', + name: 'threat.indicator.file.device', type: 'keyword', }, - 'auditd.paths.name': { - category: 'auditd', - description: 'file name in avcs', - name: 'auditd.paths.name', + 'threat.indicator.file.directory': { + category: 'threat', + description: + 'Directory where the file is located. It should include the drive letter, when appropriate.', + example: '/home/alice', + name: 'threat.indicator.file.directory', type: 'keyword', }, - 'auditd.data.action': { - category: 'auditd', - description: 'netfilter packet disposition', - name: 'auditd.data.action', + 'threat.indicator.file.drive_letter': { + category: 'threat', + description: + 'Drive letter where the file is located. This field is only relevant on Windows. The value should be uppercase, and not include the colon.', + example: 'C', + name: 'threat.indicator.file.drive_letter', type: 'keyword', }, - 'auditd.data.minor': { - category: 'auditd', - description: 'device minor number', - name: 'auditd.data.minor', + 'threat.indicator.file.elf.architecture': { + category: 'threat', + description: 'Machine architecture of the ELF file.', + example: 'x86-64', + name: 'threat.indicator.file.elf.architecture', type: 'keyword', }, - 'auditd.data.acct': { - category: 'auditd', - description: "a user's account name", - name: 'auditd.data.acct', + 'threat.indicator.file.elf.byte_order': { + category: 'threat', + description: 'Byte sequence of ELF file.', + example: 'Little Endian', + name: 'threat.indicator.file.elf.byte_order', type: 'keyword', }, - 'auditd.data.addr': { - category: 'auditd', - description: 'the remote address that the user is connecting from', - name: 'auditd.data.addr', + 'threat.indicator.file.elf.cpu_type': { + category: 'threat', + description: 'CPU type of the ELF file.', + example: 'Intel', + name: 'threat.indicator.file.elf.cpu_type', type: 'keyword', }, - 'auditd.data.cipher': { - category: 'auditd', - description: 'name of crypto cipher selected', - name: 'auditd.data.cipher', - type: 'keyword', + 'threat.indicator.file.elf.creation_date': { + category: 'threat', + description: + "Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators.", + name: 'threat.indicator.file.elf.creation_date', + type: 'date', }, - 'auditd.data.id': { - category: 'auditd', - description: 'during account changes', - name: 'auditd.data.id', - type: 'keyword', + 'threat.indicator.file.elf.exports': { + category: 'threat', + description: 'List of exported element names and types.', + name: 'threat.indicator.file.elf.exports', + type: 'flattened', }, - 'auditd.data.entries': { - category: 'auditd', - description: 'number of entries in the netfilter table', - name: 'auditd.data.entries', + 'threat.indicator.file.elf.header.abi_version': { + category: 'threat', + description: 'Version of the ELF Application Binary Interface (ABI).', + name: 'threat.indicator.file.elf.header.abi_version', type: 'keyword', }, - 'auditd.data.kind': { - category: 'auditd', - description: 'server or client in crypto operation', - name: 'auditd.data.kind', + 'threat.indicator.file.elf.header.class': { + category: 'threat', + description: 'Header class of the ELF file.', + name: 'threat.indicator.file.elf.header.class', type: 'keyword', }, - 'auditd.data.ksize': { - category: 'auditd', - description: 'key size for crypto operation', - name: 'auditd.data.ksize', + 'threat.indicator.file.elf.header.data': { + category: 'threat', + description: 'Data table of the ELF header.', + name: 'threat.indicator.file.elf.header.data', type: 'keyword', }, - 'auditd.data.spid': { - category: 'auditd', - description: 'sent process ID', - name: 'auditd.data.spid', - type: 'keyword', + 'threat.indicator.file.elf.header.entrypoint': { + category: 'threat', + description: 'Header entrypoint of the ELF file.', + name: 'threat.indicator.file.elf.header.entrypoint', + type: 'long', + format: 'string', }, - 'auditd.data.arch': { - category: 'auditd', - description: 'the elf architecture flags', - name: 'auditd.data.arch', + 'threat.indicator.file.elf.header.object_version': { + category: 'threat', + description: '"0x1" for original ELF files.', + name: 'threat.indicator.file.elf.header.object_version', type: 'keyword', }, - 'auditd.data.argc': { - category: 'auditd', - description: 'the number of arguments to an execve syscall', - name: 'auditd.data.argc', + 'threat.indicator.file.elf.header.os_abi': { + category: 'threat', + description: 'Application Binary Interface (ABI) of the Linux OS.', + name: 'threat.indicator.file.elf.header.os_abi', type: 'keyword', }, - 'auditd.data.major': { - category: 'auditd', - description: 'device major number', - name: 'auditd.data.major', + 'threat.indicator.file.elf.header.type': { + category: 'threat', + description: 'Header type of the ELF file.', + name: 'threat.indicator.file.elf.header.type', type: 'keyword', }, - 'auditd.data.unit': { - category: 'auditd', - description: 'systemd unit', - name: 'auditd.data.unit', + 'threat.indicator.file.elf.header.version': { + category: 'threat', + description: 'Version of the ELF header.', + name: 'threat.indicator.file.elf.header.version', type: 'keyword', }, - 'auditd.data.table': { - category: 'auditd', - description: 'netfilter table name', - name: 'auditd.data.table', - type: 'keyword', + 'threat.indicator.file.elf.imports': { + category: 'threat', + description: 'List of imported element names and types.', + name: 'threat.indicator.file.elf.imports', + type: 'flattened', }, - 'auditd.data.terminal': { - category: 'auditd', - description: 'terminal name the user is running programs on', - name: 'auditd.data.terminal', - type: 'keyword', + 'threat.indicator.file.elf.sections': { + category: 'threat', + description: + 'An array containing an object for each section of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`.', + name: 'threat.indicator.file.elf.sections', + type: 'nested', }, - 'auditd.data.grantors': { - category: 'auditd', - description: 'pam modules approving the action', - name: 'auditd.data.grantors', - type: 'keyword', + 'threat.indicator.file.elf.sections.chi2': { + category: 'threat', + description: 'Chi-square probability distribution of the section.', + name: 'threat.indicator.file.elf.sections.chi2', + type: 'long', + format: 'number', }, - 'auditd.data.direction': { - category: 'auditd', - description: 'direction of crypto operation', - name: 'auditd.data.direction', - type: 'keyword', + 'threat.indicator.file.elf.sections.entropy': { + category: 'threat', + description: 'Shannon entropy calculation from the section.', + name: 'threat.indicator.file.elf.sections.entropy', + type: 'long', + format: 'number', }, - 'auditd.data.op': { - category: 'auditd', - description: 'the operation being performed that is audited', - name: 'auditd.data.op', + 'threat.indicator.file.elf.sections.flags': { + category: 'threat', + description: 'ELF Section List flags.', + name: 'threat.indicator.file.elf.sections.flags', type: 'keyword', }, - 'auditd.data.tty': { - category: 'auditd', - description: 'tty udevice the user is running programs on', - name: 'auditd.data.tty', + 'threat.indicator.file.elf.sections.name': { + category: 'threat', + description: 'ELF Section List name.', + name: 'threat.indicator.file.elf.sections.name', type: 'keyword', }, - 'auditd.data.syscall': { - category: 'auditd', - description: 'syscall number in effect when the event occurred', - name: 'auditd.data.syscall', + 'threat.indicator.file.elf.sections.physical_offset': { + category: 'threat', + description: 'ELF Section List offset.', + name: 'threat.indicator.file.elf.sections.physical_offset', type: 'keyword', }, - 'auditd.data.data': { - category: 'auditd', - description: 'TTY text', - name: 'auditd.data.data', - type: 'keyword', + 'threat.indicator.file.elf.sections.physical_size': { + category: 'threat', + description: 'ELF Section List physical size.', + name: 'threat.indicator.file.elf.sections.physical_size', + type: 'long', + format: 'bytes', }, - 'auditd.data.family': { - category: 'auditd', - description: 'netfilter protocol', - name: 'auditd.data.family', + 'threat.indicator.file.elf.sections.type': { + category: 'threat', + description: 'ELF Section List type.', + name: 'threat.indicator.file.elf.sections.type', type: 'keyword', }, - 'auditd.data.mac': { - category: 'auditd', - description: 'crypto MAC algorithm selected', - name: 'auditd.data.mac', - type: 'keyword', + 'threat.indicator.file.elf.sections.virtual_address': { + category: 'threat', + description: 'ELF Section List virtual address.', + name: 'threat.indicator.file.elf.sections.virtual_address', + type: 'long', + format: 'string', }, - 'auditd.data.pfs': { - category: 'auditd', - description: 'perfect forward secrecy method', - name: 'auditd.data.pfs', - type: 'keyword', + 'threat.indicator.file.elf.sections.virtual_size': { + category: 'threat', + description: 'ELF Section List virtual size.', + name: 'threat.indicator.file.elf.sections.virtual_size', + type: 'long', + format: 'string', }, - 'auditd.data.items': { - category: 'auditd', - description: 'the number of path records in the event', - name: 'auditd.data.items', - type: 'keyword', + 'threat.indicator.file.elf.segments': { + category: 'threat', + description: + 'An array containing an object for each segment of the ELF file. The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`.', + name: 'threat.indicator.file.elf.segments', + type: 'nested', }, - 'auditd.data.a0': { - category: 'auditd', - description: '', - name: 'auditd.data.a0', + 'threat.indicator.file.elf.segments.sections': { + category: 'threat', + description: 'ELF object segment sections.', + name: 'threat.indicator.file.elf.segments.sections', type: 'keyword', }, - 'auditd.data.a1': { - category: 'auditd', - description: '', - name: 'auditd.data.a1', + 'threat.indicator.file.elf.segments.type': { + category: 'threat', + description: 'ELF object segment type.', + name: 'threat.indicator.file.elf.segments.type', type: 'keyword', }, - 'auditd.data.a2': { - category: 'auditd', - description: '', - name: 'auditd.data.a2', + 'threat.indicator.file.elf.shared_libraries': { + category: 'threat', + description: 'List of shared libraries used by this ELF object.', + name: 'threat.indicator.file.elf.shared_libraries', type: 'keyword', }, - 'auditd.data.a3': { - category: 'auditd', - description: '', - name: 'auditd.data.a3', + 'threat.indicator.file.elf.telfhash': { + category: 'threat', + description: 'telfhash symbol hash for ELF file.', + name: 'threat.indicator.file.elf.telfhash', type: 'keyword', }, - 'auditd.data.hostname': { - category: 'auditd', - description: 'the hostname that the user is connecting from', - name: 'auditd.data.hostname', + 'threat.indicator.file.extension': { + category: 'threat', + description: + 'File extension, excluding the leading dot. Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', + example: 'png', + name: 'threat.indicator.file.extension', type: 'keyword', }, - 'auditd.data.lport': { - category: 'auditd', - description: 'local network port', - name: 'auditd.data.lport', + 'threat.indicator.file.fork_name': { + category: 'threat', + description: + 'A fork is additional data associated with a filesystem object. On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist. On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: `C:\\path\\to\\filename.extension:some_fork_name`, and `some_fork_name` is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name.', + example: 'Zone.Identifer', + name: 'threat.indicator.file.fork_name', type: 'keyword', }, - 'auditd.data.rport': { - category: 'auditd', - description: 'remote port number', - name: 'auditd.data.rport', + 'threat.indicator.file.gid': { + category: 'threat', + description: 'Primary group ID (GID) of the file.', + example: '1001', + name: 'threat.indicator.file.gid', type: 'keyword', }, - 'auditd.data.exit': { - category: 'auditd', - description: 'syscall exit code', - name: 'auditd.data.exit', + 'threat.indicator.file.group': { + category: 'threat', + description: 'Primary group name of the file.', + example: 'alice', + name: 'threat.indicator.file.group', type: 'keyword', }, - 'auditd.data.fp': { - category: 'auditd', - description: 'crypto key finger print', - name: 'auditd.data.fp', + 'threat.indicator.file.hash.md5': { + category: 'threat', + description: 'MD5 hash.', + name: 'threat.indicator.file.hash.md5', type: 'keyword', }, - 'auditd.data.laddr': { - category: 'auditd', - description: 'local network address', - name: 'auditd.data.laddr', + 'threat.indicator.file.hash.sha1': { + category: 'threat', + description: 'SHA1 hash.', + name: 'threat.indicator.file.hash.sha1', type: 'keyword', }, - 'auditd.data.sport': { - category: 'auditd', - description: 'local port number', - name: 'auditd.data.sport', + 'threat.indicator.file.hash.sha256': { + category: 'threat', + description: 'SHA256 hash.', + name: 'threat.indicator.file.hash.sha256', type: 'keyword', }, - 'auditd.data.capability': { - category: 'auditd', - description: 'posix capabilities', - name: 'auditd.data.capability', + 'threat.indicator.file.hash.sha512': { + category: 'threat', + description: 'SHA512 hash.', + name: 'threat.indicator.file.hash.sha512', type: 'keyword', }, - 'auditd.data.nargs': { - category: 'auditd', - description: 'the number of arguments to a socket call', - name: 'auditd.data.nargs', + 'threat.indicator.file.hash.ssdeep': { + category: 'threat', + description: 'SSDEEP hash.', + name: 'threat.indicator.file.hash.ssdeep', type: 'keyword', }, - 'auditd.data.new-enabled': { - category: 'auditd', - description: 'new TTY audit enabled setting', - name: 'auditd.data.new-enabled', + 'threat.indicator.file.inode': { + category: 'threat', + description: 'Inode representing the file in the filesystem.', + example: '256383', + name: 'threat.indicator.file.inode', type: 'keyword', }, - 'auditd.data.audit_backlog_limit': { - category: 'auditd', - description: "audit system's backlog queue size", - name: 'auditd.data.audit_backlog_limit', + 'threat.indicator.file.mime_type': { + category: 'threat', + description: + 'MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used.', + name: 'threat.indicator.file.mime_type', type: 'keyword', }, - 'auditd.data.dir': { - category: 'auditd', - description: 'directory name', - name: 'auditd.data.dir', + 'threat.indicator.file.mode': { + category: 'threat', + description: 'Mode of the file in octal representation.', + example: '0640', + name: 'threat.indicator.file.mode', type: 'keyword', }, - 'auditd.data.cap_pe': { - category: 'auditd', - description: 'process effective capability map', - name: 'auditd.data.cap_pe', - type: 'keyword', + 'threat.indicator.file.mtime': { + category: 'threat', + description: 'Last time the file content was modified.', + name: 'threat.indicator.file.mtime', + type: 'date', }, - 'auditd.data.model': { - category: 'auditd', - description: 'security model being used for virt', - name: 'auditd.data.model', + 'threat.indicator.file.name': { + category: 'threat', + description: 'Name of the file including the extension, without the directory.', + example: 'example.png', + name: 'threat.indicator.file.name', type: 'keyword', }, - 'auditd.data.new_pp': { - category: 'auditd', - description: 'new process permitted capability map', - name: 'auditd.data.new_pp', + 'threat.indicator.file.owner': { + category: 'threat', + description: "File owner's username.", + example: 'alice', + name: 'threat.indicator.file.owner', type: 'keyword', }, - 'auditd.data.old-enabled': { - category: 'auditd', - description: 'present TTY audit enabled setting', - name: 'auditd.data.old-enabled', + 'threat.indicator.file.path': { + category: 'threat', + description: + 'Full path to the file, including the file name. It should include the drive letter, when appropriate.', + example: '/home/alice/example.png', + name: 'threat.indicator.file.path', type: 'keyword', }, - 'auditd.data.oauid': { - category: 'auditd', - description: "object's login user ID", - name: 'auditd.data.oauid', + 'threat.indicator.file.pe.architecture': { + category: 'threat', + description: 'CPU architecture target for the file.', + example: 'x64', + name: 'threat.indicator.file.pe.architecture', type: 'keyword', }, - 'auditd.data.old': { - category: 'auditd', - description: 'old value', - name: 'auditd.data.old', + 'threat.indicator.file.pe.company': { + category: 'threat', + description: 'Internal company name of the file, provided at compile-time.', + example: 'Microsoft Corporation', + name: 'threat.indicator.file.pe.company', type: 'keyword', }, - 'auditd.data.banners': { - category: 'auditd', - description: 'banners used on printed page', - name: 'auditd.data.banners', + 'threat.indicator.file.pe.description': { + category: 'threat', + description: 'Internal description of the file, provided at compile-time.', + example: 'Paint', + name: 'threat.indicator.file.pe.description', type: 'keyword', }, - 'auditd.data.feature': { - category: 'auditd', - description: 'kernel feature being changed', - name: 'auditd.data.feature', + 'threat.indicator.file.pe.file_version': { + category: 'threat', + description: 'Internal version of the file, provided at compile-time.', + example: '6.3.9600.17415', + name: 'threat.indicator.file.pe.file_version', type: 'keyword', }, - 'auditd.data.vm-ctx': { - category: 'auditd', - description: "the vm's context string", - name: 'auditd.data.vm-ctx', + 'threat.indicator.file.pe.imphash': { + category: 'threat', + description: + 'A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html.', + example: '0c6803c4e922103c4dca5963aad36ddf', + name: 'threat.indicator.file.pe.imphash', type: 'keyword', }, - 'auditd.data.opid': { - category: 'auditd', - description: "object's process ID", - name: 'auditd.data.opid', + 'threat.indicator.file.pe.original_file_name': { + category: 'threat', + description: 'Internal name of the file, provided at compile-time.', + example: 'MSPAINT.EXE', + name: 'threat.indicator.file.pe.original_file_name', type: 'keyword', }, - 'auditd.data.seperms': { - category: 'auditd', - description: 'SELinux permissions being used', - name: 'auditd.data.seperms', + 'threat.indicator.file.pe.product': { + category: 'threat', + description: 'Internal product name of the file, provided at compile-time.', + example: 'Microsoft® Windows® Operating System', + name: 'threat.indicator.file.pe.product', type: 'keyword', }, - 'auditd.data.seresult': { - category: 'auditd', - description: 'SELinux AVC decision granted/denied', - name: 'auditd.data.seresult', - type: 'keyword', + 'threat.indicator.file.size': { + category: 'threat', + description: 'File size in bytes. Only relevant when `file.type` is "file".', + example: 16384, + name: 'threat.indicator.file.size', + type: 'long', }, - 'auditd.data.new-rng': { - category: 'auditd', - description: 'device name of rng being added from a vm', - name: 'auditd.data.new-rng', + 'threat.indicator.file.target_path': { + category: 'threat', + description: 'Target path for symlinks.', + name: 'threat.indicator.file.target_path', type: 'keyword', }, - 'auditd.data.old-net': { - category: 'auditd', - description: 'present MAC address assigned to vm', - name: 'auditd.data.old-net', + 'threat.indicator.file.type': { + category: 'threat', + description: 'File type (file, dir, or symlink).', + example: 'file', + name: 'threat.indicator.file.type', type: 'keyword', }, - 'auditd.data.sigev_signo': { - category: 'auditd', - description: 'signal number', - name: 'auditd.data.sigev_signo', + 'threat.indicator.file.uid': { + category: 'threat', + description: 'The user ID (UID) or security identifier (SID) of the file owner.', + example: '1001', + name: 'threat.indicator.file.uid', type: 'keyword', }, - 'auditd.data.ino': { - category: 'auditd', - description: 'inode number', - name: 'auditd.data.ino', + 'threat.indicator.file.x509.alternative_names': { + category: 'threat', + description: + 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', + example: '*.elastic.co', + name: 'threat.indicator.file.x509.alternative_names', type: 'keyword', }, - 'auditd.data.old_enforcing': { - category: 'auditd', - description: 'old MAC enforcement status', - name: 'auditd.data.old_enforcing', + 'threat.indicator.file.x509.issuer.common_name': { + category: 'threat', + description: 'List of common name (CN) of issuing certificate authority.', + example: 'Example SHA2 High Assurance Server CA', + name: 'threat.indicator.file.x509.issuer.common_name', type: 'keyword', }, - 'auditd.data.old-vcpu': { - category: 'auditd', - description: 'present number of CPU cores', - name: 'auditd.data.old-vcpu', + 'threat.indicator.file.x509.issuer.country': { + category: 'threat', + description: 'List of country (C) codes', + example: 'US', + name: 'threat.indicator.file.x509.issuer.country', type: 'keyword', }, - 'auditd.data.range': { - category: 'auditd', - description: "user's SE Linux range", - name: 'auditd.data.range', + 'threat.indicator.file.x509.issuer.distinguished_name': { + category: 'threat', + description: 'Distinguished name (DN) of issuing certificate authority.', + example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', + name: 'threat.indicator.file.x509.issuer.distinguished_name', type: 'keyword', }, - 'auditd.data.res': { - category: 'auditd', - description: 'result of the audited operation(success/fail)', - name: 'auditd.data.res', + 'threat.indicator.file.x509.issuer.locality': { + category: 'threat', + description: 'List of locality names (L)', + example: 'Mountain View', + name: 'threat.indicator.file.x509.issuer.locality', type: 'keyword', }, - 'auditd.data.added': { - category: 'auditd', - description: 'number of new files detected', - name: 'auditd.data.added', + 'threat.indicator.file.x509.issuer.organization': { + category: 'threat', + description: 'List of organizations (O) of issuing certificate authority.', + example: 'Example Inc', + name: 'threat.indicator.file.x509.issuer.organization', type: 'keyword', }, - 'auditd.data.fam': { - category: 'auditd', - description: 'socket address family', - name: 'auditd.data.fam', + 'threat.indicator.file.x509.issuer.organizational_unit': { + category: 'threat', + description: 'List of organizational units (OU) of issuing certificate authority.', + example: 'www.example.com', + name: 'threat.indicator.file.x509.issuer.organizational_unit', type: 'keyword', }, - 'auditd.data.nlnk-pid': { - category: 'auditd', - description: 'pid of netlink packet sender', - name: 'auditd.data.nlnk-pid', + 'threat.indicator.file.x509.issuer.state_or_province': { + category: 'threat', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'threat.indicator.file.x509.issuer.state_or_province', type: 'keyword', }, - 'auditd.data.subj': { - category: 'auditd', - description: "lspp subject's context string", - name: 'auditd.data.subj', - type: 'keyword', + 'threat.indicator.file.x509.not_after': { + category: 'threat', + description: 'Time at which the certificate is no longer considered valid.', + example: '"2020-07-16T03:15:39.000Z"', + name: 'threat.indicator.file.x509.not_after', + type: 'date', }, - 'auditd.data.a[0-3]': { - category: 'auditd', - description: 'the arguments to a syscall', - name: 'auditd.data.a[0-3]', + 'threat.indicator.file.x509.not_before': { + category: 'threat', + description: 'Time at which the certificate is first considered valid.', + example: '"2019-08-16T01:40:25.000Z"', + name: 'threat.indicator.file.x509.not_before', + type: 'date', + }, + 'threat.indicator.file.x509.public_key_algorithm': { + category: 'threat', + description: 'Algorithm used to generate the public key.', + example: 'RSA', + name: 'threat.indicator.file.x509.public_key_algorithm', type: 'keyword', }, - 'auditd.data.cgroup': { - category: 'auditd', - description: 'path to cgroup in sysfs', - name: 'auditd.data.cgroup', + 'threat.indicator.file.x509.public_key_curve': { + category: 'threat', + description: + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + example: 'nistp521', + name: 'threat.indicator.file.x509.public_key_curve', type: 'keyword', }, - 'auditd.data.kernel': { - category: 'auditd', - description: "kernel's version number", - name: 'auditd.data.kernel', + 'threat.indicator.file.x509.public_key_exponent': { + category: 'threat', + description: 'Exponent used to derive the public key. This is algorithm specific.', + example: 65537, + name: 'threat.indicator.file.x509.public_key_exponent', + type: 'long', + }, + 'threat.indicator.file.x509.public_key_size': { + category: 'threat', + description: 'The size of the public key space in bits.', + example: 2048, + name: 'threat.indicator.file.x509.public_key_size', + type: 'long', + }, + 'threat.indicator.file.x509.serial_number': { + category: 'threat', + description: + 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', + example: '55FBB9C7DEBF09809D12CCAA', + name: 'threat.indicator.file.x509.serial_number', type: 'keyword', }, - 'auditd.data.ocomm': { - category: 'auditd', - description: "object's command line name", - name: 'auditd.data.ocomm', + 'threat.indicator.file.x509.signature_algorithm': { + category: 'threat', + description: + 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', + example: 'SHA256-RSA', + name: 'threat.indicator.file.x509.signature_algorithm', type: 'keyword', }, - 'auditd.data.new-net': { - category: 'auditd', - description: 'MAC address being assigned to vm', - name: 'auditd.data.new-net', + 'threat.indicator.file.x509.subject.common_name': { + category: 'threat', + description: 'List of common names (CN) of subject.', + example: 'shared.global.example.net', + name: 'threat.indicator.file.x509.subject.common_name', type: 'keyword', }, - 'auditd.data.permissive': { - category: 'auditd', - description: 'SELinux is in permissive mode', - name: 'auditd.data.permissive', + 'threat.indicator.file.x509.subject.country': { + category: 'threat', + description: 'List of country (C) code', + example: 'US', + name: 'threat.indicator.file.x509.subject.country', type: 'keyword', }, - 'auditd.data.class': { - category: 'auditd', - description: 'resource class assigned to vm', - name: 'auditd.data.class', + 'threat.indicator.file.x509.subject.distinguished_name': { + category: 'threat', + description: 'Distinguished name (DN) of the certificate subject entity.', + example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', + name: 'threat.indicator.file.x509.subject.distinguished_name', type: 'keyword', }, - 'auditd.data.compat': { - category: 'auditd', - description: 'is_compat_task result', - name: 'auditd.data.compat', + 'threat.indicator.file.x509.subject.locality': { + category: 'threat', + description: 'List of locality names (L)', + example: 'San Francisco', + name: 'threat.indicator.file.x509.subject.locality', type: 'keyword', }, - 'auditd.data.fi': { - category: 'auditd', - description: 'file assigned inherited capability map', - name: 'auditd.data.fi', + 'threat.indicator.file.x509.subject.organization': { + category: 'threat', + description: 'List of organizations (O) of subject.', + example: 'Example, Inc.', + name: 'threat.indicator.file.x509.subject.organization', type: 'keyword', }, - 'auditd.data.changed': { - category: 'auditd', - description: 'number of changed files', - name: 'auditd.data.changed', + 'threat.indicator.file.x509.subject.organizational_unit': { + category: 'threat', + description: 'List of organizational units (OU) of subject.', + name: 'threat.indicator.file.x509.subject.organizational_unit', type: 'keyword', }, - 'auditd.data.msg': { - category: 'auditd', - description: 'the payload of the audit record', - name: 'auditd.data.msg', + 'threat.indicator.file.x509.subject.state_or_province': { + category: 'threat', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'threat.indicator.file.x509.subject.state_or_province', type: 'keyword', }, - 'auditd.data.dport': { - category: 'auditd', - description: 'remote port number', - name: 'auditd.data.dport', + 'threat.indicator.file.x509.version_number': { + category: 'threat', + description: 'Version of x509 format.', + example: 3, + name: 'threat.indicator.file.x509.version_number', type: 'keyword', }, - 'auditd.data.new-seuser': { - category: 'auditd', - description: 'new SELinux user', - name: 'auditd.data.new-seuser', + 'threat.indicator.first_seen': { + category: 'threat', + description: + 'The date and time when intelligence source first reported sighting this indicator.', + example: '2020-11-05T17:25:47.000Z', + name: 'threat.indicator.first_seen', + type: 'date', + }, + 'threat.indicator.geo.city_name': { + category: 'threat', + description: 'City name.', + example: 'Montreal', + name: 'threat.indicator.geo.city_name', type: 'keyword', }, - 'auditd.data.invalid_context': { - category: 'auditd', - description: 'SELinux context', - name: 'auditd.data.invalid_context', + 'threat.indicator.geo.continent_code': { + category: 'threat', + description: "Two-letter code representing continent's name.", + example: 'NA', + name: 'threat.indicator.geo.continent_code', type: 'keyword', }, - 'auditd.data.dmac': { - category: 'auditd', - description: 'remote MAC address', - name: 'auditd.data.dmac', + 'threat.indicator.geo.continent_name': { + category: 'threat', + description: 'Name of the continent.', + example: 'North America', + name: 'threat.indicator.geo.continent_name', type: 'keyword', }, - 'auditd.data.ipx-net': { - category: 'auditd', - description: 'IPX network number', - name: 'auditd.data.ipx-net', + 'threat.indicator.geo.country_iso_code': { + category: 'threat', + description: 'Country ISO code.', + example: 'CA', + name: 'threat.indicator.geo.country_iso_code', type: 'keyword', }, - 'auditd.data.iuid': { - category: 'auditd', - description: "ipc object's user ID", - name: 'auditd.data.iuid', + 'threat.indicator.geo.country_name': { + category: 'threat', + description: 'Country name.', + example: 'Canada', + name: 'threat.indicator.geo.country_name', type: 'keyword', }, - 'auditd.data.macproto': { - category: 'auditd', - description: 'ethernet packet type ID field', - name: 'auditd.data.macproto', + 'threat.indicator.geo.location': { + category: 'threat', + description: 'Longitude and latitude.', + example: '{ "lon": -73.614830, "lat": 45.505918 }', + name: 'threat.indicator.geo.location', + type: 'geo_point', + }, + 'threat.indicator.geo.name': { + category: 'threat', + description: + 'User-defined description of a location, at the level of granularity they care about. Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. Not typically used in automated geolocation.', + example: 'boston-dc', + name: 'threat.indicator.geo.name', type: 'keyword', }, - 'auditd.data.obj': { - category: 'auditd', - description: 'lspp object context string', - name: 'auditd.data.obj', + 'threat.indicator.geo.postal_code': { + category: 'threat', + description: + 'Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.', + example: 94040, + name: 'threat.indicator.geo.postal_code', type: 'keyword', }, - 'auditd.data.ipid': { - category: 'auditd', - description: 'IP datagram fragment identifier', - name: 'auditd.data.ipid', + 'threat.indicator.geo.region_iso_code': { + category: 'threat', + description: 'Region ISO code.', + example: 'CA-QC', + name: 'threat.indicator.geo.region_iso_code', type: 'keyword', }, - 'auditd.data.new-fs': { - category: 'auditd', - description: 'file system being added to vm', - name: 'auditd.data.new-fs', + 'threat.indicator.geo.region_name': { + category: 'threat', + description: 'Region name.', + example: 'Quebec', + name: 'threat.indicator.geo.region_name', type: 'keyword', }, - 'auditd.data.vm-pid': { - category: 'auditd', - description: "vm's process ID", - name: 'auditd.data.vm-pid', + 'threat.indicator.geo.timezone': { + category: 'threat', + description: 'The time zone of the location, such as IANA time zone name.', + example: 'America/Argentina/Buenos_Aires', + name: 'threat.indicator.geo.timezone', type: 'keyword', }, - 'auditd.data.cap_pi': { - category: 'auditd', - description: 'process inherited capability map', - name: 'auditd.data.cap_pi', + 'threat.indicator.ip': { + category: 'threat', + description: 'Identifies a threat indicator as an IP address (irrespective of direction).', + example: '1.2.3.4', + name: 'threat.indicator.ip', + type: 'ip', + }, + 'threat.indicator.last_seen': { + category: 'threat', + description: + 'The date and time when intelligence source last reported sighting this indicator.', + example: '2020-11-05T17:25:47.000Z', + name: 'threat.indicator.last_seen', + type: 'date', + }, + 'threat.indicator.marking.tlp': { + category: 'threat', + description: + 'Traffic Light Protocol sharing markings. Recommended values are: * WHITE * GREEN * AMBER * RED', + example: 'WHITE', + name: 'threat.indicator.marking.tlp', type: 'keyword', }, - 'auditd.data.old-auid': { - category: 'auditd', - description: 'previous auid value', - name: 'auditd.data.old-auid', + 'threat.indicator.modified_at': { + category: 'threat', + description: + 'The date and time when intelligence source last modified information for this indicator.', + example: '2020-11-05T17:25:47.000Z', + name: 'threat.indicator.modified_at', + type: 'date', + }, + 'threat.indicator.port': { + category: 'threat', + description: 'Identifies a threat indicator as a port number (irrespective of direction).', + example: 443, + name: 'threat.indicator.port', + type: 'long', + }, + 'threat.indicator.provider': { + category: 'threat', + description: "The name of the indicator's provider.", + example: 'lrz_urlhaus', + name: 'threat.indicator.provider', type: 'keyword', }, - 'auditd.data.oses': { - category: 'auditd', - description: "object's session ID", - name: 'auditd.data.oses', + 'threat.indicator.reference': { + category: 'threat', + description: 'Reference URL linking to additional information about this indicator.', + example: 'https://system.example.com/indicator/0001234', + name: 'threat.indicator.reference', type: 'keyword', }, - 'auditd.data.fd': { - category: 'auditd', - description: 'file descriptor number', - name: 'auditd.data.fd', + 'threat.indicator.registry.data.bytes': { + category: 'threat', + description: + 'Original bytes written with base64 encoding. For Windows registry operations, such as SetValueEx and RegQueryValueEx, this corresponds to the data pointed by `lp_data`. This is optional but provides better recoverability and should be populated for REG_BINARY encoded values.', + example: 'ZQBuAC0AVQBTAAAAZQBuAAAAAAA=', + name: 'threat.indicator.registry.data.bytes', type: 'keyword', }, - 'auditd.data.igid': { - category: 'auditd', - description: "ipc object's group ID", - name: 'auditd.data.igid', + 'threat.indicator.registry.data.strings': { + category: 'threat', + description: + 'Content when writing string types. Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `"1"`).', + example: '["C:\\rta\\red_ttp\\bin\\myapp.exe"]', + name: 'threat.indicator.registry.data.strings', + type: 'wildcard', + }, + 'threat.indicator.registry.data.type': { + category: 'threat', + description: 'Standard registry type for encoding contents', + example: 'REG_SZ', + name: 'threat.indicator.registry.data.type', type: 'keyword', }, - 'auditd.data.new-disk': { - category: 'auditd', - description: 'disk being added to vm', - name: 'auditd.data.new-disk', + 'threat.indicator.registry.hive': { + category: 'threat', + description: 'Abbreviated name for the hive.', + example: 'HKLM', + name: 'threat.indicator.registry.hive', type: 'keyword', }, - 'auditd.data.parent': { - category: 'auditd', - description: 'the inode number of the parent file', - name: 'auditd.data.parent', + 'threat.indicator.registry.key': { + category: 'threat', + description: 'Hive-relative path of keys.', + example: + 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe', + name: 'threat.indicator.registry.key', type: 'keyword', }, - 'auditd.data.len': { - category: 'auditd', - description: 'length', - name: 'auditd.data.len', + 'threat.indicator.registry.path': { + category: 'threat', + description: 'Full path, including hive, key and value', + example: + 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\winword.exe\\Debugger', + name: 'threat.indicator.registry.path', type: 'keyword', }, - 'auditd.data.oflag': { - category: 'auditd', - description: 'open syscall flags', - name: 'auditd.data.oflag', + 'threat.indicator.registry.value': { + category: 'threat', + description: 'Name of the value written.', + example: 'Debugger', + name: 'threat.indicator.registry.value', type: 'keyword', }, - 'auditd.data.uuid': { - category: 'auditd', - description: 'a UUID', - name: 'auditd.data.uuid', + 'threat.indicator.scanner_stats': { + category: 'threat', + description: 'Count of AV/EDR vendors that successfully detected malicious file or URL.', + example: 4, + name: 'threat.indicator.scanner_stats', + type: 'long', + }, + 'threat.indicator.sightings': { + category: 'threat', + description: 'Number of times this indicator was observed conducting threat activity.', + example: 20, + name: 'threat.indicator.sightings', + type: 'long', + }, + 'threat.indicator.type': { + category: 'threat', + description: + 'Type of indicator as represented by Cyber Observable in STIX 2.0. Recommended values: * autonomous-system * artifact * directory * domain-name * email-addr * file * ipv4-addr * ipv6-addr * mac-addr * mutex * port * process * software * url * user-account * windows-registry-key * x509-certificate', + example: 'ipv4-addr', + name: 'threat.indicator.type', type: 'keyword', }, - 'auditd.data.code': { - category: 'auditd', - description: 'seccomp action code', - name: 'auditd.data.code', + 'threat.indicator.url.domain': { + category: 'threat', + description: + 'Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field.', + example: 'www.elastic.co', + name: 'threat.indicator.url.domain', type: 'keyword', }, - 'auditd.data.nlnk-grp': { - category: 'auditd', - description: 'netlink group number', - name: 'auditd.data.nlnk-grp', + 'threat.indicator.url.extension': { + category: 'threat', + description: + 'The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', + example: 'png', + name: 'threat.indicator.url.extension', type: 'keyword', }, - 'auditd.data.cap_fp': { - category: 'auditd', - description: 'file permitted capability map', - name: 'auditd.data.cap_fp', + 'threat.indicator.url.fragment': { + category: 'threat', + description: + 'Portion of the url after the `#`, such as "top". The `#` is not part of the fragment.', + name: 'threat.indicator.url.fragment', type: 'keyword', }, - 'auditd.data.new-mem': { - category: 'auditd', - description: 'new amount of memory in KB', - name: 'auditd.data.new-mem', + 'threat.indicator.url.full': { + category: 'threat', + description: + 'If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.', + example: 'https://www.elastic.co:443/search?q=elasticsearch#top', + name: 'threat.indicator.url.full', + type: 'wildcard', + }, + 'threat.indicator.url.original': { + category: 'threat', + description: + 'Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.', + example: 'https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch', + name: 'threat.indicator.url.original', + type: 'wildcard', + }, + 'threat.indicator.url.password': { + category: 'threat', + description: 'Password of the request.', + name: 'threat.indicator.url.password', type: 'keyword', }, - 'auditd.data.seperm': { - category: 'auditd', - description: 'SELinux permission being decided on', - name: 'auditd.data.seperm', + 'threat.indicator.url.path': { + category: 'threat', + description: 'Path of the request, such as "/search".', + name: 'threat.indicator.url.path', + type: 'wildcard', + }, + 'threat.indicator.url.port': { + category: 'threat', + description: 'Port of the request, such as 443.', + example: 443, + name: 'threat.indicator.url.port', + type: 'long', + format: 'string', + }, + 'threat.indicator.url.query': { + category: 'threat', + description: + 'The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.', + name: 'threat.indicator.url.query', type: 'keyword', }, - 'auditd.data.enforcing': { - category: 'auditd', - description: 'new MAC enforcement status', - name: 'auditd.data.enforcing', + 'threat.indicator.url.registered_domain': { + category: 'threat', + description: + 'The highest registered url domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', + example: 'example.com', + name: 'threat.indicator.url.registered_domain', type: 'keyword', }, - 'auditd.data.new-chardev': { - category: 'auditd', - description: 'new character device being assigned to vm', - name: 'auditd.data.new-chardev', + 'threat.indicator.url.scheme': { + category: 'threat', + description: 'Scheme of the request, such as "https". Note: The `:` is not part of the scheme.', + example: 'https', + name: 'threat.indicator.url.scheme', type: 'keyword', }, - 'auditd.data.old-rng': { - category: 'auditd', - description: 'device name of rng being removed from a vm', - name: 'auditd.data.old-rng', + 'threat.indicator.url.subdomain': { + category: 'threat', + description: + 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', + example: 'east', + name: 'threat.indicator.url.subdomain', type: 'keyword', }, - 'auditd.data.outif': { - category: 'auditd', - description: 'out interface number', - name: 'auditd.data.outif', + 'threat.indicator.url.top_level_domain': { + category: 'threat', + description: + 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', + example: 'co.uk', + name: 'threat.indicator.url.top_level_domain', type: 'keyword', }, - 'auditd.data.cmd': { - category: 'auditd', - description: 'command being executed', - name: 'auditd.data.cmd', + 'threat.indicator.url.username': { + category: 'threat', + description: 'Username of the request.', + name: 'threat.indicator.url.username', type: 'keyword', }, - 'auditd.data.hook': { - category: 'auditd', - description: 'netfilter hook that packet came from', - name: 'auditd.data.hook', + 'threat.indicator.x509.alternative_names': { + category: 'threat', + description: + 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', + example: '*.elastic.co', + name: 'threat.indicator.x509.alternative_names', type: 'keyword', }, - 'auditd.data.new-level': { - category: 'auditd', - description: 'new run level', - name: 'auditd.data.new-level', + 'threat.indicator.x509.issuer.common_name': { + category: 'threat', + description: 'List of common name (CN) of issuing certificate authority.', + example: 'Example SHA2 High Assurance Server CA', + name: 'threat.indicator.x509.issuer.common_name', type: 'keyword', }, - 'auditd.data.sauid': { - category: 'auditd', - description: 'sent login user ID', - name: 'auditd.data.sauid', + 'threat.indicator.x509.issuer.country': { + category: 'threat', + description: 'List of country (C) codes', + example: 'US', + name: 'threat.indicator.x509.issuer.country', type: 'keyword', }, - 'auditd.data.sig': { - category: 'auditd', - description: 'signal number', - name: 'auditd.data.sig', + 'threat.indicator.x509.issuer.distinguished_name': { + category: 'threat', + description: 'Distinguished name (DN) of issuing certificate authority.', + example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', + name: 'threat.indicator.x509.issuer.distinguished_name', type: 'keyword', }, - 'auditd.data.audit_backlog_wait_time': { - category: 'auditd', - description: "audit system's backlog wait time", - name: 'auditd.data.audit_backlog_wait_time', + 'threat.indicator.x509.issuer.locality': { + category: 'threat', + description: 'List of locality names (L)', + example: 'Mountain View', + name: 'threat.indicator.x509.issuer.locality', type: 'keyword', }, - 'auditd.data.printer': { - category: 'auditd', - description: 'printer name', - name: 'auditd.data.printer', + 'threat.indicator.x509.issuer.organization': { + category: 'threat', + description: 'List of organizations (O) of issuing certificate authority.', + example: 'Example Inc', + name: 'threat.indicator.x509.issuer.organization', type: 'keyword', }, - 'auditd.data.old-mem': { - category: 'auditd', - description: 'present amount of memory in KB', - name: 'auditd.data.old-mem', + 'threat.indicator.x509.issuer.organizational_unit': { + category: 'threat', + description: 'List of organizational units (OU) of issuing certificate authority.', + example: 'www.example.com', + name: 'threat.indicator.x509.issuer.organizational_unit', type: 'keyword', }, - 'auditd.data.perm': { - category: 'auditd', - description: 'the file permission being used', - name: 'auditd.data.perm', + 'threat.indicator.x509.issuer.state_or_province': { + category: 'threat', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'threat.indicator.x509.issuer.state_or_province', type: 'keyword', }, - 'auditd.data.old_pi': { - category: 'auditd', - description: 'old process inherited capability map', - name: 'auditd.data.old_pi', + 'threat.indicator.x509.not_after': { + category: 'threat', + description: 'Time at which the certificate is no longer considered valid.', + example: '"2020-07-16T03:15:39.000Z"', + name: 'threat.indicator.x509.not_after', + type: 'date', + }, + 'threat.indicator.x509.not_before': { + category: 'threat', + description: 'Time at which the certificate is first considered valid.', + example: '"2019-08-16T01:40:25.000Z"', + name: 'threat.indicator.x509.not_before', + type: 'date', + }, + 'threat.indicator.x509.public_key_algorithm': { + category: 'threat', + description: 'Algorithm used to generate the public key.', + example: 'RSA', + name: 'threat.indicator.x509.public_key_algorithm', type: 'keyword', }, - 'auditd.data.state': { - category: 'auditd', - description: 'audit daemon configuration resulting state', - name: 'auditd.data.state', + 'threat.indicator.x509.public_key_curve': { + category: 'threat', + description: + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + example: 'nistp521', + name: 'threat.indicator.x509.public_key_curve', type: 'keyword', }, - 'auditd.data.format': { - category: 'auditd', - description: "audit log's format", - name: 'auditd.data.format', + 'threat.indicator.x509.public_key_exponent': { + category: 'threat', + description: 'Exponent used to derive the public key. This is algorithm specific.', + example: 65537, + name: 'threat.indicator.x509.public_key_exponent', + type: 'long', + }, + 'threat.indicator.x509.public_key_size': { + category: 'threat', + description: 'The size of the public key space in bits.', + example: 2048, + name: 'threat.indicator.x509.public_key_size', + type: 'long', + }, + 'threat.indicator.x509.serial_number': { + category: 'threat', + description: + 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', + example: '55FBB9C7DEBF09809D12CCAA', + name: 'threat.indicator.x509.serial_number', type: 'keyword', }, - 'auditd.data.new_gid': { - category: 'auditd', - description: 'new group ID being assigned', - name: 'auditd.data.new_gid', + 'threat.indicator.x509.signature_algorithm': { + category: 'threat', + description: + 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', + example: 'SHA256-RSA', + name: 'threat.indicator.x509.signature_algorithm', type: 'keyword', }, - 'auditd.data.tcontext': { - category: 'auditd', - description: "the target's or object's context string", - name: 'auditd.data.tcontext', + 'threat.indicator.x509.subject.common_name': { + category: 'threat', + description: 'List of common names (CN) of subject.', + example: 'shared.global.example.net', + name: 'threat.indicator.x509.subject.common_name', type: 'keyword', }, - 'auditd.data.maj': { - category: 'auditd', - description: 'device major number', - name: 'auditd.data.maj', + 'threat.indicator.x509.subject.country': { + category: 'threat', + description: 'List of country (C) code', + example: 'US', + name: 'threat.indicator.x509.subject.country', type: 'keyword', }, - 'auditd.data.watch': { - category: 'auditd', - description: 'file name in a watch record', - name: 'auditd.data.watch', + 'threat.indicator.x509.subject.distinguished_name': { + category: 'threat', + description: 'Distinguished name (DN) of the certificate subject entity.', + example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', + name: 'threat.indicator.x509.subject.distinguished_name', type: 'keyword', }, - 'auditd.data.device': { - category: 'auditd', - description: 'device name', - name: 'auditd.data.device', + 'threat.indicator.x509.subject.locality': { + category: 'threat', + description: 'List of locality names (L)', + example: 'San Francisco', + name: 'threat.indicator.x509.subject.locality', type: 'keyword', }, - 'auditd.data.grp': { - category: 'auditd', - description: 'group name', - name: 'auditd.data.grp', + 'threat.indicator.x509.subject.organization': { + category: 'threat', + description: 'List of organizations (O) of subject.', + example: 'Example, Inc.', + name: 'threat.indicator.x509.subject.organization', type: 'keyword', }, - 'auditd.data.bool': { - category: 'auditd', - description: 'name of SELinux boolean', - name: 'auditd.data.bool', + 'threat.indicator.x509.subject.organizational_unit': { + category: 'threat', + description: 'List of organizational units (OU) of subject.', + name: 'threat.indicator.x509.subject.organizational_unit', type: 'keyword', }, - 'auditd.data.icmp_type': { - category: 'auditd', - description: 'type of icmp message', - name: 'auditd.data.icmp_type', + 'threat.indicator.x509.subject.state_or_province': { + category: 'threat', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'threat.indicator.x509.subject.state_or_province', type: 'keyword', }, - 'auditd.data.new_lock': { - category: 'auditd', - description: 'new value of feature lock', - name: 'auditd.data.new_lock', + 'threat.indicator.x509.version_number': { + category: 'threat', + description: 'Version of x509 format.', + example: 3, + name: 'threat.indicator.x509.version_number', type: 'keyword', }, - 'auditd.data.old_prom': { - category: 'auditd', - description: 'network promiscuity flag', - name: 'auditd.data.old_prom', + 'threat.software.alias': { + category: 'threat', + description: + 'The alias(es) of the software for a set of related intrusion activity that are tracked by a common name in the security community. While not required, you can use a MITRE ATT&CK® associated software description.', + example: '[ "X-Agent" ]', + name: 'threat.software.alias', type: 'keyword', }, - 'auditd.data.acl': { - category: 'auditd', - description: 'access mode of resource assigned to vm', - name: 'auditd.data.acl', + 'threat.software.id': { + category: 'threat', + description: + 'The id of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. While not required, you can use a MITRE ATT&CK® software id.', + example: 'S0552', + name: 'threat.software.id', type: 'keyword', }, - 'auditd.data.ip': { - category: 'auditd', - description: 'network address of a printer', - name: 'auditd.data.ip', + 'threat.software.name': { + category: 'threat', + description: + 'The name of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. While not required, you can use a MITRE ATT&CK® software name.', + example: 'AdFind', + name: 'threat.software.name', type: 'keyword', }, - 'auditd.data.new_pi': { - category: 'auditd', - description: 'new process inherited capability map', - name: 'auditd.data.new_pi', + 'threat.software.platforms': { + category: 'threat', + description: + 'The platforms of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. Recommended Values: * AWS * Azure * Azure AD * GCP * Linux * macOS * Network * Office 365 * SaaS * Windows While not required, you can use a MITRE ATT&CK® software platforms.', + example: '[ "Windows" ]', + name: 'threat.software.platforms', type: 'keyword', }, - 'auditd.data.default-context': { - category: 'auditd', - description: 'default MAC context', - name: 'auditd.data.default-context', + 'threat.software.reference': { + category: 'threat', + description: + 'The reference URL of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. While not required, you can use a MITRE ATT&CK® software reference URL.', + example: 'https://attack.mitre.org/software/S0552/', + name: 'threat.software.reference', type: 'keyword', }, - 'auditd.data.inode_gid': { - category: 'auditd', - description: "group ID of the inode's owner", - name: 'auditd.data.inode_gid', + 'threat.software.type': { + category: 'threat', + description: + 'The type of software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. Recommended values * Malware * Tool While not required, you can use a MITRE ATT&CK® software type.', + example: 'Tool', + name: 'threat.software.type', type: 'keyword', }, - 'auditd.data.new-log_passwd': { - category: 'auditd', - description: 'new value for TTY password logging', - name: 'auditd.data.new-log_passwd', + 'threat.tactic.id': { + category: 'threat', + description: + 'The id of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ )', + example: 'TA0002', + name: 'threat.tactic.id', type: 'keyword', }, - 'auditd.data.new_pe': { - category: 'auditd', - description: 'new process effective capability map', - name: 'auditd.data.new_pe', + 'threat.tactic.name': { + category: 'threat', + description: + 'Name of the type of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/)', + example: 'Execution', + name: 'threat.tactic.name', type: 'keyword', }, - 'auditd.data.selected-context': { - category: 'auditd', - description: 'new MAC context assigned to session', - name: 'auditd.data.selected-context', + 'threat.tactic.reference': { + category: 'threat', + description: + 'The reference url of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ )', + example: 'https://attack.mitre.org/tactics/TA0002/', + name: 'threat.tactic.reference', type: 'keyword', }, - 'auditd.data.cap_fver': { - category: 'auditd', - description: 'file system capabilities version number', - name: 'auditd.data.cap_fver', + 'threat.technique.id': { + category: 'threat', + description: + 'The id of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)', + example: 'T1059', + name: 'threat.technique.id', type: 'keyword', }, - 'auditd.data.file': { - category: 'auditd', - description: 'file name', - name: 'auditd.data.file', + 'threat.technique.name': { + category: 'threat', + description: + 'The name of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)', + example: 'Command and Scripting Interpreter', + name: 'threat.technique.name', type: 'keyword', }, - 'auditd.data.net': { - category: 'auditd', - description: 'network MAC address', - name: 'auditd.data.net', + 'threat.technique.reference': { + category: 'threat', + description: + 'The reference url of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/)', + example: 'https://attack.mitre.org/techniques/T1059/', + name: 'threat.technique.reference', type: 'keyword', }, - 'auditd.data.virt': { - category: 'auditd', - description: 'kind of virtualization being referenced', - name: 'auditd.data.virt', + 'threat.technique.subtechnique.id': { + category: 'threat', + description: + 'The full id of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)', + example: 'T1059.001', + name: 'threat.technique.subtechnique.id', type: 'keyword', }, - 'auditd.data.cap_pp': { - category: 'auditd', - description: 'process permitted capability map', - name: 'auditd.data.cap_pp', + 'threat.technique.subtechnique.name': { + category: 'threat', + description: + 'The name of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)', + example: 'PowerShell', + name: 'threat.technique.subtechnique.name', type: 'keyword', }, - 'auditd.data.old-range': { - category: 'auditd', - description: 'present SELinux range', - name: 'auditd.data.old-range', + 'threat.technique.subtechnique.reference': { + category: 'threat', + description: + 'The reference url of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/)', + example: 'https://attack.mitre.org/techniques/T1059/001/', + name: 'threat.technique.subtechnique.reference', type: 'keyword', }, - 'auditd.data.resrc': { - category: 'auditd', - description: 'resource being assigned', - name: 'auditd.data.resrc', + 'tls.cipher': { + category: 'tls', + description: 'String indicating the cipher used during the current connection.', + example: 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256', + name: 'tls.cipher', type: 'keyword', }, - 'auditd.data.new-range': { - category: 'auditd', - description: 'new SELinux range', - name: 'auditd.data.new-range', + 'tls.client.certificate': { + category: 'tls', + description: + 'PEM-encoded stand-alone certificate offered by the client. This is usually mutually-exclusive of `client.certificate_chain` since this value also exists in that list.', + example: 'MII...', + name: 'tls.client.certificate', type: 'keyword', }, - 'auditd.data.obj_gid': { - category: 'auditd', - description: 'group ID of object', - name: 'auditd.data.obj_gid', + 'tls.client.certificate_chain': { + category: 'tls', + description: + 'Array of PEM-encoded certificates that make up the certificate chain offered by the client. This is usually mutually-exclusive of `client.certificate` since that value should be the first certificate in the chain.', + example: '["MII...", "MII..."]', + name: 'tls.client.certificate_chain', type: 'keyword', }, - 'auditd.data.proto': { - category: 'auditd', - description: 'network protocol', - name: 'auditd.data.proto', + 'tls.client.hash.md5': { + category: 'tls', + description: + 'Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', + example: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC', + name: 'tls.client.hash.md5', type: 'keyword', }, - 'auditd.data.old-disk': { - category: 'auditd', - description: 'disk being removed from vm', - name: 'auditd.data.old-disk', + 'tls.client.hash.sha1': { + category: 'tls', + description: + 'Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', + example: '9E393D93138888D288266C2D915214D1D1CCEB2A', + name: 'tls.client.hash.sha1', type: 'keyword', }, - 'auditd.data.audit_failure': { - category: 'auditd', - description: "audit system's failure mode", - name: 'auditd.data.audit_failure', + 'tls.client.hash.sha256': { + category: 'tls', + description: + 'Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.', + example: '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0', + name: 'tls.client.hash.sha256', type: 'keyword', }, - 'auditd.data.inif': { - category: 'auditd', - description: 'in interface number', - name: 'auditd.data.inif', + 'tls.client.issuer': { + category: 'tls', + description: + 'Distinguished name of subject of the issuer of the x.509 certificate presented by the client.', + example: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com', + name: 'tls.client.issuer', type: 'keyword', }, - 'auditd.data.vm': { - category: 'auditd', - description: 'virtual machine name', - name: 'auditd.data.vm', + 'tls.client.ja3': { + category: 'tls', + description: 'A hash that identifies clients based on how they perform an SSL/TLS handshake.', + example: 'd4e5b18d6b55c71272893221c96ba240', + name: 'tls.client.ja3', type: 'keyword', }, - 'auditd.data.flags': { - category: 'auditd', - description: 'mmap syscall flags', - name: 'auditd.data.flags', - type: 'keyword', + 'tls.client.not_after': { + category: 'tls', + description: 'Date/Time indicating when client certificate is no longer considered valid.', + example: '2021-01-01T00:00:00.000Z', + name: 'tls.client.not_after', + type: 'date', }, - 'auditd.data.nlnk-fam': { - category: 'auditd', - description: 'netlink protocol number', - name: 'auditd.data.nlnk-fam', - type: 'keyword', + 'tls.client.not_before': { + category: 'tls', + description: 'Date/Time indicating when client certificate is first considered valid.', + example: '1970-01-01T00:00:00.000Z', + name: 'tls.client.not_before', + type: 'date', }, - 'auditd.data.old-fs': { - category: 'auditd', - description: 'file system being removed from vm', - name: 'auditd.data.old-fs', + 'tls.client.server_name': { + category: 'tls', + description: + 'Also called an SNI, this tells the server which hostname to which the client is attempting to connect to. When this value is available, it should get copied to `destination.domain`.', + example: 'www.elastic.co', + name: 'tls.client.server_name', type: 'keyword', }, - 'auditd.data.old-ses': { - category: 'auditd', - description: 'previous ses value', - name: 'auditd.data.old-ses', + 'tls.client.subject': { + category: 'tls', + description: 'Distinguished name of subject of the x.509 certificate presented by the client.', + example: 'CN=myclient, OU=Documentation Team, DC=example, DC=com', + name: 'tls.client.subject', type: 'keyword', }, - 'auditd.data.seqno': { - category: 'auditd', - description: 'sequence number', - name: 'auditd.data.seqno', + 'tls.client.supported_ciphers': { + category: 'tls', + description: 'Array of ciphers offered by the client during the client hello.', + example: + '["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "..."]', + name: 'tls.client.supported_ciphers', type: 'keyword', }, - 'auditd.data.fver': { - category: 'auditd', - description: 'file system capabilities version number', - name: 'auditd.data.fver', + 'tls.client.x509.alternative_names': { + category: 'tls', + description: + 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', + example: '*.elastic.co', + name: 'tls.client.x509.alternative_names', type: 'keyword', }, - 'auditd.data.qbytes': { - category: 'auditd', - description: 'ipc objects quantity of bytes', - name: 'auditd.data.qbytes', + 'tls.client.x509.issuer.common_name': { + category: 'tls', + description: 'List of common name (CN) of issuing certificate authority.', + example: 'Example SHA2 High Assurance Server CA', + name: 'tls.client.x509.issuer.common_name', type: 'keyword', }, - 'auditd.data.seuser': { - category: 'auditd', - description: "user's SE Linux user acct", - name: 'auditd.data.seuser', + 'tls.client.x509.issuer.country': { + category: 'tls', + description: 'List of country (C) codes', + example: 'US', + name: 'tls.client.x509.issuer.country', type: 'keyword', }, - 'auditd.data.cap_fe': { - category: 'auditd', - description: 'file assigned effective capability map', - name: 'auditd.data.cap_fe', + 'tls.client.x509.issuer.distinguished_name': { + category: 'tls', + description: 'Distinguished name (DN) of issuing certificate authority.', + example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', + name: 'tls.client.x509.issuer.distinguished_name', type: 'keyword', }, - 'auditd.data.new-vcpu': { - category: 'auditd', - description: 'new number of CPU cores', - name: 'auditd.data.new-vcpu', + 'tls.client.x509.issuer.locality': { + category: 'tls', + description: 'List of locality names (L)', + example: 'Mountain View', + name: 'tls.client.x509.issuer.locality', type: 'keyword', }, - 'auditd.data.old-level': { - category: 'auditd', - description: 'old run level', - name: 'auditd.data.old-level', + 'tls.client.x509.issuer.organization': { + category: 'tls', + description: 'List of organizations (O) of issuing certificate authority.', + example: 'Example Inc', + name: 'tls.client.x509.issuer.organization', type: 'keyword', }, - 'auditd.data.old_pp': { - category: 'auditd', - description: 'old process permitted capability map', - name: 'auditd.data.old_pp', + 'tls.client.x509.issuer.organizational_unit': { + category: 'tls', + description: 'List of organizational units (OU) of issuing certificate authority.', + example: 'www.example.com', + name: 'tls.client.x509.issuer.organizational_unit', type: 'keyword', }, - 'auditd.data.daddr': { - category: 'auditd', - description: 'remote IP address', - name: 'auditd.data.daddr', + 'tls.client.x509.issuer.state_or_province': { + category: 'tls', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'tls.client.x509.issuer.state_or_province', type: 'keyword', }, - 'auditd.data.old-role': { - category: 'auditd', - description: 'present SELinux role', - name: 'auditd.data.old-role', - type: 'keyword', + 'tls.client.x509.not_after': { + category: 'tls', + description: 'Time at which the certificate is no longer considered valid.', + example: '"2020-07-16T03:15:39.000Z"', + name: 'tls.client.x509.not_after', + type: 'date', }, - 'auditd.data.ioctlcmd': { - category: 'auditd', - description: 'The request argument to the ioctl syscall', - name: 'auditd.data.ioctlcmd', - type: 'keyword', + 'tls.client.x509.not_before': { + category: 'tls', + description: 'Time at which the certificate is first considered valid.', + example: '"2019-08-16T01:40:25.000Z"', + name: 'tls.client.x509.not_before', + type: 'date', }, - 'auditd.data.smac': { - category: 'auditd', - description: 'local MAC address', - name: 'auditd.data.smac', + 'tls.client.x509.public_key_algorithm': { + category: 'tls', + description: 'Algorithm used to generate the public key.', + example: 'RSA', + name: 'tls.client.x509.public_key_algorithm', type: 'keyword', }, - 'auditd.data.apparmor': { - category: 'auditd', - description: 'apparmor event information', - name: 'auditd.data.apparmor', + 'tls.client.x509.public_key_curve': { + category: 'tls', + description: + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + example: 'nistp521', + name: 'tls.client.x509.public_key_curve', type: 'keyword', }, - 'auditd.data.fe': { - category: 'auditd', - description: 'file assigned effective capability map', - name: 'auditd.data.fe', - type: 'keyword', + 'tls.client.x509.public_key_exponent': { + category: 'tls', + description: 'Exponent used to derive the public key. This is algorithm specific.', + example: 65537, + name: 'tls.client.x509.public_key_exponent', + type: 'long', }, - 'auditd.data.perm_mask': { - category: 'auditd', - description: 'file permission mask that triggered a watch event', - name: 'auditd.data.perm_mask', - type: 'keyword', + 'tls.client.x509.public_key_size': { + category: 'tls', + description: 'The size of the public key space in bits.', + example: 2048, + name: 'tls.client.x509.public_key_size', + type: 'long', }, - 'auditd.data.ses': { - category: 'auditd', - description: 'login session ID', - name: 'auditd.data.ses', + 'tls.client.x509.serial_number': { + category: 'tls', + description: + 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', + example: '55FBB9C7DEBF09809D12CCAA', + name: 'tls.client.x509.serial_number', type: 'keyword', }, - 'auditd.data.cap_fi': { - category: 'auditd', - description: 'file inherited capability map', - name: 'auditd.data.cap_fi', + 'tls.client.x509.signature_algorithm': { + category: 'tls', + description: + 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', + example: 'SHA256-RSA', + name: 'tls.client.x509.signature_algorithm', type: 'keyword', }, - 'auditd.data.obj_uid': { - category: 'auditd', - description: 'user ID of object', - name: 'auditd.data.obj_uid', + 'tls.client.x509.subject.common_name': { + category: 'tls', + description: 'List of common names (CN) of subject.', + example: 'shared.global.example.net', + name: 'tls.client.x509.subject.common_name', type: 'keyword', }, - 'auditd.data.reason': { - category: 'auditd', - description: 'text string denoting a reason for the action', - name: 'auditd.data.reason', + 'tls.client.x509.subject.country': { + category: 'tls', + description: 'List of country (C) code', + example: 'US', + name: 'tls.client.x509.subject.country', type: 'keyword', }, - 'auditd.data.list': { - category: 'auditd', - description: "the audit system's filter list number", - name: 'auditd.data.list', + 'tls.client.x509.subject.distinguished_name': { + category: 'tls', + description: 'Distinguished name (DN) of the certificate subject entity.', + example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', + name: 'tls.client.x509.subject.distinguished_name', type: 'keyword', }, - 'auditd.data.old_lock': { - category: 'auditd', - description: 'present value of feature lock', - name: 'auditd.data.old_lock', + 'tls.client.x509.subject.locality': { + category: 'tls', + description: 'List of locality names (L)', + example: 'San Francisco', + name: 'tls.client.x509.subject.locality', type: 'keyword', }, - 'auditd.data.bus': { - category: 'auditd', - description: 'name of subsystem bus a vm resource belongs to', - name: 'auditd.data.bus', + 'tls.client.x509.subject.organization': { + category: 'tls', + description: 'List of organizations (O) of subject.', + example: 'Example, Inc.', + name: 'tls.client.x509.subject.organization', type: 'keyword', }, - 'auditd.data.old_pe': { - category: 'auditd', - description: 'old process effective capability map', - name: 'auditd.data.old_pe', + 'tls.client.x509.subject.organizational_unit': { + category: 'tls', + description: 'List of organizational units (OU) of subject.', + name: 'tls.client.x509.subject.organizational_unit', type: 'keyword', }, - 'auditd.data.new-role': { - category: 'auditd', - description: 'new SELinux role', - name: 'auditd.data.new-role', + 'tls.client.x509.subject.state_or_province': { + category: 'tls', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'tls.client.x509.subject.state_or_province', type: 'keyword', }, - 'auditd.data.prom': { - category: 'auditd', - description: 'network promiscuity flag', - name: 'auditd.data.prom', + 'tls.client.x509.version_number': { + category: 'tls', + description: 'Version of x509 format.', + example: 3, + name: 'tls.client.x509.version_number', type: 'keyword', }, - 'auditd.data.uri': { - category: 'auditd', - description: 'URI pointing to a printer', - name: 'auditd.data.uri', + 'tls.curve': { + category: 'tls', + description: 'String indicating the curve used for the given cipher, when applicable.', + example: 'secp256r1', + name: 'tls.curve', type: 'keyword', }, - 'auditd.data.audit_enabled': { - category: 'auditd', - description: "audit systems's enable/disable status", - name: 'auditd.data.audit_enabled', - type: 'keyword', + 'tls.established': { + category: 'tls', + description: + 'Boolean flag indicating if the TLS negotiation was successful and transitioned to an encrypted tunnel.', + name: 'tls.established', + type: 'boolean', }, - 'auditd.data.old-log_passwd': { - category: 'auditd', - description: 'present value for TTY password logging', - name: 'auditd.data.old-log_passwd', + 'tls.next_protocol': { + category: 'tls', + description: + 'String indicating the protocol being tunneled. Per the values in the IANA registry (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), this string should be lower case.', + example: 'http/1.1', + name: 'tls.next_protocol', type: 'keyword', }, - 'auditd.data.old-seuser': { - category: 'auditd', - description: 'present SELinux user', - name: 'auditd.data.old-seuser', - type: 'keyword', + 'tls.resumed': { + category: 'tls', + description: + 'Boolean flag indicating if this TLS connection was resumed from an existing TLS negotiation.', + name: 'tls.resumed', + type: 'boolean', }, - 'auditd.data.per': { - category: 'auditd', - description: 'linux personality', - name: 'auditd.data.per', + 'tls.server.certificate': { + category: 'tls', + description: + 'PEM-encoded stand-alone certificate offered by the server. This is usually mutually-exclusive of `server.certificate_chain` since this value also exists in that list.', + example: 'MII...', + name: 'tls.server.certificate', type: 'keyword', }, - 'auditd.data.scontext': { - category: 'auditd', - description: "the subject's context string", - name: 'auditd.data.scontext', + 'tls.server.certificate_chain': { + category: 'tls', + description: + 'Array of PEM-encoded certificates that make up the certificate chain offered by the server. This is usually mutually-exclusive of `server.certificate` since that value should be the first certificate in the chain.', + example: '["MII...", "MII..."]', + name: 'tls.server.certificate_chain', type: 'keyword', }, - 'auditd.data.tclass': { - category: 'auditd', - description: "target's object classification", - name: 'auditd.data.tclass', + 'tls.server.hash.md5': { + category: 'tls', + description: + 'Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', + example: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC', + name: 'tls.server.hash.md5', type: 'keyword', }, - 'auditd.data.ver': { - category: 'auditd', - description: "audit daemon's version number", - name: 'auditd.data.ver', + 'tls.server.hash.sha1': { + category: 'tls', + description: + 'Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', + example: '9E393D93138888D288266C2D915214D1D1CCEB2A', + name: 'tls.server.hash.sha1', type: 'keyword', }, - 'auditd.data.new': { - category: 'auditd', - description: 'value being set in feature', - name: 'auditd.data.new', + 'tls.server.hash.sha256': { + category: 'tls', + description: + 'Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.', + example: '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0', + name: 'tls.server.hash.sha256', type: 'keyword', }, - 'auditd.data.val': { - category: 'auditd', - description: 'generic value associated with the operation', - name: 'auditd.data.val', + 'tls.server.issuer': { + category: 'tls', + description: 'Subject of the issuer of the x.509 certificate presented by the server.', + example: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com', + name: 'tls.server.issuer', type: 'keyword', }, - 'auditd.data.img-ctx': { - category: 'auditd', - description: "the vm's disk image context string", - name: 'auditd.data.img-ctx', + 'tls.server.ja3s': { + category: 'tls', + description: 'A hash that identifies servers based on how they perform an SSL/TLS handshake.', + example: '394441ab65754e2207b1e1b457b3641d', + name: 'tls.server.ja3s', type: 'keyword', }, - 'auditd.data.old-chardev': { - category: 'auditd', - description: 'present character device assigned to vm', - name: 'auditd.data.old-chardev', + 'tls.server.not_after': { + category: 'tls', + description: 'Timestamp indicating when server certificate is no longer considered valid.', + example: '2021-01-01T00:00:00.000Z', + name: 'tls.server.not_after', + type: 'date', + }, + 'tls.server.not_before': { + category: 'tls', + description: 'Timestamp indicating when server certificate is first considered valid.', + example: '1970-01-01T00:00:00.000Z', + name: 'tls.server.not_before', + type: 'date', + }, + 'tls.server.subject': { + category: 'tls', + description: 'Subject of the x.509 certificate presented by the server.', + example: 'CN=www.example.com, OU=Infrastructure Team, DC=example, DC=com', + name: 'tls.server.subject', type: 'keyword', }, - 'auditd.data.old_val': { - category: 'auditd', - description: 'current value of SELinux boolean', - name: 'auditd.data.old_val', + 'tls.server.x509.alternative_names': { + category: 'tls', + description: + 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', + example: '*.elastic.co', + name: 'tls.server.x509.alternative_names', type: 'keyword', }, - 'auditd.data.success': { - category: 'auditd', - description: 'whether the syscall was successful or not', - name: 'auditd.data.success', + 'tls.server.x509.issuer.common_name': { + category: 'tls', + description: 'List of common name (CN) of issuing certificate authority.', + example: 'Example SHA2 High Assurance Server CA', + name: 'tls.server.x509.issuer.common_name', type: 'keyword', }, - 'auditd.data.inode_uid': { - category: 'auditd', - description: "user ID of the inode's owner", - name: 'auditd.data.inode_uid', + 'tls.server.x509.issuer.country': { + category: 'tls', + description: 'List of country (C) codes', + example: 'US', + name: 'tls.server.x509.issuer.country', type: 'keyword', }, - 'auditd.data.removed': { - category: 'auditd', - description: 'number of deleted files', - name: 'auditd.data.removed', + 'tls.server.x509.issuer.distinguished_name': { + category: 'tls', + description: 'Distinguished name (DN) of issuing certificate authority.', + example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', + name: 'tls.server.x509.issuer.distinguished_name', type: 'keyword', }, - 'auditd.data.socket.port': { - category: 'auditd', - description: 'The port number.', - name: 'auditd.data.socket.port', + 'tls.server.x509.issuer.locality': { + category: 'tls', + description: 'List of locality names (L)', + example: 'Mountain View', + name: 'tls.server.x509.issuer.locality', type: 'keyword', }, - 'auditd.data.socket.saddr': { - category: 'auditd', - description: 'The raw socket address structure.', - name: 'auditd.data.socket.saddr', + 'tls.server.x509.issuer.organization': { + category: 'tls', + description: 'List of organizations (O) of issuing certificate authority.', + example: 'Example Inc', + name: 'tls.server.x509.issuer.organization', type: 'keyword', }, - 'auditd.data.socket.addr': { - category: 'auditd', - description: 'The remote address.', - name: 'auditd.data.socket.addr', + 'tls.server.x509.issuer.organizational_unit': { + category: 'tls', + description: 'List of organizational units (OU) of issuing certificate authority.', + example: 'www.example.com', + name: 'tls.server.x509.issuer.organizational_unit', type: 'keyword', }, - 'auditd.data.socket.family': { - category: 'auditd', - description: 'The socket family (unix, ipv4, ipv6, netlink).', - example: 'unix', - name: 'auditd.data.socket.family', + 'tls.server.x509.issuer.state_or_province': { + category: 'tls', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'tls.server.x509.issuer.state_or_province', type: 'keyword', }, - 'auditd.data.socket.path': { - category: 'auditd', - description: 'This is the path associated with a unix socket.', - name: 'auditd.data.socket.path', + 'tls.server.x509.not_after': { + category: 'tls', + description: 'Time at which the certificate is no longer considered valid.', + example: '"2020-07-16T03:15:39.000Z"', + name: 'tls.server.x509.not_after', + type: 'date', + }, + 'tls.server.x509.not_before': { + category: 'tls', + description: 'Time at which the certificate is first considered valid.', + example: '"2019-08-16T01:40:25.000Z"', + name: 'tls.server.x509.not_before', + type: 'date', + }, + 'tls.server.x509.public_key_algorithm': { + category: 'tls', + description: 'Algorithm used to generate the public key.', + example: 'RSA', + name: 'tls.server.x509.public_key_algorithm', type: 'keyword', }, - 'auditd.messages': { - category: 'auditd', + 'tls.server.x509.public_key_curve': { + category: 'tls', description: - 'An ordered list of the raw messages received from the kernel that were used to construct this document. This field is present if an error occurred processing the data or if `include_raw_message` is set in the config. ', - name: 'auditd.messages', - type: 'alias', + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + example: 'nistp521', + name: 'tls.server.x509.public_key_curve', + type: 'keyword', }, - 'auditd.warnings': { - category: 'auditd', - description: - 'The warnings generated by the Beat during the construction of the event. These are disabled by default and are used for development and debug purposes only. ', - name: 'auditd.warnings', - type: 'alias', + 'tls.server.x509.public_key_exponent': { + category: 'tls', + description: 'Exponent used to derive the public key. This is algorithm specific.', + example: 65537, + name: 'tls.server.x509.public_key_exponent', + type: 'long', }, - 'geoip.continent_name': { - category: 'geoip', - description: 'The name of the continent. ', - name: 'geoip.continent_name', - type: 'keyword', + 'tls.server.x509.public_key_size': { + category: 'tls', + description: 'The size of the public key space in bits.', + example: 2048, + name: 'tls.server.x509.public_key_size', + type: 'long', }, - 'geoip.city_name': { - category: 'geoip', - description: 'The name of the city. ', - name: 'geoip.city_name', + 'tls.server.x509.serial_number': { + category: 'tls', + description: + 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', + example: '55FBB9C7DEBF09809D12CCAA', + name: 'tls.server.x509.serial_number', type: 'keyword', }, - 'geoip.region_name': { - category: 'geoip', - description: 'The name of the region. ', - name: 'geoip.region_name', + 'tls.server.x509.signature_algorithm': { + category: 'tls', + description: + 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', + example: 'SHA256-RSA', + name: 'tls.server.x509.signature_algorithm', type: 'keyword', }, - 'geoip.country_iso_code': { - category: 'geoip', - description: 'Country ISO code. ', - name: 'geoip.country_iso_code', + 'tls.server.x509.subject.common_name': { + category: 'tls', + description: 'List of common names (CN) of subject.', + example: 'shared.global.example.net', + name: 'tls.server.x509.subject.common_name', type: 'keyword', }, - 'geoip.location': { - category: 'geoip', - description: 'The longitude and latitude. ', - name: 'geoip.location', - type: 'geo_point', + 'tls.server.x509.subject.country': { + category: 'tls', + description: 'List of country (C) code', + example: 'US', + name: 'tls.server.x509.subject.country', + type: 'keyword', }, - 'hash.blake2b_256': { - category: 'hash', - description: 'BLAKE2b-256 hash of the file.', - name: 'hash.blake2b_256', + 'tls.server.x509.subject.distinguished_name': { + category: 'tls', + description: 'Distinguished name (DN) of the certificate subject entity.', + example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', + name: 'tls.server.x509.subject.distinguished_name', type: 'keyword', }, - 'hash.blake2b_384': { - category: 'hash', - description: 'BLAKE2b-384 hash of the file.', - name: 'hash.blake2b_384', + 'tls.server.x509.subject.locality': { + category: 'tls', + description: 'List of locality names (L)', + example: 'San Francisco', + name: 'tls.server.x509.subject.locality', type: 'keyword', }, - 'hash.blake2b_512': { - category: 'hash', - description: 'BLAKE2b-512 hash of the file.', - name: 'hash.blake2b_512', + 'tls.server.x509.subject.organization': { + category: 'tls', + description: 'List of organizations (O) of subject.', + example: 'Example, Inc.', + name: 'tls.server.x509.subject.organization', type: 'keyword', }, - 'hash.sha224': { - category: 'hash', - description: 'SHA224 hash of the file.', - name: 'hash.sha224', + 'tls.server.x509.subject.organizational_unit': { + category: 'tls', + description: 'List of organizational units (OU) of subject.', + name: 'tls.server.x509.subject.organizational_unit', type: 'keyword', }, - 'hash.sha384': { - category: 'hash', - description: 'SHA384 hash of the file.', - name: 'hash.sha384', + 'tls.server.x509.subject.state_or_province': { + category: 'tls', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'tls.server.x509.subject.state_or_province', type: 'keyword', }, - 'hash.sha3_224': { - category: 'hash', - description: 'SHA3_224 hash of the file.', - name: 'hash.sha3_224', + 'tls.server.x509.version_number': { + category: 'tls', + description: 'Version of x509 format.', + example: 3, + name: 'tls.server.x509.version_number', type: 'keyword', }, - 'hash.sha3_256': { - category: 'hash', - description: 'SHA3_256 hash of the file.', - name: 'hash.sha3_256', + 'tls.version': { + category: 'tls', + description: 'Numeric part of the version parsed from the original string.', + example: '1.2', + name: 'tls.version', type: 'keyword', }, - 'hash.sha3_384': { - category: 'hash', - description: 'SHA3_384 hash of the file.', - name: 'hash.sha3_384', + 'tls.version_protocol': { + category: 'tls', + description: 'Normalized lowercase protocol name parsed from original string.', + example: 'tls', + name: 'tls.version_protocol', type: 'keyword', }, - 'hash.sha3_512': { - category: 'hash', - description: 'SHA3_512 hash of the file.', - name: 'hash.sha3_512', + 'span.id': { + category: 'span', + description: + 'Unique identifier of the span within the scope of its trace. A span represents an operation within a transaction, such as a request to another service, or a database query.', + example: '3ff9a8981b7ccd5a', + name: 'span.id', type: 'keyword', }, - 'hash.sha512_224': { - category: 'hash', - description: 'SHA512/224 hash of the file.', - name: 'hash.sha512_224', + 'trace.id': { + category: 'trace', + description: + 'Unique identifier of the trace. A trace groups multiple events like transactions that belong together. For example, a user request handled by multiple inter-connected services.', + example: '4bf92f3577b34da6a3ce929d0e0e4736', + name: 'trace.id', type: 'keyword', }, - 'hash.sha512_256': { - category: 'hash', - description: 'SHA512/256 hash of the file.', - name: 'hash.sha512_256', + 'transaction.id': { + category: 'transaction', + description: + 'Unique identifier of the transaction within the scope of its trace. A transaction is the highest level of work measured within a service, such as a request to a server.', + example: '00f067aa0ba902b7', + name: 'transaction.id', type: 'keyword', }, - 'hash.xxh64': { - category: 'hash', - description: 'XX64 hash of the file.', - name: 'hash.xxh64', + 'url.domain': { + category: 'url', + description: + 'Domain of the url, such as "www.elastic.co". In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field.', + example: 'www.elastic.co', + name: 'url.domain', type: 'keyword', }, - 'event.origin': { - category: 'event', + 'url.extension': { + category: 'url', description: - 'Origin of the event. This can be a file path (e.g. `/var/log/log.1`), or the name of the system component that supplied the data (e.g. `netlink`). ', - name: 'event.origin', + 'The field contains the file extension from the original request url, excluding the leading dot. The file extension is only set if it exists, as not every url has a file extension. The leading period must not be included. For example, the value must be "png", not ".png". Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz").', + example: 'png', + name: 'url.extension', type: 'keyword', }, - 'user.entity_id': { - category: 'user', + 'url.fragment': { + category: 'url', description: - 'ID uniquely identifying the user on a host. It is computed as a SHA-256 hash of the host ID, user ID, and user name. ', - name: 'user.entity_id', + 'Portion of the url after the `#`, such as "top". The `#` is not part of the fragment.', + name: 'url.fragment', type: 'keyword', }, - 'user.terminal': { - category: 'user', - description: 'Terminal of the user. ', - name: 'user.terminal', + 'url.full': { + category: 'url', + description: + 'If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source.', + example: 'https://www.elastic.co:443/search?q=elasticsearch#top', + name: 'url.full', + type: 'wildcard', + }, + 'url.original': { + category: 'url', + description: + 'Unmodified original url as seen in the event source. Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.', + example: 'https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch', + name: 'url.original', + type: 'wildcard', + }, + 'url.password': { + category: 'url', + description: 'Password of the request.', + name: 'url.password', type: 'keyword', }, - 'process.hash.blake2b_256': { - category: 'process', - description: 'BLAKE2b-256 hash of the executable.', - name: 'process.hash.blake2b_256', + 'url.path': { + category: 'url', + description: 'Path of the request, such as "/search".', + name: 'url.path', + type: 'wildcard', + }, + 'url.port': { + category: 'url', + description: 'Port of the request, such as 443.', + example: 443, + name: 'url.port', + type: 'long', + format: 'string', + }, + 'url.query': { + category: 'url', + description: + 'The query field describes the query string of the request, such as "q=elasticsearch". The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases.', + name: 'url.query', type: 'keyword', }, - 'process.hash.blake2b_384': { - category: 'process', - description: 'BLAKE2b-384 hash of the executable.', - name: 'process.hash.blake2b_384', + 'url.registered_domain': { + category: 'url', + description: + 'The highest registered url domain, stripped of the subdomain. For example, the registered domain for "foo.example.com" is "example.com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk".', + example: 'example.com', + name: 'url.registered_domain', type: 'keyword', }, - 'process.hash.blake2b_512': { - category: 'process', - description: 'BLAKE2b-512 hash of the executable.', - name: 'process.hash.blake2b_512', + 'url.scheme': { + category: 'url', + description: 'Scheme of the request, such as "https". Note: The `:` is not part of the scheme.', + example: 'https', + name: 'url.scheme', type: 'keyword', }, - 'process.hash.sha224': { - category: 'process', - description: 'SHA224 hash of the executable.', - name: 'process.hash.sha224', + 'url.subdomain': { + category: 'url', + description: + 'The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period.', + example: 'east', + name: 'url.subdomain', type: 'keyword', }, - 'process.hash.sha384': { - category: 'process', - description: 'SHA384 hash of the executable.', - name: 'process.hash.sha384', + 'url.top_level_domain': { + category: 'url', + description: + 'The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". This value can be determined precisely with a list like the public suffix list (http://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk".', + example: 'co.uk', + name: 'url.top_level_domain', type: 'keyword', }, - 'process.hash.sha3_224': { - category: 'process', - description: 'SHA3_224 hash of the executable.', - name: 'process.hash.sha3_224', + 'url.username': { + category: 'url', + description: 'Username of the request.', + name: 'url.username', type: 'keyword', }, - 'process.hash.sha3_256': { - category: 'process', - description: 'SHA3_256 hash of the executable.', - name: 'process.hash.sha3_256', + 'user.changes.domain': { + category: 'user', + description: + 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', + name: 'user.changes.domain', type: 'keyword', }, - 'process.hash.sha3_384': { - category: 'process', - description: 'SHA3_384 hash of the executable.', - name: 'process.hash.sha3_384', + 'user.changes.email': { + category: 'user', + description: 'User email address.', + name: 'user.changes.email', type: 'keyword', }, - 'process.hash.sha3_512': { - category: 'process', - description: 'SHA3_512 hash of the executable.', - name: 'process.hash.sha3_512', + 'user.changes.full_name': { + category: 'user', + description: "User's full name, if available.", + example: 'Albert Einstein', + name: 'user.changes.full_name', type: 'keyword', }, - 'process.hash.sha512_224': { - category: 'process', - description: 'SHA512/224 hash of the executable.', - name: 'process.hash.sha512_224', + 'user.changes.group.domain': { + category: 'user', + description: + 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', + name: 'user.changes.group.domain', type: 'keyword', }, - 'process.hash.sha512_256': { - category: 'process', - description: 'SHA512/256 hash of the executable.', - name: 'process.hash.sha512_256', + 'user.changes.group.id': { + category: 'user', + description: 'Unique identifier for the group on the system/platform.', + name: 'user.changes.group.id', type: 'keyword', }, - 'process.hash.xxh64': { - category: 'process', - description: 'XX64 hash of the executable.', - name: 'process.hash.xxh64', + 'user.changes.group.name': { + category: 'user', + description: 'Name of the group.', + name: 'user.changes.group.name', type: 'keyword', }, - 'socket.entity_id': { - category: 'socket', + 'user.changes.hash': { + category: 'user', description: - 'ID uniquely identifying the socket. It is computed as a SHA-256 hash of the host ID, socket inode, local IP, local port, remote IP, and remote port. ', - name: 'socket.entity_id', + 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', + name: 'user.changes.hash', type: 'keyword', }, - 'system.audit.host.uptime': { - category: 'system', - description: 'Uptime in nanoseconds. ', - name: 'system.audit.host.uptime', - type: 'long', - format: 'duration', + 'user.changes.id': { + category: 'user', + description: 'Unique identifier of the user.', + example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', + name: 'user.changes.id', + type: 'keyword', }, - 'system.audit.host.boottime': { - category: 'system', - description: 'Boot time. ', - name: 'system.audit.host.boottime', - type: 'date', + 'user.changes.name': { + category: 'user', + description: 'Short name or login of the user.', + example: 'a.einstein', + name: 'user.changes.name', + type: 'keyword', }, - 'system.audit.host.containerized': { - category: 'system', - description: 'Set if host is a container. ', - name: 'system.audit.host.containerized', - type: 'boolean', + 'user.changes.roles': { + category: 'user', + description: 'Array of user roles at the time of the event.', + example: '["kibana_admin", "reporting_user"]', + name: 'user.changes.roles', + type: 'keyword', }, - 'system.audit.host.timezone.name': { - category: 'system', - description: 'Name of the timezone of the host, e.g. BST. ', - name: 'system.audit.host.timezone.name', + 'user.domain': { + category: 'user', + description: + 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', + name: 'user.domain', type: 'keyword', }, - 'system.audit.host.timezone.offset.sec': { - category: 'system', - description: 'Timezone offset in seconds. ', - name: 'system.audit.host.timezone.offset.sec', - type: 'long', + 'user.effective.domain': { + category: 'user', + description: + 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', + name: 'user.effective.domain', + type: 'keyword', }, - 'system.audit.host.hostname': { - category: 'system', - description: 'Hostname. ', - name: 'system.audit.host.hostname', + 'user.effective.email': { + category: 'user', + description: 'User email address.', + name: 'user.effective.email', type: 'keyword', }, - 'system.audit.host.id': { - category: 'system', - description: 'Host ID. ', - name: 'system.audit.host.id', + 'user.effective.full_name': { + category: 'user', + description: "User's full name, if available.", + example: 'Albert Einstein', + name: 'user.effective.full_name', type: 'keyword', }, - 'system.audit.host.architecture': { - category: 'system', - description: 'Host architecture (e.g. x86_64). ', - name: 'system.audit.host.architecture', + 'user.effective.group.domain': { + category: 'user', + description: + 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', + name: 'user.effective.group.domain', type: 'keyword', }, - 'system.audit.host.mac': { - category: 'system', - description: 'MAC addresses. ', - name: 'system.audit.host.mac', + 'user.effective.group.id': { + category: 'user', + description: 'Unique identifier for the group on the system/platform.', + name: 'user.effective.group.id', type: 'keyword', }, - 'system.audit.host.ip': { - category: 'system', - description: 'IP addresses. ', - name: 'system.audit.host.ip', - type: 'ip', + 'user.effective.group.name': { + category: 'user', + description: 'Name of the group.', + name: 'user.effective.group.name', + type: 'keyword', }, - 'system.audit.host.os.codename': { - category: 'system', - description: 'OS codename, if any (e.g. stretch). ', - name: 'system.audit.host.os.codename', + 'user.effective.hash': { + category: 'user', + description: + 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', + name: 'user.effective.hash', type: 'keyword', }, - 'system.audit.host.os.platform': { - category: 'system', - description: 'OS platform (e.g. centos, ubuntu, windows). ', - name: 'system.audit.host.os.platform', + 'user.effective.id': { + category: 'user', + description: 'Unique identifier of the user.', + example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', + name: 'user.effective.id', type: 'keyword', }, - 'system.audit.host.os.name': { - category: 'system', - description: 'OS name (e.g. Mac OS X). ', - name: 'system.audit.host.os.name', + 'user.effective.name': { + category: 'user', + description: 'Short name or login of the user.', + example: 'a.einstein', + name: 'user.effective.name', type: 'keyword', }, - 'system.audit.host.os.family': { - category: 'system', - description: 'OS family (e.g. redhat, debian, freebsd, windows). ', - name: 'system.audit.host.os.family', + 'user.effective.roles': { + category: 'user', + description: 'Array of user roles at the time of the event.', + example: '["kibana_admin", "reporting_user"]', + name: 'user.effective.roles', type: 'keyword', }, - 'system.audit.host.os.version': { - category: 'system', - description: 'OS version. ', - name: 'system.audit.host.os.version', + 'user.email': { + category: 'user', + description: 'User email address.', + name: 'user.email', type: 'keyword', }, - 'system.audit.host.os.kernel': { - category: 'system', - description: "The operating system's kernel version. ", - name: 'system.audit.host.os.kernel', + 'user.full_name': { + category: 'user', + description: "User's full name, if available.", + example: 'Albert Einstein', + name: 'user.full_name', type: 'keyword', }, - 'system.audit.package.entity_id': { - category: 'system', + 'user.group.domain': { + category: 'user', description: - 'ID uniquely identifying the package. It is computed as a SHA-256 hash of the host ID, package name, and package version. ', - name: 'system.audit.package.entity_id', + 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', + name: 'user.group.domain', type: 'keyword', }, - 'system.audit.package.name': { - category: 'system', - description: 'Package name. ', - name: 'system.audit.package.name', + 'user.group.id': { + category: 'user', + description: 'Unique identifier for the group on the system/platform.', + name: 'user.group.id', type: 'keyword', }, - 'system.audit.package.version': { - category: 'system', - description: 'Package version. ', - name: 'system.audit.package.version', + 'user.group.name': { + category: 'user', + description: 'Name of the group.', + name: 'user.group.name', type: 'keyword', }, - 'system.audit.package.release': { - category: 'system', - description: 'Package release. ', - name: 'system.audit.package.release', + 'user.hash': { + category: 'user', + description: + 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', + name: 'user.hash', type: 'keyword', }, - 'system.audit.package.arch': { - category: 'system', - description: 'Package architecture. ', - name: 'system.audit.package.arch', + 'user.id': { + category: 'user', + description: 'Unique identifier of the user.', + example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', + name: 'user.id', type: 'keyword', }, - 'system.audit.package.license': { - category: 'system', - description: 'Package license. ', - name: 'system.audit.package.license', + 'user.name': { + category: 'user', + description: 'Short name or login of the user.', + example: 'a.einstein', + name: 'user.name', type: 'keyword', }, - 'system.audit.package.installtime': { - category: 'system', - description: 'Package install time. ', - name: 'system.audit.package.installtime', - type: 'date', + 'user.roles': { + category: 'user', + description: 'Array of user roles at the time of the event.', + example: '["kibana_admin", "reporting_user"]', + name: 'user.roles', + type: 'keyword', }, - 'system.audit.package.size': { - category: 'system', - description: 'Package size. ', - name: 'system.audit.package.size', - type: 'long', + 'user.target.domain': { + category: 'user', + description: + 'Name of the directory the user is a member of. For example, an LDAP or Active Directory domain name.', + name: 'user.target.domain', + type: 'keyword', }, - 'system.audit.package.summary': { - category: 'system', - description: 'Package summary. ', - name: 'system.audit.package.summary', + 'user.target.email': { + category: 'user', + description: 'User email address.', + name: 'user.target.email', + type: 'keyword', }, - 'system.audit.package.url': { - category: 'system', - description: 'Package URL. ', - name: 'system.audit.package.url', + 'user.target.full_name': { + category: 'user', + description: "User's full name, if available.", + example: 'Albert Einstein', + name: 'user.target.full_name', type: 'keyword', }, - 'system.audit.user.name': { - category: 'system', - description: 'User name. ', - name: 'system.audit.user.name', + 'user.target.group.domain': { + category: 'user', + description: + 'Name of the directory the group is a member of. For example, an LDAP or Active Directory domain name.', + name: 'user.target.group.domain', type: 'keyword', }, - 'system.audit.user.uid': { - category: 'system', - description: 'User ID. ', - name: 'system.audit.user.uid', + 'user.target.group.id': { + category: 'user', + description: 'Unique identifier for the group on the system/platform.', + name: 'user.target.group.id', type: 'keyword', }, - 'system.audit.user.gid': { - category: 'system', - description: 'Group ID. ', - name: 'system.audit.user.gid', + 'user.target.group.name': { + category: 'user', + description: 'Name of the group.', + name: 'user.target.group.name', type: 'keyword', }, - 'system.audit.user.dir': { - category: 'system', - description: "User's home directory. ", - name: 'system.audit.user.dir', + 'user.target.hash': { + category: 'user', + description: + 'Unique user hash to correlate information for a user in anonymized form. Useful if `user.id` or `user.name` contain confidential information and cannot be used.', + name: 'user.target.hash', type: 'keyword', }, - 'system.audit.user.shell': { - category: 'system', - description: 'Program to run at login. ', - name: 'system.audit.user.shell', + 'user.target.id': { + category: 'user', + description: 'Unique identifier of the user.', + example: 'S-1-5-21-202424912787-2692429404-2351956786-1000', + name: 'user.target.id', type: 'keyword', }, - 'system.audit.user.user_information': { - category: 'system', - description: 'General user information. On Linux, this is the gecos field. ', - name: 'system.audit.user.user_information', + 'user.target.name': { + category: 'user', + description: 'Short name or login of the user.', + example: 'a.einstein', + name: 'user.target.name', type: 'keyword', }, - 'system.audit.user.group.name': { - category: 'system', - description: 'Group name. ', - name: 'system.audit.user.group.name', + 'user.target.roles': { + category: 'user', + description: 'Array of user roles at the time of the event.', + example: '["kibana_admin", "reporting_user"]', + name: 'user.target.roles', type: 'keyword', }, - 'system.audit.user.group.gid': { - category: 'system', - description: 'Group ID. ', - name: 'system.audit.user.group.gid', - type: 'integer', + 'user_agent.device.name': { + category: 'user_agent', + description: 'Name of the device.', + example: 'iPhone', + name: 'user_agent.device.name', + type: 'keyword', }, - 'system.audit.user.password.type': { - category: 'system', - description: - "A user's password type. Possible values are `shadow_password` (the password hash is in the shadow file), `password_disabled`, `no_password` (this is dangerous as anyone can log in), and `crypt_password` (when the password field in /etc/passwd seems to contain an encrypted password). ", - name: 'system.audit.user.password.type', + 'user_agent.name': { + category: 'user_agent', + description: 'Name of the user agent.', + example: 'Safari', + name: 'user_agent.name', type: 'keyword', }, - 'system.audit.user.password.last_changed': { - category: 'system', - description: "The day the user's password was last changed. ", - name: 'system.audit.user.password.last_changed', - type: 'date', + 'user_agent.original': { + category: 'user_agent', + description: 'Unparsed user_agent string.', + example: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1', + name: 'user_agent.original', + type: 'keyword', }, - 'log.file.path': { - category: 'log', - description: - 'The file from which the line was read. This field contains the absolute path to the file. For example: `/var/log/system.log`. ', - name: 'log.file.path', + 'user_agent.os.family': { + category: 'user_agent', + description: 'OS family (such as redhat, debian, freebsd, windows).', + example: 'debian', + name: 'user_agent.os.family', type: 'keyword', }, - 'log.source.address': { - category: 'log', - description: 'Source address from which the log event was read / sent from. ', - name: 'log.source.address', + 'user_agent.os.full': { + category: 'user_agent', + description: 'Operating system name, including the version or code name.', + example: 'Mac OS Mojave', + name: 'user_agent.os.full', type: 'keyword', }, - 'log.offset': { - category: 'log', - description: 'The file offset the reported line starts at. ', - name: 'log.offset', - type: 'long', + 'user_agent.os.kernel': { + category: 'user_agent', + description: 'Operating system kernel version as a raw string.', + example: '4.4.0-112-generic', + name: 'user_agent.os.kernel', + type: 'keyword', }, - stream: { - category: 'base', - description: "Log stream when reading container logs, can be 'stdout' or 'stderr' ", - name: 'stream', + 'user_agent.os.name': { + category: 'user_agent', + description: 'Operating system name, without the version.', + example: 'Mac OS X', + name: 'user_agent.os.name', type: 'keyword', }, - 'input.type': { - category: 'input', + 'user_agent.os.platform': { + category: 'user_agent', + description: 'Operating system platform (such centos, ubuntu, windows).', + example: 'darwin', + name: 'user_agent.os.platform', + type: 'keyword', + }, + 'user_agent.os.type': { + category: 'user_agent', description: - 'The input type from which the event was generated. This field is set to the value specified for the `type` option in the input section of the Filebeat config file. ', - name: 'input.type', + "Use the `os.type` field to categorize the operating system into one of the broad commercial families. One of these following values should be used (lowercase): linux, macos, unix, windows. If the OS you're dealing with is not in the list, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition.", + example: 'macos', + name: 'user_agent.os.type', + type: 'keyword', }, - 'syslog.facility': { - category: 'syslog', - description: 'The facility extracted from the priority. ', - name: 'syslog.facility', - type: 'long', + 'user_agent.os.version': { + category: 'user_agent', + description: 'Operating system version as a raw string.', + example: '10.14.1', + name: 'user_agent.os.version', + type: 'keyword', }, - 'syslog.priority': { - category: 'syslog', - description: 'The priority of the syslog event. ', - name: 'syslog.priority', - type: 'long', + 'user_agent.version': { + category: 'user_agent', + description: 'Version of the user agent.', + example: 12, + name: 'user_agent.version', + type: 'keyword', }, - 'syslog.severity_label': { - category: 'syslog', - description: 'The human readable severity. ', - name: 'syslog.severity_label', + 'vlan.id': { + category: 'vlan', + description: 'VLAN ID as reported by the observer.', + example: 10, + name: 'vlan.id', type: 'keyword', }, - 'syslog.facility_label': { - category: 'syslog', - description: 'The human readable facility. ', - name: 'syslog.facility_label', + 'vlan.name': { + category: 'vlan', + description: 'Optional VLAN name as reported by the observer.', + example: 'outside', + name: 'vlan.name', type: 'keyword', }, - 'process.program': { - category: 'process', - description: 'The name of the program. ', - name: 'process.program', + 'vulnerability.category': { + category: 'vulnerability', + description: + 'The type of system or architecture that the vulnerability affects. These may be platform-specific (for example, Debian or SUSE) or general (for example, Database or Firewall). For example (https://qualysguard.qualys.com/qwebhelp/fo_portal/knowledgebase/vulnerability_categories.htm[Qualys vulnerability categories]) This field must be an array.', + example: '["Firewall"]', + name: 'vulnerability.category', type: 'keyword', }, - 'log.flags': { - category: 'log', - description: 'This field contains the flags of the event. ', - name: 'log.flags', + 'vulnerability.classification': { + category: 'vulnerability', + description: + 'The classification of the vulnerability scoring system. For example (https://www.first.org/cvss/)', + example: 'CVSS', + name: 'vulnerability.classification', + type: 'keyword', }, - 'http.response.content_length': { - category: 'http', - name: 'http.response.content_length', - type: 'alias', + 'vulnerability.description': { + category: 'vulnerability', + description: + 'The description of the vulnerability that provides additional context of the vulnerability. For example (https://cve.mitre.org/about/faqs.html#cve_entry_descriptions_created[Common Vulnerabilities and Exposure CVE description])', + example: 'In macOS before 2.12.6, there is a vulnerability in the RPC...', + name: 'vulnerability.description', + type: 'keyword', }, - 'user_agent.os.full_name': { - category: 'user_agent', - name: 'user_agent.os.full_name', + 'vulnerability.enumeration': { + category: 'vulnerability', + description: + 'The type of identifier used for this vulnerability. For example (https://cve.mitre.org/about/)', + example: 'CVE', + name: 'vulnerability.enumeration', type: 'keyword', }, - 'fileset.name': { - category: 'fileset', - description: 'The Filebeat fileset that generated this event. ', - name: 'fileset.name', + 'vulnerability.id': { + category: 'vulnerability', + description: + 'The identification (ID) is the number portion of a vulnerability entry. It includes a unique identification number for the vulnerability. For example (https://cve.mitre.org/about/faqs.html#what_is_cve_id)[Common Vulnerabilities and Exposure CVE ID]', + example: 'CVE-2019-00001', + name: 'vulnerability.id', type: 'keyword', }, - 'fileset.module': { - category: 'fileset', - name: 'fileset.module', - type: 'alias', + 'vulnerability.reference': { + category: 'vulnerability', + description: + 'A resource that provides additional information, context, and mitigations for the identified vulnerability.', + example: 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6111', + name: 'vulnerability.reference', + type: 'keyword', }, - read_timestamp: { - category: 'base', - name: 'read_timestamp', - type: 'alias', + 'vulnerability.report_id': { + category: 'vulnerability', + description: 'The report or scan identification number.', + example: 20191018.0001, + name: 'vulnerability.report_id', + type: 'keyword', }, - 'docker.attrs': { - category: 'docker', + 'vulnerability.scanner.vendor': { + category: 'vulnerability', + description: 'The name of the vulnerability scanner vendor.', + example: 'Tenable', + name: 'vulnerability.scanner.vendor', + type: 'keyword', + }, + 'vulnerability.score.base': { + category: 'vulnerability', description: - "docker.attrs contains labels and environment variables written by docker's JSON File logging driver. These fields are only available when they are configured in the logging driver options. ", - name: 'docker.attrs', - type: 'object', + 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Base scores cover an assessment for exploitability metrics (attack vector, complexity, privileges, and user interaction), impact metrics (confidentiality, integrity, and availability), and scope. For example (https://www.first.org/cvss/specification-document)', + example: 5.5, + name: 'vulnerability.score.base', + type: 'float', }, - 'icmp.code': { - category: 'icmp', - description: 'ICMP code. ', - name: 'icmp.code', + 'vulnerability.score.environmental': { + category: 'vulnerability', + description: + 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Environmental scores cover an assessment for any modified Base metrics, confidentiality, integrity, and availability requirements. For example (https://www.first.org/cvss/specification-document)', + example: 5.5, + name: 'vulnerability.score.environmental', + type: 'float', + }, + 'vulnerability.score.temporal': { + category: 'vulnerability', + description: + 'Scores can range from 0.0 to 10.0, with 10.0 being the most severe. Temporal scores cover an assessment for code maturity, remediation level, and confidence. For example (https://www.first.org/cvss/specification-document)', + name: 'vulnerability.score.temporal', + type: 'float', + }, + 'vulnerability.score.version': { + category: 'vulnerability', + description: + 'The National Vulnerability Database (NVD) provides qualitative severity rankings of "Low", "Medium", and "High" for CVSS v2.0 base score ranges in addition to the severity ratings for CVSS v3.0 as they are defined in the CVSS v3.0 specification. CVSS is owned and managed by FIRST.Org, Inc. (FIRST), a US-based non-profit organization, whose mission is to help computer security incident response teams across the world. For example (https://nvd.nist.gov/vuln-metrics/cvss)', + example: 2, + name: 'vulnerability.score.version', type: 'keyword', }, - 'icmp.type': { - category: 'icmp', - description: 'ICMP type. ', - name: 'icmp.type', + 'vulnerability.severity': { + category: 'vulnerability', + description: + 'The severity of the vulnerability can help with metrics and internal prioritization regarding remediation. For example (https://nvd.nist.gov/vuln-metrics/cvss)', + example: 'Critical', + name: 'vulnerability.severity', type: 'keyword', }, - 'igmp.type': { - category: 'igmp', - description: 'IGMP type. ', - name: 'igmp.type', + 'x509.alternative_names': { + category: 'x509', + description: + 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', + example: '*.elastic.co', + name: 'x509.alternative_names', type: 'keyword', }, - 'azure.eventhub': { - category: 'azure', - description: 'Name of the eventhub. ', - name: 'azure.eventhub', + 'x509.issuer.common_name': { + category: 'x509', + description: 'List of common name (CN) of issuing certificate authority.', + example: 'Example SHA2 High Assurance Server CA', + name: 'x509.issuer.common_name', type: 'keyword', }, - 'azure.offset': { - category: 'azure', - description: 'The offset. ', - name: 'azure.offset', - type: 'long', + 'x509.issuer.country': { + category: 'x509', + description: 'List of country (C) codes', + example: 'US', + name: 'x509.issuer.country', + type: 'keyword', }, - 'azure.enqueued_time': { - category: 'azure', - description: 'The enqueued time. ', - name: 'azure.enqueued_time', - type: 'date', + 'x509.issuer.distinguished_name': { + category: 'x509', + description: 'Distinguished name (DN) of issuing certificate authority.', + example: 'C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA', + name: 'x509.issuer.distinguished_name', + type: 'keyword', }, - 'azure.partition_id': { - category: 'azure', - description: 'The partition id. ', - name: 'azure.partition_id', - type: 'long', + 'x509.issuer.locality': { + category: 'x509', + description: 'List of locality names (L)', + example: 'Mountain View', + name: 'x509.issuer.locality', + type: 'keyword', }, - 'azure.consumer_group': { - category: 'azure', - description: 'The consumer group. ', - name: 'azure.consumer_group', + 'x509.issuer.organization': { + category: 'x509', + description: 'List of organizations (O) of issuing certificate authority.', + example: 'Example Inc', + name: 'x509.issuer.organization', type: 'keyword', }, - 'azure.sequence_number': { - category: 'azure', - description: 'The sequence number. ', - name: 'azure.sequence_number', - type: 'long', + 'x509.issuer.organizational_unit': { + category: 'x509', + description: 'List of organizational units (OU) of issuing certificate authority.', + example: 'www.example.com', + name: 'x509.issuer.organizational_unit', + type: 'keyword', }, - 'kafka.topic': { - category: 'kafka', - description: 'Kafka topic ', - name: 'kafka.topic', + 'x509.issuer.state_or_province': { + category: 'x509', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'x509.issuer.state_or_province', type: 'keyword', }, - 'kafka.partition': { - category: 'kafka', - description: 'Kafka partition number ', - name: 'kafka.partition', - type: 'long', + 'x509.not_after': { + category: 'x509', + description: 'Time at which the certificate is no longer considered valid.', + example: '"2020-07-16T03:15:39.000Z"', + name: 'x509.not_after', + type: 'date', }, - 'kafka.offset': { - category: 'kafka', - description: 'Kafka offset of this message ', - name: 'kafka.offset', - type: 'long', + 'x509.not_before': { + category: 'x509', + description: 'Time at which the certificate is first considered valid.', + example: '"2019-08-16T01:40:25.000Z"', + name: 'x509.not_before', + type: 'date', }, - 'kafka.key': { - category: 'kafka', - description: 'Kafka key, corresponding to the Kafka value stored in the message ', - name: 'kafka.key', + 'x509.public_key_algorithm': { + category: 'x509', + description: 'Algorithm used to generate the public key.', + example: 'RSA', + name: 'x509.public_key_algorithm', type: 'keyword', }, - 'kafka.block_timestamp': { - category: 'kafka', - description: 'Kafka outer (compressed) block timestamp ', - name: 'kafka.block_timestamp', - type: 'date', - }, - 'kafka.headers': { - category: 'kafka', + 'x509.public_key_curve': { + category: 'x509', description: - 'An array of Kafka header strings for this message, in the form ": ". ', - name: 'kafka.headers', - type: 'array', + 'The curve used by the elliptic curve public key algorithm. This is algorithm specific.', + example: 'nistp521', + name: 'x509.public_key_curve', + type: 'keyword', }, - 'apache2.access.remote_ip': { - category: 'apache2', - name: 'apache2.access.remote_ip', - type: 'alias', + 'x509.public_key_exponent': { + category: 'x509', + description: 'Exponent used to derive the public key. This is algorithm specific.', + example: 65537, + name: 'x509.public_key_exponent', + type: 'long', }, - 'apache2.access.ssl.protocol': { - category: 'apache2', - name: 'apache2.access.ssl.protocol', - type: 'alias', + 'x509.public_key_size': { + category: 'x509', + description: 'The size of the public key space in bits.', + example: 2048, + name: 'x509.public_key_size', + type: 'long', }, - 'apache2.access.ssl.cipher': { - category: 'apache2', - name: 'apache2.access.ssl.cipher', - type: 'alias', + 'x509.serial_number': { + category: 'x509', + description: + 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters.', + example: '55FBB9C7DEBF09809D12CCAA', + name: 'x509.serial_number', + type: 'keyword', }, - 'apache2.access.body_sent.bytes': { - category: 'apache2', - name: 'apache2.access.body_sent.bytes', - type: 'alias', + 'x509.signature_algorithm': { + category: 'x509', + description: + 'Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353.', + example: 'SHA256-RSA', + name: 'x509.signature_algorithm', + type: 'keyword', }, - 'apache2.access.user_name': { - category: 'apache2', - name: 'apache2.access.user_name', - type: 'alias', + 'x509.subject.common_name': { + category: 'x509', + description: 'List of common names (CN) of subject.', + example: 'shared.global.example.net', + name: 'x509.subject.common_name', + type: 'keyword', }, - 'apache2.access.method': { - category: 'apache2', - name: 'apache2.access.method', - type: 'alias', + 'x509.subject.country': { + category: 'x509', + description: 'List of country (C) code', + example: 'US', + name: 'x509.subject.country', + type: 'keyword', }, - 'apache2.access.url': { - category: 'apache2', - name: 'apache2.access.url', - type: 'alias', + 'x509.subject.distinguished_name': { + category: 'x509', + description: 'Distinguished name (DN) of the certificate subject entity.', + example: 'C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net', + name: 'x509.subject.distinguished_name', + type: 'keyword', }, - 'apache2.access.http_version': { - category: 'apache2', - name: 'apache2.access.http_version', - type: 'alias', + 'x509.subject.locality': { + category: 'x509', + description: 'List of locality names (L)', + example: 'San Francisco', + name: 'x509.subject.locality', + type: 'keyword', }, - 'apache2.access.response_code': { - category: 'apache2', - name: 'apache2.access.response_code', - type: 'alias', + 'x509.subject.organization': { + category: 'x509', + description: 'List of organizations (O) of subject.', + example: 'Example, Inc.', + name: 'x509.subject.organization', + type: 'keyword', }, - 'apache2.access.referrer': { - category: 'apache2', - name: 'apache2.access.referrer', - type: 'alias', + 'x509.subject.organizational_unit': { + category: 'x509', + description: 'List of organizational units (OU) of subject.', + name: 'x509.subject.organizational_unit', + type: 'keyword', }, - 'apache2.access.agent': { - category: 'apache2', - name: 'apache2.access.agent', - type: 'alias', + 'x509.subject.state_or_province': { + category: 'x509', + description: 'List of state or province names (ST, S, or P)', + example: 'California', + name: 'x509.subject.state_or_province', + type: 'keyword', }, - 'apache2.access.user_agent.device': { - category: 'apache2', - name: 'apache2.access.user_agent.device', - type: 'alias', + 'x509.version_number': { + category: 'x509', + description: 'Version of x509 format.', + example: 3, + name: 'x509.version_number', + type: 'keyword', }, - 'apache2.access.user_agent.name': { - category: 'apache2', - name: 'apache2.access.user_agent.name', + 'agent.hostname': { + category: 'agent', + description: 'Deprecated - use agent.name or agent.id to identify an agent. ', + name: 'agent.hostname', type: 'alias', }, - 'apache2.access.user_agent.os': { - category: 'apache2', - name: 'apache2.access.user_agent.os', + 'beat.timezone': { + category: 'beat', + name: 'beat.timezone', type: 'alias', }, - 'apache2.access.user_agent.os_name': { - category: 'apache2', - name: 'apache2.access.user_agent.os_name', - type: 'alias', + fields: { + category: 'base', + description: 'Contains user configurable fields. ', + name: 'fields', + type: 'object', }, - 'apache2.access.user_agent.original': { - category: 'apache2', - name: 'apache2.access.user_agent.original', + 'beat.name': { + category: 'beat', + name: 'beat.name', type: 'alias', }, - 'apache2.access.geoip.continent_name': { - category: 'apache2', - name: 'apache2.access.geoip.continent_name', + 'beat.hostname': { + category: 'beat', + name: 'beat.hostname', type: 'alias', }, - 'apache2.access.geoip.country_iso_code': { - category: 'apache2', - name: 'apache2.access.geoip.country_iso_code', + 'timeseries.instance': { + category: 'timeseries', + description: 'Time series instance id', + name: 'timeseries.instance', + type: 'keyword', + }, + 'cloud.image.id': { + category: 'cloud', + description: 'Image ID for the cloud instance. ', + example: 'ami-abcd1234', + name: 'cloud.image.id', + }, + 'meta.cloud.provider': { + category: 'meta', + name: 'meta.cloud.provider', type: 'alias', }, - 'apache2.access.geoip.location': { - category: 'apache2', - name: 'apache2.access.geoip.location', + 'meta.cloud.instance_id': { + category: 'meta', + name: 'meta.cloud.instance_id', type: 'alias', }, - 'apache2.access.geoip.region_name': { - category: 'apache2', - name: 'apache2.access.geoip.region_name', + 'meta.cloud.instance_name': { + category: 'meta', + name: 'meta.cloud.instance_name', type: 'alias', }, - 'apache2.access.geoip.city_name': { - category: 'apache2', - name: 'apache2.access.geoip.city_name', + 'meta.cloud.machine_type': { + category: 'meta', + name: 'meta.cloud.machine_type', type: 'alias', }, - 'apache2.access.geoip.region_iso_code': { - category: 'apache2', - name: 'apache2.access.geoip.region_iso_code', + 'meta.cloud.availability_zone': { + category: 'meta', + name: 'meta.cloud.availability_zone', type: 'alias', }, - 'apache2.error.level': { - category: 'apache2', - name: 'apache2.error.level', + 'meta.cloud.project_id': { + category: 'meta', + name: 'meta.cloud.project_id', type: 'alias', }, - 'apache2.error.message': { - category: 'apache2', - name: 'apache2.error.message', + 'meta.cloud.region': { + category: 'meta', + name: 'meta.cloud.region', type: 'alias', }, - 'apache2.error.pid': { - category: 'apache2', - name: 'apache2.error.pid', + 'docker.container.id': { + category: 'docker', + name: 'docker.container.id', type: 'alias', }, - 'apache2.error.tid': { - category: 'apache2', - name: 'apache2.error.tid', + 'docker.container.image': { + category: 'docker', + name: 'docker.container.image', type: 'alias', }, - 'apache2.error.module': { - category: 'apache2', - name: 'apache2.error.module', + 'docker.container.name': { + category: 'docker', + name: 'docker.container.name', type: 'alias', }, - 'apache.access.ssl.protocol': { - category: 'apache', - description: 'SSL protocol version. ', - name: 'apache.access.ssl.protocol', + 'docker.container.labels': { + category: 'docker', + description: 'Image labels. ', + name: 'docker.container.labels', + type: 'object', + }, + 'host.containerized': { + category: 'host', + description: 'If the host is a container. ', + name: 'host.containerized', + type: 'boolean', + }, + 'host.os.build': { + category: 'host', + description: 'OS build information. ', + example: '18D109', + name: 'host.os.build', type: 'keyword', }, - 'apache.access.ssl.cipher': { - category: 'apache', - description: 'SSL cipher name. ', - name: 'apache.access.ssl.cipher', + 'host.os.codename': { + category: 'host', + description: 'OS codename, if any. ', + example: 'stretch', + name: 'host.os.codename', type: 'keyword', }, - 'apache.error.module': { - category: 'apache', - description: 'The module producing the logged message. ', - name: 'apache.error.module', + 'kubernetes.pod.name': { + category: 'kubernetes', + description: 'Kubernetes pod name ', + name: 'kubernetes.pod.name', type: 'keyword', }, - 'user.audit.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform. ', - name: 'user.audit.group.id', + 'kubernetes.pod.uid': { + category: 'kubernetes', + description: 'Kubernetes Pod UID ', + name: 'kubernetes.pod.uid', type: 'keyword', }, - 'user.audit.group.name': { - category: 'user', - description: 'Name of the group. ', - name: 'user.audit.group.name', + 'kubernetes.pod.ip': { + category: 'kubernetes', + description: 'Kubernetes Pod IP ', + name: 'kubernetes.pod.ip', + type: 'ip', + }, + 'kubernetes.namespace': { + category: 'kubernetes', + description: 'Kubernetes namespace ', + name: 'kubernetes.namespace', type: 'keyword', }, - 'user.owner.id': { - category: 'user', - description: 'One or multiple unique identifiers of the user. ', - name: 'user.owner.id', + 'kubernetes.node.name': { + category: 'kubernetes', + description: 'Kubernetes node name ', + name: 'kubernetes.node.name', type: 'keyword', }, - 'user.owner.name': { - category: 'user', - description: 'Short name or login of the user. ', - example: 'albert', - name: 'user.owner.name', + 'kubernetes.node.hostname': { + category: 'kubernetes', + description: 'Kubernetes hostname as reported by the node’s kernel ', + name: 'kubernetes.node.hostname', type: 'keyword', }, - 'user.owner.group.id': { - category: 'user', - description: 'Unique identifier for the group on the system/platform. ', - name: 'user.owner.group.id', + 'kubernetes.labels.*': { + category: 'kubernetes', + description: 'Kubernetes labels map ', + name: 'kubernetes.labels.*', + type: 'object', + }, + 'kubernetes.annotations.*': { + category: 'kubernetes', + description: 'Kubernetes annotations map ', + name: 'kubernetes.annotations.*', + type: 'object', + }, + 'kubernetes.selectors.*': { + category: 'kubernetes', + description: 'Kubernetes selectors map ', + name: 'kubernetes.selectors.*', + type: 'object', + }, + 'kubernetes.replicaset.name': { + category: 'kubernetes', + description: 'Kubernetes replicaset name ', + name: 'kubernetes.replicaset.name', type: 'keyword', }, - 'user.owner.group.name': { - category: 'user', - description: 'Name of the group. ', - name: 'user.owner.group.name', + 'kubernetes.deployment.name': { + category: 'kubernetes', + description: 'Kubernetes deployment name ', + name: 'kubernetes.deployment.name', type: 'keyword', }, - 'auditd.log.old_auid': { - category: 'auditd', - description: - 'For login events this is the old audit ID used for the user prior to this login. ', - name: 'auditd.log.old_auid', + 'kubernetes.statefulset.name': { + category: 'kubernetes', + description: 'Kubernetes statefulset name ', + name: 'kubernetes.statefulset.name', + type: 'keyword', }, - 'auditd.log.new_auid': { - category: 'auditd', - description: - 'For login events this is the new audit ID. The audit ID can be used to trace future events to the user even if their identity changes (like becoming root). ', - name: 'auditd.log.new_auid', + 'kubernetes.container.name': { + category: 'kubernetes', + description: 'Kubernetes container name (different than the name from the runtime) ', + name: 'kubernetes.container.name', + type: 'keyword', }, - 'auditd.log.old_ses': { - category: 'auditd', - description: - 'For login events this is the old session ID used for the user prior to this login. ', - name: 'auditd.log.old_ses', + 'process.exe': { + category: 'process', + name: 'process.exe', + type: 'alias', }, - 'auditd.log.new_ses': { - category: 'auditd', + 'process.owner.id': { + category: 'process', + description: 'Unique identifier of the user.', + name: 'process.owner.id', + type: 'keyword', + }, + 'process.owner.name': { + category: 'process', + description: 'Short name or login of the user.', + example: 'albert', + name: 'process.owner.name', + type: 'keyword', + }, + 'jolokia.agent.version': { + category: 'jolokia', + description: 'Version number of jolokia agent. ', + name: 'jolokia.agent.version', + type: 'keyword', + }, + 'jolokia.agent.id': { + category: 'jolokia', description: - 'For login events this is the new session ID. It can be used to tie a user to future events by session ID. ', - name: 'auditd.log.new_ses', + 'Each agent has a unique id which can be either provided during startup of the agent in form of a configuration parameter or being autodetected. If autodected, the id has several parts: The IP, the process id, hashcode of the agent and its type. ', + name: 'jolokia.agent.id', + type: 'keyword', }, - 'auditd.log.sequence': { - category: 'auditd', - description: 'The audit event sequence number. ', - name: 'auditd.log.sequence', - type: 'long', + 'jolokia.server.product': { + category: 'jolokia', + description: 'The container product if detected. ', + name: 'jolokia.server.product', + type: 'keyword', }, - 'auditd.log.items': { - category: 'auditd', - description: 'The number of items in an event. ', - name: 'auditd.log.items', + 'jolokia.server.version': { + category: 'jolokia', + description: "The container's version (if detected). ", + name: 'jolokia.server.version', + type: 'keyword', }, - 'auditd.log.item': { - category: 'auditd', + 'jolokia.server.vendor': { + category: 'jolokia', + description: 'The vendor of the container the agent is running in. ', + name: 'jolokia.server.vendor', + type: 'keyword', + }, + 'jolokia.url': { + category: 'jolokia', + description: 'The URL how this agent can be contacted. ', + name: 'jolokia.url', + type: 'keyword', + }, + 'jolokia.secured': { + category: 'jolokia', + description: 'Whether the agent was configured for authentication or not. ', + name: 'jolokia.secured', + type: 'boolean', + }, + 'file.setuid': { + category: 'file', + description: 'Set if the file has the `setuid` bit set. Omitted otherwise.', + example: 'true', + name: 'file.setuid', + type: 'boolean', + }, + 'file.setgid': { + category: 'file', + description: 'Set if the file has the `setgid` bit set. Omitted otherwise.', + example: 'true', + name: 'file.setgid', + type: 'boolean', + }, + 'file.origin': { + category: 'file', description: - 'The item field indicates which item out of the total number of items. This number is zero-based; a value of 0 means it is the first item. ', - name: 'auditd.log.item', + 'An array of strings describing a possible external origin for this file. For example, the URL it was downloaded from. Only supported in macOS, via the kMDItemWhereFroms attribute. Omitted if origin information is not available. ', + name: 'file.origin', + type: 'keyword', }, - 'auditd.log.tty': { - category: 'auditd', - name: 'auditd.log.tty', + 'file.selinux.user': { + category: 'file', + description: 'The owner of the object.', + name: 'file.selinux.user', type: 'keyword', }, - 'auditd.log.a0': { - category: 'auditd', - description: 'The first argument to the system call. ', - name: 'auditd.log.a0', + 'file.selinux.role': { + category: 'file', + description: "The object's SELinux role.", + name: 'file.selinux.role', + type: 'keyword', }, - 'auditd.log.addr': { - category: 'auditd', - name: 'auditd.log.addr', - type: 'ip', + 'file.selinux.domain': { + category: 'file', + description: "The object's SELinux domain or type.", + name: 'file.selinux.domain', + type: 'keyword', }, - 'auditd.log.rport': { - category: 'auditd', - name: 'auditd.log.rport', - type: 'long', + 'file.selinux.level': { + category: 'file', + description: "The object's SELinux level.", + example: 's0', + name: 'file.selinux.level', + type: 'keyword', }, - 'auditd.log.laddr': { - category: 'auditd', - name: 'auditd.log.laddr', - type: 'ip', + 'user.audit.id': { + category: 'user', + description: 'Audit user ID.', + name: 'user.audit.id', + type: 'keyword', }, - 'auditd.log.lport': { - category: 'auditd', - name: 'auditd.log.lport', - type: 'long', + 'user.audit.name': { + category: 'user', + description: 'Audit user name.', + name: 'user.audit.name', + type: 'keyword', }, - 'auditd.log.acct': { - category: 'auditd', - name: 'auditd.log.acct', - type: 'alias', + 'user.filesystem.id': { + category: 'user', + description: 'Filesystem user ID.', + name: 'user.filesystem.id', + type: 'keyword', }, - 'auditd.log.pid': { - category: 'auditd', - name: 'auditd.log.pid', - type: 'alias', + 'user.filesystem.name': { + category: 'user', + description: 'Filesystem user name.', + name: 'user.filesystem.name', + type: 'keyword', }, - 'auditd.log.ppid': { - category: 'auditd', - name: 'auditd.log.ppid', - type: 'alias', + 'user.filesystem.group.id': { + category: 'user', + description: 'Filesystem group ID.', + name: 'user.filesystem.group.id', + type: 'keyword', }, - 'auditd.log.res': { - category: 'auditd', - name: 'auditd.log.res', - type: 'alias', + 'user.filesystem.group.name': { + category: 'user', + description: 'Filesystem group name.', + name: 'user.filesystem.group.name', + type: 'keyword', }, - 'auditd.log.record_type': { - category: 'auditd', - name: 'auditd.log.record_type', - type: 'alias', + 'user.saved.id': { + category: 'user', + description: 'Saved user ID.', + name: 'user.saved.id', + type: 'keyword', }, - 'auditd.log.geoip.continent_name': { - category: 'auditd', - name: 'auditd.log.geoip.continent_name', - type: 'alias', + 'user.saved.name': { + category: 'user', + description: 'Saved user name.', + name: 'user.saved.name', + type: 'keyword', }, - 'auditd.log.geoip.country_iso_code': { - category: 'auditd', - name: 'auditd.log.geoip.country_iso_code', - type: 'alias', + 'user.saved.group.id': { + category: 'user', + description: 'Saved group ID.', + name: 'user.saved.group.id', + type: 'keyword', }, - 'auditd.log.geoip.location': { - category: 'auditd', - name: 'auditd.log.geoip.location', - type: 'alias', + 'user.saved.group.name': { + category: 'user', + description: 'Saved group name.', + name: 'user.saved.group.name', + type: 'keyword', }, - 'auditd.log.geoip.region_name': { - category: 'auditd', - name: 'auditd.log.geoip.region_name', + 'user.auid': { + category: 'user', + name: 'user.auid', type: 'alias', }, - 'auditd.log.geoip.city_name': { - category: 'auditd', - name: 'auditd.log.geoip.city_name', + 'user.uid': { + category: 'user', + name: 'user.uid', type: 'alias', }, - 'auditd.log.geoip.region_iso_code': { - category: 'auditd', - name: 'auditd.log.geoip.region_iso_code', + 'user.fsuid': { + category: 'user', + name: 'user.fsuid', type: 'alias', }, - 'auditd.log.arch': { - category: 'auditd', - name: 'auditd.log.arch', + 'user.suid': { + category: 'user', + name: 'user.suid', type: 'alias', }, - 'auditd.log.gid': { - category: 'auditd', - name: 'auditd.log.gid', + 'user.gid': { + category: 'user', + name: 'user.gid', type: 'alias', }, - 'auditd.log.uid': { - category: 'auditd', - name: 'auditd.log.uid', + 'user.sgid': { + category: 'user', + name: 'user.sgid', type: 'alias', }, - 'auditd.log.agid': { - category: 'auditd', - name: 'auditd.log.agid', + 'user.fsgid': { + category: 'user', + name: 'user.fsgid', type: 'alias', }, - 'auditd.log.auid': { - category: 'auditd', - name: 'auditd.log.auid', + 'user.name_map.auid': { + category: 'user', + name: 'user.name_map.auid', type: 'alias', }, - 'auditd.log.fsgid': { - category: 'auditd', - name: 'auditd.log.fsgid', + 'user.name_map.uid': { + category: 'user', + name: 'user.name_map.uid', type: 'alias', }, - 'auditd.log.fsuid': { - category: 'auditd', - name: 'auditd.log.fsuid', + 'user.name_map.fsuid': { + category: 'user', + name: 'user.name_map.fsuid', type: 'alias', }, - 'auditd.log.egid': { - category: 'auditd', - name: 'auditd.log.egid', + 'user.name_map.suid': { + category: 'user', + name: 'user.name_map.suid', type: 'alias', }, - 'auditd.log.euid': { - category: 'auditd', - name: 'auditd.log.euid', + 'user.name_map.gid': { + category: 'user', + name: 'user.name_map.gid', type: 'alias', }, - 'auditd.log.sgid': { - category: 'auditd', - name: 'auditd.log.sgid', + 'user.name_map.sgid': { + category: 'user', + name: 'user.name_map.sgid', type: 'alias', }, - 'auditd.log.suid': { - category: 'auditd', - name: 'auditd.log.suid', + 'user.name_map.fsgid': { + category: 'user', + name: 'user.name_map.fsgid', type: 'alias', }, - 'auditd.log.ogid': { - category: 'auditd', - name: 'auditd.log.ogid', + 'user.selinux.user': { + category: 'user', + description: 'account submitted for authentication', + name: 'user.selinux.user', + type: 'keyword', + }, + 'user.selinux.role': { + category: 'user', + description: "user's SELinux role", + name: 'user.selinux.role', + type: 'keyword', + }, + 'user.selinux.domain': { + category: 'user', + description: "The actor's SELinux domain or type.", + name: 'user.selinux.domain', + type: 'keyword', + }, + 'user.selinux.level': { + category: 'user', + description: "The actor's SELinux level.", + example: 's0', + name: 'user.selinux.level', + type: 'keyword', + }, + 'user.selinux.category': { + category: 'user', + description: "The actor's SELinux category or compartments.", + name: 'user.selinux.category', + type: 'keyword', + }, + 'process.cwd': { + category: 'process', + description: 'The current working directory.', + name: 'process.cwd', type: 'alias', }, - 'auditd.log.ouid': { + 'source.path': { + category: 'source', + description: 'This is the path associated with a unix socket.', + name: 'source.path', + type: 'keyword', + }, + 'destination.path': { + category: 'destination', + description: 'This is the path associated with a unix socket.', + name: 'destination.path', + type: 'keyword', + }, + 'auditd.message_type': { category: 'auditd', - name: 'auditd.log.ouid', - type: 'alias', + description: 'The audit message type (e.g. syscall or apparmor_denied). ', + example: 'syscall', + name: 'auditd.message_type', + type: 'keyword', }, - 'auditd.log.comm': { + 'auditd.sequence': { category: 'auditd', - name: 'auditd.log.comm', - type: 'alias', + description: + 'The sequence number of the event as assigned by the kernel. Sequence numbers are stored as a uint32 in the kernel and can rollover. ', + name: 'auditd.sequence', + type: 'long', }, - 'auditd.log.exe': { + 'auditd.session': { category: 'auditd', - name: 'auditd.log.exe', - type: 'alias', + description: + 'The session ID assigned to a login. All events related to a login session will have the same value. ', + name: 'auditd.session', + type: 'keyword', }, - 'auditd.log.terminal': { + 'auditd.result': { category: 'auditd', - name: 'auditd.log.terminal', - type: 'alias', + description: 'The result of the audited operation (success/fail).', + example: 'success or fail', + name: 'auditd.result', + type: 'keyword', }, - 'auditd.log.msg': { + 'auditd.summary.actor.primary': { category: 'auditd', - name: 'auditd.log.msg', - type: 'alias', + description: + "The primary identity of the actor. This is the actor's original login ID. It will not change even if the user changes to another account. ", + name: 'auditd.summary.actor.primary', + type: 'keyword', }, - 'auditd.log.src': { + 'auditd.summary.actor.secondary': { category: 'auditd', - name: 'auditd.log.src', - type: 'alias', + description: + 'The secondary identity of the actor. This is typically the same as the primary, except for when the user has used `su`.', + name: 'auditd.summary.actor.secondary', + type: 'keyword', }, - 'auditd.log.dst': { + 'auditd.summary.object.type': { category: 'auditd', - name: 'auditd.log.dst', - type: 'alias', + description: 'A description of the what the "thing" is (e.g. file, socket, user-session). ', + name: 'auditd.summary.object.type', + type: 'keyword', }, - 'elasticsearch.component': { - category: 'elasticsearch', - description: 'Elasticsearch component from where the log event originated', - example: 'o.e.c.m.MetaDataCreateIndexService', - name: 'elasticsearch.component', + 'auditd.summary.object.primary': { + category: 'auditd', + description: '', + name: 'auditd.summary.object.primary', type: 'keyword', }, - 'elasticsearch.cluster.uuid': { - category: 'elasticsearch', - description: 'UUID of the cluster', - example: 'GmvrbHlNTiSVYiPf8kxg9g', - name: 'elasticsearch.cluster.uuid', + 'auditd.summary.object.secondary': { + category: 'auditd', + description: '', + name: 'auditd.summary.object.secondary', type: 'keyword', }, - 'elasticsearch.cluster.name': { - category: 'elasticsearch', - description: 'Name of the cluster', - example: 'docker-cluster', - name: 'elasticsearch.cluster.name', + 'auditd.summary.how': { + category: 'auditd', + description: + 'This describes how the action was performed. Usually this is the exe or command that was being executed that triggered the event. ', + name: 'auditd.summary.how', type: 'keyword', }, - 'elasticsearch.node.id': { - category: 'elasticsearch', - description: 'ID of the node', - example: 'DSiWcTyeThWtUXLB9J0BMw', - name: 'elasticsearch.node.id', + 'auditd.paths.inode': { + category: 'auditd', + description: 'inode number', + name: 'auditd.paths.inode', type: 'keyword', }, - 'elasticsearch.node.name': { - category: 'elasticsearch', - description: 'Name of the node', - example: 'vWNJsZ3', - name: 'elasticsearch.node.name', + 'auditd.paths.dev': { + category: 'auditd', + description: 'device name as found in /dev', + name: 'auditd.paths.dev', type: 'keyword', }, - 'elasticsearch.index.name': { - category: 'elasticsearch', - description: 'Index name', - example: 'filebeat-test-input', - name: 'elasticsearch.index.name', + 'auditd.paths.obj_user': { + category: 'auditd', + description: '', + name: 'auditd.paths.obj_user', type: 'keyword', }, - 'elasticsearch.index.id': { - category: 'elasticsearch', - description: 'Index id', - example: 'aOGgDwbURfCV57AScqbCgw', - name: 'elasticsearch.index.id', + 'auditd.paths.obj_role': { + category: 'auditd', + description: '', + name: 'auditd.paths.obj_role', type: 'keyword', }, - 'elasticsearch.shard.id': { - category: 'elasticsearch', - description: 'Id of the shard', - example: '0', - name: 'elasticsearch.shard.id', + 'auditd.paths.obj_domain': { + category: 'auditd', + description: '', + name: 'auditd.paths.obj_domain', type: 'keyword', }, - 'elasticsearch.audit.layer': { - category: 'elasticsearch', - description: 'The layer from which this event originated: rest, transport or ip_filter', - example: 'rest', - name: 'elasticsearch.audit.layer', + 'auditd.paths.obj_level': { + category: 'auditd', + description: '', + name: 'auditd.paths.obj_level', type: 'keyword', }, - 'elasticsearch.audit.event_type': { - category: 'elasticsearch', - description: - 'The type of event that occurred: anonymous_access_denied, authentication_failed, access_denied, access_granted, connection_granted, connection_denied, tampered_request, run_as_granted, run_as_denied', - example: 'access_granted', - name: 'elasticsearch.audit.event_type', + 'auditd.paths.objtype': { + category: 'auditd', + description: '', + name: 'auditd.paths.objtype', type: 'keyword', }, - 'elasticsearch.audit.origin.type': { - category: 'elasticsearch', - description: - 'Where the request originated: rest (request originated from a REST API request), transport (request was received on the transport channel), local_node (the local node issued the request)', - example: 'local_node', - name: 'elasticsearch.audit.origin.type', + 'auditd.paths.ouid': { + category: 'auditd', + description: 'file owner user ID', + name: 'auditd.paths.ouid', type: 'keyword', }, - 'elasticsearch.audit.realm': { - category: 'elasticsearch', - description: 'The authentication realm the authentication was validated against', - name: 'elasticsearch.audit.realm', + 'auditd.paths.rdev': { + category: 'auditd', + description: 'the device identifier (special files only)', + name: 'auditd.paths.rdev', type: 'keyword', }, - 'elasticsearch.audit.user.realm': { - category: 'elasticsearch', - description: "The user's authentication realm, if authenticated", - name: 'elasticsearch.audit.user.realm', + 'auditd.paths.nametype': { + category: 'auditd', + description: 'kind of file operation being referenced', + name: 'auditd.paths.nametype', type: 'keyword', }, - 'elasticsearch.audit.user.roles': { - category: 'elasticsearch', - description: 'Roles to which the principal belongs', - example: '["kibana_admin","beats_admin"]', - name: 'elasticsearch.audit.user.roles', + 'auditd.paths.ogid': { + category: 'auditd', + description: 'file owner group ID', + name: 'auditd.paths.ogid', type: 'keyword', }, - 'elasticsearch.audit.action': { - category: 'elasticsearch', - description: 'The name of the action that was executed', - example: 'cluster:monitor/main', - name: 'elasticsearch.audit.action', + 'auditd.paths.item': { + category: 'auditd', + description: 'which item is being recorded', + name: 'auditd.paths.item', type: 'keyword', }, - 'elasticsearch.audit.url.params': { - category: 'elasticsearch', - description: 'REST URI parameters', - example: '{username=jacknich2}', - name: 'elasticsearch.audit.url.params', + 'auditd.paths.mode': { + category: 'auditd', + description: 'mode flags on a file', + name: 'auditd.paths.mode', + type: 'keyword', }, - 'elasticsearch.audit.indices': { - category: 'elasticsearch', - description: 'Indices accessed by action', - example: '["foo-2019.01.04","foo-2019.01.03","foo-2019.01.06"]', - name: 'elasticsearch.audit.indices', + 'auditd.paths.name': { + category: 'auditd', + description: 'file name in avcs', + name: 'auditd.paths.name', type: 'keyword', }, - 'elasticsearch.audit.request.id': { - category: 'elasticsearch', - description: 'Unique ID of request', - example: 'WzL_kb6VSvOhAq0twPvHOQ', - name: 'elasticsearch.audit.request.id', + 'auditd.data.action': { + category: 'auditd', + description: 'netfilter packet disposition', + name: 'auditd.data.action', type: 'keyword', }, - 'elasticsearch.audit.request.name': { - category: 'elasticsearch', - description: 'The type of request that was executed', - example: 'ClearScrollRequest', - name: 'elasticsearch.audit.request.name', + 'auditd.data.minor': { + category: 'auditd', + description: 'device minor number', + name: 'auditd.data.minor', type: 'keyword', }, - 'elasticsearch.audit.request_body': { - category: 'elasticsearch', - name: 'elasticsearch.audit.request_body', - type: 'alias', + 'auditd.data.acct': { + category: 'auditd', + description: "a user's account name", + name: 'auditd.data.acct', + type: 'keyword', }, - 'elasticsearch.audit.origin_address': { - category: 'elasticsearch', - name: 'elasticsearch.audit.origin_address', - type: 'alias', + 'auditd.data.addr': { + category: 'auditd', + description: 'the remote address that the user is connecting from', + name: 'auditd.data.addr', + type: 'keyword', }, - 'elasticsearch.audit.uri': { - category: 'elasticsearch', - name: 'elasticsearch.audit.uri', - type: 'alias', + 'auditd.data.cipher': { + category: 'auditd', + description: 'name of crypto cipher selected', + name: 'auditd.data.cipher', + type: 'keyword', }, - 'elasticsearch.audit.principal': { - category: 'elasticsearch', - name: 'elasticsearch.audit.principal', - type: 'alias', + 'auditd.data.id': { + category: 'auditd', + description: 'during account changes', + name: 'auditd.data.id', + type: 'keyword', }, - 'elasticsearch.audit.message': { - category: 'elasticsearch', - name: 'elasticsearch.audit.message', - type: 'text', + 'auditd.data.entries': { + category: 'auditd', + description: 'number of entries in the netfilter table', + name: 'auditd.data.entries', + type: 'keyword', }, - 'elasticsearch.deprecation': { - category: 'elasticsearch', - description: '', - name: 'elasticsearch.deprecation', - type: 'group', + 'auditd.data.kind': { + category: 'auditd', + description: 'server or client in crypto operation', + name: 'auditd.data.kind', + type: 'keyword', }, - 'elasticsearch.gc.phase.name': { - category: 'elasticsearch', - description: 'Name of the GC collection phase. ', - name: 'elasticsearch.gc.phase.name', + 'auditd.data.ksize': { + category: 'auditd', + description: 'key size for crypto operation', + name: 'auditd.data.ksize', type: 'keyword', }, - 'elasticsearch.gc.phase.duration_sec': { - category: 'elasticsearch', - description: 'Collection phase duration according to the Java virtual machine. ', - name: 'elasticsearch.gc.phase.duration_sec', - type: 'float', + 'auditd.data.spid': { + category: 'auditd', + description: 'sent process ID', + name: 'auditd.data.spid', + type: 'keyword', }, - 'elasticsearch.gc.phase.scrub_symbol_table_time_sec': { - category: 'elasticsearch', - description: 'Pause time in seconds cleaning up symbol tables. ', - name: 'elasticsearch.gc.phase.scrub_symbol_table_time_sec', - type: 'float', + 'auditd.data.arch': { + category: 'auditd', + description: 'the elf architecture flags', + name: 'auditd.data.arch', + type: 'keyword', }, - 'elasticsearch.gc.phase.scrub_string_table_time_sec': { - category: 'elasticsearch', - description: 'Pause time in seconds cleaning up string tables. ', - name: 'elasticsearch.gc.phase.scrub_string_table_time_sec', - type: 'float', + 'auditd.data.argc': { + category: 'auditd', + description: 'the number of arguments to an execve syscall', + name: 'auditd.data.argc', + type: 'keyword', }, - 'elasticsearch.gc.phase.weak_refs_processing_time_sec': { - category: 'elasticsearch', - description: 'Time spent processing weak references in seconds. ', - name: 'elasticsearch.gc.phase.weak_refs_processing_time_sec', - type: 'float', + 'auditd.data.major': { + category: 'auditd', + description: 'device major number', + name: 'auditd.data.major', + type: 'keyword', }, - 'elasticsearch.gc.phase.parallel_rescan_time_sec': { - category: 'elasticsearch', - description: 'Time spent in seconds marking live objects while application is stopped. ', - name: 'elasticsearch.gc.phase.parallel_rescan_time_sec', - type: 'float', + 'auditd.data.unit': { + category: 'auditd', + description: 'systemd unit', + name: 'auditd.data.unit', + type: 'keyword', }, - 'elasticsearch.gc.phase.class_unload_time_sec': { - category: 'elasticsearch', - description: 'Time spent unloading unused classes in seconds. ', - name: 'elasticsearch.gc.phase.class_unload_time_sec', - type: 'float', + 'auditd.data.table': { + category: 'auditd', + description: 'netfilter table name', + name: 'auditd.data.table', + type: 'keyword', }, - 'elasticsearch.gc.phase.cpu_time.user_sec': { - category: 'elasticsearch', - description: 'CPU time spent outside the kernel. ', - name: 'elasticsearch.gc.phase.cpu_time.user_sec', - type: 'float', + 'auditd.data.terminal': { + category: 'auditd', + description: 'terminal name the user is running programs on', + name: 'auditd.data.terminal', + type: 'keyword', }, - 'elasticsearch.gc.phase.cpu_time.sys_sec': { - category: 'elasticsearch', - description: 'CPU time spent inside the kernel. ', - name: 'elasticsearch.gc.phase.cpu_time.sys_sec', - type: 'float', + 'auditd.data.grantors': { + category: 'auditd', + description: 'pam modules approving the action', + name: 'auditd.data.grantors', + type: 'keyword', }, - 'elasticsearch.gc.phase.cpu_time.real_sec': { - category: 'elasticsearch', - description: 'Total elapsed CPU time spent to complete the collection from start to finish. ', - name: 'elasticsearch.gc.phase.cpu_time.real_sec', - type: 'float', + 'auditd.data.direction': { + category: 'auditd', + description: 'direction of crypto operation', + name: 'auditd.data.direction', + type: 'keyword', }, - 'elasticsearch.gc.jvm_runtime_sec': { - category: 'elasticsearch', - description: 'The time from JVM start up in seconds, as a floating point number. ', - name: 'elasticsearch.gc.jvm_runtime_sec', - type: 'float', + 'auditd.data.op': { + category: 'auditd', + description: 'the operation being performed that is audited', + name: 'auditd.data.op', + type: 'keyword', }, - 'elasticsearch.gc.threads_total_stop_time_sec': { - category: 'elasticsearch', - description: 'Garbage collection threads total stop time seconds. ', - name: 'elasticsearch.gc.threads_total_stop_time_sec', - type: 'float', + 'auditd.data.tty': { + category: 'auditd', + description: 'tty udevice the user is running programs on', + name: 'auditd.data.tty', + type: 'keyword', }, - 'elasticsearch.gc.stopping_threads_time_sec': { - category: 'elasticsearch', - description: 'Time took to stop threads seconds. ', - name: 'elasticsearch.gc.stopping_threads_time_sec', - type: 'float', + 'auditd.data.syscall': { + category: 'auditd', + description: 'syscall number in effect when the event occurred', + name: 'auditd.data.syscall', + type: 'keyword', }, - 'elasticsearch.gc.tags': { - category: 'elasticsearch', - description: 'GC logging tags. ', - name: 'elasticsearch.gc.tags', + 'auditd.data.data': { + category: 'auditd', + description: 'TTY text', + name: 'auditd.data.data', type: 'keyword', }, - 'elasticsearch.gc.heap.size_kb': { - category: 'elasticsearch', - description: 'Total heap size in kilobytes. ', - name: 'elasticsearch.gc.heap.size_kb', - type: 'integer', + 'auditd.data.family': { + category: 'auditd', + description: 'netfilter protocol', + name: 'auditd.data.family', + type: 'keyword', }, - 'elasticsearch.gc.heap.used_kb': { - category: 'elasticsearch', - description: 'Used heap in kilobytes. ', - name: 'elasticsearch.gc.heap.used_kb', - type: 'integer', + 'auditd.data.mac': { + category: 'auditd', + description: 'crypto MAC algorithm selected', + name: 'auditd.data.mac', + type: 'keyword', }, - 'elasticsearch.gc.old_gen.size_kb': { - category: 'elasticsearch', - description: 'Total size of old generation in kilobytes. ', - name: 'elasticsearch.gc.old_gen.size_kb', - type: 'integer', + 'auditd.data.pfs': { + category: 'auditd', + description: 'perfect forward secrecy method', + name: 'auditd.data.pfs', + type: 'keyword', }, - 'elasticsearch.gc.old_gen.used_kb': { - category: 'elasticsearch', - description: 'Old generation occupancy in kilobytes. ', - name: 'elasticsearch.gc.old_gen.used_kb', - type: 'integer', - }, - 'elasticsearch.gc.young_gen.size_kb': { - category: 'elasticsearch', - description: 'Total size of young generation in kilobytes. ', - name: 'elasticsearch.gc.young_gen.size_kb', - type: 'integer', + 'auditd.data.items': { + category: 'auditd', + description: 'the number of path records in the event', + name: 'auditd.data.items', + type: 'keyword', }, - 'elasticsearch.gc.young_gen.used_kb': { - category: 'elasticsearch', - description: 'Young generation occupancy in kilobytes. ', - name: 'elasticsearch.gc.young_gen.used_kb', - type: 'integer', + 'auditd.data.a0': { + category: 'auditd', + description: '', + name: 'auditd.data.a0', + type: 'keyword', }, - 'elasticsearch.server.stacktrace': { - category: 'elasticsearch', - name: 'elasticsearch.server.stacktrace', + 'auditd.data.a1': { + category: 'auditd', + description: '', + name: 'auditd.data.a1', + type: 'keyword', }, - 'elasticsearch.server.gc.young.one': { - category: 'elasticsearch', + 'auditd.data.a2': { + category: 'auditd', description: '', - example: '', - name: 'elasticsearch.server.gc.young.one', - type: 'long', + name: 'auditd.data.a2', + type: 'keyword', }, - 'elasticsearch.server.gc.young.two': { - category: 'elasticsearch', + 'auditd.data.a3': { + category: 'auditd', description: '', - example: '', - name: 'elasticsearch.server.gc.young.two', - type: 'long', + name: 'auditd.data.a3', + type: 'keyword', }, - 'elasticsearch.server.gc.overhead_seq': { - category: 'elasticsearch', - description: 'Sequence number', - example: 3449992, - name: 'elasticsearch.server.gc.overhead_seq', - type: 'long', + 'auditd.data.hostname': { + category: 'auditd', + description: 'the hostname that the user is connecting from', + name: 'auditd.data.hostname', + type: 'keyword', }, - 'elasticsearch.server.gc.collection_duration.ms': { - category: 'elasticsearch', - description: 'Time spent in GC, in milliseconds', - example: 1600, - name: 'elasticsearch.server.gc.collection_duration.ms', - type: 'float', + 'auditd.data.lport': { + category: 'auditd', + description: 'local network port', + name: 'auditd.data.lport', + type: 'keyword', }, - 'elasticsearch.server.gc.observation_duration.ms': { - category: 'elasticsearch', - description: 'Total time over which collection was observed, in milliseconds', - example: 1800, - name: 'elasticsearch.server.gc.observation_duration.ms', - type: 'float', + 'auditd.data.rport': { + category: 'auditd', + description: 'remote port number', + name: 'auditd.data.rport', + type: 'keyword', }, - 'elasticsearch.slowlog.logger': { - category: 'elasticsearch', - description: 'Logger name', - example: 'index.search.slowlog.fetch', - name: 'elasticsearch.slowlog.logger', + 'auditd.data.exit': { + category: 'auditd', + description: 'syscall exit code', + name: 'auditd.data.exit', type: 'keyword', }, - 'elasticsearch.slowlog.took': { - category: 'elasticsearch', - description: 'Time it took to execute the query', - example: '300ms', - name: 'elasticsearch.slowlog.took', + 'auditd.data.fp': { + category: 'auditd', + description: 'crypto key finger print', + name: 'auditd.data.fp', type: 'keyword', }, - 'elasticsearch.slowlog.types': { - category: 'elasticsearch', - description: 'Types', - example: '', - name: 'elasticsearch.slowlog.types', + 'auditd.data.laddr': { + category: 'auditd', + description: 'local network address', + name: 'auditd.data.laddr', type: 'keyword', }, - 'elasticsearch.slowlog.stats': { - category: 'elasticsearch', - description: 'Stats groups', - example: 'group1', - name: 'elasticsearch.slowlog.stats', + 'auditd.data.sport': { + category: 'auditd', + description: 'local port number', + name: 'auditd.data.sport', type: 'keyword', }, - 'elasticsearch.slowlog.search_type': { - category: 'elasticsearch', - description: 'Search type', - example: 'QUERY_THEN_FETCH', - name: 'elasticsearch.slowlog.search_type', + 'auditd.data.capability': { + category: 'auditd', + description: 'posix capabilities', + name: 'auditd.data.capability', type: 'keyword', }, - 'elasticsearch.slowlog.source_query': { - category: 'elasticsearch', - description: 'Slow query', - example: '{"query":{"match_all":{"boost":1.0}}}', - name: 'elasticsearch.slowlog.source_query', + 'auditd.data.nargs': { + category: 'auditd', + description: 'the number of arguments to a socket call', + name: 'auditd.data.nargs', type: 'keyword', }, - 'elasticsearch.slowlog.extra_source': { - category: 'elasticsearch', - description: 'Extra source information', - example: '', - name: 'elasticsearch.slowlog.extra_source', + 'auditd.data.new-enabled': { + category: 'auditd', + description: 'new TTY audit enabled setting', + name: 'auditd.data.new-enabled', type: 'keyword', }, - 'elasticsearch.slowlog.total_hits': { - category: 'elasticsearch', - description: 'Total hits', - example: 42, - name: 'elasticsearch.slowlog.total_hits', + 'auditd.data.audit_backlog_limit': { + category: 'auditd', + description: "audit system's backlog queue size", + name: 'auditd.data.audit_backlog_limit', type: 'keyword', }, - 'elasticsearch.slowlog.total_shards': { - category: 'elasticsearch', - description: 'Total queried shards', - example: 22, - name: 'elasticsearch.slowlog.total_shards', + 'auditd.data.dir': { + category: 'auditd', + description: 'directory name', + name: 'auditd.data.dir', type: 'keyword', }, - 'elasticsearch.slowlog.routing': { - category: 'elasticsearch', - description: 'Routing', - example: 's01HZ2QBk9jw4gtgaFtn', - name: 'elasticsearch.slowlog.routing', + 'auditd.data.cap_pe': { + category: 'auditd', + description: 'process effective capability map', + name: 'auditd.data.cap_pe', type: 'keyword', }, - 'elasticsearch.slowlog.id': { - category: 'elasticsearch', - description: 'Id', - example: '', - name: 'elasticsearch.slowlog.id', + 'auditd.data.model': { + category: 'auditd', + description: 'security model being used for virt', + name: 'auditd.data.model', type: 'keyword', }, - 'elasticsearch.slowlog.type': { - category: 'elasticsearch', - description: 'Type', - example: 'doc', - name: 'elasticsearch.slowlog.type', + 'auditd.data.new_pp': { + category: 'auditd', + description: 'new process permitted capability map', + name: 'auditd.data.new_pp', type: 'keyword', }, - 'elasticsearch.slowlog.source': { - category: 'elasticsearch', - description: 'Source of document that was indexed', - name: 'elasticsearch.slowlog.source', + 'auditd.data.old-enabled': { + category: 'auditd', + description: 'present TTY audit enabled setting', + name: 'auditd.data.old-enabled', type: 'keyword', }, - 'haproxy.frontend_name': { - category: 'haproxy', - description: 'Name of the frontend (or listener) which received and processed the connection.', - name: 'haproxy.frontend_name', + 'auditd.data.oauid': { + category: 'auditd', + description: "object's login user ID", + name: 'auditd.data.oauid', + type: 'keyword', }, - 'haproxy.backend_name': { - category: 'haproxy', - description: - 'Name of the backend (or listener) which was selected to manage the connection to the server.', - name: 'haproxy.backend_name', + 'auditd.data.old': { + category: 'auditd', + description: 'old value', + name: 'auditd.data.old', + type: 'keyword', }, - 'haproxy.server_name': { - category: 'haproxy', - description: 'Name of the last server to which the connection was sent.', - name: 'haproxy.server_name', + 'auditd.data.banners': { + category: 'auditd', + description: 'banners used on printed page', + name: 'auditd.data.banners', + type: 'keyword', }, - 'haproxy.total_waiting_time_ms': { - category: 'haproxy', - description: 'Total time in milliseconds spent waiting in the various queues', - name: 'haproxy.total_waiting_time_ms', - type: 'long', + 'auditd.data.feature': { + category: 'auditd', + description: 'kernel feature being changed', + name: 'auditd.data.feature', + type: 'keyword', }, - 'haproxy.connection_wait_time_ms': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for the connection to establish to the final server', - name: 'haproxy.connection_wait_time_ms', - type: 'long', + 'auditd.data.vm-ctx': { + category: 'auditd', + description: "the vm's context string", + name: 'auditd.data.vm-ctx', + type: 'keyword', }, - 'haproxy.bytes_read': { - category: 'haproxy', - description: 'Total number of bytes transmitted to the client when the log is emitted.', - name: 'haproxy.bytes_read', - type: 'long', + 'auditd.data.opid': { + category: 'auditd', + description: "object's process ID", + name: 'auditd.data.opid', + type: 'keyword', }, - 'haproxy.time_queue': { - category: 'haproxy', - description: 'Total time in milliseconds spent waiting in the various queues.', - name: 'haproxy.time_queue', - type: 'long', + 'auditd.data.seperms': { + category: 'auditd', + description: 'SELinux permissions being used', + name: 'auditd.data.seperms', + type: 'keyword', }, - 'haproxy.time_backend_connect': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for the connection to establish to the final server, including retries.', - name: 'haproxy.time_backend_connect', - type: 'long', + 'auditd.data.seresult': { + category: 'auditd', + description: 'SELinux AVC decision granted/denied', + name: 'auditd.data.seresult', + type: 'keyword', }, - 'haproxy.server_queue': { - category: 'haproxy', - description: - 'Total number of requests which were processed before this one in the server queue.', - name: 'haproxy.server_queue', - type: 'long', + 'auditd.data.new-rng': { + category: 'auditd', + description: 'device name of rng being added from a vm', + name: 'auditd.data.new-rng', + type: 'keyword', }, - 'haproxy.backend_queue': { - category: 'haproxy', - description: - "Total number of requests which were processed before this one in the backend's global queue.", - name: 'haproxy.backend_queue', - type: 'long', + 'auditd.data.old-net': { + category: 'auditd', + description: 'present MAC address assigned to vm', + name: 'auditd.data.old-net', + type: 'keyword', }, - 'haproxy.bind_name': { - category: 'haproxy', - description: 'Name of the listening address which received the connection.', - name: 'haproxy.bind_name', + 'auditd.data.sigev_signo': { + category: 'auditd', + description: 'signal number', + name: 'auditd.data.sigev_signo', + type: 'keyword', }, - 'haproxy.error_message': { - category: 'haproxy', - description: 'Error message logged by HAProxy in case of error.', - name: 'haproxy.error_message', - type: 'text', + 'auditd.data.ino': { + category: 'auditd', + description: 'inode number', + name: 'auditd.data.ino', + type: 'keyword', }, - 'haproxy.source': { - category: 'haproxy', - description: 'The HAProxy source of the log', - name: 'haproxy.source', + 'auditd.data.old_enforcing': { + category: 'auditd', + description: 'old MAC enforcement status', + name: 'auditd.data.old_enforcing', type: 'keyword', }, - 'haproxy.termination_state': { - category: 'haproxy', - description: 'Condition the session was in when the session ended.', - name: 'haproxy.termination_state', + 'auditd.data.old-vcpu': { + category: 'auditd', + description: 'present number of CPU cores', + name: 'auditd.data.old-vcpu', + type: 'keyword', }, - 'haproxy.mode': { - category: 'haproxy', - description: 'mode that the frontend is operating (TCP or HTTP)', - name: 'haproxy.mode', + 'auditd.data.range': { + category: 'auditd', + description: "user's SE Linux range", + name: 'auditd.data.range', type: 'keyword', }, - 'haproxy.connections.active': { - category: 'haproxy', - description: - 'Total number of concurrent connections on the process when the session was logged.', - name: 'haproxy.connections.active', - type: 'long', + 'auditd.data.res': { + category: 'auditd', + description: 'result of the audited operation(success/fail)', + name: 'auditd.data.res', + type: 'keyword', }, - 'haproxy.connections.frontend': { - category: 'haproxy', - description: - 'Total number of concurrent connections on the frontend when the session was logged.', - name: 'haproxy.connections.frontend', - type: 'long', + 'auditd.data.added': { + category: 'auditd', + description: 'number of new files detected', + name: 'auditd.data.added', + type: 'keyword', }, - 'haproxy.connections.backend': { - category: 'haproxy', - description: - 'Total number of concurrent connections handled by the backend when the session was logged.', - name: 'haproxy.connections.backend', - type: 'long', + 'auditd.data.fam': { + category: 'auditd', + description: 'socket address family', + name: 'auditd.data.fam', + type: 'keyword', }, - 'haproxy.connections.server': { - category: 'haproxy', - description: - 'Total number of concurrent connections still active on the server when the session was logged.', - name: 'haproxy.connections.server', - type: 'long', + 'auditd.data.nlnk-pid': { + category: 'auditd', + description: 'pid of netlink packet sender', + name: 'auditd.data.nlnk-pid', + type: 'keyword', }, - 'haproxy.connections.retries': { - category: 'haproxy', - description: - 'Number of connection retries experienced by this session when trying to connect to the server.', - name: 'haproxy.connections.retries', - type: 'long', + 'auditd.data.subj': { + category: 'auditd', + description: "lspp subject's context string", + name: 'auditd.data.subj', + type: 'keyword', }, - 'haproxy.client.ip': { - category: 'haproxy', - name: 'haproxy.client.ip', - type: 'alias', + 'auditd.data.a[0-3]': { + category: 'auditd', + description: 'the arguments to a syscall', + name: 'auditd.data.a[0-3]', + type: 'keyword', }, - 'haproxy.client.port': { - category: 'haproxy', - name: 'haproxy.client.port', - type: 'alias', + 'auditd.data.cgroup': { + category: 'auditd', + description: 'path to cgroup in sysfs', + name: 'auditd.data.cgroup', + type: 'keyword', }, - 'haproxy.process_name': { - category: 'haproxy', - name: 'haproxy.process_name', - type: 'alias', + 'auditd.data.kernel': { + category: 'auditd', + description: "kernel's version number", + name: 'auditd.data.kernel', + type: 'keyword', }, - 'haproxy.pid': { - category: 'haproxy', - name: 'haproxy.pid', - type: 'alias', + 'auditd.data.ocomm': { + category: 'auditd', + description: "object's command line name", + name: 'auditd.data.ocomm', + type: 'keyword', }, - 'haproxy.destination.port': { - category: 'haproxy', - name: 'haproxy.destination.port', - type: 'alias', + 'auditd.data.new-net': { + category: 'auditd', + description: 'MAC address being assigned to vm', + name: 'auditd.data.new-net', + type: 'keyword', }, - 'haproxy.destination.ip': { - category: 'haproxy', - name: 'haproxy.destination.ip', - type: 'alias', + 'auditd.data.permissive': { + category: 'auditd', + description: 'SELinux is in permissive mode', + name: 'auditd.data.permissive', + type: 'keyword', }, - 'haproxy.geoip.continent_name': { - category: 'haproxy', - name: 'haproxy.geoip.continent_name', - type: 'alias', + 'auditd.data.class': { + category: 'auditd', + description: 'resource class assigned to vm', + name: 'auditd.data.class', + type: 'keyword', }, - 'haproxy.geoip.country_iso_code': { - category: 'haproxy', - name: 'haproxy.geoip.country_iso_code', - type: 'alias', + 'auditd.data.compat': { + category: 'auditd', + description: 'is_compat_task result', + name: 'auditd.data.compat', + type: 'keyword', }, - 'haproxy.geoip.location': { - category: 'haproxy', - name: 'haproxy.geoip.location', - type: 'alias', + 'auditd.data.fi': { + category: 'auditd', + description: 'file assigned inherited capability map', + name: 'auditd.data.fi', + type: 'keyword', }, - 'haproxy.geoip.region_name': { - category: 'haproxy', - name: 'haproxy.geoip.region_name', - type: 'alias', + 'auditd.data.changed': { + category: 'auditd', + description: 'number of changed files', + name: 'auditd.data.changed', + type: 'keyword', }, - 'haproxy.geoip.city_name': { - category: 'haproxy', - name: 'haproxy.geoip.city_name', - type: 'alias', + 'auditd.data.msg': { + category: 'auditd', + description: 'the payload of the audit record', + name: 'auditd.data.msg', + type: 'keyword', }, - 'haproxy.geoip.region_iso_code': { - category: 'haproxy', - name: 'haproxy.geoip.region_iso_code', - type: 'alias', + 'auditd.data.dport': { + category: 'auditd', + description: 'remote port number', + name: 'auditd.data.dport', + type: 'keyword', }, - 'haproxy.http.response.captured_cookie': { - category: 'haproxy', - description: - 'Optional "name=value" entry indicating that the client had this cookie in the response. ', - name: 'haproxy.http.response.captured_cookie', + 'auditd.data.new-seuser': { + category: 'auditd', + description: 'new SELinux user', + name: 'auditd.data.new-seuser', + type: 'keyword', }, - 'haproxy.http.response.captured_headers': { - category: 'haproxy', - description: - 'List of headers captured in the response due to the presence of the "capture response header" statement in the frontend. ', - name: 'haproxy.http.response.captured_headers', + 'auditd.data.invalid_context': { + category: 'auditd', + description: 'SELinux context', + name: 'auditd.data.invalid_context', type: 'keyword', }, - 'haproxy.http.response.status_code': { - category: 'haproxy', - name: 'haproxy.http.response.status_code', - type: 'alias', + 'auditd.data.dmac': { + category: 'auditd', + description: 'remote MAC address', + name: 'auditd.data.dmac', + type: 'keyword', }, - 'haproxy.http.request.captured_cookie': { - category: 'haproxy', - description: - 'Optional "name=value" entry indicating that the server has returned a cookie with its request. ', - name: 'haproxy.http.request.captured_cookie', + 'auditd.data.ipx-net': { + category: 'auditd', + description: 'IPX network number', + name: 'auditd.data.ipx-net', + type: 'keyword', }, - 'haproxy.http.request.captured_headers': { - category: 'haproxy', - description: - 'List of headers captured in the request due to the presence of the "capture request header" statement in the frontend. ', - name: 'haproxy.http.request.captured_headers', + 'auditd.data.iuid': { + category: 'auditd', + description: "ipc object's user ID", + name: 'auditd.data.iuid', type: 'keyword', }, - 'haproxy.http.request.raw_request_line': { - category: 'haproxy', - description: - 'Complete HTTP request line, including the method, request and HTTP version string.', - name: 'haproxy.http.request.raw_request_line', + 'auditd.data.macproto': { + category: 'auditd', + description: 'ethernet packet type ID field', + name: 'auditd.data.macproto', type: 'keyword', }, - 'haproxy.http.request.time_wait_without_data_ms': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for the server to send a full HTTP response, not counting data.', - name: 'haproxy.http.request.time_wait_without_data_ms', - type: 'long', + 'auditd.data.obj': { + category: 'auditd', + description: 'lspp object context string', + name: 'auditd.data.obj', + type: 'keyword', }, - 'haproxy.http.request.time_wait_ms': { - category: 'haproxy', - description: - 'Total time in milliseconds spent waiting for a full HTTP request from the client (not counting body) after the first byte was received.', - name: 'haproxy.http.request.time_wait_ms', - type: 'long', + 'auditd.data.ipid': { + category: 'auditd', + description: 'IP datagram fragment identifier', + name: 'auditd.data.ipid', + type: 'keyword', }, - 'haproxy.tcp.connection_waiting_time_ms': { - category: 'haproxy', - description: 'Total time in milliseconds elapsed between the accept and the last close', - name: 'haproxy.tcp.connection_waiting_time_ms', - type: 'long', + 'auditd.data.new-fs': { + category: 'auditd', + description: 'file system being added to vm', + name: 'auditd.data.new-fs', + type: 'keyword', }, - 'icinga.debug.facility': { - category: 'icinga', - description: 'Specifies what component of Icinga logged the message. ', - name: 'icinga.debug.facility', + 'auditd.data.vm-pid': { + category: 'auditd', + description: "vm's process ID", + name: 'auditd.data.vm-pid', type: 'keyword', }, - 'icinga.debug.severity': { - category: 'icinga', - name: 'icinga.debug.severity', - type: 'alias', + 'auditd.data.cap_pi': { + category: 'auditd', + description: 'process inherited capability map', + name: 'auditd.data.cap_pi', + type: 'keyword', }, - 'icinga.debug.message': { - category: 'icinga', - name: 'icinga.debug.message', - type: 'alias', + 'auditd.data.old-auid': { + category: 'auditd', + description: 'previous auid value', + name: 'auditd.data.old-auid', + type: 'keyword', }, - 'icinga.main.facility': { - category: 'icinga', - description: 'Specifies what component of Icinga logged the message. ', - name: 'icinga.main.facility', + 'auditd.data.oses': { + category: 'auditd', + description: "object's session ID", + name: 'auditd.data.oses', type: 'keyword', }, - 'icinga.main.severity': { - category: 'icinga', - name: 'icinga.main.severity', - type: 'alias', + 'auditd.data.fd': { + category: 'auditd', + description: 'file descriptor number', + name: 'auditd.data.fd', + type: 'keyword', }, - 'icinga.main.message': { - category: 'icinga', - name: 'icinga.main.message', - type: 'alias', + 'auditd.data.igid': { + category: 'auditd', + description: "ipc object's group ID", + name: 'auditd.data.igid', + type: 'keyword', }, - 'icinga.startup.facility': { - category: 'icinga', - description: 'Specifies what component of Icinga logged the message. ', - name: 'icinga.startup.facility', + 'auditd.data.new-disk': { + category: 'auditd', + description: 'disk being added to vm', + name: 'auditd.data.new-disk', type: 'keyword', }, - 'icinga.startup.severity': { - category: 'icinga', - name: 'icinga.startup.severity', - type: 'alias', + 'auditd.data.parent': { + category: 'auditd', + description: 'the inode number of the parent file', + name: 'auditd.data.parent', + type: 'keyword', }, - 'icinga.startup.message': { - category: 'icinga', - name: 'icinga.startup.message', - type: 'alias', + 'auditd.data.len': { + category: 'auditd', + description: 'length', + name: 'auditd.data.len', + type: 'keyword', }, - 'iis.access.sub_status': { - category: 'iis', - description: 'The HTTP substatus code. ', - name: 'iis.access.sub_status', - type: 'long', + 'auditd.data.oflag': { + category: 'auditd', + description: 'open syscall flags', + name: 'auditd.data.oflag', + type: 'keyword', }, - 'iis.access.win32_status': { - category: 'iis', - description: 'The Windows status code. ', - name: 'iis.access.win32_status', - type: 'long', + 'auditd.data.uuid': { + category: 'auditd', + description: 'a UUID', + name: 'auditd.data.uuid', + type: 'keyword', }, - 'iis.access.site_name': { - category: 'iis', - description: 'The site name and instance number. ', - name: 'iis.access.site_name', + 'auditd.data.code': { + category: 'auditd', + description: 'seccomp action code', + name: 'auditd.data.code', type: 'keyword', }, - 'iis.access.server_name': { - category: 'iis', - description: 'The name of the server on which the log file entry was generated. ', - name: 'iis.access.server_name', + 'auditd.data.nlnk-grp': { + category: 'auditd', + description: 'netlink group number', + name: 'auditd.data.nlnk-grp', type: 'keyword', }, - 'iis.access.cookie': { - category: 'iis', - description: 'The content of the cookie sent or received, if any. ', - name: 'iis.access.cookie', + 'auditd.data.cap_fp': { + category: 'auditd', + description: 'file permitted capability map', + name: 'auditd.data.cap_fp', type: 'keyword', }, - 'iis.access.body_received.bytes': { - category: 'iis', - name: 'iis.access.body_received.bytes', - type: 'alias', + 'auditd.data.new-mem': { + category: 'auditd', + description: 'new amount of memory in KB', + name: 'auditd.data.new-mem', + type: 'keyword', }, - 'iis.access.body_sent.bytes': { - category: 'iis', - name: 'iis.access.body_sent.bytes', - type: 'alias', + 'auditd.data.seperm': { + category: 'auditd', + description: 'SELinux permission being decided on', + name: 'auditd.data.seperm', + type: 'keyword', }, - 'iis.access.server_ip': { - category: 'iis', - name: 'iis.access.server_ip', - type: 'alias', + 'auditd.data.enforcing': { + category: 'auditd', + description: 'new MAC enforcement status', + name: 'auditd.data.enforcing', + type: 'keyword', }, - 'iis.access.method': { - category: 'iis', - name: 'iis.access.method', - type: 'alias', + 'auditd.data.new-chardev': { + category: 'auditd', + description: 'new character device being assigned to vm', + name: 'auditd.data.new-chardev', + type: 'keyword', }, - 'iis.access.url': { - category: 'iis', - name: 'iis.access.url', - type: 'alias', + 'auditd.data.old-rng': { + category: 'auditd', + description: 'device name of rng being removed from a vm', + name: 'auditd.data.old-rng', + type: 'keyword', }, - 'iis.access.query_string': { - category: 'iis', - name: 'iis.access.query_string', - type: 'alias', + 'auditd.data.outif': { + category: 'auditd', + description: 'out interface number', + name: 'auditd.data.outif', + type: 'keyword', }, - 'iis.access.port': { - category: 'iis', - name: 'iis.access.port', - type: 'alias', + 'auditd.data.cmd': { + category: 'auditd', + description: 'command being executed', + name: 'auditd.data.cmd', + type: 'keyword', }, - 'iis.access.user_name': { - category: 'iis', - name: 'iis.access.user_name', - type: 'alias', + 'auditd.data.hook': { + category: 'auditd', + description: 'netfilter hook that packet came from', + name: 'auditd.data.hook', + type: 'keyword', }, - 'iis.access.remote_ip': { - category: 'iis', - name: 'iis.access.remote_ip', - type: 'alias', + 'auditd.data.new-level': { + category: 'auditd', + description: 'new run level', + name: 'auditd.data.new-level', + type: 'keyword', }, - 'iis.access.referrer': { - category: 'iis', - name: 'iis.access.referrer', - type: 'alias', + 'auditd.data.sauid': { + category: 'auditd', + description: 'sent login user ID', + name: 'auditd.data.sauid', + type: 'keyword', }, - 'iis.access.response_code': { - category: 'iis', - name: 'iis.access.response_code', - type: 'alias', + 'auditd.data.sig': { + category: 'auditd', + description: 'signal number', + name: 'auditd.data.sig', + type: 'keyword', }, - 'iis.access.http_version': { - category: 'iis', - name: 'iis.access.http_version', - type: 'alias', + 'auditd.data.audit_backlog_wait_time': { + category: 'auditd', + description: "audit system's backlog wait time", + name: 'auditd.data.audit_backlog_wait_time', + type: 'keyword', }, - 'iis.access.hostname': { - category: 'iis', - name: 'iis.access.hostname', - type: 'alias', + 'auditd.data.printer': { + category: 'auditd', + description: 'printer name', + name: 'auditd.data.printer', + type: 'keyword', }, - 'iis.access.user_agent.device': { - category: 'iis', - name: 'iis.access.user_agent.device', - type: 'alias', + 'auditd.data.old-mem': { + category: 'auditd', + description: 'present amount of memory in KB', + name: 'auditd.data.old-mem', + type: 'keyword', }, - 'iis.access.user_agent.name': { - category: 'iis', - name: 'iis.access.user_agent.name', - type: 'alias', + 'auditd.data.perm': { + category: 'auditd', + description: 'the file permission being used', + name: 'auditd.data.perm', + type: 'keyword', }, - 'iis.access.user_agent.os': { - category: 'iis', - name: 'iis.access.user_agent.os', - type: 'alias', + 'auditd.data.old_pi': { + category: 'auditd', + description: 'old process inherited capability map', + name: 'auditd.data.old_pi', + type: 'keyword', }, - 'iis.access.user_agent.os_name': { - category: 'iis', - name: 'iis.access.user_agent.os_name', - type: 'alias', + 'auditd.data.state': { + category: 'auditd', + description: 'audit daemon configuration resulting state', + name: 'auditd.data.state', + type: 'keyword', }, - 'iis.access.user_agent.original': { - category: 'iis', - name: 'iis.access.user_agent.original', - type: 'alias', + 'auditd.data.format': { + category: 'auditd', + description: "audit log's format", + name: 'auditd.data.format', + type: 'keyword', }, - 'iis.access.geoip.continent_name': { - category: 'iis', - name: 'iis.access.geoip.continent_name', - type: 'alias', + 'auditd.data.new_gid': { + category: 'auditd', + description: 'new group ID being assigned', + name: 'auditd.data.new_gid', + type: 'keyword', }, - 'iis.access.geoip.country_iso_code': { - category: 'iis', - name: 'iis.access.geoip.country_iso_code', - type: 'alias', + 'auditd.data.tcontext': { + category: 'auditd', + description: "the target's or object's context string", + name: 'auditd.data.tcontext', + type: 'keyword', }, - 'iis.access.geoip.location': { - category: 'iis', - name: 'iis.access.geoip.location', - type: 'alias', + 'auditd.data.maj': { + category: 'auditd', + description: 'device major number', + name: 'auditd.data.maj', + type: 'keyword', }, - 'iis.access.geoip.region_name': { - category: 'iis', - name: 'iis.access.geoip.region_name', - type: 'alias', + 'auditd.data.watch': { + category: 'auditd', + description: 'file name in a watch record', + name: 'auditd.data.watch', + type: 'keyword', }, - 'iis.access.geoip.city_name': { - category: 'iis', - name: 'iis.access.geoip.city_name', - type: 'alias', + 'auditd.data.device': { + category: 'auditd', + description: 'device name', + name: 'auditd.data.device', + type: 'keyword', }, - 'iis.access.geoip.region_iso_code': { - category: 'iis', - name: 'iis.access.geoip.region_iso_code', - type: 'alias', + 'auditd.data.grp': { + category: 'auditd', + description: 'group name', + name: 'auditd.data.grp', + type: 'keyword', }, - 'iis.error.reason_phrase': { - category: 'iis', - description: 'The HTTP reason phrase. ', - name: 'iis.error.reason_phrase', + 'auditd.data.bool': { + category: 'auditd', + description: 'name of SELinux boolean', + name: 'auditd.data.bool', type: 'keyword', }, - 'iis.error.queue_name': { - category: 'iis', - description: 'The IIS application pool name. ', - name: 'iis.error.queue_name', + 'auditd.data.icmp_type': { + category: 'auditd', + description: 'type of icmp message', + name: 'auditd.data.icmp_type', type: 'keyword', }, - 'iis.error.remote_ip': { - category: 'iis', - name: 'iis.error.remote_ip', - type: 'alias', + 'auditd.data.new_lock': { + category: 'auditd', + description: 'new value of feature lock', + name: 'auditd.data.new_lock', + type: 'keyword', }, - 'iis.error.remote_port': { - category: 'iis', - name: 'iis.error.remote_port', - type: 'alias', + 'auditd.data.old_prom': { + category: 'auditd', + description: 'network promiscuity flag', + name: 'auditd.data.old_prom', + type: 'keyword', }, - 'iis.error.server_ip': { - category: 'iis', - name: 'iis.error.server_ip', - type: 'alias', + 'auditd.data.acl': { + category: 'auditd', + description: 'access mode of resource assigned to vm', + name: 'auditd.data.acl', + type: 'keyword', }, - 'iis.error.server_port': { - category: 'iis', - name: 'iis.error.server_port', - type: 'alias', + 'auditd.data.ip': { + category: 'auditd', + description: 'network address of a printer', + name: 'auditd.data.ip', + type: 'keyword', }, - 'iis.error.http_version': { - category: 'iis', - name: 'iis.error.http_version', - type: 'alias', + 'auditd.data.new_pi': { + category: 'auditd', + description: 'new process inherited capability map', + name: 'auditd.data.new_pi', + type: 'keyword', }, - 'iis.error.method': { - category: 'iis', - name: 'iis.error.method', - type: 'alias', + 'auditd.data.default-context': { + category: 'auditd', + description: 'default MAC context', + name: 'auditd.data.default-context', + type: 'keyword', }, - 'iis.error.url': { - category: 'iis', - name: 'iis.error.url', - type: 'alias', + 'auditd.data.inode_gid': { + category: 'auditd', + description: "group ID of the inode's owner", + name: 'auditd.data.inode_gid', + type: 'keyword', }, - 'iis.error.response_code': { - category: 'iis', - name: 'iis.error.response_code', - type: 'alias', + 'auditd.data.new-log_passwd': { + category: 'auditd', + description: 'new value for TTY password logging', + name: 'auditd.data.new-log_passwd', + type: 'keyword', }, - 'iis.error.geoip.continent_name': { - category: 'iis', - name: 'iis.error.geoip.continent_name', - type: 'alias', - }, - 'iis.error.geoip.country_iso_code': { - category: 'iis', - name: 'iis.error.geoip.country_iso_code', - type: 'alias', - }, - 'iis.error.geoip.location': { - category: 'iis', - name: 'iis.error.geoip.location', - type: 'alias', - }, - 'iis.error.geoip.region_name': { - category: 'iis', - name: 'iis.error.geoip.region_name', - type: 'alias', + 'auditd.data.new_pe': { + category: 'auditd', + description: 'new process effective capability map', + name: 'auditd.data.new_pe', + type: 'keyword', }, - 'iis.error.geoip.city_name': { - category: 'iis', - name: 'iis.error.geoip.city_name', - type: 'alias', + 'auditd.data.selected-context': { + category: 'auditd', + description: 'new MAC context assigned to session', + name: 'auditd.data.selected-context', + type: 'keyword', }, - 'iis.error.geoip.region_iso_code': { - category: 'iis', - name: 'iis.error.geoip.region_iso_code', - type: 'alias', + 'auditd.data.cap_fver': { + category: 'auditd', + description: 'file system capabilities version number', + name: 'auditd.data.cap_fver', + type: 'keyword', }, - 'kafka.log.level': { - category: 'kafka', - name: 'kafka.log.level', - type: 'alias', + 'auditd.data.file': { + category: 'auditd', + description: 'file name', + name: 'auditd.data.file', + type: 'keyword', }, - 'kafka.log.message': { - category: 'kafka', - name: 'kafka.log.message', - type: 'alias', + 'auditd.data.net': { + category: 'auditd', + description: 'network MAC address', + name: 'auditd.data.net', + type: 'keyword', }, - 'kafka.log.component': { - category: 'kafka', - description: 'Component the log is coming from. ', - name: 'kafka.log.component', + 'auditd.data.virt': { + category: 'auditd', + description: 'kind of virtualization being referenced', + name: 'auditd.data.virt', type: 'keyword', }, - 'kafka.log.class': { - category: 'kafka', - description: 'Java class the log is coming from. ', - name: 'kafka.log.class', + 'auditd.data.cap_pp': { + category: 'auditd', + description: 'process permitted capability map', + name: 'auditd.data.cap_pp', type: 'keyword', }, - 'kafka.log.thread': { - category: 'kafka', - description: 'Thread name the log is coming from. ', - name: 'kafka.log.thread', + 'auditd.data.old-range': { + category: 'auditd', + description: 'present SELinux range', + name: 'auditd.data.old-range', type: 'keyword', }, - 'kafka.log.trace.class': { - category: 'kafka', - description: 'Java class the trace is coming from. ', - name: 'kafka.log.trace.class', + 'auditd.data.resrc': { + category: 'auditd', + description: 'resource being assigned', + name: 'auditd.data.resrc', type: 'keyword', }, - 'kafka.log.trace.message': { - category: 'kafka', - description: 'Message part of the trace. ', - name: 'kafka.log.trace.message', - type: 'text', + 'auditd.data.new-range': { + category: 'auditd', + description: 'new SELinux range', + name: 'auditd.data.new-range', + type: 'keyword', }, - 'kibana.log.tags': { - category: 'kibana', - description: 'Kibana logging tags. ', - name: 'kibana.log.tags', + 'auditd.data.obj_gid': { + category: 'auditd', + description: 'group ID of object', + name: 'auditd.data.obj_gid', type: 'keyword', }, - 'kibana.log.state': { - category: 'kibana', - description: 'Current state of Kibana. ', - name: 'kibana.log.state', + 'auditd.data.proto': { + category: 'auditd', + description: 'network protocol', + name: 'auditd.data.proto', type: 'keyword', }, - 'kibana.log.meta': { - category: 'kibana', - name: 'kibana.log.meta', - type: 'object', + 'auditd.data.old-disk': { + category: 'auditd', + description: 'disk being removed from vm', + name: 'auditd.data.old-disk', + type: 'keyword', }, - 'kibana.log.kibana.log.meta.req.headers.referer': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.headers.referer', - type: 'alias', + 'auditd.data.audit_failure': { + category: 'auditd', + description: "audit system's failure mode", + name: 'auditd.data.audit_failure', + type: 'keyword', }, - 'kibana.log.kibana.log.meta.req.referer': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.referer', - type: 'alias', + 'auditd.data.inif': { + category: 'auditd', + description: 'in interface number', + name: 'auditd.data.inif', + type: 'keyword', }, - 'kibana.log.kibana.log.meta.req.headers.user-agent': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.headers.user-agent', - type: 'alias', + 'auditd.data.vm': { + category: 'auditd', + description: 'virtual machine name', + name: 'auditd.data.vm', + type: 'keyword', }, - 'kibana.log.kibana.log.meta.req.remoteAddress': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.remoteAddress', - type: 'alias', + 'auditd.data.flags': { + category: 'auditd', + description: 'mmap syscall flags', + name: 'auditd.data.flags', + type: 'keyword', }, - 'kibana.log.kibana.log.meta.req.url': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.req.url', - type: 'alias', + 'auditd.data.nlnk-fam': { + category: 'auditd', + description: 'netlink protocol number', + name: 'auditd.data.nlnk-fam', + type: 'keyword', }, - 'kibana.log.kibana.log.meta.statusCode': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.statusCode', - type: 'alias', + 'auditd.data.old-fs': { + category: 'auditd', + description: 'file system being removed from vm', + name: 'auditd.data.old-fs', + type: 'keyword', }, - 'kibana.log.kibana.log.meta.method': { - category: 'kibana', - name: 'kibana.log.kibana.log.meta.method', - type: 'alias', + 'auditd.data.old-ses': { + category: 'auditd', + description: 'previous ses value', + name: 'auditd.data.old-ses', + type: 'keyword', }, - 'logstash.log.module': { - category: 'logstash', - description: 'The module or class where the event originate. ', - name: 'logstash.log.module', + 'auditd.data.seqno': { + category: 'auditd', + description: 'sequence number', + name: 'auditd.data.seqno', type: 'keyword', }, - 'logstash.log.thread': { - category: 'logstash', - description: 'Information about the running thread where the log originate. ', - name: 'logstash.log.thread', + 'auditd.data.fver': { + category: 'auditd', + description: 'file system capabilities version number', + name: 'auditd.data.fver', type: 'keyword', }, - 'logstash.log.log_event': { - category: 'logstash', - description: 'key and value debugging information. ', - name: 'logstash.log.log_event', - type: 'object', + 'auditd.data.qbytes': { + category: 'auditd', + description: 'ipc objects quantity of bytes', + name: 'auditd.data.qbytes', + type: 'keyword', }, - 'logstash.log.pipeline_id': { - category: 'logstash', - description: 'The ID of the pipeline. ', - example: 'main', - name: 'logstash.log.pipeline_id', + 'auditd.data.seuser': { + category: 'auditd', + description: "user's SE Linux user acct", + name: 'auditd.data.seuser', type: 'keyword', }, - 'logstash.log.message': { - category: 'logstash', - name: 'logstash.log.message', - type: 'alias', + 'auditd.data.cap_fe': { + category: 'auditd', + description: 'file assigned effective capability map', + name: 'auditd.data.cap_fe', + type: 'keyword', }, - 'logstash.log.level': { - category: 'logstash', - name: 'logstash.log.level', - type: 'alias', + 'auditd.data.new-vcpu': { + category: 'auditd', + description: 'new number of CPU cores', + name: 'auditd.data.new-vcpu', + type: 'keyword', }, - 'logstash.slowlog.module': { - category: 'logstash', - description: 'The module or class where the event originate. ', - name: 'logstash.slowlog.module', + 'auditd.data.old-level': { + category: 'auditd', + description: 'old run level', + name: 'auditd.data.old-level', type: 'keyword', }, - 'logstash.slowlog.thread': { - category: 'logstash', - description: 'Information about the running thread where the log originate. ', - name: 'logstash.slowlog.thread', + 'auditd.data.old_pp': { + category: 'auditd', + description: 'old process permitted capability map', + name: 'auditd.data.old_pp', type: 'keyword', }, - 'logstash.slowlog.event': { - category: 'logstash', - description: 'Raw dump of the original event ', - name: 'logstash.slowlog.event', + 'auditd.data.daddr': { + category: 'auditd', + description: 'remote IP address', + name: 'auditd.data.daddr', type: 'keyword', }, - 'logstash.slowlog.plugin_name': { - category: 'logstash', - description: 'Name of the plugin ', - name: 'logstash.slowlog.plugin_name', + 'auditd.data.old-role': { + category: 'auditd', + description: 'present SELinux role', + name: 'auditd.data.old-role', type: 'keyword', }, - 'logstash.slowlog.plugin_type': { - category: 'logstash', - description: 'Type of the plugin: Inputs, Filters, Outputs or Codecs. ', - name: 'logstash.slowlog.plugin_type', + 'auditd.data.ioctlcmd': { + category: 'auditd', + description: 'The request argument to the ioctl syscall', + name: 'auditd.data.ioctlcmd', type: 'keyword', }, - 'logstash.slowlog.took_in_millis': { - category: 'logstash', - description: 'Execution time for the plugin in milliseconds. ', - name: 'logstash.slowlog.took_in_millis', - type: 'long', + 'auditd.data.smac': { + category: 'auditd', + description: 'local MAC address', + name: 'auditd.data.smac', + type: 'keyword', }, - 'logstash.slowlog.plugin_params': { - category: 'logstash', - description: 'String value of the plugin configuration ', - name: 'logstash.slowlog.plugin_params', + 'auditd.data.apparmor': { + category: 'auditd', + description: 'apparmor event information', + name: 'auditd.data.apparmor', type: 'keyword', }, - 'logstash.slowlog.plugin_params_object': { - category: 'logstash', - description: 'key -> value of the configuration used by the plugin. ', - name: 'logstash.slowlog.plugin_params_object', - type: 'object', + 'auditd.data.fe': { + category: 'auditd', + description: 'file assigned effective capability map', + name: 'auditd.data.fe', + type: 'keyword', }, - 'logstash.slowlog.level': { - category: 'logstash', - name: 'logstash.slowlog.level', - type: 'alias', + 'auditd.data.perm_mask': { + category: 'auditd', + description: 'file permission mask that triggered a watch event', + name: 'auditd.data.perm_mask', + type: 'keyword', }, - 'logstash.slowlog.took_in_nanos': { - category: 'logstash', - name: 'logstash.slowlog.took_in_nanos', - type: 'alias', + 'auditd.data.ses': { + category: 'auditd', + description: 'login session ID', + name: 'auditd.data.ses', + type: 'keyword', }, - 'mongodb.log.component': { - category: 'mongodb', - description: 'Functional categorization of message ', - example: 'COMMAND', - name: 'mongodb.log.component', + 'auditd.data.cap_fi': { + category: 'auditd', + description: 'file inherited capability map', + name: 'auditd.data.cap_fi', type: 'keyword', }, - 'mongodb.log.context': { - category: 'mongodb', - description: 'Context of message ', - example: 'initandlisten', - name: 'mongodb.log.context', + 'auditd.data.obj_uid': { + category: 'auditd', + description: 'user ID of object', + name: 'auditd.data.obj_uid', type: 'keyword', }, - 'mongodb.log.severity': { - category: 'mongodb', - name: 'mongodb.log.severity', - type: 'alias', + 'auditd.data.reason': { + category: 'auditd', + description: 'text string denoting a reason for the action', + name: 'auditd.data.reason', + type: 'keyword', }, - 'mongodb.log.message': { - category: 'mongodb', - name: 'mongodb.log.message', - type: 'alias', + 'auditd.data.list': { + category: 'auditd', + description: "the audit system's filter list number", + name: 'auditd.data.list', + type: 'keyword', }, - 'mysql.thread_id': { - category: 'mysql', - description: 'The connection or thread ID for the query. ', - name: 'mysql.thread_id', - type: 'long', + 'auditd.data.old_lock': { + category: 'auditd', + description: 'present value of feature lock', + name: 'auditd.data.old_lock', + type: 'keyword', }, - 'mysql.error.thread_id': { - category: 'mysql', - name: 'mysql.error.thread_id', - type: 'alias', + 'auditd.data.bus': { + category: 'auditd', + description: 'name of subsystem bus a vm resource belongs to', + name: 'auditd.data.bus', + type: 'keyword', }, - 'mysql.error.level': { - category: 'mysql', - name: 'mysql.error.level', - type: 'alias', + 'auditd.data.old_pe': { + category: 'auditd', + description: 'old process effective capability map', + name: 'auditd.data.old_pe', + type: 'keyword', }, - 'mysql.error.message': { - category: 'mysql', - name: 'mysql.error.message', - type: 'alias', + 'auditd.data.new-role': { + category: 'auditd', + description: 'new SELinux role', + name: 'auditd.data.new-role', + type: 'keyword', }, - 'mysql.slowlog.lock_time.sec': { - category: 'mysql', - description: - 'The amount of time the query waited for the lock to be available. The value is in seconds, as a floating point number. ', - name: 'mysql.slowlog.lock_time.sec', - type: 'float', + 'auditd.data.prom': { + category: 'auditd', + description: 'network promiscuity flag', + name: 'auditd.data.prom', + type: 'keyword', }, - 'mysql.slowlog.rows_sent': { - category: 'mysql', - description: 'The number of rows returned by the query. ', - name: 'mysql.slowlog.rows_sent', - type: 'long', + 'auditd.data.uri': { + category: 'auditd', + description: 'URI pointing to a printer', + name: 'auditd.data.uri', + type: 'keyword', }, - 'mysql.slowlog.rows_examined': { - category: 'mysql', - description: 'The number of rows scanned by the query. ', - name: 'mysql.slowlog.rows_examined', - type: 'long', + 'auditd.data.audit_enabled': { + category: 'auditd', + description: "audit systems's enable/disable status", + name: 'auditd.data.audit_enabled', + type: 'keyword', }, - 'mysql.slowlog.rows_affected': { - category: 'mysql', - description: 'The number of rows modified by the query. ', - name: 'mysql.slowlog.rows_affected', - type: 'long', + 'auditd.data.old-log_passwd': { + category: 'auditd', + description: 'present value for TTY password logging', + name: 'auditd.data.old-log_passwd', + type: 'keyword', }, - 'mysql.slowlog.bytes_sent': { - category: 'mysql', - description: 'The number of bytes sent to client. ', - name: 'mysql.slowlog.bytes_sent', - type: 'long', - format: 'bytes', + 'auditd.data.old-seuser': { + category: 'auditd', + description: 'present SELinux user', + name: 'auditd.data.old-seuser', + type: 'keyword', }, - 'mysql.slowlog.bytes_received': { - category: 'mysql', - description: 'The number of bytes received from client. ', - name: 'mysql.slowlog.bytes_received', - type: 'long', - format: 'bytes', + 'auditd.data.per': { + category: 'auditd', + description: 'linux personality', + name: 'auditd.data.per', + type: 'keyword', }, - 'mysql.slowlog.query': { - category: 'mysql', - description: 'The slow query. ', - name: 'mysql.slowlog.query', + 'auditd.data.scontext': { + category: 'auditd', + description: "the subject's context string", + name: 'auditd.data.scontext', + type: 'keyword', }, - 'mysql.slowlog.id': { - category: 'mysql', - name: 'mysql.slowlog.id', - type: 'alias', + 'auditd.data.tclass': { + category: 'auditd', + description: "target's object classification", + name: 'auditd.data.tclass', + type: 'keyword', }, - 'mysql.slowlog.schema': { - category: 'mysql', - description: 'The schema where the slow query was executed. ', - name: 'mysql.slowlog.schema', + 'auditd.data.ver': { + category: 'auditd', + description: "audit daemon's version number", + name: 'auditd.data.ver', type: 'keyword', }, - 'mysql.slowlog.current_user': { - category: 'mysql', - description: - 'Current authenticated user, used to determine access privileges. Can differ from the value for user. ', - name: 'mysql.slowlog.current_user', + 'auditd.data.new': { + category: 'auditd', + description: 'value being set in feature', + name: 'auditd.data.new', type: 'keyword', }, - 'mysql.slowlog.last_errno': { - category: 'mysql', - description: 'Last SQL error seen. ', - name: 'mysql.slowlog.last_errno', + 'auditd.data.val': { + category: 'auditd', + description: 'generic value associated with the operation', + name: 'auditd.data.val', type: 'keyword', }, - 'mysql.slowlog.killed': { - category: 'mysql', - description: 'Code of the reason if the query was killed. ', - name: 'mysql.slowlog.killed', + 'auditd.data.img-ctx': { + category: 'auditd', + description: "the vm's disk image context string", + name: 'auditd.data.img-ctx', type: 'keyword', }, - 'mysql.slowlog.query_cache_hit': { - category: 'mysql', - description: 'Whether the query cache was hit. ', - name: 'mysql.slowlog.query_cache_hit', - type: 'boolean', + 'auditd.data.old-chardev': { + category: 'auditd', + description: 'present character device assigned to vm', + name: 'auditd.data.old-chardev', + type: 'keyword', }, - 'mysql.slowlog.tmp_table': { - category: 'mysql', - description: 'Whether a temporary table was used to resolve the query. ', - name: 'mysql.slowlog.tmp_table', - type: 'boolean', + 'auditd.data.old_val': { + category: 'auditd', + description: 'current value of SELinux boolean', + name: 'auditd.data.old_val', + type: 'keyword', }, - 'mysql.slowlog.tmp_table_on_disk': { - category: 'mysql', - description: 'Whether the query needed temporary tables on disk. ', - name: 'mysql.slowlog.tmp_table_on_disk', - type: 'boolean', + 'auditd.data.success': { + category: 'auditd', + description: 'whether the syscall was successful or not', + name: 'auditd.data.success', + type: 'keyword', }, - 'mysql.slowlog.tmp_tables': { - category: 'mysql', - description: 'Number of temporary tables created for this query ', - name: 'mysql.slowlog.tmp_tables', - type: 'long', + 'auditd.data.inode_uid': { + category: 'auditd', + description: "user ID of the inode's owner", + name: 'auditd.data.inode_uid', + type: 'keyword', }, - 'mysql.slowlog.tmp_disk_tables': { - category: 'mysql', - description: 'Number of temporary tables created on disk for this query. ', - name: 'mysql.slowlog.tmp_disk_tables', - type: 'long', + 'auditd.data.removed': { + category: 'auditd', + description: 'number of deleted files', + name: 'auditd.data.removed', + type: 'keyword', }, - 'mysql.slowlog.tmp_table_sizes': { - category: 'mysql', - description: 'Size of temporary tables created for this query.', - name: 'mysql.slowlog.tmp_table_sizes', - type: 'long', - format: 'bytes', + 'auditd.data.socket.port': { + category: 'auditd', + description: 'The port number.', + name: 'auditd.data.socket.port', + type: 'keyword', }, - 'mysql.slowlog.filesort': { - category: 'mysql', - description: 'Whether filesort optimization was used. ', - name: 'mysql.slowlog.filesort', - type: 'boolean', + 'auditd.data.socket.saddr': { + category: 'auditd', + description: 'The raw socket address structure.', + name: 'auditd.data.socket.saddr', + type: 'keyword', }, - 'mysql.slowlog.filesort_on_disk': { - category: 'mysql', - description: 'Whether filesort optimization was used and it needed temporary tables on disk. ', - name: 'mysql.slowlog.filesort_on_disk', - type: 'boolean', + 'auditd.data.socket.addr': { + category: 'auditd', + description: 'The remote address.', + name: 'auditd.data.socket.addr', + type: 'keyword', }, - 'mysql.slowlog.priority_queue': { - category: 'mysql', - description: 'Whether a priority queue was used for filesort. ', - name: 'mysql.slowlog.priority_queue', - type: 'boolean', + 'auditd.data.socket.family': { + category: 'auditd', + description: 'The socket family (unix, ipv4, ipv6, netlink).', + example: 'unix', + name: 'auditd.data.socket.family', + type: 'keyword', }, - 'mysql.slowlog.full_scan': { - category: 'mysql', - description: 'Whether a full table scan was needed for the slow query. ', - name: 'mysql.slowlog.full_scan', - type: 'boolean', + 'auditd.data.socket.path': { + category: 'auditd', + description: 'This is the path associated with a unix socket.', + name: 'auditd.data.socket.path', + type: 'keyword', }, - 'mysql.slowlog.full_join': { - category: 'mysql', + 'auditd.messages': { + category: 'auditd', description: - 'Whether a full join was needed for the slow query (no indexes were used for joins). ', - name: 'mysql.slowlog.full_join', + 'An ordered list of the raw messages received from the kernel that were used to construct this document. This field is present if an error occurred processing the data or if `include_raw_message` is set in the config. ', + name: 'auditd.messages', + type: 'alias', + }, + 'auditd.warnings': { + category: 'auditd', + description: + 'The warnings generated by the Beat during the construction of the event. These are disabled by default and are used for development and debug purposes only. ', + name: 'auditd.warnings', + type: 'alias', + }, + 'geoip.continent_name': { + category: 'geoip', + description: 'The name of the continent. ', + name: 'geoip.continent_name', + type: 'keyword', + }, + 'geoip.city_name': { + category: 'geoip', + description: 'The name of the city. ', + name: 'geoip.city_name', + type: 'keyword', + }, + 'geoip.region_name': { + category: 'geoip', + description: 'The name of the region. ', + name: 'geoip.region_name', + type: 'keyword', + }, + 'geoip.country_iso_code': { + category: 'geoip', + description: 'Country ISO code. ', + name: 'geoip.country_iso_code', + type: 'keyword', + }, + 'geoip.location': { + category: 'geoip', + description: 'The longitude and latitude. ', + name: 'geoip.location', + type: 'geo_point', + }, + 'hash.blake2b_256': { + category: 'hash', + description: 'BLAKE2b-256 hash of the file.', + name: 'hash.blake2b_256', + type: 'keyword', + }, + 'hash.blake2b_384': { + category: 'hash', + description: 'BLAKE2b-384 hash of the file.', + name: 'hash.blake2b_384', + type: 'keyword', + }, + 'hash.blake2b_512': { + category: 'hash', + description: 'BLAKE2b-512 hash of the file.', + name: 'hash.blake2b_512', + type: 'keyword', + }, + 'hash.sha224': { + category: 'hash', + description: 'SHA224 hash of the file.', + name: 'hash.sha224', + type: 'keyword', + }, + 'hash.sha384': { + category: 'hash', + description: 'SHA384 hash of the file.', + name: 'hash.sha384', + type: 'keyword', + }, + 'hash.sha3_224': { + category: 'hash', + description: 'SHA3_224 hash of the file.', + name: 'hash.sha3_224', + type: 'keyword', + }, + 'hash.sha3_256': { + category: 'hash', + description: 'SHA3_256 hash of the file.', + name: 'hash.sha3_256', + type: 'keyword', + }, + 'hash.sha3_384': { + category: 'hash', + description: 'SHA3_384 hash of the file.', + name: 'hash.sha3_384', + type: 'keyword', + }, + 'hash.sha3_512': { + category: 'hash', + description: 'SHA3_512 hash of the file.', + name: 'hash.sha3_512', + type: 'keyword', + }, + 'hash.sha512_224': { + category: 'hash', + description: 'SHA512/224 hash of the file.', + name: 'hash.sha512_224', + type: 'keyword', + }, + 'hash.sha512_256': { + category: 'hash', + description: 'SHA512/256 hash of the file.', + name: 'hash.sha512_256', + type: 'keyword', + }, + 'hash.xxh64': { + category: 'hash', + description: 'XX64 hash of the file.', + name: 'hash.xxh64', + type: 'keyword', + }, + 'event.origin': { + category: 'event', + description: + 'Origin of the event. This can be a file path (e.g. `/var/log/log.1`), or the name of the system component that supplied the data (e.g. `netlink`). ', + name: 'event.origin', + type: 'keyword', + }, + 'user.entity_id': { + category: 'user', + description: + 'ID uniquely identifying the user on a host. It is computed as a SHA-256 hash of the host ID, user ID, and user name. ', + name: 'user.entity_id', + type: 'keyword', + }, + 'user.terminal': { + category: 'user', + description: 'Terminal of the user. ', + name: 'user.terminal', + type: 'keyword', + }, + 'process.hash.blake2b_256': { + category: 'process', + description: 'BLAKE2b-256 hash of the executable.', + name: 'process.hash.blake2b_256', + type: 'keyword', + }, + 'process.hash.blake2b_384': { + category: 'process', + description: 'BLAKE2b-384 hash of the executable.', + name: 'process.hash.blake2b_384', + type: 'keyword', + }, + 'process.hash.blake2b_512': { + category: 'process', + description: 'BLAKE2b-512 hash of the executable.', + name: 'process.hash.blake2b_512', + type: 'keyword', + }, + 'process.hash.sha224': { + category: 'process', + description: 'SHA224 hash of the executable.', + name: 'process.hash.sha224', + type: 'keyword', + }, + 'process.hash.sha384': { + category: 'process', + description: 'SHA384 hash of the executable.', + name: 'process.hash.sha384', + type: 'keyword', + }, + 'process.hash.sha3_224': { + category: 'process', + description: 'SHA3_224 hash of the executable.', + name: 'process.hash.sha3_224', + type: 'keyword', + }, + 'process.hash.sha3_256': { + category: 'process', + description: 'SHA3_256 hash of the executable.', + name: 'process.hash.sha3_256', + type: 'keyword', + }, + 'process.hash.sha3_384': { + category: 'process', + description: 'SHA3_384 hash of the executable.', + name: 'process.hash.sha3_384', + type: 'keyword', + }, + 'process.hash.sha3_512': { + category: 'process', + description: 'SHA3_512 hash of the executable.', + name: 'process.hash.sha3_512', + type: 'keyword', + }, + 'process.hash.sha512_224': { + category: 'process', + description: 'SHA512/224 hash of the executable.', + name: 'process.hash.sha512_224', + type: 'keyword', + }, + 'process.hash.sha512_256': { + category: 'process', + description: 'SHA512/256 hash of the executable.', + name: 'process.hash.sha512_256', + type: 'keyword', + }, + 'process.hash.xxh64': { + category: 'process', + description: 'XX64 hash of the executable.', + name: 'process.hash.xxh64', + type: 'keyword', + }, + 'socket.entity_id': { + category: 'socket', + description: + 'ID uniquely identifying the socket. It is computed as a SHA-256 hash of the host ID, socket inode, local IP, local port, remote IP, and remote port. ', + name: 'socket.entity_id', + type: 'keyword', + }, + 'system.audit.host.uptime': { + category: 'system', + description: 'Uptime in nanoseconds. ', + name: 'system.audit.host.uptime', + type: 'long', + format: 'duration', + }, + 'system.audit.host.boottime': { + category: 'system', + description: 'Boot time. ', + name: 'system.audit.host.boottime', + type: 'date', + }, + 'system.audit.host.containerized': { + category: 'system', + description: 'Set if host is a container. ', + name: 'system.audit.host.containerized', type: 'boolean', }, - 'mysql.slowlog.merge_passes': { - category: 'mysql', - description: 'Number of merge passes executed for the query. ', - name: 'mysql.slowlog.merge_passes', + 'system.audit.host.timezone.name': { + category: 'system', + description: 'Name of the timezone of the host, e.g. BST. ', + name: 'system.audit.host.timezone.name', + type: 'keyword', + }, + 'system.audit.host.timezone.offset.sec': { + category: 'system', + description: 'Timezone offset in seconds. ', + name: 'system.audit.host.timezone.offset.sec', type: 'long', }, - 'mysql.slowlog.sort_merge_passes': { - category: 'mysql', - description: 'Number of merge passes that the sort algorithm has had to do. ', - name: 'mysql.slowlog.sort_merge_passes', + 'system.audit.host.hostname': { + category: 'system', + description: 'Hostname. ', + name: 'system.audit.host.hostname', + type: 'keyword', + }, + 'system.audit.host.id': { + category: 'system', + description: 'Host ID. ', + name: 'system.audit.host.id', + type: 'keyword', + }, + 'system.audit.host.architecture': { + category: 'system', + description: 'Host architecture (e.g. x86_64). ', + name: 'system.audit.host.architecture', + type: 'keyword', + }, + 'system.audit.host.mac': { + category: 'system', + description: 'MAC addresses. ', + name: 'system.audit.host.mac', + type: 'keyword', + }, + 'system.audit.host.ip': { + category: 'system', + description: 'IP addresses. ', + name: 'system.audit.host.ip', + type: 'ip', + }, + 'system.audit.host.os.codename': { + category: 'system', + description: 'OS codename, if any (e.g. stretch). ', + name: 'system.audit.host.os.codename', + type: 'keyword', + }, + 'system.audit.host.os.platform': { + category: 'system', + description: 'OS platform (e.g. centos, ubuntu, windows). ', + name: 'system.audit.host.os.platform', + type: 'keyword', + }, + 'system.audit.host.os.name': { + category: 'system', + description: 'OS name (e.g. Mac OS X). ', + name: 'system.audit.host.os.name', + type: 'keyword', + }, + 'system.audit.host.os.family': { + category: 'system', + description: 'OS family (e.g. redhat, debian, freebsd, windows). ', + name: 'system.audit.host.os.family', + type: 'keyword', + }, + 'system.audit.host.os.version': { + category: 'system', + description: 'OS version. ', + name: 'system.audit.host.os.version', + type: 'keyword', + }, + 'system.audit.host.os.kernel': { + category: 'system', + description: "The operating system's kernel version. ", + name: 'system.audit.host.os.kernel', + type: 'keyword', + }, + 'system.audit.host.os.type': { + category: 'system', + description: 'OS type (see ECS os.type). ', + name: 'system.audit.host.os.type', + type: 'keyword', + }, + 'system.audit.package.entity_id': { + category: 'system', + description: + 'ID uniquely identifying the package. It is computed as a SHA-256 hash of the host ID, package name, and package version. ', + name: 'system.audit.package.entity_id', + type: 'keyword', + }, + 'system.audit.package.name': { + category: 'system', + description: 'Package name. ', + name: 'system.audit.package.name', + type: 'keyword', + }, + 'system.audit.package.version': { + category: 'system', + description: 'Package version. ', + name: 'system.audit.package.version', + type: 'keyword', + }, + 'system.audit.package.release': { + category: 'system', + description: 'Package release. ', + name: 'system.audit.package.release', + type: 'keyword', + }, + 'system.audit.package.arch': { + category: 'system', + description: 'Package architecture. ', + name: 'system.audit.package.arch', + type: 'keyword', + }, + 'system.audit.package.license': { + category: 'system', + description: 'Package license. ', + name: 'system.audit.package.license', + type: 'keyword', + }, + 'system.audit.package.installtime': { + category: 'system', + description: 'Package install time. ', + name: 'system.audit.package.installtime', + type: 'date', + }, + 'system.audit.package.size': { + category: 'system', + description: 'Package size. ', + name: 'system.audit.package.size', type: 'long', }, - 'mysql.slowlog.sort_range_count': { - category: 'mysql', - description: 'Number of sorts that were done using ranges. ', - name: 'mysql.slowlog.sort_range_count', - type: 'long', + 'system.audit.package.summary': { + category: 'system', + description: 'Package summary. ', + name: 'system.audit.package.summary', + }, + 'system.audit.package.url': { + category: 'system', + description: 'Package URL. ', + name: 'system.audit.package.url', + type: 'keyword', + }, + 'system.audit.user.name': { + category: 'system', + description: 'User name. ', + name: 'system.audit.user.name', + type: 'keyword', + }, + 'system.audit.user.uid': { + category: 'system', + description: 'User ID. ', + name: 'system.audit.user.uid', + type: 'keyword', + }, + 'system.audit.user.gid': { + category: 'system', + description: 'Group ID. ', + name: 'system.audit.user.gid', + type: 'keyword', + }, + 'system.audit.user.dir': { + category: 'system', + description: "User's home directory. ", + name: 'system.audit.user.dir', + type: 'keyword', + }, + 'system.audit.user.shell': { + category: 'system', + description: 'Program to run at login. ', + name: 'system.audit.user.shell', + type: 'keyword', + }, + 'system.audit.user.user_information': { + category: 'system', + description: 'General user information. On Linux, this is the gecos field. ', + name: 'system.audit.user.user_information', + type: 'keyword', + }, + 'system.audit.user.group.name': { + category: 'system', + description: 'Group name. ', + name: 'system.audit.user.group.name', + type: 'keyword', + }, + 'system.audit.user.group.gid': { + category: 'system', + description: 'Group ID. ', + name: 'system.audit.user.group.gid', + type: 'integer', + }, + 'system.audit.user.password.type': { + category: 'system', + description: + "A user's password type. Possible values are `shadow_password` (the password hash is in the shadow file), `password_disabled`, `no_password` (this is dangerous as anyone can log in), and `crypt_password` (when the password field in /etc/passwd seems to contain an encrypted password). ", + name: 'system.audit.user.password.type', + type: 'keyword', + }, + 'system.audit.user.password.last_changed': { + category: 'system', + description: "The day the user's password was last changed. ", + name: 'system.audit.user.password.last_changed', + type: 'date', + }, + 'log.source.address': { + category: 'log', + description: 'Source address from which the log event was read / sent from. ', + name: 'log.source.address', + type: 'keyword', + }, + 'log.offset': { + category: 'log', + description: 'The file offset the reported line starts at. ', + name: 'log.offset', + type: 'long', + }, + stream: { + category: 'base', + description: "Log stream when reading container logs, can be 'stdout' or 'stderr' ", + name: 'stream', + type: 'keyword', + }, + 'input.type': { + category: 'input', + description: + 'The input type from which the event was generated. This field is set to the value specified for the `type` option in the input section of the Filebeat config file. ', + name: 'input.type', + }, + 'syslog.facility': { + category: 'syslog', + description: 'The facility extracted from the priority. ', + name: 'syslog.facility', + type: 'long', + }, + 'syslog.priority': { + category: 'syslog', + description: 'The priority of the syslog event. ', + name: 'syslog.priority', + type: 'long', + }, + 'syslog.severity_label': { + category: 'syslog', + description: 'The human readable severity. ', + name: 'syslog.severity_label', + type: 'keyword', + }, + 'syslog.facility_label': { + category: 'syslog', + description: 'The human readable facility. ', + name: 'syslog.facility_label', + type: 'keyword', + }, + 'process.program': { + category: 'process', + description: 'The name of the program. ', + name: 'process.program', + type: 'keyword', + }, + 'log.flags': { + category: 'log', + description: 'This field contains the flags of the event. ', + name: 'log.flags', + }, + 'http.response.content_length': { + category: 'http', + name: 'http.response.content_length', + type: 'alias', + }, + 'user_agent.os.full_name': { + category: 'user_agent', + name: 'user_agent.os.full_name', + type: 'keyword', + }, + 'fileset.name': { + category: 'fileset', + description: 'The Filebeat fileset that generated this event. ', + name: 'fileset.name', + type: 'keyword', + }, + 'fileset.module': { + category: 'fileset', + name: 'fileset.module', + type: 'alias', + }, + read_timestamp: { + category: 'base', + name: 'read_timestamp', + type: 'alias', + }, + 'docker.attrs': { + category: 'docker', + description: + "docker.attrs contains labels and environment variables written by docker's JSON File logging driver. These fields are only available when they are configured in the logging driver options. ", + name: 'docker.attrs', + type: 'object', + }, + 'icmp.code': { + category: 'icmp', + description: 'ICMP code. ', + name: 'icmp.code', + type: 'keyword', + }, + 'icmp.type': { + category: 'icmp', + description: 'ICMP type. ', + name: 'icmp.type', + type: 'keyword', + }, + 'igmp.type': { + category: 'igmp', + description: 'IGMP type. ', + name: 'igmp.type', + type: 'keyword', + }, + 'azure.eventhub': { + category: 'azure', + description: 'Name of the eventhub. ', + name: 'azure.eventhub', + type: 'keyword', + }, + 'azure.offset': { + category: 'azure', + description: 'The offset. ', + name: 'azure.offset', + type: 'long', + }, + 'azure.enqueued_time': { + category: 'azure', + description: 'The enqueued time. ', + name: 'azure.enqueued_time', + type: 'date', + }, + 'azure.partition_id': { + category: 'azure', + description: 'The partition id. ', + name: 'azure.partition_id', + type: 'long', + }, + 'azure.consumer_group': { + category: 'azure', + description: 'The consumer group. ', + name: 'azure.consumer_group', + type: 'keyword', + }, + 'azure.sequence_number': { + category: 'azure', + description: 'The sequence number. ', + name: 'azure.sequence_number', + type: 'long', + }, + 'kafka.topic': { + category: 'kafka', + description: 'Kafka topic ', + name: 'kafka.topic', + type: 'keyword', + }, + 'kafka.partition': { + category: 'kafka', + description: 'Kafka partition number ', + name: 'kafka.partition', + type: 'long', + }, + 'kafka.offset': { + category: 'kafka', + description: 'Kafka offset of this message ', + name: 'kafka.offset', + type: 'long', + }, + 'kafka.key': { + category: 'kafka', + description: 'Kafka key, corresponding to the Kafka value stored in the message ', + name: 'kafka.key', + type: 'keyword', + }, + 'kafka.block_timestamp': { + category: 'kafka', + description: 'Kafka outer (compressed) block timestamp ', + name: 'kafka.block_timestamp', + type: 'date', + }, + 'kafka.headers': { + category: 'kafka', + description: + 'An array of Kafka header strings for this message, in the form ": ". ', + name: 'kafka.headers', + type: 'array', + }, + 'apache.access.ssl.protocol': { + category: 'apache', + description: 'SSL protocol version. ', + name: 'apache.access.ssl.protocol', + type: 'keyword', + }, + 'apache.access.ssl.cipher': { + category: 'apache', + description: 'SSL cipher name. ', + name: 'apache.access.ssl.cipher', + type: 'keyword', + }, + 'apache.error.module': { + category: 'apache', + description: 'The module producing the logged message. ', + name: 'apache.error.module', + type: 'keyword', + }, + 'user.audit.group.id': { + category: 'user', + description: 'Unique identifier for the group on the system/platform. ', + name: 'user.audit.group.id', + type: 'keyword', + }, + 'user.audit.group.name': { + category: 'user', + description: 'Name of the group. ', + name: 'user.audit.group.name', + type: 'keyword', + }, + 'user.owner.id': { + category: 'user', + description: 'One or multiple unique identifiers of the user. ', + name: 'user.owner.id', + type: 'keyword', + }, + 'user.owner.name': { + category: 'user', + description: 'Short name or login of the user. ', + example: 'albert', + name: 'user.owner.name', + type: 'keyword', + }, + 'user.owner.group.id': { + category: 'user', + description: 'Unique identifier for the group on the system/platform. ', + name: 'user.owner.group.id', + type: 'keyword', + }, + 'user.owner.group.name': { + category: 'user', + description: 'Name of the group. ', + name: 'user.owner.group.name', + type: 'keyword', + }, + 'auditd.log.old_auid': { + category: 'auditd', + description: + 'For login events this is the old audit ID used for the user prior to this login. ', + name: 'auditd.log.old_auid', + }, + 'auditd.log.new_auid': { + category: 'auditd', + description: + 'For login events this is the new audit ID. The audit ID can be used to trace future events to the user even if their identity changes (like becoming root). ', + name: 'auditd.log.new_auid', + }, + 'auditd.log.old_ses': { + category: 'auditd', + description: + 'For login events this is the old session ID used for the user prior to this login. ', + name: 'auditd.log.old_ses', + }, + 'auditd.log.new_ses': { + category: 'auditd', + description: + 'For login events this is the new session ID. It can be used to tie a user to future events by session ID. ', + name: 'auditd.log.new_ses', + }, + 'auditd.log.sequence': { + category: 'auditd', + description: 'The audit event sequence number. ', + name: 'auditd.log.sequence', + type: 'long', + }, + 'auditd.log.items': { + category: 'auditd', + description: 'The number of items in an event. ', + name: 'auditd.log.items', + }, + 'auditd.log.item': { + category: 'auditd', + description: + 'The item field indicates which item out of the total number of items. This number is zero-based; a value of 0 means it is the first item. ', + name: 'auditd.log.item', + }, + 'auditd.log.tty': { + category: 'auditd', + name: 'auditd.log.tty', + type: 'keyword', + }, + 'auditd.log.a0': { + category: 'auditd', + description: 'The first argument to the system call. ', + name: 'auditd.log.a0', + }, + 'auditd.log.addr': { + category: 'auditd', + name: 'auditd.log.addr', + type: 'ip', + }, + 'auditd.log.rport': { + category: 'auditd', + name: 'auditd.log.rport', + type: 'long', + }, + 'auditd.log.laddr': { + category: 'auditd', + name: 'auditd.log.laddr', + type: 'ip', + }, + 'auditd.log.lport': { + category: 'auditd', + name: 'auditd.log.lport', + type: 'long', + }, + 'auditd.log.acct': { + category: 'auditd', + name: 'auditd.log.acct', + type: 'alias', + }, + 'auditd.log.pid': { + category: 'auditd', + name: 'auditd.log.pid', + type: 'alias', + }, + 'auditd.log.ppid': { + category: 'auditd', + name: 'auditd.log.ppid', + type: 'alias', + }, + 'auditd.log.res': { + category: 'auditd', + name: 'auditd.log.res', + type: 'alias', + }, + 'auditd.log.record_type': { + category: 'auditd', + name: 'auditd.log.record_type', + type: 'alias', + }, + 'auditd.log.geoip.continent_name': { + category: 'auditd', + name: 'auditd.log.geoip.continent_name', + type: 'alias', + }, + 'auditd.log.geoip.country_iso_code': { + category: 'auditd', + name: 'auditd.log.geoip.country_iso_code', + type: 'alias', + }, + 'auditd.log.geoip.location': { + category: 'auditd', + name: 'auditd.log.geoip.location', + type: 'alias', + }, + 'auditd.log.geoip.region_name': { + category: 'auditd', + name: 'auditd.log.geoip.region_name', + type: 'alias', + }, + 'auditd.log.geoip.city_name': { + category: 'auditd', + name: 'auditd.log.geoip.city_name', + type: 'alias', + }, + 'auditd.log.geoip.region_iso_code': { + category: 'auditd', + name: 'auditd.log.geoip.region_iso_code', + type: 'alias', + }, + 'auditd.log.arch': { + category: 'auditd', + name: 'auditd.log.arch', + type: 'alias', + }, + 'auditd.log.gid': { + category: 'auditd', + name: 'auditd.log.gid', + type: 'alias', + }, + 'auditd.log.uid': { + category: 'auditd', + name: 'auditd.log.uid', + type: 'alias', + }, + 'auditd.log.agid': { + category: 'auditd', + name: 'auditd.log.agid', + type: 'alias', + }, + 'auditd.log.auid': { + category: 'auditd', + name: 'auditd.log.auid', + type: 'alias', + }, + 'auditd.log.fsgid': { + category: 'auditd', + name: 'auditd.log.fsgid', + type: 'alias', + }, + 'auditd.log.fsuid': { + category: 'auditd', + name: 'auditd.log.fsuid', + type: 'alias', + }, + 'auditd.log.egid': { + category: 'auditd', + name: 'auditd.log.egid', + type: 'alias', + }, + 'auditd.log.euid': { + category: 'auditd', + name: 'auditd.log.euid', + type: 'alias', + }, + 'auditd.log.sgid': { + category: 'auditd', + name: 'auditd.log.sgid', + type: 'alias', + }, + 'auditd.log.suid': { + category: 'auditd', + name: 'auditd.log.suid', + type: 'alias', + }, + 'auditd.log.ogid': { + category: 'auditd', + name: 'auditd.log.ogid', + type: 'alias', + }, + 'auditd.log.ouid': { + category: 'auditd', + name: 'auditd.log.ouid', + type: 'alias', + }, + 'auditd.log.comm': { + category: 'auditd', + name: 'auditd.log.comm', + type: 'alias', + }, + 'auditd.log.exe': { + category: 'auditd', + name: 'auditd.log.exe', + type: 'alias', + }, + 'auditd.log.terminal': { + category: 'auditd', + name: 'auditd.log.terminal', + type: 'alias', + }, + 'auditd.log.msg': { + category: 'auditd', + name: 'auditd.log.msg', + type: 'alias', + }, + 'auditd.log.src': { + category: 'auditd', + name: 'auditd.log.src', + type: 'alias', + }, + 'auditd.log.dst': { + category: 'auditd', + name: 'auditd.log.dst', + type: 'alias', + }, + 'elasticsearch.component': { + category: 'elasticsearch', + description: 'Elasticsearch component from where the log event originated', + example: 'o.e.c.m.MetaDataCreateIndexService', + name: 'elasticsearch.component', + type: 'keyword', + }, + 'elasticsearch.cluster.uuid': { + category: 'elasticsearch', + description: 'UUID of the cluster', + example: 'GmvrbHlNTiSVYiPf8kxg9g', + name: 'elasticsearch.cluster.uuid', + type: 'keyword', + }, + 'elasticsearch.cluster.name': { + category: 'elasticsearch', + description: 'Name of the cluster', + example: 'docker-cluster', + name: 'elasticsearch.cluster.name', + type: 'keyword', + }, + 'elasticsearch.node.id': { + category: 'elasticsearch', + description: 'ID of the node', + example: 'DSiWcTyeThWtUXLB9J0BMw', + name: 'elasticsearch.node.id', + type: 'keyword', + }, + 'elasticsearch.node.name': { + category: 'elasticsearch', + description: 'Name of the node', + example: 'vWNJsZ3', + name: 'elasticsearch.node.name', + type: 'keyword', + }, + 'elasticsearch.index.name': { + category: 'elasticsearch', + description: 'Index name', + example: 'filebeat-test-input', + name: 'elasticsearch.index.name', + type: 'keyword', + }, + 'elasticsearch.index.id': { + category: 'elasticsearch', + description: 'Index id', + example: 'aOGgDwbURfCV57AScqbCgw', + name: 'elasticsearch.index.id', + type: 'keyword', + }, + 'elasticsearch.shard.id': { + category: 'elasticsearch', + description: 'Id of the shard', + example: '0', + name: 'elasticsearch.shard.id', + type: 'keyword', + }, + 'elasticsearch.audit.layer': { + category: 'elasticsearch', + description: 'The layer from which this event originated: rest, transport or ip_filter', + example: 'rest', + name: 'elasticsearch.audit.layer', + type: 'keyword', + }, + 'elasticsearch.audit.event_type': { + category: 'elasticsearch', + description: + 'The type of event that occurred: anonymous_access_denied, authentication_failed, access_denied, access_granted, connection_granted, connection_denied, tampered_request, run_as_granted, run_as_denied', + example: 'access_granted', + name: 'elasticsearch.audit.event_type', + type: 'keyword', + }, + 'elasticsearch.audit.origin.type': { + category: 'elasticsearch', + description: + 'Where the request originated: rest (request originated from a REST API request), transport (request was received on the transport channel), local_node (the local node issued the request)', + example: 'local_node', + name: 'elasticsearch.audit.origin.type', + type: 'keyword', + }, + 'elasticsearch.audit.realm': { + category: 'elasticsearch', + description: 'The authentication realm the authentication was validated against', + name: 'elasticsearch.audit.realm', + type: 'keyword', + }, + 'elasticsearch.audit.user.realm': { + category: 'elasticsearch', + description: "The user's authentication realm, if authenticated", + name: 'elasticsearch.audit.user.realm', + type: 'keyword', + }, + 'elasticsearch.audit.user.roles': { + category: 'elasticsearch', + description: 'Roles to which the principal belongs', + example: '["kibana_admin","beats_admin"]', + name: 'elasticsearch.audit.user.roles', + type: 'keyword', + }, + 'elasticsearch.audit.user.run_as.name': { + category: 'elasticsearch', + name: 'elasticsearch.audit.user.run_as.name', + type: 'keyword', + }, + 'elasticsearch.audit.user.run_as.realm': { + category: 'elasticsearch', + name: 'elasticsearch.audit.user.run_as.realm', + type: 'keyword', + }, + 'elasticsearch.audit.component': { + category: 'elasticsearch', + name: 'elasticsearch.audit.component', + type: 'keyword', + }, + 'elasticsearch.audit.action': { + category: 'elasticsearch', + description: 'The name of the action that was executed', + example: 'cluster:monitor/main', + name: 'elasticsearch.audit.action', + type: 'keyword', + }, + 'elasticsearch.audit.url.params': { + category: 'elasticsearch', + description: 'REST URI parameters', + example: '{username=jacknich2}', + name: 'elasticsearch.audit.url.params', + }, + 'elasticsearch.audit.indices': { + category: 'elasticsearch', + description: 'Indices accessed by action', + example: '["foo-2019.01.04","foo-2019.01.03","foo-2019.01.06"]', + name: 'elasticsearch.audit.indices', + type: 'keyword', + }, + 'elasticsearch.audit.request.id': { + category: 'elasticsearch', + description: 'Unique ID of request', + example: 'WzL_kb6VSvOhAq0twPvHOQ', + name: 'elasticsearch.audit.request.id', + type: 'keyword', + }, + 'elasticsearch.audit.request.name': { + category: 'elasticsearch', + description: 'The type of request that was executed', + example: 'ClearScrollRequest', + name: 'elasticsearch.audit.request.name', + type: 'keyword', + }, + 'elasticsearch.audit.request_body': { + category: 'elasticsearch', + name: 'elasticsearch.audit.request_body', + type: 'alias', + }, + 'elasticsearch.audit.origin_address': { + category: 'elasticsearch', + name: 'elasticsearch.audit.origin_address', + type: 'alias', + }, + 'elasticsearch.audit.uri': { + category: 'elasticsearch', + name: 'elasticsearch.audit.uri', + type: 'alias', + }, + 'elasticsearch.audit.principal': { + category: 'elasticsearch', + name: 'elasticsearch.audit.principal', + type: 'alias', + }, + 'elasticsearch.audit.message': { + category: 'elasticsearch', + name: 'elasticsearch.audit.message', + type: 'text', + }, + 'elasticsearch.audit.invalidate.apikeys.owned_by_authenticated_user': { + category: 'elasticsearch', + name: 'elasticsearch.audit.invalidate.apikeys.owned_by_authenticated_user', + type: 'boolean', + }, + 'elasticsearch.deprecation': { + category: 'elasticsearch', + description: '', + name: 'elasticsearch.deprecation', + type: 'group', + }, + 'elasticsearch.gc.phase.name': { + category: 'elasticsearch', + description: 'Name of the GC collection phase. ', + name: 'elasticsearch.gc.phase.name', + type: 'keyword', + }, + 'elasticsearch.gc.phase.duration_sec': { + category: 'elasticsearch', + description: 'Collection phase duration according to the Java virtual machine. ', + name: 'elasticsearch.gc.phase.duration_sec', + type: 'float', + }, + 'elasticsearch.gc.phase.scrub_symbol_table_time_sec': { + category: 'elasticsearch', + description: 'Pause time in seconds cleaning up symbol tables. ', + name: 'elasticsearch.gc.phase.scrub_symbol_table_time_sec', + type: 'float', + }, + 'elasticsearch.gc.phase.scrub_string_table_time_sec': { + category: 'elasticsearch', + description: 'Pause time in seconds cleaning up string tables. ', + name: 'elasticsearch.gc.phase.scrub_string_table_time_sec', + type: 'float', + }, + 'elasticsearch.gc.phase.weak_refs_processing_time_sec': { + category: 'elasticsearch', + description: 'Time spent processing weak references in seconds. ', + name: 'elasticsearch.gc.phase.weak_refs_processing_time_sec', + type: 'float', + }, + 'elasticsearch.gc.phase.parallel_rescan_time_sec': { + category: 'elasticsearch', + description: 'Time spent in seconds marking live objects while application is stopped. ', + name: 'elasticsearch.gc.phase.parallel_rescan_time_sec', + type: 'float', + }, + 'elasticsearch.gc.phase.class_unload_time_sec': { + category: 'elasticsearch', + description: 'Time spent unloading unused classes in seconds. ', + name: 'elasticsearch.gc.phase.class_unload_time_sec', + type: 'float', + }, + 'elasticsearch.gc.phase.cpu_time.user_sec': { + category: 'elasticsearch', + description: 'CPU time spent outside the kernel. ', + name: 'elasticsearch.gc.phase.cpu_time.user_sec', + type: 'float', + }, + 'elasticsearch.gc.phase.cpu_time.sys_sec': { + category: 'elasticsearch', + description: 'CPU time spent inside the kernel. ', + name: 'elasticsearch.gc.phase.cpu_time.sys_sec', + type: 'float', + }, + 'elasticsearch.gc.phase.cpu_time.real_sec': { + category: 'elasticsearch', + description: 'Total elapsed CPU time spent to complete the collection from start to finish. ', + name: 'elasticsearch.gc.phase.cpu_time.real_sec', + type: 'float', + }, + 'elasticsearch.gc.jvm_runtime_sec': { + category: 'elasticsearch', + description: 'The time from JVM start up in seconds, as a floating point number. ', + name: 'elasticsearch.gc.jvm_runtime_sec', + type: 'float', + }, + 'elasticsearch.gc.threads_total_stop_time_sec': { + category: 'elasticsearch', + description: 'Garbage collection threads total stop time seconds. ', + name: 'elasticsearch.gc.threads_total_stop_time_sec', + type: 'float', + }, + 'elasticsearch.gc.stopping_threads_time_sec': { + category: 'elasticsearch', + description: 'Time took to stop threads seconds. ', + name: 'elasticsearch.gc.stopping_threads_time_sec', + type: 'float', + }, + 'elasticsearch.gc.tags': { + category: 'elasticsearch', + description: 'GC logging tags. ', + name: 'elasticsearch.gc.tags', + type: 'keyword', + }, + 'elasticsearch.gc.heap.size_kb': { + category: 'elasticsearch', + description: 'Total heap size in kilobytes. ', + name: 'elasticsearch.gc.heap.size_kb', + type: 'integer', + }, + 'elasticsearch.gc.heap.used_kb': { + category: 'elasticsearch', + description: 'Used heap in kilobytes. ', + name: 'elasticsearch.gc.heap.used_kb', + type: 'integer', + }, + 'elasticsearch.gc.old_gen.size_kb': { + category: 'elasticsearch', + description: 'Total size of old generation in kilobytes. ', + name: 'elasticsearch.gc.old_gen.size_kb', + type: 'integer', + }, + 'elasticsearch.gc.old_gen.used_kb': { + category: 'elasticsearch', + description: 'Old generation occupancy in kilobytes. ', + name: 'elasticsearch.gc.old_gen.used_kb', + type: 'integer', + }, + 'elasticsearch.gc.young_gen.size_kb': { + category: 'elasticsearch', + description: 'Total size of young generation in kilobytes. ', + name: 'elasticsearch.gc.young_gen.size_kb', + type: 'integer', + }, + 'elasticsearch.gc.young_gen.used_kb': { + category: 'elasticsearch', + description: 'Young generation occupancy in kilobytes. ', + name: 'elasticsearch.gc.young_gen.used_kb', + type: 'integer', + }, + 'elasticsearch.server.stacktrace': { + category: 'elasticsearch', + name: 'elasticsearch.server.stacktrace', + }, + 'elasticsearch.server.gc.young.one': { + category: 'elasticsearch', + description: '', + example: '', + name: 'elasticsearch.server.gc.young.one', + type: 'long', + }, + 'elasticsearch.server.gc.young.two': { + category: 'elasticsearch', + description: '', + example: '', + name: 'elasticsearch.server.gc.young.two', + type: 'long', + }, + 'elasticsearch.server.gc.overhead_seq': { + category: 'elasticsearch', + description: 'Sequence number', + example: 3449992, + name: 'elasticsearch.server.gc.overhead_seq', + type: 'long', + }, + 'elasticsearch.server.gc.collection_duration.ms': { + category: 'elasticsearch', + description: 'Time spent in GC, in milliseconds', + example: 1600, + name: 'elasticsearch.server.gc.collection_duration.ms', + type: 'float', + }, + 'elasticsearch.server.gc.observation_duration.ms': { + category: 'elasticsearch', + description: 'Total time over which collection was observed, in milliseconds', + example: 1800, + name: 'elasticsearch.server.gc.observation_duration.ms', + type: 'float', + }, + 'elasticsearch.slowlog.logger': { + category: 'elasticsearch', + description: 'Logger name', + example: 'index.search.slowlog.fetch', + name: 'elasticsearch.slowlog.logger', + type: 'keyword', + }, + 'elasticsearch.slowlog.took': { + category: 'elasticsearch', + description: 'Time it took to execute the query', + example: '300ms', + name: 'elasticsearch.slowlog.took', + type: 'keyword', + }, + 'elasticsearch.slowlog.types': { + category: 'elasticsearch', + description: 'Types', + example: '', + name: 'elasticsearch.slowlog.types', + type: 'keyword', + }, + 'elasticsearch.slowlog.stats': { + category: 'elasticsearch', + description: 'Stats groups', + example: 'group1', + name: 'elasticsearch.slowlog.stats', + type: 'keyword', + }, + 'elasticsearch.slowlog.search_type': { + category: 'elasticsearch', + description: 'Search type', + example: 'QUERY_THEN_FETCH', + name: 'elasticsearch.slowlog.search_type', + type: 'keyword', + }, + 'elasticsearch.slowlog.source_query': { + category: 'elasticsearch', + description: 'Slow query', + example: '{"query":{"match_all":{"boost":1.0}}}', + name: 'elasticsearch.slowlog.source_query', + type: 'keyword', + }, + 'elasticsearch.slowlog.extra_source': { + category: 'elasticsearch', + description: 'Extra source information', + example: '', + name: 'elasticsearch.slowlog.extra_source', + type: 'keyword', + }, + 'elasticsearch.slowlog.total_hits': { + category: 'elasticsearch', + description: 'Total hits', + example: 42, + name: 'elasticsearch.slowlog.total_hits', + type: 'keyword', + }, + 'elasticsearch.slowlog.total_shards': { + category: 'elasticsearch', + description: 'Total queried shards', + example: 22, + name: 'elasticsearch.slowlog.total_shards', + type: 'keyword', + }, + 'elasticsearch.slowlog.routing': { + category: 'elasticsearch', + description: 'Routing', + example: 's01HZ2QBk9jw4gtgaFtn', + name: 'elasticsearch.slowlog.routing', + type: 'keyword', + }, + 'elasticsearch.slowlog.id': { + category: 'elasticsearch', + description: 'Id', + example: '', + name: 'elasticsearch.slowlog.id', + type: 'keyword', + }, + 'elasticsearch.slowlog.type': { + category: 'elasticsearch', + description: 'Type', + example: 'doc', + name: 'elasticsearch.slowlog.type', + type: 'keyword', + }, + 'elasticsearch.slowlog.source': { + category: 'elasticsearch', + description: 'Source of document that was indexed', + name: 'elasticsearch.slowlog.source', + type: 'keyword', + }, + 'haproxy.frontend_name': { + category: 'haproxy', + description: 'Name of the frontend (or listener) which received and processed the connection.', + name: 'haproxy.frontend_name', + }, + 'haproxy.backend_name': { + category: 'haproxy', + description: + 'Name of the backend (or listener) which was selected to manage the connection to the server.', + name: 'haproxy.backend_name', + }, + 'haproxy.server_name': { + category: 'haproxy', + description: 'Name of the last server to which the connection was sent.', + name: 'haproxy.server_name', + }, + 'haproxy.total_waiting_time_ms': { + category: 'haproxy', + description: 'Total time in milliseconds spent waiting in the various queues', + name: 'haproxy.total_waiting_time_ms', + type: 'long', + }, + 'haproxy.connection_wait_time_ms': { + category: 'haproxy', + description: + 'Total time in milliseconds spent waiting for the connection to establish to the final server', + name: 'haproxy.connection_wait_time_ms', + type: 'long', + }, + 'haproxy.bytes_read': { + category: 'haproxy', + description: 'Total number of bytes transmitted to the client when the log is emitted.', + name: 'haproxy.bytes_read', + type: 'long', + }, + 'haproxy.time_queue': { + category: 'haproxy', + description: 'Total time in milliseconds spent waiting in the various queues.', + name: 'haproxy.time_queue', + type: 'long', + }, + 'haproxy.time_backend_connect': { + category: 'haproxy', + description: + 'Total time in milliseconds spent waiting for the connection to establish to the final server, including retries.', + name: 'haproxy.time_backend_connect', + type: 'long', + }, + 'haproxy.server_queue': { + category: 'haproxy', + description: + 'Total number of requests which were processed before this one in the server queue.', + name: 'haproxy.server_queue', + type: 'long', + }, + 'haproxy.backend_queue': { + category: 'haproxy', + description: + "Total number of requests which were processed before this one in the backend's global queue.", + name: 'haproxy.backend_queue', + type: 'long', + }, + 'haproxy.bind_name': { + category: 'haproxy', + description: 'Name of the listening address which received the connection.', + name: 'haproxy.bind_name', + }, + 'haproxy.error_message': { + category: 'haproxy', + description: 'Error message logged by HAProxy in case of error.', + name: 'haproxy.error_message', + type: 'text', + }, + 'haproxy.source': { + category: 'haproxy', + description: 'The HAProxy source of the log', + name: 'haproxy.source', + type: 'keyword', + }, + 'haproxy.termination_state': { + category: 'haproxy', + description: 'Condition the session was in when the session ended.', + name: 'haproxy.termination_state', + }, + 'haproxy.mode': { + category: 'haproxy', + description: 'mode that the frontend is operating (TCP or HTTP)', + name: 'haproxy.mode', + type: 'keyword', + }, + 'haproxy.connections.active': { + category: 'haproxy', + description: + 'Total number of concurrent connections on the process when the session was logged.', + name: 'haproxy.connections.active', + type: 'long', + }, + 'haproxy.connections.frontend': { + category: 'haproxy', + description: + 'Total number of concurrent connections on the frontend when the session was logged.', + name: 'haproxy.connections.frontend', + type: 'long', + }, + 'haproxy.connections.backend': { + category: 'haproxy', + description: + 'Total number of concurrent connections handled by the backend when the session was logged.', + name: 'haproxy.connections.backend', + type: 'long', + }, + 'haproxy.connections.server': { + category: 'haproxy', + description: + 'Total number of concurrent connections still active on the server when the session was logged.', + name: 'haproxy.connections.server', + type: 'long', + }, + 'haproxy.connections.retries': { + category: 'haproxy', + description: + 'Number of connection retries experienced by this session when trying to connect to the server.', + name: 'haproxy.connections.retries', + type: 'long', + }, + 'haproxy.client.ip': { + category: 'haproxy', + name: 'haproxy.client.ip', + type: 'alias', + }, + 'haproxy.client.port': { + category: 'haproxy', + name: 'haproxy.client.port', + type: 'alias', + }, + 'haproxy.process_name': { + category: 'haproxy', + name: 'haproxy.process_name', + type: 'alias', + }, + 'haproxy.pid': { + category: 'haproxy', + name: 'haproxy.pid', + type: 'alias', + }, + 'haproxy.destination.port': { + category: 'haproxy', + name: 'haproxy.destination.port', + type: 'alias', + }, + 'haproxy.destination.ip': { + category: 'haproxy', + name: 'haproxy.destination.ip', + type: 'alias', + }, + 'haproxy.geoip.continent_name': { + category: 'haproxy', + name: 'haproxy.geoip.continent_name', + type: 'alias', + }, + 'haproxy.geoip.country_iso_code': { + category: 'haproxy', + name: 'haproxy.geoip.country_iso_code', + type: 'alias', + }, + 'haproxy.geoip.location': { + category: 'haproxy', + name: 'haproxy.geoip.location', + type: 'alias', + }, + 'haproxy.geoip.region_name': { + category: 'haproxy', + name: 'haproxy.geoip.region_name', + type: 'alias', + }, + 'haproxy.geoip.city_name': { + category: 'haproxy', + name: 'haproxy.geoip.city_name', + type: 'alias', + }, + 'haproxy.geoip.region_iso_code': { + category: 'haproxy', + name: 'haproxy.geoip.region_iso_code', + type: 'alias', + }, + 'haproxy.http.response.captured_cookie': { + category: 'haproxy', + description: + 'Optional "name=value" entry indicating that the client had this cookie in the response. ', + name: 'haproxy.http.response.captured_cookie', + }, + 'haproxy.http.response.captured_headers': { + category: 'haproxy', + description: + 'List of headers captured in the response due to the presence of the "capture response header" statement in the frontend. ', + name: 'haproxy.http.response.captured_headers', + type: 'keyword', + }, + 'haproxy.http.response.status_code': { + category: 'haproxy', + name: 'haproxy.http.response.status_code', + type: 'alias', + }, + 'haproxy.http.request.captured_cookie': { + category: 'haproxy', + description: + 'Optional "name=value" entry indicating that the server has returned a cookie with its request. ', + name: 'haproxy.http.request.captured_cookie', + }, + 'haproxy.http.request.captured_headers': { + category: 'haproxy', + description: + 'List of headers captured in the request due to the presence of the "capture request header" statement in the frontend. ', + name: 'haproxy.http.request.captured_headers', + type: 'keyword', + }, + 'haproxy.http.request.raw_request_line': { + category: 'haproxy', + description: + 'Complete HTTP request line, including the method, request and HTTP version string.', + name: 'haproxy.http.request.raw_request_line', + type: 'keyword', + }, + 'haproxy.http.request.time_wait_without_data_ms': { + category: 'haproxy', + description: + 'Total time in milliseconds spent waiting for the server to send a full HTTP response, not counting data.', + name: 'haproxy.http.request.time_wait_without_data_ms', + type: 'long', + }, + 'haproxy.http.request.time_wait_ms': { + category: 'haproxy', + description: + 'Total time in milliseconds spent waiting for a full HTTP request from the client (not counting body) after the first byte was received.', + name: 'haproxy.http.request.time_wait_ms', + type: 'long', + }, + 'haproxy.tcp.connection_waiting_time_ms': { + category: 'haproxy', + description: 'Total time in milliseconds elapsed between the accept and the last close', + name: 'haproxy.tcp.connection_waiting_time_ms', + type: 'long', + }, + 'icinga.debug.facility': { + category: 'icinga', + description: 'Specifies what component of Icinga logged the message. ', + name: 'icinga.debug.facility', + type: 'keyword', + }, + 'icinga.debug.severity': { + category: 'icinga', + name: 'icinga.debug.severity', + type: 'alias', + }, + 'icinga.debug.message': { + category: 'icinga', + name: 'icinga.debug.message', + type: 'alias', + }, + 'icinga.main.facility': { + category: 'icinga', + description: 'Specifies what component of Icinga logged the message. ', + name: 'icinga.main.facility', + type: 'keyword', + }, + 'icinga.main.severity': { + category: 'icinga', + name: 'icinga.main.severity', + type: 'alias', + }, + 'icinga.main.message': { + category: 'icinga', + name: 'icinga.main.message', + type: 'alias', + }, + 'icinga.startup.facility': { + category: 'icinga', + description: 'Specifies what component of Icinga logged the message. ', + name: 'icinga.startup.facility', + type: 'keyword', + }, + 'icinga.startup.severity': { + category: 'icinga', + name: 'icinga.startup.severity', + type: 'alias', + }, + 'icinga.startup.message': { + category: 'icinga', + name: 'icinga.startup.message', + type: 'alias', + }, + 'iis.access.sub_status': { + category: 'iis', + description: 'The HTTP substatus code. ', + name: 'iis.access.sub_status', + type: 'long', + }, + 'iis.access.win32_status': { + category: 'iis', + description: 'The Windows status code. ', + name: 'iis.access.win32_status', + type: 'long', + }, + 'iis.access.site_name': { + category: 'iis', + description: 'The site name and instance number. ', + name: 'iis.access.site_name', + type: 'keyword', + }, + 'iis.access.server_name': { + category: 'iis', + description: 'The name of the server on which the log file entry was generated. ', + name: 'iis.access.server_name', + type: 'keyword', + }, + 'iis.access.cookie': { + category: 'iis', + description: 'The content of the cookie sent or received, if any. ', + name: 'iis.access.cookie', + type: 'keyword', + }, + 'iis.access.body_received.bytes': { + category: 'iis', + name: 'iis.access.body_received.bytes', + type: 'alias', + }, + 'iis.access.body_sent.bytes': { + category: 'iis', + name: 'iis.access.body_sent.bytes', + type: 'alias', + }, + 'iis.access.server_ip': { + category: 'iis', + name: 'iis.access.server_ip', + type: 'alias', + }, + 'iis.access.method': { + category: 'iis', + name: 'iis.access.method', + type: 'alias', + }, + 'iis.access.url': { + category: 'iis', + name: 'iis.access.url', + type: 'alias', + }, + 'iis.access.query_string': { + category: 'iis', + name: 'iis.access.query_string', + type: 'alias', + }, + 'iis.access.port': { + category: 'iis', + name: 'iis.access.port', + type: 'alias', + }, + 'iis.access.user_name': { + category: 'iis', + name: 'iis.access.user_name', + type: 'alias', + }, + 'iis.access.remote_ip': { + category: 'iis', + name: 'iis.access.remote_ip', + type: 'alias', + }, + 'iis.access.referrer': { + category: 'iis', + name: 'iis.access.referrer', + type: 'alias', + }, + 'iis.access.response_code': { + category: 'iis', + name: 'iis.access.response_code', + type: 'alias', + }, + 'iis.access.http_version': { + category: 'iis', + name: 'iis.access.http_version', + type: 'alias', + }, + 'iis.access.hostname': { + category: 'iis', + name: 'iis.access.hostname', + type: 'alias', + }, + 'iis.access.user_agent.device': { + category: 'iis', + name: 'iis.access.user_agent.device', + type: 'alias', + }, + 'iis.access.user_agent.name': { + category: 'iis', + name: 'iis.access.user_agent.name', + type: 'alias', + }, + 'iis.access.user_agent.os': { + category: 'iis', + name: 'iis.access.user_agent.os', + type: 'alias', + }, + 'iis.access.user_agent.os_name': { + category: 'iis', + name: 'iis.access.user_agent.os_name', + type: 'alias', + }, + 'iis.access.user_agent.original': { + category: 'iis', + name: 'iis.access.user_agent.original', + type: 'alias', + }, + 'iis.access.geoip.continent_name': { + category: 'iis', + name: 'iis.access.geoip.continent_name', + type: 'alias', + }, + 'iis.access.geoip.country_iso_code': { + category: 'iis', + name: 'iis.access.geoip.country_iso_code', + type: 'alias', + }, + 'iis.access.geoip.location': { + category: 'iis', + name: 'iis.access.geoip.location', + type: 'alias', + }, + 'iis.access.geoip.region_name': { + category: 'iis', + name: 'iis.access.geoip.region_name', + type: 'alias', + }, + 'iis.access.geoip.city_name': { + category: 'iis', + name: 'iis.access.geoip.city_name', + type: 'alias', + }, + 'iis.access.geoip.region_iso_code': { + category: 'iis', + name: 'iis.access.geoip.region_iso_code', + type: 'alias', + }, + 'iis.error.reason_phrase': { + category: 'iis', + description: 'The HTTP reason phrase. ', + name: 'iis.error.reason_phrase', + type: 'keyword', + }, + 'iis.error.queue_name': { + category: 'iis', + description: 'The IIS application pool name. ', + name: 'iis.error.queue_name', + type: 'keyword', + }, + 'iis.error.remote_ip': { + category: 'iis', + name: 'iis.error.remote_ip', + type: 'alias', + }, + 'iis.error.remote_port': { + category: 'iis', + name: 'iis.error.remote_port', + type: 'alias', + }, + 'iis.error.server_ip': { + category: 'iis', + name: 'iis.error.server_ip', + type: 'alias', + }, + 'iis.error.server_port': { + category: 'iis', + name: 'iis.error.server_port', + type: 'alias', + }, + 'iis.error.http_version': { + category: 'iis', + name: 'iis.error.http_version', + type: 'alias', + }, + 'iis.error.method': { + category: 'iis', + name: 'iis.error.method', + type: 'alias', + }, + 'iis.error.url': { + category: 'iis', + name: 'iis.error.url', + type: 'alias', + }, + 'iis.error.response_code': { + category: 'iis', + name: 'iis.error.response_code', + type: 'alias', + }, + 'iis.error.geoip.continent_name': { + category: 'iis', + name: 'iis.error.geoip.continent_name', + type: 'alias', + }, + 'iis.error.geoip.country_iso_code': { + category: 'iis', + name: 'iis.error.geoip.country_iso_code', + type: 'alias', + }, + 'iis.error.geoip.location': { + category: 'iis', + name: 'iis.error.geoip.location', + type: 'alias', + }, + 'iis.error.geoip.region_name': { + category: 'iis', + name: 'iis.error.geoip.region_name', + type: 'alias', + }, + 'iis.error.geoip.city_name': { + category: 'iis', + name: 'iis.error.geoip.city_name', + type: 'alias', + }, + 'iis.error.geoip.region_iso_code': { + category: 'iis', + name: 'iis.error.geoip.region_iso_code', + type: 'alias', + }, + 'kafka.log.component': { + category: 'kafka', + description: 'Component the log is coming from. ', + name: 'kafka.log.component', + type: 'keyword', + }, + 'kafka.log.class': { + category: 'kafka', + description: 'Java class the log is coming from. ', + name: 'kafka.log.class', + type: 'keyword', + }, + 'kafka.log.thread': { + category: 'kafka', + description: 'Thread name the log is coming from. ', + name: 'kafka.log.thread', + type: 'keyword', + }, + 'kafka.log.trace.class': { + category: 'kafka', + description: 'Java class the trace is coming from. ', + name: 'kafka.log.trace.class', + type: 'keyword', + }, + 'kafka.log.trace.message': { + category: 'kafka', + description: 'Message part of the trace. ', + name: 'kafka.log.trace.message', + type: 'text', + }, + 'kibana.session_id': { + category: 'kibana', + description: + 'The ID of the user session associated with this event. Each login attempt results in a unique session id.', + example: '123e4567-e89b-12d3-a456-426614174000', + name: 'kibana.session_id', + type: 'keyword', + }, + 'kibana.space_id': { + category: 'kibana', + description: 'The id of the space associated with this event.', + example: 'default', + name: 'kibana.space_id', + type: 'keyword', + }, + 'kibana.saved_object.type': { + category: 'kibana', + description: 'The type of the saved object associated with this event.', + example: 'dashboard', + name: 'kibana.saved_object.type', + type: 'keyword', + }, + 'kibana.saved_object.id': { + category: 'kibana', + description: 'The id of the saved object associated with this event.', + example: '6295bdd0-0a0e-11e7-825f-6748cda7d858', + name: 'kibana.saved_object.id', + type: 'keyword', + }, + 'kibana.add_to_spaces': { + category: 'kibana', + description: 'The set of space ids that a saved object was shared to.', + example: "['default', 'marketing']", + name: 'kibana.add_to_spaces', + type: 'keyword', + }, + 'kibana.delete_from_spaces': { + category: 'kibana', + description: 'The set of space ids that a saved object was removed from.', + example: "['default', 'marketing']", + name: 'kibana.delete_from_spaces', + type: 'keyword', + }, + 'kibana.authentication_provider': { + category: 'kibana', + description: 'The authentication provider associated with a login event.', + example: 'basic1', + name: 'kibana.authentication_provider', + type: 'keyword', + }, + 'kibana.authentication_type': { + category: 'kibana', + description: 'The authentication provider type associated with a login event.', + example: 'basic', + name: 'kibana.authentication_type', + type: 'keyword', + }, + 'kibana.authentication_realm': { + category: 'kibana', + description: 'The Elasticsearch authentication realm name which fulfilled a login event.', + example: 'native', + name: 'kibana.authentication_realm', + type: 'keyword', + }, + 'kibana.lookup_realm': { + category: 'kibana', + description: 'The Elasticsearch lookup realm which fulfilled a login event.', + example: 'native', + name: 'kibana.lookup_realm', + type: 'keyword', + }, + 'kibana.log.tags': { + category: 'kibana', + description: 'Kibana logging tags. ', + name: 'kibana.log.tags', + type: 'keyword', + }, + 'kibana.log.state': { + category: 'kibana', + description: 'Current state of Kibana. ', + name: 'kibana.log.state', + type: 'keyword', + }, + 'kibana.log.meta': { + category: 'kibana', + name: 'kibana.log.meta', + type: 'object', + }, + 'kibana.log.kibana.log.meta.req.headers.referer': { + category: 'kibana', + name: 'kibana.log.kibana.log.meta.req.headers.referer', + type: 'alias', + }, + 'kibana.log.kibana.log.meta.req.referer': { + category: 'kibana', + name: 'kibana.log.kibana.log.meta.req.referer', + type: 'alias', + }, + 'kibana.log.kibana.log.meta.req.headers.user-agent': { + category: 'kibana', + name: 'kibana.log.kibana.log.meta.req.headers.user-agent', + type: 'alias', + }, + 'kibana.log.kibana.log.meta.req.remoteAddress': { + category: 'kibana', + name: 'kibana.log.kibana.log.meta.req.remoteAddress', + type: 'alias', + }, + 'kibana.log.kibana.log.meta.req.url': { + category: 'kibana', + name: 'kibana.log.kibana.log.meta.req.url', + type: 'alias', + }, + 'kibana.log.kibana.log.meta.statusCode': { + category: 'kibana', + name: 'kibana.log.kibana.log.meta.statusCode', + type: 'alias', + }, + 'kibana.log.kibana.log.meta.method': { + category: 'kibana', + name: 'kibana.log.kibana.log.meta.method', + type: 'alias', + }, + 'logstash.log.module': { + category: 'logstash', + description: 'The module or class where the event originate. ', + name: 'logstash.log.module', + type: 'keyword', + }, + 'logstash.log.thread': { + category: 'logstash', + description: 'Information about the running thread where the log originate. ', + name: 'logstash.log.thread', + type: 'keyword', + }, + 'logstash.log.log_event': { + category: 'logstash', + description: 'key and value debugging information. ', + name: 'logstash.log.log_event', + type: 'object', + }, + 'logstash.log.log_event.action': { + category: 'logstash', + name: 'logstash.log.log_event.action', + type: 'keyword', + }, + 'logstash.log.pipeline_id': { + category: 'logstash', + description: 'The ID of the pipeline. ', + example: 'main', + name: 'logstash.log.pipeline_id', + type: 'keyword', + }, + 'logstash.log.message': { + category: 'logstash', + name: 'logstash.log.message', + type: 'alias', + }, + 'logstash.log.level': { + category: 'logstash', + name: 'logstash.log.level', + type: 'alias', + }, + 'logstash.slowlog.module': { + category: 'logstash', + description: 'The module or class where the event originate. ', + name: 'logstash.slowlog.module', + type: 'keyword', + }, + 'logstash.slowlog.thread': { + category: 'logstash', + description: 'Information about the running thread where the log originate. ', + name: 'logstash.slowlog.thread', + type: 'keyword', + }, + 'logstash.slowlog.event': { + category: 'logstash', + description: 'Raw dump of the original event ', + name: 'logstash.slowlog.event', + type: 'keyword', + }, + 'logstash.slowlog.plugin_name': { + category: 'logstash', + description: 'Name of the plugin ', + name: 'logstash.slowlog.plugin_name', + type: 'keyword', + }, + 'logstash.slowlog.plugin_type': { + category: 'logstash', + description: 'Type of the plugin: Inputs, Filters, Outputs or Codecs. ', + name: 'logstash.slowlog.plugin_type', + type: 'keyword', + }, + 'logstash.slowlog.took_in_millis': { + category: 'logstash', + description: 'Execution time for the plugin in milliseconds. ', + name: 'logstash.slowlog.took_in_millis', + type: 'long', + }, + 'logstash.slowlog.plugin_params': { + category: 'logstash', + description: 'String value of the plugin configuration ', + name: 'logstash.slowlog.plugin_params', + type: 'keyword', + }, + 'logstash.slowlog.plugin_params_object': { + category: 'logstash', + description: 'key -> value of the configuration used by the plugin. ', + name: 'logstash.slowlog.plugin_params_object', + type: 'object', + }, + 'logstash.slowlog.level': { + category: 'logstash', + name: 'logstash.slowlog.level', + type: 'alias', + }, + 'logstash.slowlog.took_in_nanos': { + category: 'logstash', + name: 'logstash.slowlog.took_in_nanos', + type: 'alias', + }, + 'mongodb.log.component': { + category: 'mongodb', + description: 'Functional categorization of message ', + example: 'COMMAND', + name: 'mongodb.log.component', + type: 'keyword', + }, + 'mongodb.log.context': { + category: 'mongodb', + description: 'Context of message ', + example: 'initandlisten', + name: 'mongodb.log.context', + type: 'keyword', + }, + 'mongodb.log.severity': { + category: 'mongodb', + name: 'mongodb.log.severity', + type: 'alias', + }, + 'mongodb.log.message': { + category: 'mongodb', + name: 'mongodb.log.message', + type: 'alias', + }, + 'mongodb.log.id': { + category: 'mongodb', + description: 'Integer representing the unique identifier of the log statement ', + example: 4615611, + name: 'mongodb.log.id', + type: 'long', + }, + 'mysql.thread_id': { + category: 'mysql', + description: 'The connection or thread ID for the query. ', + name: 'mysql.thread_id', + type: 'long', + }, + 'mysql.error.thread_id': { + category: 'mysql', + name: 'mysql.error.thread_id', + type: 'alias', + }, + 'mysql.error.level': { + category: 'mysql', + name: 'mysql.error.level', + type: 'alias', + }, + 'mysql.error.message': { + category: 'mysql', + name: 'mysql.error.message', + type: 'alias', + }, + 'mysql.slowlog.lock_time.sec': { + category: 'mysql', + description: + 'The amount of time the query waited for the lock to be available. The value is in seconds, as a floating point number. ', + name: 'mysql.slowlog.lock_time.sec', + type: 'float', + }, + 'mysql.slowlog.rows_sent': { + category: 'mysql', + description: 'The number of rows returned by the query. ', + name: 'mysql.slowlog.rows_sent', + type: 'long', + }, + 'mysql.slowlog.rows_examined': { + category: 'mysql', + description: 'The number of rows scanned by the query. ', + name: 'mysql.slowlog.rows_examined', + type: 'long', + }, + 'mysql.slowlog.rows_affected': { + category: 'mysql', + description: 'The number of rows modified by the query. ', + name: 'mysql.slowlog.rows_affected', + type: 'long', + }, + 'mysql.slowlog.bytes_sent': { + category: 'mysql', + description: 'The number of bytes sent to client. ', + name: 'mysql.slowlog.bytes_sent', + type: 'long', + format: 'bytes', + }, + 'mysql.slowlog.bytes_received': { + category: 'mysql', + description: 'The number of bytes received from client. ', + name: 'mysql.slowlog.bytes_received', + type: 'long', + format: 'bytes', + }, + 'mysql.slowlog.query': { + category: 'mysql', + description: 'The slow query. ', + name: 'mysql.slowlog.query', + }, + 'mysql.slowlog.id': { + category: 'mysql', + name: 'mysql.slowlog.id', + type: 'alias', + }, + 'mysql.slowlog.schema': { + category: 'mysql', + description: 'The schema where the slow query was executed. ', + name: 'mysql.slowlog.schema', + type: 'keyword', + }, + 'mysql.slowlog.current_user': { + category: 'mysql', + description: + 'Current authenticated user, used to determine access privileges. Can differ from the value for user. ', + name: 'mysql.slowlog.current_user', + type: 'keyword', + }, + 'mysql.slowlog.last_errno': { + category: 'mysql', + description: 'Last SQL error seen. ', + name: 'mysql.slowlog.last_errno', + type: 'keyword', + }, + 'mysql.slowlog.killed': { + category: 'mysql', + description: 'Code of the reason if the query was killed. ', + name: 'mysql.slowlog.killed', + type: 'keyword', + }, + 'mysql.slowlog.query_cache_hit': { + category: 'mysql', + description: 'Whether the query cache was hit. ', + name: 'mysql.slowlog.query_cache_hit', + type: 'boolean', + }, + 'mysql.slowlog.tmp_table': { + category: 'mysql', + description: 'Whether a temporary table was used to resolve the query. ', + name: 'mysql.slowlog.tmp_table', + type: 'boolean', + }, + 'mysql.slowlog.tmp_table_on_disk': { + category: 'mysql', + description: 'Whether the query needed temporary tables on disk. ', + name: 'mysql.slowlog.tmp_table_on_disk', + type: 'boolean', + }, + 'mysql.slowlog.tmp_tables': { + category: 'mysql', + description: 'Number of temporary tables created for this query ', + name: 'mysql.slowlog.tmp_tables', + type: 'long', + }, + 'mysql.slowlog.tmp_disk_tables': { + category: 'mysql', + description: 'Number of temporary tables created on disk for this query. ', + name: 'mysql.slowlog.tmp_disk_tables', + type: 'long', + }, + 'mysql.slowlog.tmp_table_sizes': { + category: 'mysql', + description: 'Size of temporary tables created for this query.', + name: 'mysql.slowlog.tmp_table_sizes', + type: 'long', + format: 'bytes', + }, + 'mysql.slowlog.filesort': { + category: 'mysql', + description: 'Whether filesort optimization was used. ', + name: 'mysql.slowlog.filesort', + type: 'boolean', + }, + 'mysql.slowlog.filesort_on_disk': { + category: 'mysql', + description: 'Whether filesort optimization was used and it needed temporary tables on disk. ', + name: 'mysql.slowlog.filesort_on_disk', + type: 'boolean', + }, + 'mysql.slowlog.priority_queue': { + category: 'mysql', + description: 'Whether a priority queue was used for filesort. ', + name: 'mysql.slowlog.priority_queue', + type: 'boolean', + }, + 'mysql.slowlog.full_scan': { + category: 'mysql', + description: 'Whether a full table scan was needed for the slow query. ', + name: 'mysql.slowlog.full_scan', + type: 'boolean', + }, + 'mysql.slowlog.full_join': { + category: 'mysql', + description: + 'Whether a full join was needed for the slow query (no indexes were used for joins). ', + name: 'mysql.slowlog.full_join', + type: 'boolean', + }, + 'mysql.slowlog.merge_passes': { + category: 'mysql', + description: 'Number of merge passes executed for the query. ', + name: 'mysql.slowlog.merge_passes', + type: 'long', + }, + 'mysql.slowlog.sort_merge_passes': { + category: 'mysql', + description: 'Number of merge passes that the sort algorithm has had to do. ', + name: 'mysql.slowlog.sort_merge_passes', + type: 'long', + }, + 'mysql.slowlog.sort_range_count': { + category: 'mysql', + description: 'Number of sorts that were done using ranges. ', + name: 'mysql.slowlog.sort_range_count', + type: 'long', + }, + 'mysql.slowlog.sort_rows': { + category: 'mysql', + description: 'Number of sorted rows. ', + name: 'mysql.slowlog.sort_rows', + type: 'long', + }, + 'mysql.slowlog.sort_scan_count': { + category: 'mysql', + description: 'Number of sorts that were done by scanning the table. ', + name: 'mysql.slowlog.sort_scan_count', + type: 'long', + }, + 'mysql.slowlog.log_slow_rate_type': { + category: 'mysql', + description: + 'Type of slow log rate limit, it can be `session` if the rate limit is applied per session, or `query` if it applies per query. ', + name: 'mysql.slowlog.log_slow_rate_type', + type: 'keyword', + }, + 'mysql.slowlog.log_slow_rate_limit': { + category: 'mysql', + description: + 'Slow log rate limit, a value of 100 means that one in a hundred queries or sessions are being logged. ', + name: 'mysql.slowlog.log_slow_rate_limit', + type: 'keyword', + }, + 'mysql.slowlog.read_first': { + category: 'mysql', + description: 'The number of times the first entry in an index was read. ', + name: 'mysql.slowlog.read_first', + type: 'long', + }, + 'mysql.slowlog.read_last': { + category: 'mysql', + description: 'The number of times the last key in an index was read. ', + name: 'mysql.slowlog.read_last', + type: 'long', + }, + 'mysql.slowlog.read_key': { + category: 'mysql', + description: 'The number of requests to read a row based on a key. ', + name: 'mysql.slowlog.read_key', + type: 'long', + }, + 'mysql.slowlog.read_next': { + category: 'mysql', + description: 'The number of requests to read the next row in key order. ', + name: 'mysql.slowlog.read_next', + type: 'long', + }, + 'mysql.slowlog.read_prev': { + category: 'mysql', + description: 'The number of requests to read the previous row in key order. ', + name: 'mysql.slowlog.read_prev', + type: 'long', + }, + 'mysql.slowlog.read_rnd': { + category: 'mysql', + description: 'The number of requests to read a row based on a fixed position. ', + name: 'mysql.slowlog.read_rnd', + type: 'long', + }, + 'mysql.slowlog.read_rnd_next': { + category: 'mysql', + description: 'The number of requests to read the next row in the data file. ', + name: 'mysql.slowlog.read_rnd_next', + type: 'long', + }, + 'mysql.slowlog.innodb.trx_id': { + category: 'mysql', + description: 'Transaction ID ', + name: 'mysql.slowlog.innodb.trx_id', + type: 'keyword', + }, + 'mysql.slowlog.innodb.io_r_ops': { + category: 'mysql', + description: 'Number of page read operations. ', + name: 'mysql.slowlog.innodb.io_r_ops', + type: 'long', + }, + 'mysql.slowlog.innodb.io_r_bytes': { + category: 'mysql', + description: 'Bytes read during page read operations. ', + name: 'mysql.slowlog.innodb.io_r_bytes', + type: 'long', + format: 'bytes', + }, + 'mysql.slowlog.innodb.io_r_wait.sec': { + category: 'mysql', + description: 'How long it took to read all needed data from storage. ', + name: 'mysql.slowlog.innodb.io_r_wait.sec', + type: 'long', + }, + 'mysql.slowlog.innodb.rec_lock_wait.sec': { + category: 'mysql', + description: 'How long the query waited for locks. ', + name: 'mysql.slowlog.innodb.rec_lock_wait.sec', + type: 'long', + }, + 'mysql.slowlog.innodb.queue_wait.sec': { + category: 'mysql', + description: + 'How long the query waited to enter the InnoDB queue and to be executed once in the queue. ', + name: 'mysql.slowlog.innodb.queue_wait.sec', + type: 'long', + }, + 'mysql.slowlog.innodb.pages_distinct': { + category: 'mysql', + description: 'Approximated count of pages accessed to execute the query. ', + name: 'mysql.slowlog.innodb.pages_distinct', + type: 'long', + }, + 'mysql.slowlog.user': { + category: 'mysql', + name: 'mysql.slowlog.user', + type: 'alias', + }, + 'mysql.slowlog.host': { + category: 'mysql', + name: 'mysql.slowlog.host', + type: 'alias', + }, + 'mysql.slowlog.ip': { + category: 'mysql', + name: 'mysql.slowlog.ip', + type: 'alias', + }, + 'nats.log.client.id': { + category: 'nats', + description: 'The id of the client ', + name: 'nats.log.client.id', + type: 'integer', + }, + 'nats.log.msg.bytes': { + category: 'nats', + description: 'Size of the payload in bytes ', + name: 'nats.log.msg.bytes', + type: 'long', + format: 'bytes', + }, + 'nats.log.msg.type': { + category: 'nats', + description: 'The protocol message type ', + name: 'nats.log.msg.type', + type: 'keyword', + }, + 'nats.log.msg.subject': { + category: 'nats', + description: 'Subject name this message was received on ', + name: 'nats.log.msg.subject', + type: 'keyword', + }, + 'nats.log.msg.sid': { + category: 'nats', + description: 'The unique alphanumeric subscription ID of the subject ', + name: 'nats.log.msg.sid', + type: 'integer', + }, + 'nats.log.msg.reply_to': { + category: 'nats', + description: 'The inbox subject on which the publisher is listening for responses ', + name: 'nats.log.msg.reply_to', + type: 'keyword', + }, + 'nats.log.msg.max_messages': { + category: 'nats', + description: 'An optional number of messages to wait for before automatically unsubscribing ', + name: 'nats.log.msg.max_messages', + type: 'integer', + }, + 'nats.log.msg.error.message': { + category: 'nats', + description: 'Details about the error occurred ', + name: 'nats.log.msg.error.message', + type: 'text', + }, + 'nats.log.msg.queue_group': { + category: 'nats', + description: 'The queue group which subscriber will join ', + name: 'nats.log.msg.queue_group', + type: 'text', + }, + 'nginx.access.remote_ip_list': { + category: 'nginx', + description: + 'An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. Real source IP is restored to `source.ip`. ', + name: 'nginx.access.remote_ip_list', + type: 'array', + }, + 'nginx.access.body_sent.bytes': { + category: 'nginx', + name: 'nginx.access.body_sent.bytes', + type: 'alias', + }, + 'nginx.access.user_name': { + category: 'nginx', + name: 'nginx.access.user_name', + type: 'alias', + }, + 'nginx.access.method': { + category: 'nginx', + name: 'nginx.access.method', + type: 'alias', + }, + 'nginx.access.url': { + category: 'nginx', + name: 'nginx.access.url', + type: 'alias', + }, + 'nginx.access.http_version': { + category: 'nginx', + name: 'nginx.access.http_version', + type: 'alias', + }, + 'nginx.access.response_code': { + category: 'nginx', + name: 'nginx.access.response_code', + type: 'alias', + }, + 'nginx.access.referrer': { + category: 'nginx', + name: 'nginx.access.referrer', + type: 'alias', + }, + 'nginx.access.agent': { + category: 'nginx', + name: 'nginx.access.agent', + type: 'alias', + }, + 'nginx.access.user_agent.device': { + category: 'nginx', + name: 'nginx.access.user_agent.device', + type: 'alias', + }, + 'nginx.access.user_agent.name': { + category: 'nginx', + name: 'nginx.access.user_agent.name', + type: 'alias', + }, + 'nginx.access.user_agent.os': { + category: 'nginx', + name: 'nginx.access.user_agent.os', + type: 'alias', + }, + 'nginx.access.user_agent.os_name': { + category: 'nginx', + name: 'nginx.access.user_agent.os_name', + type: 'alias', + }, + 'nginx.access.user_agent.original': { + category: 'nginx', + name: 'nginx.access.user_agent.original', + type: 'alias', + }, + 'nginx.access.geoip.continent_name': { + category: 'nginx', + name: 'nginx.access.geoip.continent_name', + type: 'alias', + }, + 'nginx.access.geoip.country_iso_code': { + category: 'nginx', + name: 'nginx.access.geoip.country_iso_code', + type: 'alias', + }, + 'nginx.access.geoip.location': { + category: 'nginx', + name: 'nginx.access.geoip.location', + type: 'alias', + }, + 'nginx.access.geoip.region_name': { + category: 'nginx', + name: 'nginx.access.geoip.region_name', + type: 'alias', + }, + 'nginx.access.geoip.city_name': { + category: 'nginx', + name: 'nginx.access.geoip.city_name', + type: 'alias', + }, + 'nginx.access.geoip.region_iso_code': { + category: 'nginx', + name: 'nginx.access.geoip.region_iso_code', + type: 'alias', + }, + 'nginx.error.connection_id': { + category: 'nginx', + description: 'Connection identifier. ', + name: 'nginx.error.connection_id', + type: 'long', + }, + 'nginx.error.level': { + category: 'nginx', + name: 'nginx.error.level', + type: 'alias', + }, + 'nginx.error.pid': { + category: 'nginx', + name: 'nginx.error.pid', + type: 'alias', + }, + 'nginx.error.tid': { + category: 'nginx', + name: 'nginx.error.tid', + type: 'alias', + }, + 'nginx.error.message': { + category: 'nginx', + name: 'nginx.error.message', + type: 'alias', + }, + 'nginx.ingress_controller.remote_ip_list': { + category: 'nginx', + description: + 'An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. Real source IP is restored to `source.ip`. ', + name: 'nginx.ingress_controller.remote_ip_list', + type: 'array', + }, + 'nginx.ingress_controller.upstream_address_list': { + category: 'nginx', + description: + 'An array of the upstream addresses. It is a list because it is common that several upstream servers were contacted during request processing. ', + name: 'nginx.ingress_controller.upstream_address_list', + type: 'keyword', + }, + 'nginx.ingress_controller.upstream.response.length_list': { + category: 'nginx', + description: + 'An array of upstream response lengths. It is a list because it is common that several upstream servers were contacted during request processing. ', + name: 'nginx.ingress_controller.upstream.response.length_list', + type: 'keyword', + }, + 'nginx.ingress_controller.upstream.response.time_list': { + category: 'nginx', + description: + 'An array of upstream response durations. It is a list because it is common that several upstream servers were contacted during request processing. ', + name: 'nginx.ingress_controller.upstream.response.time_list', + type: 'keyword', + }, + 'nginx.ingress_controller.upstream.response.status_code_list': { + category: 'nginx', + description: + 'An array of upstream response status codes. It is a list because it is common that several upstream servers were contacted during request processing. ', + name: 'nginx.ingress_controller.upstream.response.status_code_list', + type: 'keyword', + }, + 'nginx.ingress_controller.http.request.length': { + category: 'nginx', + description: 'The request length (including request line, header, and request body) ', + name: 'nginx.ingress_controller.http.request.length', + type: 'long', + format: 'bytes', + }, + 'nginx.ingress_controller.http.request.time': { + category: 'nginx', + description: 'Time elapsed since the first bytes were read from the client ', + name: 'nginx.ingress_controller.http.request.time', + type: 'double', + format: 'duration', + }, + 'nginx.ingress_controller.upstream.name': { + category: 'nginx', + description: 'The name of the upstream. ', + name: 'nginx.ingress_controller.upstream.name', + type: 'keyword', + }, + 'nginx.ingress_controller.upstream.alternative_name': { + category: 'nginx', + description: 'The name of the alternative upstream. ', + name: 'nginx.ingress_controller.upstream.alternative_name', + type: 'keyword', + }, + 'nginx.ingress_controller.upstream.response.length': { + category: 'nginx', + description: + 'The length of the response obtained from the upstream server. If several servers were contacted during request process, the summary of the multiple response lengths is stored. ', + name: 'nginx.ingress_controller.upstream.response.length', + type: 'long', + format: 'bytes', + }, + 'nginx.ingress_controller.upstream.response.time': { + category: 'nginx', + description: + 'The time spent on receiving the response from the upstream as seconds with millisecond resolution. If several servers were contacted during request process, the summary of the multiple response times is stored. ', + name: 'nginx.ingress_controller.upstream.response.time', + type: 'double', + format: 'duration', + }, + 'nginx.ingress_controller.upstream.response.status_code': { + category: 'nginx', + description: + 'The status code of the response obtained from the upstream server. If several servers were contacted during request process, only the status code of the response from the last one is stored in this field. ', + name: 'nginx.ingress_controller.upstream.response.status_code', + type: 'long', + }, + 'nginx.ingress_controller.upstream.ip': { + category: 'nginx', + description: + 'The IP address of the upstream server. If several servers were contacted during request process, only the last one is stored in this field. ', + name: 'nginx.ingress_controller.upstream.ip', + type: 'ip', + }, + 'nginx.ingress_controller.upstream.port': { + category: 'nginx', + description: + 'The port of the upstream server. If several servers were contacted during request process, only the last one is stored in this field. ', + name: 'nginx.ingress_controller.upstream.port', + type: 'long', + }, + 'nginx.ingress_controller.http.request.id': { + category: 'nginx', + description: 'The randomly generated ID of the request ', + name: 'nginx.ingress_controller.http.request.id', + type: 'keyword', + }, + 'nginx.ingress_controller.body_sent.bytes': { + category: 'nginx', + name: 'nginx.ingress_controller.body_sent.bytes', + type: 'alias', + }, + 'nginx.ingress_controller.user_name': { + category: 'nginx', + name: 'nginx.ingress_controller.user_name', + type: 'alias', + }, + 'nginx.ingress_controller.method': { + category: 'nginx', + name: 'nginx.ingress_controller.method', + type: 'alias', + }, + 'nginx.ingress_controller.url': { + category: 'nginx', + name: 'nginx.ingress_controller.url', + type: 'alias', + }, + 'nginx.ingress_controller.http_version': { + category: 'nginx', + name: 'nginx.ingress_controller.http_version', + type: 'alias', + }, + 'nginx.ingress_controller.response_code': { + category: 'nginx', + name: 'nginx.ingress_controller.response_code', + type: 'alias', + }, + 'nginx.ingress_controller.referrer': { + category: 'nginx', + name: 'nginx.ingress_controller.referrer', + type: 'alias', + }, + 'nginx.ingress_controller.agent': { + category: 'nginx', + name: 'nginx.ingress_controller.agent', + type: 'alias', + }, + 'nginx.ingress_controller.user_agent.device': { + category: 'nginx', + name: 'nginx.ingress_controller.user_agent.device', + type: 'alias', + }, + 'nginx.ingress_controller.user_agent.name': { + category: 'nginx', + name: 'nginx.ingress_controller.user_agent.name', + type: 'alias', + }, + 'nginx.ingress_controller.user_agent.os': { + category: 'nginx', + name: 'nginx.ingress_controller.user_agent.os', + type: 'alias', + }, + 'nginx.ingress_controller.user_agent.os_name': { + category: 'nginx', + name: 'nginx.ingress_controller.user_agent.os_name', + type: 'alias', + }, + 'nginx.ingress_controller.user_agent.original': { + category: 'nginx', + name: 'nginx.ingress_controller.user_agent.original', + type: 'alias', + }, + 'nginx.ingress_controller.geoip.continent_name': { + category: 'nginx', + name: 'nginx.ingress_controller.geoip.continent_name', + type: 'alias', + }, + 'nginx.ingress_controller.geoip.country_iso_code': { + category: 'nginx', + name: 'nginx.ingress_controller.geoip.country_iso_code', + type: 'alias', + }, + 'nginx.ingress_controller.geoip.location': { + category: 'nginx', + name: 'nginx.ingress_controller.geoip.location', + type: 'alias', + }, + 'nginx.ingress_controller.geoip.region_name': { + category: 'nginx', + name: 'nginx.ingress_controller.geoip.region_name', + type: 'alias', + }, + 'nginx.ingress_controller.geoip.city_name': { + category: 'nginx', + name: 'nginx.ingress_controller.geoip.city_name', + type: 'alias', + }, + 'nginx.ingress_controller.geoip.region_iso_code': { + category: 'nginx', + name: 'nginx.ingress_controller.geoip.region_iso_code', + type: 'alias', + }, + 'osquery.result.name': { + category: 'osquery', + description: 'The name of the query that generated this event. ', + name: 'osquery.result.name', + type: 'keyword', + }, + 'osquery.result.action': { + category: 'osquery', + description: + 'For incremental data, marks whether the entry was added or removed. It can be one of "added", "removed", or "snapshot". ', + name: 'osquery.result.action', + type: 'keyword', + }, + 'osquery.result.host_identifier': { + category: 'osquery', + description: + 'The identifier for the host on which the osquery agent is running. Normally the hostname. ', + name: 'osquery.result.host_identifier', + type: 'keyword', + }, + 'osquery.result.unix_time': { + category: 'osquery', + description: + 'Unix timestamp of the event, in seconds since the epoch. Used for computing the `@timestamp` column. ', + name: 'osquery.result.unix_time', + type: 'long', + }, + 'osquery.result.calendar_time': { + category: 'osquery', + description: 'String representation of the collection time, as formatted by osquery. ', + name: 'osquery.result.calendar_time', + type: 'keyword', + }, + 'pensando.dfw.action': { + category: 'pensando', + description: 'Action on the flow. ', + name: 'pensando.dfw.action', + type: 'keyword', + }, + 'pensando.dfw.app_id': { + category: 'pensando', + description: 'Application ID ', + name: 'pensando.dfw.app_id', + type: 'integer', + }, + 'pensando.dfw.destination_address': { + category: 'pensando', + description: 'Address of destination. ', + name: 'pensando.dfw.destination_address', + type: 'keyword', + }, + 'pensando.dfw.destination_port': { + category: 'pensando', + description: 'Port of destination. ', + name: 'pensando.dfw.destination_port', + type: 'integer', + }, + 'pensando.dfw.direction': { + category: 'pensando', + description: 'Direction of the flow ', + name: 'pensando.dfw.direction', + type: 'keyword', + }, + 'pensando.dfw.protocol': { + category: 'pensando', + description: 'Protocol of the flow ', + name: 'pensando.dfw.protocol', + type: 'keyword', + }, + 'pensando.dfw.rule_id': { + category: 'pensando', + description: 'Rule ID that was matched. ', + name: 'pensando.dfw.rule_id', + type: 'keyword', + }, + 'pensando.dfw.session_id': { + category: 'pensando', + description: 'Session ID of the flow ', + name: 'pensando.dfw.session_id', + type: 'integer', + }, + 'pensando.dfw.session_state': { + category: 'pensando', + description: 'Session state of the flow. ', + name: 'pensando.dfw.session_state', + type: 'keyword', + }, + 'pensando.dfw.source_address': { + category: 'pensando', + description: 'Source address of the flow. ', + name: 'pensando.dfw.source_address', + type: 'keyword', + }, + 'pensando.dfw.source_port': { + category: 'pensando', + description: 'Source port of the flow. ', + name: 'pensando.dfw.source_port', + type: 'integer', + }, + 'pensando.dfw.timestamp': { + category: 'pensando', + description: 'Timestamp of the log. ', + name: 'pensando.dfw.timestamp', + type: 'date', + }, + 'postgresql.log.timestamp': { + category: 'postgresql', + description: 'The timestamp from the log line. ', + name: 'postgresql.log.timestamp', + }, + 'postgresql.log.core_id': { + category: 'postgresql', + description: + 'Core id. (deprecated, there is no core_id in PostgreSQL logs, this is actually session_line_number). ', + name: 'postgresql.log.core_id', + type: 'alias', + }, + 'postgresql.log.client_addr': { + category: 'postgresql', + description: 'Host where the connection originated from. ', + example: '127.0.0.1', + name: 'postgresql.log.client_addr', + }, + 'postgresql.log.client_port': { + category: 'postgresql', + description: 'Port where the connection originated from. ', + example: '59700', + name: 'postgresql.log.client_port', + }, + 'postgresql.log.session_id': { + category: 'postgresql', + description: 'PostgreSQL session. ', + example: '5ff1dd98.22', + name: 'postgresql.log.session_id', + }, + 'postgresql.log.session_line_number': { + category: 'postgresql', + description: 'Line number inside a session. (%l in `log_line_prefix`). ', + name: 'postgresql.log.session_line_number', + type: 'long', + }, + 'postgresql.log.database': { + category: 'postgresql', + description: 'Name of database. ', + example: 'postgres', + name: 'postgresql.log.database', + }, + 'postgresql.log.query': { + category: 'postgresql', + description: + 'Query statement. In the case of CSV parse, look at command_tag to get more context. ', + example: 'SELECT * FROM users;', + name: 'postgresql.log.query', + }, + 'postgresql.log.query_step': { + category: 'postgresql', + description: + 'Statement step when using extended query protocol (one of statement, parse, bind or execute). ', + example: 'parse', + name: 'postgresql.log.query_step', + }, + 'postgresql.log.query_name': { + category: 'postgresql', + description: + 'Name given to a query when using extended query protocol. If it is "", or not present, this field is ignored. ', + example: 'pdo_stmt_00000001', + name: 'postgresql.log.query_name', + }, + 'postgresql.log.command_tag': { + category: 'postgresql', + description: + "Type of session's current command. The complete list can be found at: src/include/tcop/cmdtaglist.h ", + example: 'SELECT', + name: 'postgresql.log.command_tag', + }, + 'postgresql.log.session_start_time': { + category: 'postgresql', + description: 'Time when this session started. ', + name: 'postgresql.log.session_start_time', + type: 'date', + }, + 'postgresql.log.virtual_transaction_id': { + category: 'postgresql', + description: 'Backend local transaction id. ', + name: 'postgresql.log.virtual_transaction_id', + }, + 'postgresql.log.transaction_id': { + category: 'postgresql', + description: 'The id of current transaction. ', + name: 'postgresql.log.transaction_id', + type: 'long', + }, + 'postgresql.log.sql_state_code': { + category: 'postgresql', + description: + 'State code returned by Postgres (if any). See also https://www.postgresql.org/docs/current/errcodes-appendix.html ', + name: 'postgresql.log.sql_state_code', + type: 'keyword', + }, + 'postgresql.log.detail': { + category: 'postgresql', + description: + "More information about the message, parameters in case of a parametrized query. e.g. 'Role \\\"user\\\" does not exist.', 'parameters: $1 = 42', etc. ", + name: 'postgresql.log.detail', + }, + 'postgresql.log.hint': { + category: 'postgresql', + description: 'A possible solution to solve an error. ', + name: 'postgresql.log.hint', + }, + 'postgresql.log.internal_query': { + category: 'postgresql', + description: 'Internal query that led to the error (if any). ', + name: 'postgresql.log.internal_query', + }, + 'postgresql.log.internal_query_pos': { + category: 'postgresql', + description: 'Character count of the internal query (if any). ', + name: 'postgresql.log.internal_query_pos', + type: 'long', + }, + 'postgresql.log.context': { + category: 'postgresql', + description: 'Error context. ', + name: 'postgresql.log.context', + }, + 'postgresql.log.query_pos': { + category: 'postgresql', + description: 'Character count of the error position (if any). ', + name: 'postgresql.log.query_pos', + type: 'long', + }, + 'postgresql.log.location': { + category: 'postgresql', + description: + 'Location of the error in the PostgreSQL source code (if log_error_verbosity is set to verbose). ', + name: 'postgresql.log.location', + }, + 'postgresql.log.application_name': { + category: 'postgresql', + description: 'Name of the application of this event. It is defined by the client. ', + name: 'postgresql.log.application_name', + }, + 'postgresql.log.backend_type': { + category: 'postgresql', + description: + 'Type of backend of this event. Possible types are autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, startup, walreceiver, walsender and walwriter. In addition, background workers registered by extensions may have additional types. ', + example: 'client backend', + name: 'postgresql.log.backend_type', + }, + 'postgresql.log.error.code': { + category: 'postgresql', + description: + 'Error code returned by Postgres (if any). Deprecated: errors can have letters. Use sql_state_code instead. ', + name: 'postgresql.log.error.code', + type: 'alias', + }, + 'postgresql.log.timezone': { + category: 'postgresql', + name: 'postgresql.log.timezone', + type: 'alias', + }, + 'postgresql.log.user': { + category: 'postgresql', + name: 'postgresql.log.user', + type: 'alias', + }, + 'postgresql.log.level': { + category: 'postgresql', + description: + 'Valid values are DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC. ', + example: 'LOG', + name: 'postgresql.log.level', + type: 'alias', + }, + 'postgresql.log.message': { + category: 'postgresql', + name: 'postgresql.log.message', + type: 'alias', + }, + 'redis.log.role': { + category: 'redis', + description: + 'The role of the Redis instance. Can be one of `master`, `slave`, `child` (for RDF/AOF writing child), or `sentinel`. ', + name: 'redis.log.role', + type: 'keyword', + }, + 'redis.log.pid': { + category: 'redis', + name: 'redis.log.pid', + type: 'alias', + }, + 'redis.log.level': { + category: 'redis', + name: 'redis.log.level', + type: 'alias', + }, + 'redis.log.message': { + category: 'redis', + name: 'redis.log.message', + type: 'alias', + }, + 'redis.slowlog.cmd': { + category: 'redis', + description: 'The command executed. ', + name: 'redis.slowlog.cmd', + type: 'keyword', + }, + 'redis.slowlog.duration.us': { + category: 'redis', + description: 'How long it took to execute the command in microseconds. ', + name: 'redis.slowlog.duration.us', + type: 'long', + }, + 'redis.slowlog.id': { + category: 'redis', + description: 'The ID of the query. ', + name: 'redis.slowlog.id', + type: 'long', + }, + 'redis.slowlog.key': { + category: 'redis', + description: 'The key on which the command was executed. ', + name: 'redis.slowlog.key', + type: 'keyword', + }, + 'redis.slowlog.args': { + category: 'redis', + description: 'The arguments with which the command was called. ', + name: 'redis.slowlog.args', + type: 'keyword', + }, + 'santa.action': { + category: 'santa', + description: 'Action', + example: 'EXEC', + name: 'santa.action', + type: 'keyword', + }, + 'santa.decision': { + category: 'santa', + description: 'Decision that santad took.', + example: 'ALLOW', + name: 'santa.decision', + type: 'keyword', + }, + 'santa.reason': { + category: 'santa', + description: 'Reason for the decsision.', + example: 'CERT', + name: 'santa.reason', + type: 'keyword', + }, + 'santa.mode': { + category: 'santa', + description: 'Operating mode of Santa.', + example: 'M', + name: 'santa.mode', + type: 'keyword', + }, + 'santa.disk.volume': { + category: 'santa', + description: 'The volume name.', + name: 'santa.disk.volume', + }, + 'santa.disk.bus': { + category: 'santa', + description: 'The disk bus protocol.', + name: 'santa.disk.bus', + }, + 'santa.disk.serial': { + category: 'santa', + description: 'The disk serial number.', + name: 'santa.disk.serial', + }, + 'santa.disk.bsdname': { + category: 'santa', + description: 'The disk BSD name.', + example: 'disk1s3', + name: 'santa.disk.bsdname', + }, + 'santa.disk.model': { + category: 'santa', + description: 'The disk model.', + example: 'APPLE SSD SM0512L', + name: 'santa.disk.model', + }, + 'santa.disk.fs': { + category: 'santa', + description: 'The disk volume kind (filesystem type).', + example: 'apfs', + name: 'santa.disk.fs', + }, + 'santa.disk.mount': { + category: 'santa', + description: 'The disk volume path.', + name: 'santa.disk.mount', + }, + 'santa.certificate.common_name': { + category: 'santa', + description: 'Common name from code signing certificate.', + name: 'santa.certificate.common_name', + type: 'keyword', + }, + 'santa.certificate.sha256': { + category: 'santa', + description: 'SHA256 hash of code signing certificate.', + name: 'santa.certificate.sha256', + type: 'keyword', + }, + 'system.auth.timestamp': { + category: 'system', + name: 'system.auth.timestamp', + type: 'alias', + }, + 'system.auth.hostname': { + category: 'system', + name: 'system.auth.hostname', + type: 'alias', + }, + 'system.auth.program': { + category: 'system', + name: 'system.auth.program', + type: 'alias', + }, + 'system.auth.pid': { + category: 'system', + name: 'system.auth.pid', + type: 'alias', + }, + 'system.auth.message': { + category: 'system', + name: 'system.auth.message', + type: 'alias', + }, + 'system.auth.user': { + category: 'system', + name: 'system.auth.user', + type: 'alias', + }, + 'system.auth.ssh.method': { + category: 'system', + description: 'The SSH authentication method. Can be one of "password" or "publickey". ', + name: 'system.auth.ssh.method', + }, + 'system.auth.ssh.signature': { + category: 'system', + description: 'The signature of the client public key. ', + name: 'system.auth.ssh.signature', + }, + 'system.auth.ssh.dropped_ip': { + category: 'system', + description: 'The client IP from SSH connections that are open and immediately dropped. ', + name: 'system.auth.ssh.dropped_ip', + type: 'ip', + }, + 'system.auth.ssh.event': { + category: 'system', + description: 'The SSH event as found in the logs (Accepted, Invalid, Failed, etc.) ', + example: 'Accepted', + name: 'system.auth.ssh.event', + }, + 'system.auth.ssh.ip': { + category: 'system', + name: 'system.auth.ssh.ip', + type: 'alias', + }, + 'system.auth.ssh.port': { + category: 'system', + name: 'system.auth.ssh.port', + type: 'alias', + }, + 'system.auth.ssh.geoip.continent_name': { + category: 'system', + name: 'system.auth.ssh.geoip.continent_name', + type: 'alias', + }, + 'system.auth.ssh.geoip.country_iso_code': { + category: 'system', + name: 'system.auth.ssh.geoip.country_iso_code', + type: 'alias', + }, + 'system.auth.ssh.geoip.location': { + category: 'system', + name: 'system.auth.ssh.geoip.location', + type: 'alias', + }, + 'system.auth.ssh.geoip.region_name': { + category: 'system', + name: 'system.auth.ssh.geoip.region_name', + type: 'alias', + }, + 'system.auth.ssh.geoip.city_name': { + category: 'system', + name: 'system.auth.ssh.geoip.city_name', + type: 'alias', + }, + 'system.auth.ssh.geoip.region_iso_code': { + category: 'system', + name: 'system.auth.ssh.geoip.region_iso_code', + type: 'alias', + }, + 'system.auth.sudo.error': { + category: 'system', + description: 'The error message in case the sudo command failed. ', + example: 'user NOT in sudoers', + name: 'system.auth.sudo.error', + }, + 'system.auth.sudo.tty': { + category: 'system', + description: 'The TTY where the sudo command is executed. ', + name: 'system.auth.sudo.tty', + }, + 'system.auth.sudo.pwd': { + category: 'system', + description: 'The current directory where the sudo command is executed. ', + name: 'system.auth.sudo.pwd', + }, + 'system.auth.sudo.user': { + category: 'system', + description: 'The target user to which the sudo command is switching. ', + example: 'root', + name: 'system.auth.sudo.user', + }, + 'system.auth.sudo.command': { + category: 'system', + description: 'The command executed via sudo. ', + name: 'system.auth.sudo.command', + }, + 'system.auth.useradd.home': { + category: 'system', + description: 'The home folder for the new user.', + name: 'system.auth.useradd.home', + }, + 'system.auth.useradd.shell': { + category: 'system', + description: 'The default shell for the new user.', + name: 'system.auth.useradd.shell', + }, + 'system.auth.useradd.name': { + category: 'system', + name: 'system.auth.useradd.name', + type: 'alias', + }, + 'system.auth.useradd.uid': { + category: 'system', + name: 'system.auth.useradd.uid', + type: 'alias', + }, + 'system.auth.useradd.gid': { + category: 'system', + name: 'system.auth.useradd.gid', + type: 'alias', + }, + 'system.auth.groupadd.name': { + category: 'system', + name: 'system.auth.groupadd.name', + type: 'alias', + }, + 'system.auth.groupadd.gid': { + category: 'system', + name: 'system.auth.groupadd.gid', + type: 'alias', + }, + 'system.syslog.timestamp': { + category: 'system', + name: 'system.syslog.timestamp', + type: 'alias', + }, + 'system.syslog.hostname': { + category: 'system', + name: 'system.syslog.hostname', + type: 'alias', + }, + 'system.syslog.program': { + category: 'system', + name: 'system.syslog.program', + type: 'alias', + }, + 'system.syslog.pid': { + category: 'system', + name: 'system.syslog.pid', + type: 'alias', + }, + 'system.syslog.message': { + category: 'system', + name: 'system.syslog.message', + type: 'alias', + }, + 'traefik.access.user_identifier': { + category: 'traefik', + description: 'Is the RFC 1413 identity of the client ', + name: 'traefik.access.user_identifier', + type: 'keyword', + }, + 'traefik.access.request_count': { + category: 'traefik', + description: 'The number of requests ', + name: 'traefik.access.request_count', + type: 'long', + }, + 'traefik.access.frontend_name': { + category: 'traefik', + description: 'The name of the frontend used ', + name: 'traefik.access.frontend_name', + type: 'keyword', + }, + 'traefik.access.backend_url': { + category: 'traefik', + description: 'The url of the backend where request is forwarded', + name: 'traefik.access.backend_url', + type: 'keyword', + }, + 'traefik.access.body_sent.bytes': { + category: 'traefik', + name: 'traefik.access.body_sent.bytes', + type: 'alias', + }, + 'traefik.access.remote_ip': { + category: 'traefik', + name: 'traefik.access.remote_ip', + type: 'alias', + }, + 'traefik.access.user_name': { + category: 'traefik', + name: 'traefik.access.user_name', + type: 'alias', + }, + 'traefik.access.method': { + category: 'traefik', + name: 'traefik.access.method', + type: 'alias', + }, + 'traefik.access.url': { + category: 'traefik', + name: 'traefik.access.url', + type: 'alias', + }, + 'traefik.access.http_version': { + category: 'traefik', + name: 'traefik.access.http_version', + type: 'alias', + }, + 'traefik.access.response_code': { + category: 'traefik', + name: 'traefik.access.response_code', + type: 'alias', + }, + 'traefik.access.referrer': { + category: 'traefik', + name: 'traefik.access.referrer', + type: 'alias', + }, + 'traefik.access.agent': { + category: 'traefik', + name: 'traefik.access.agent', + type: 'alias', + }, + 'traefik.access.user_agent.name': { + category: 'traefik', + name: 'traefik.access.user_agent.name', + type: 'alias', + }, + 'traefik.access.user_agent.os': { + category: 'traefik', + name: 'traefik.access.user_agent.os', + type: 'alias', + }, + 'traefik.access.user_agent.os_name': { + category: 'traefik', + name: 'traefik.access.user_agent.os_name', + type: 'alias', + }, + 'traefik.access.user_agent.original': { + category: 'traefik', + name: 'traefik.access.user_agent.original', + type: 'alias', + }, + 'traefik.access.geoip.continent_name': { + category: 'traefik', + name: 'traefik.access.geoip.continent_name', + type: 'alias', + }, + 'traefik.access.geoip.country_iso_code': { + category: 'traefik', + name: 'traefik.access.geoip.country_iso_code', + type: 'alias', + }, + 'traefik.access.geoip.location': { + category: 'traefik', + name: 'traefik.access.geoip.location', + type: 'alias', + }, + 'traefik.access.geoip.region_name': { + category: 'traefik', + name: 'traefik.access.geoip.region_name', + type: 'alias', + }, + 'traefik.access.geoip.city_name': { + category: 'traefik', + name: 'traefik.access.geoip.city_name', + type: 'alias', + }, + 'traefik.access.geoip.region_iso_code': { + category: 'traefik', + name: 'traefik.access.geoip.region_iso_code', + type: 'alias', + }, + 'activemq.caller': { + category: 'activemq', + description: 'Name of the caller issuing the logging request (class or resource). ', + name: 'activemq.caller', + type: 'keyword', + }, + 'activemq.thread': { + category: 'activemq', + description: 'Thread that generated the logging event. ', + name: 'activemq.thread', + type: 'keyword', + }, + 'activemq.user': { + category: 'activemq', + description: 'User that generated the logging event. ', + name: 'activemq.user', + type: 'keyword', + }, + 'activemq.audit': { + category: 'activemq', + description: 'Fields from ActiveMQ audit logs. ', + name: 'activemq.audit', + type: 'group', + }, + 'activemq.log.stack_trace': { + category: 'activemq', + name: 'activemq.log.stack_trace', + type: 'keyword', + }, + 'aws.cloudtrail.event_version': { + category: 'aws', + description: 'The CloudTrail version of the log event format. ', + name: 'aws.cloudtrail.event_version', + type: 'keyword', + }, + 'aws.cloudtrail.user_identity.type': { + category: 'aws', + description: 'The type of the identity ', + name: 'aws.cloudtrail.user_identity.type', + type: 'keyword', + }, + 'aws.cloudtrail.user_identity.arn': { + category: 'aws', + description: 'The Amazon Resource Name (ARN) of the principal that made the call.', + name: 'aws.cloudtrail.user_identity.arn', + type: 'keyword', + }, + 'aws.cloudtrail.user_identity.access_key_id': { + category: 'aws', + description: 'The access key ID that was used to sign the request.', + name: 'aws.cloudtrail.user_identity.access_key_id', + type: 'keyword', + }, + 'aws.cloudtrail.user_identity.session_context.mfa_authenticated': { + category: 'aws', + description: + 'The value is true if the root user or IAM user whose credentials were used for the request also was authenticated with an MFA device; otherwise, false.', + name: 'aws.cloudtrail.user_identity.session_context.mfa_authenticated', + type: 'keyword', + }, + 'aws.cloudtrail.user_identity.session_context.creation_date': { + category: 'aws', + description: 'The date and time when the temporary security credentials were issued.', + name: 'aws.cloudtrail.user_identity.session_context.creation_date', + type: 'date', + }, + 'aws.cloudtrail.user_identity.session_context.session_issuer.type': { + category: 'aws', + description: + 'The source of the temporary security credentials, such as Root, IAMUser, or Role.', + name: 'aws.cloudtrail.user_identity.session_context.session_issuer.type', + type: 'keyword', + }, + 'aws.cloudtrail.user_identity.session_context.session_issuer.principal_id': { + category: 'aws', + description: 'The internal ID of the entity that was used to get credentials.', + name: 'aws.cloudtrail.user_identity.session_context.session_issuer.principal_id', + type: 'keyword', + }, + 'aws.cloudtrail.user_identity.session_context.session_issuer.arn': { + category: 'aws', + description: + 'The ARN of the source (account, IAM user, or role) that was used to get temporary security credentials.', + name: 'aws.cloudtrail.user_identity.session_context.session_issuer.arn', + type: 'keyword', + }, + 'aws.cloudtrail.user_identity.session_context.session_issuer.account_id': { + category: 'aws', + description: 'The account that owns the entity that was used to get credentials.', + name: 'aws.cloudtrail.user_identity.session_context.session_issuer.account_id', + type: 'keyword', + }, + 'aws.cloudtrail.user_identity.invoked_by': { + category: 'aws', + description: + 'The name of the AWS service that made the request, such as Amazon EC2 Auto Scaling or AWS Elastic Beanstalk.', + name: 'aws.cloudtrail.user_identity.invoked_by', + type: 'keyword', + }, + 'aws.cloudtrail.error_code': { + category: 'aws', + description: 'The AWS service error if the request returns an error.', + name: 'aws.cloudtrail.error_code', + type: 'keyword', + }, + 'aws.cloudtrail.error_message': { + category: 'aws', + description: 'If the request returns an error, the description of the error.', + name: 'aws.cloudtrail.error_message', + type: 'keyword', + }, + 'aws.cloudtrail.request_parameters': { + category: 'aws', + description: 'The parameters, if any, that were sent with the request.', + name: 'aws.cloudtrail.request_parameters', + type: 'keyword', + }, + 'aws.cloudtrail.response_elements': { + category: 'aws', + description: + 'The response element for actions that make changes (create, update, or delete actions).', + name: 'aws.cloudtrail.response_elements', + type: 'keyword', + }, + 'aws.cloudtrail.additional_eventdata': { + category: 'aws', + description: 'Additional data about the event that was not part of the request or response.', + name: 'aws.cloudtrail.additional_eventdata', + type: 'keyword', + }, + 'aws.cloudtrail.request_id': { + category: 'aws', + description: + 'The value that identifies the request. The service being called generates this value.', + name: 'aws.cloudtrail.request_id', + type: 'keyword', + }, + 'aws.cloudtrail.event_type': { + category: 'aws', + description: 'Identifies the type of event that generated the event record.', + name: 'aws.cloudtrail.event_type', + type: 'keyword', + }, + 'aws.cloudtrail.api_version': { + category: 'aws', + description: 'Identifies the API version associated with the AwsApiCall eventType value.', + name: 'aws.cloudtrail.api_version', + type: 'keyword', + }, + 'aws.cloudtrail.management_event': { + category: 'aws', + description: 'A Boolean value that identifies whether the event is a management event.', + name: 'aws.cloudtrail.management_event', + type: 'keyword', + }, + 'aws.cloudtrail.read_only': { + category: 'aws', + description: 'Identifies whether this operation is a read-only operation.', + name: 'aws.cloudtrail.read_only', + type: 'keyword', + }, + 'aws.cloudtrail.resources.arn': { + category: 'aws', + description: 'Resource ARNs', + name: 'aws.cloudtrail.resources.arn', + type: 'keyword', + }, + 'aws.cloudtrail.resources.account_id': { + category: 'aws', + description: 'Account ID of the resource owner', + name: 'aws.cloudtrail.resources.account_id', + type: 'keyword', + }, + 'aws.cloudtrail.resources.type': { + category: 'aws', + description: 'Resource type identifier in the format: AWS::aws-service-name::data-type-name', + name: 'aws.cloudtrail.resources.type', + type: 'keyword', + }, + 'aws.cloudtrail.recipient_account_id': { + category: 'aws', + description: 'Represents the account ID that received this event.', + name: 'aws.cloudtrail.recipient_account_id', + type: 'keyword', + }, + 'aws.cloudtrail.service_event_details': { + category: 'aws', + description: 'Identifies the service event, including what triggered the event and the result.', + name: 'aws.cloudtrail.service_event_details', + type: 'keyword', + }, + 'aws.cloudtrail.shared_event_id': { + category: 'aws', + description: + 'GUID generated by CloudTrail to uniquely identify CloudTrail events from the same AWS action that is sent to different AWS accounts.', + name: 'aws.cloudtrail.shared_event_id', + type: 'keyword', + }, + 'aws.cloudtrail.vpc_endpoint_id': { + category: 'aws', + description: + 'Identifies the VPC endpoint in which requests were made from a VPC to another AWS service, such as Amazon S3.', + name: 'aws.cloudtrail.vpc_endpoint_id', + type: 'keyword', + }, + 'aws.cloudtrail.event_category': { + category: 'aws', + description: + 'Shows the event category that is used in LookupEvents calls. - For management events, the value is management. - For data events, the value is data. - For Insights events, the value is insight.', + name: 'aws.cloudtrail.event_category', + type: 'keyword', + }, + 'aws.cloudtrail.console_login.additional_eventdata.mobile_version': { + category: 'aws', + description: 'Identifies whether ConsoleLogin was from mobile version', + name: 'aws.cloudtrail.console_login.additional_eventdata.mobile_version', + type: 'boolean', + }, + 'aws.cloudtrail.console_login.additional_eventdata.login_to': { + category: 'aws', + description: 'URL for ConsoleLogin', + name: 'aws.cloudtrail.console_login.additional_eventdata.login_to', + type: 'keyword', + }, + 'aws.cloudtrail.console_login.additional_eventdata.mfa_used': { + category: 'aws', + description: 'Identifies whether multi factor authentication was used during ConsoleLogin', + name: 'aws.cloudtrail.console_login.additional_eventdata.mfa_used', + type: 'boolean', + }, + 'aws.cloudtrail.flattened.additional_eventdata': { + category: 'aws', + description: 'Additional data about the event that was not part of the request or response. ', + name: 'aws.cloudtrail.flattened.additional_eventdata', + type: 'flattened', + }, + 'aws.cloudtrail.flattened.request_parameters': { + category: 'aws', + description: 'The parameters, if any, that were sent with the request.', + name: 'aws.cloudtrail.flattened.request_parameters', + type: 'flattened', + }, + 'aws.cloudtrail.flattened.response_elements': { + category: 'aws', + description: + 'The response element for actions that make changes (create, update, or delete actions).', + name: 'aws.cloudtrail.flattened.response_elements', + type: 'flattened', + }, + 'aws.cloudtrail.flattened.service_event_details': { + category: 'aws', + description: 'Identifies the service event, including what triggered the event and the result.', + name: 'aws.cloudtrail.flattened.service_event_details', + type: 'flattened', + }, + 'aws.cloudtrail.digest.log_files': { + category: 'aws', + description: 'A list of Logfiles contained in the digest.', + name: 'aws.cloudtrail.digest.log_files', + type: 'nested', + }, + 'aws.cloudtrail.digest.start_time': { + category: 'aws', + description: + 'The starting UTC time range that the digest file covers, taking as a reference the time in which log files have been delivered by CloudTrail.', + name: 'aws.cloudtrail.digest.start_time', + type: 'date', + }, + 'aws.cloudtrail.digest.end_time': { + category: 'aws', + description: + 'The ending UTC time range that the digest file covers, taking as a reference the time in which log files have been delivered by CloudTrail.', + name: 'aws.cloudtrail.digest.end_time', + type: 'date', + }, + 'aws.cloudtrail.digest.s3_bucket': { + category: 'aws', + description: + 'The name of the Amazon S3 bucket to which the current digest file has been delivered.', + name: 'aws.cloudtrail.digest.s3_bucket', + type: 'keyword', + }, + 'aws.cloudtrail.digest.s3_object': { + category: 'aws', + description: + 'The Amazon S3 object key (that is, the Amazon S3 bucket location) of the current digest file.', + name: 'aws.cloudtrail.digest.s3_object', + type: 'keyword', + }, + 'aws.cloudtrail.digest.newest_event_time': { + category: 'aws', + description: + 'The UTC time of the most recent event among all of the events in the log files in the digest.', + name: 'aws.cloudtrail.digest.newest_event_time', + type: 'date', + }, + 'aws.cloudtrail.digest.oldest_event_time': { + category: 'aws', + description: + 'The UTC time of the oldest event among all of the events in the log files in the digest.', + name: 'aws.cloudtrail.digest.oldest_event_time', + type: 'date', + }, + 'aws.cloudtrail.digest.previous_s3_bucket': { + category: 'aws', + description: 'The Amazon S3 bucket to which the previous digest file was delivered.', + name: 'aws.cloudtrail.digest.previous_s3_bucket', + type: 'keyword', + }, + 'aws.cloudtrail.digest.previous_hash_algorithm': { + category: 'aws', + description: 'The name of the hash algorithm that was used to hash the previous digest file.', + name: 'aws.cloudtrail.digest.previous_hash_algorithm', + type: 'keyword', + }, + 'aws.cloudtrail.digest.public_key_fingerprint': { + category: 'aws', + description: + 'The hexadecimal encoded fingerprint of the public key that matches the private key used to sign this digest file.', + name: 'aws.cloudtrail.digest.public_key_fingerprint', + type: 'keyword', + }, + 'aws.cloudtrail.digest.signature_algorithm': { + category: 'aws', + description: 'The algorithm used to sign the digest file.', + name: 'aws.cloudtrail.digest.signature_algorithm', + type: 'keyword', + }, + 'aws.cloudtrail.insight_details': { + category: 'aws', + description: + 'Shows information about the underlying triggers of an Insights event, such as event source, user agent, statistics, API name, and whether the event is the start or end of the Insights event.', + name: 'aws.cloudtrail.insight_details', + type: 'flattened', + }, + 'aws.cloudwatch.message': { + category: 'aws', + description: 'CloudWatch log message. ', + name: 'aws.cloudwatch.message', + type: 'text', + }, + 'aws.ec2.ip_address': { + category: 'aws', + description: 'The internet address of the requester. ', + name: 'aws.ec2.ip_address', + type: 'keyword', + }, + 'aws.elb.name': { + category: 'aws', + description: 'The name of the load balancer. ', + name: 'aws.elb.name', + type: 'keyword', + }, + 'aws.elb.type': { + category: 'aws', + description: 'The type of the load balancer for v2 Load Balancers. ', + name: 'aws.elb.type', + type: 'keyword', + }, + 'aws.elb.target_group.arn': { + category: 'aws', + description: 'The ARN of the target group handling the request. ', + name: 'aws.elb.target_group.arn', + type: 'keyword', + }, + 'aws.elb.listener': { + category: 'aws', + description: 'The ELB listener that received the connection. ', + name: 'aws.elb.listener', + type: 'keyword', + }, + 'aws.elb.protocol': { + category: 'aws', + description: 'The protocol of the load balancer (http or tcp). ', + name: 'aws.elb.protocol', + type: 'keyword', + }, + 'aws.elb.request_processing_time.sec': { + category: 'aws', + description: + 'The total time in seconds since the connection or request is received until it is sent to a registered backend. ', + name: 'aws.elb.request_processing_time.sec', + type: 'float', + }, + 'aws.elb.backend_processing_time.sec': { + category: 'aws', + description: + 'The total time in seconds since the connection is sent to the backend till the backend starts responding. ', + name: 'aws.elb.backend_processing_time.sec', + type: 'float', + }, + 'aws.elb.response_processing_time.sec': { + category: 'aws', + description: + 'The total time in seconds since the response is received from the backend till it is sent to the client. ', + name: 'aws.elb.response_processing_time.sec', + type: 'float', + }, + 'aws.elb.connection_time.ms': { + category: 'aws', + description: + 'The total time of the connection in milliseconds, since it is opened till it is closed. ', + name: 'aws.elb.connection_time.ms', + type: 'long', + }, + 'aws.elb.tls_handshake_time.ms': { + category: 'aws', + description: + 'The total time for the TLS handshake to complete in milliseconds once the connection has been established. ', + name: 'aws.elb.tls_handshake_time.ms', + type: 'long', + }, + 'aws.elb.backend.ip': { + category: 'aws', + description: 'The IP address of the backend processing this connection. ', + name: 'aws.elb.backend.ip', + type: 'keyword', + }, + 'aws.elb.backend.port': { + category: 'aws', + description: 'The port in the backend processing this connection. ', + name: 'aws.elb.backend.port', + type: 'keyword', + }, + 'aws.elb.backend.http.response.status_code': { + category: 'aws', + description: + 'The status code from the backend (status code sent to the client from ELB is stored in `http.response.status_code` ', + name: 'aws.elb.backend.http.response.status_code', + type: 'keyword', + }, + 'aws.elb.ssl_cipher': { + category: 'aws', + description: 'The SSL cipher used in TLS/SSL connections. ', + name: 'aws.elb.ssl_cipher', + type: 'keyword', + }, + 'aws.elb.ssl_protocol': { + category: 'aws', + description: 'The SSL protocol used in TLS/SSL connections. ', + name: 'aws.elb.ssl_protocol', + type: 'keyword', + }, + 'aws.elb.chosen_cert.arn': { + category: 'aws', + description: + 'The ARN of the chosen certificate presented to the client in TLS/SSL connections. ', + name: 'aws.elb.chosen_cert.arn', + type: 'keyword', + }, + 'aws.elb.chosen_cert.serial': { + category: 'aws', + description: + 'The serial number of the chosen certificate presented to the client in TLS/SSL connections. ', + name: 'aws.elb.chosen_cert.serial', + type: 'keyword', + }, + 'aws.elb.incoming_tls_alert': { + category: 'aws', + description: + 'The integer value of TLS alerts received by the load balancer from the client, if present. ', + name: 'aws.elb.incoming_tls_alert', + type: 'keyword', + }, + 'aws.elb.tls_named_group': { + category: 'aws', + description: 'The TLS named group. ', + name: 'aws.elb.tls_named_group', + type: 'keyword', + }, + 'aws.elb.trace_id': { + category: 'aws', + description: 'The contents of the `X-Amzn-Trace-Id` header. ', + name: 'aws.elb.trace_id', + type: 'keyword', + }, + 'aws.elb.matched_rule_priority': { + category: 'aws', + description: 'The priority value of the rule that matched the request, if a rule matched. ', + name: 'aws.elb.matched_rule_priority', + type: 'keyword', + }, + 'aws.elb.action_executed': { + category: 'aws', + description: + 'The action executed when processing the request (forward, fixed-response, authenticate...). It can contain several values. ', + name: 'aws.elb.action_executed', + type: 'keyword', + }, + 'aws.elb.redirect_url': { + category: 'aws', + description: 'The URL used if a redirection action was executed. ', + name: 'aws.elb.redirect_url', + type: 'keyword', + }, + 'aws.elb.error.reason': { + category: 'aws', + description: 'The error reason if the executed action failed. ', + name: 'aws.elb.error.reason', + type: 'keyword', + }, + 'aws.elb.target_port': { + category: 'aws', + description: 'List of IP addresses and ports for the targets that processed this request. ', + name: 'aws.elb.target_port', + type: 'keyword', + }, + 'aws.elb.target_status_code': { + category: 'aws', + description: 'List of status codes from the responses of the targets. ', + name: 'aws.elb.target_status_code', + type: 'keyword', + }, + 'aws.elb.classification': { + category: 'aws', + description: 'The classification for desync mitigation. ', + name: 'aws.elb.classification', + type: 'keyword', + }, + 'aws.elb.classification_reason': { + category: 'aws', + description: 'The classification reason code. ', + name: 'aws.elb.classification_reason', + type: 'keyword', + }, + 'aws.s3access.bucket_owner': { + category: 'aws', + description: 'The canonical user ID of the owner of the source bucket. ', + name: 'aws.s3access.bucket_owner', + type: 'keyword', + }, + 'aws.s3access.bucket': { + category: 'aws', + description: 'The name of the bucket that the request was processed against. ', + name: 'aws.s3access.bucket', + type: 'keyword', + }, + 'aws.s3access.remote_ip': { + category: 'aws', + description: 'The apparent internet address of the requester. ', + name: 'aws.s3access.remote_ip', + type: 'ip', + }, + 'aws.s3access.requester': { + category: 'aws', + description: 'The canonical user ID of the requester, or a - for unauthenticated requests. ', + name: 'aws.s3access.requester', + type: 'keyword', + }, + 'aws.s3access.request_id': { + category: 'aws', + description: 'A string generated by Amazon S3 to uniquely identify each request. ', + name: 'aws.s3access.request_id', + type: 'keyword', + }, + 'aws.s3access.operation': { + category: 'aws', + description: + 'The operation listed here is declared as SOAP.operation, REST.HTTP_method.resource_type, WEBSITE.HTTP_method.resource_type, or BATCH.DELETE.OBJECT. ', + name: 'aws.s3access.operation', + type: 'keyword', + }, + 'aws.s3access.key': { + category: 'aws', + description: + 'The "key" part of the request, URL encoded, or "-" if the operation does not take a key parameter. ', + name: 'aws.s3access.key', + type: 'keyword', + }, + 'aws.s3access.request_uri': { + category: 'aws', + description: 'The Request-URI part of the HTTP request message. ', + name: 'aws.s3access.request_uri', + type: 'keyword', + }, + 'aws.s3access.http_status': { + category: 'aws', + description: 'The numeric HTTP status code of the response. ', + name: 'aws.s3access.http_status', + type: 'long', + }, + 'aws.s3access.error_code': { + category: 'aws', + description: 'The Amazon S3 Error Code, or "-" if no error occurred. ', + name: 'aws.s3access.error_code', + type: 'keyword', + }, + 'aws.s3access.bytes_sent': { + category: 'aws', + description: + 'The number of response bytes sent, excluding HTTP protocol overhead, or "-" if zero. ', + name: 'aws.s3access.bytes_sent', + type: 'long', + }, + 'aws.s3access.object_size': { + category: 'aws', + description: 'The total size of the object in question. ', + name: 'aws.s3access.object_size', + type: 'long', + }, + 'aws.s3access.total_time': { + category: 'aws', + description: + "The number of milliseconds the request was in flight from the server's perspective. ", + name: 'aws.s3access.total_time', + type: 'long', + }, + 'aws.s3access.turn_around_time': { + category: 'aws', + description: 'The number of milliseconds that Amazon S3 spent processing your request. ', + name: 'aws.s3access.turn_around_time', + type: 'long', + }, + 'aws.s3access.referrer': { + category: 'aws', + description: 'The value of the HTTP Referrer header, if present. ', + name: 'aws.s3access.referrer', + type: 'keyword', + }, + 'aws.s3access.user_agent': { + category: 'aws', + description: 'The value of the HTTP User-Agent header. ', + name: 'aws.s3access.user_agent', + type: 'keyword', + }, + 'aws.s3access.version_id': { + category: 'aws', + description: + 'The version ID in the request, or "-" if the operation does not take a versionId parameter. ', + name: 'aws.s3access.version_id', + type: 'keyword', + }, + 'aws.s3access.host_id': { + category: 'aws', + description: 'The x-amz-id-2 or Amazon S3 extended request ID. ', + name: 'aws.s3access.host_id', + type: 'keyword', + }, + 'aws.s3access.signature_version': { + category: 'aws', + description: + 'The signature version, SigV2 or SigV4, that was used to authenticate the request or a - for unauthenticated requests. ', + name: 'aws.s3access.signature_version', + type: 'keyword', + }, + 'aws.s3access.cipher_suite': { + category: 'aws', + description: + 'The Secure Sockets Layer (SSL) cipher that was negotiated for HTTPS request or a - for HTTP. ', + name: 'aws.s3access.cipher_suite', + type: 'keyword', + }, + 'aws.s3access.authentication_type': { + category: 'aws', + description: + 'The type of request authentication used, AuthHeader for authentication headers, QueryString for query string (pre-signed URL) or a - for unauthenticated requests. ', + name: 'aws.s3access.authentication_type', + type: 'keyword', + }, + 'aws.s3access.host_header': { + category: 'aws', + description: 'The endpoint used to connect to Amazon S3. ', + name: 'aws.s3access.host_header', + type: 'keyword', + }, + 'aws.s3access.tls_version': { + category: 'aws', + description: 'The Transport Layer Security (TLS) version negotiated by the client. ', + name: 'aws.s3access.tls_version', + type: 'keyword', + }, + 'aws.vpcflow.version': { + category: 'aws', + description: + 'The VPC Flow Logs version. If you use the default format, the version is 2. If you specify a custom format, the version is 3. ', + name: 'aws.vpcflow.version', + type: 'keyword', + }, + 'aws.vpcflow.account_id': { + category: 'aws', + description: 'The AWS account ID for the flow log. ', + name: 'aws.vpcflow.account_id', + type: 'keyword', + }, + 'aws.vpcflow.interface_id': { + category: 'aws', + description: 'The ID of the network interface for which the traffic is recorded. ', + name: 'aws.vpcflow.interface_id', + type: 'keyword', + }, + 'aws.vpcflow.action': { + category: 'aws', + description: 'The action that is associated with the traffic, ACCEPT or REJECT. ', + name: 'aws.vpcflow.action', + type: 'keyword', + }, + 'aws.vpcflow.log_status': { + category: 'aws', + description: 'The logging status of the flow log, OK, NODATA or SKIPDATA. ', + name: 'aws.vpcflow.log_status', + type: 'keyword', + }, + 'aws.vpcflow.instance_id': { + category: 'aws', + description: + "The ID of the instance that's associated with network interface for which the traffic is recorded, if the instance is owned by you. ", + name: 'aws.vpcflow.instance_id', + type: 'keyword', + }, + 'aws.vpcflow.pkt_srcaddr': { + category: 'aws', + description: 'The packet-level (original) source IP address of the traffic. ', + name: 'aws.vpcflow.pkt_srcaddr', + type: 'ip', + }, + 'aws.vpcflow.pkt_dstaddr': { + category: 'aws', + description: 'The packet-level (original) destination IP address for the traffic. ', + name: 'aws.vpcflow.pkt_dstaddr', + type: 'ip', + }, + 'aws.vpcflow.vpc_id': { + category: 'aws', + description: + 'The ID of the VPC that contains the network interface for which the traffic is recorded. ', + name: 'aws.vpcflow.vpc_id', + type: 'keyword', + }, + 'aws.vpcflow.subnet_id': { + category: 'aws', + description: + 'The ID of the subnet that contains the network interface for which the traffic is recorded. ', + name: 'aws.vpcflow.subnet_id', + type: 'keyword', + }, + 'aws.vpcflow.tcp_flags': { + category: 'aws', + description: 'The bitmask value for the following TCP flags: 2=SYN,18=SYN-ACK,1=FIN,4=RST ', + name: 'aws.vpcflow.tcp_flags', + type: 'keyword', + }, + 'aws.vpcflow.tcp_flags_array': { + category: 'aws', + description: "List of TCP flags: 'fin, syn, rst, psh, ack, urg' ", + name: 'aws.vpcflow.tcp_flags_array', + type: 'keyword', + }, + 'aws.vpcflow.type': { + category: 'aws', + description: 'The type of traffic: IPv4, IPv6, or EFA. ', + name: 'aws.vpcflow.type', + type: 'keyword', + }, + 'awsfargate.log': { + category: 'awsfargate', + description: 'Fields for Amazon Fargate container logs. ', + name: 'awsfargate.log', + type: 'group', + }, + 'azure.subscription_id': { + category: 'azure', + description: 'Azure subscription ID ', + name: 'azure.subscription_id', + type: 'keyword', + }, + 'azure.correlation_id': { + category: 'azure', + description: 'Correlation ID ', + name: 'azure.correlation_id', + type: 'keyword', + }, + 'azure.tenant_id': { + category: 'azure', + description: 'tenant ID ', + name: 'azure.tenant_id', + type: 'keyword', + }, + 'azure.resource.id': { + category: 'azure', + description: 'Resource ID ', + name: 'azure.resource.id', + type: 'keyword', + }, + 'azure.resource.group': { + category: 'azure', + description: 'Resource group ', + name: 'azure.resource.group', + type: 'keyword', + }, + 'azure.resource.provider': { + category: 'azure', + description: 'Resource type/namespace ', + name: 'azure.resource.provider', + type: 'keyword', + }, + 'azure.resource.namespace': { + category: 'azure', + description: 'Resource type/namespace ', + name: 'azure.resource.namespace', + type: 'keyword', + }, + 'azure.resource.name': { + category: 'azure', + description: 'Name ', + name: 'azure.resource.name', + type: 'keyword', + }, + 'azure.resource.authorization_rule': { + category: 'azure', + description: 'Authorization rule ', + name: 'azure.resource.authorization_rule', + type: 'keyword', + }, + 'azure.activitylogs.identity.claims_initiated_by_user.name': { + category: 'azure', + description: 'Name ', + name: 'azure.activitylogs.identity.claims_initiated_by_user.name', + type: 'keyword', + }, + 'azure.activitylogs.identity.claims_initiated_by_user.givenname': { + category: 'azure', + description: 'Givenname ', + name: 'azure.activitylogs.identity.claims_initiated_by_user.givenname', + type: 'keyword', + }, + 'azure.activitylogs.identity.claims_initiated_by_user.surname': { + category: 'azure', + description: 'Surname ', + name: 'azure.activitylogs.identity.claims_initiated_by_user.surname', + type: 'keyword', + }, + 'azure.activitylogs.identity.claims_initiated_by_user.fullname': { + category: 'azure', + description: 'Fullname ', + name: 'azure.activitylogs.identity.claims_initiated_by_user.fullname', + type: 'keyword', + }, + 'azure.activitylogs.identity.claims_initiated_by_user.schema': { + category: 'azure', + description: 'Schema ', + name: 'azure.activitylogs.identity.claims_initiated_by_user.schema', + type: 'keyword', + }, + 'azure.activitylogs.identity.claims.*': { + category: 'azure', + description: 'Claims ', + name: 'azure.activitylogs.identity.claims.*', + type: 'object', + }, + 'azure.activitylogs.identity.authorization.scope': { + category: 'azure', + description: 'Scope ', + name: 'azure.activitylogs.identity.authorization.scope', + type: 'keyword', + }, + 'azure.activitylogs.identity.authorization.action': { + category: 'azure', + description: 'Action ', + name: 'azure.activitylogs.identity.authorization.action', + type: 'keyword', + }, + 'azure.activitylogs.identity.authorization.evidence.role_assignment_scope': { + category: 'azure', + description: 'Role assignment scope ', + name: 'azure.activitylogs.identity.authorization.evidence.role_assignment_scope', + type: 'keyword', + }, + 'azure.activitylogs.identity.authorization.evidence.role_definition_id': { + category: 'azure', + description: 'Role definition ID ', + name: 'azure.activitylogs.identity.authorization.evidence.role_definition_id', + type: 'keyword', + }, + 'azure.activitylogs.identity.authorization.evidence.role': { + category: 'azure', + description: 'Role ', + name: 'azure.activitylogs.identity.authorization.evidence.role', + type: 'keyword', + }, + 'azure.activitylogs.identity.authorization.evidence.role_assignment_id': { + category: 'azure', + description: 'Role assignment ID ', + name: 'azure.activitylogs.identity.authorization.evidence.role_assignment_id', + type: 'keyword', + }, + 'azure.activitylogs.identity.authorization.evidence.principal_id': { + category: 'azure', + description: 'Principal ID ', + name: 'azure.activitylogs.identity.authorization.evidence.principal_id', + type: 'keyword', + }, + 'azure.activitylogs.identity.authorization.evidence.principal_type': { + category: 'azure', + description: 'Principal type ', + name: 'azure.activitylogs.identity.authorization.evidence.principal_type', + type: 'keyword', + }, + 'azure.activitylogs.operation_name': { + category: 'azure', + description: 'Operation name ', + name: 'azure.activitylogs.operation_name', + type: 'keyword', + }, + 'azure.activitylogs.result_type': { + category: 'azure', + description: 'Result type ', + name: 'azure.activitylogs.result_type', + type: 'keyword', + }, + 'azure.activitylogs.result_signature': { + category: 'azure', + description: 'Result signature ', + name: 'azure.activitylogs.result_signature', + type: 'keyword', + }, + 'azure.activitylogs.category': { + category: 'azure', + description: 'Category ', + name: 'azure.activitylogs.category', + type: 'keyword', + }, + 'azure.activitylogs.event_category': { + category: 'azure', + description: 'Event Category ', + name: 'azure.activitylogs.event_category', + type: 'keyword', + }, + 'azure.activitylogs.properties': { + category: 'azure', + description: 'Properties ', + name: 'azure.activitylogs.properties', + type: 'flattened', + }, + 'azure.auditlogs.category': { + category: 'azure', + description: 'The category of the operation. Currently, Audit is the only supported value. ', + name: 'azure.auditlogs.category', + type: 'keyword', + }, + 'azure.auditlogs.operation_name': { + category: 'azure', + description: 'The operation name ', + name: 'azure.auditlogs.operation_name', + type: 'keyword', + }, + 'azure.auditlogs.operation_version': { + category: 'azure', + description: 'The operation version ', + name: 'azure.auditlogs.operation_version', + type: 'keyword', + }, + 'azure.auditlogs.identity': { + category: 'azure', + description: 'Identity ', + name: 'azure.auditlogs.identity', + type: 'keyword', + }, + 'azure.auditlogs.tenant_id': { + category: 'azure', + description: 'Tenant ID ', + name: 'azure.auditlogs.tenant_id', + type: 'keyword', + }, + 'azure.auditlogs.result_signature': { + category: 'azure', + description: 'Result signature ', + name: 'azure.auditlogs.result_signature', + type: 'keyword', + }, + 'azure.auditlogs.properties.result': { + category: 'azure', + description: 'Log result ', + name: 'azure.auditlogs.properties.result', + type: 'keyword', + }, + 'azure.auditlogs.properties.activity_display_name': { + category: 'azure', + description: 'Activity display name ', + name: 'azure.auditlogs.properties.activity_display_name', + type: 'keyword', + }, + 'azure.auditlogs.properties.result_reason': { + category: 'azure', + description: 'Reason for the log result ', + name: 'azure.auditlogs.properties.result_reason', + type: 'keyword', + }, + 'azure.auditlogs.properties.correlation_id': { + category: 'azure', + description: 'Correlation ID ', + name: 'azure.auditlogs.properties.correlation_id', + type: 'keyword', + }, + 'azure.auditlogs.properties.logged_by_service': { + category: 'azure', + description: 'Logged by service ', + name: 'azure.auditlogs.properties.logged_by_service', + type: 'keyword', + }, + 'azure.auditlogs.properties.operation_type': { + category: 'azure', + description: 'Operation type ', + name: 'azure.auditlogs.properties.operation_type', + type: 'keyword', + }, + 'azure.auditlogs.properties.id': { + category: 'azure', + description: 'ID ', + name: 'azure.auditlogs.properties.id', + type: 'keyword', + }, + 'azure.auditlogs.properties.activity_datetime': { + category: 'azure', + description: 'Activity timestamp ', + name: 'azure.auditlogs.properties.activity_datetime', + type: 'date', + }, + 'azure.auditlogs.properties.category': { + category: 'azure', + description: 'category ', + name: 'azure.auditlogs.properties.category', + type: 'keyword', + }, + 'azure.auditlogs.properties.target_resources.*.display_name': { + category: 'azure', + description: 'Display name ', + name: 'azure.auditlogs.properties.target_resources.*.display_name', + type: 'keyword', + }, + 'azure.auditlogs.properties.target_resources.*.id': { + category: 'azure', + description: 'ID ', + name: 'azure.auditlogs.properties.target_resources.*.id', + type: 'keyword', + }, + 'azure.auditlogs.properties.target_resources.*.type': { + category: 'azure', + description: 'Type ', + name: 'azure.auditlogs.properties.target_resources.*.type', + type: 'keyword', + }, + 'azure.auditlogs.properties.target_resources.*.ip_address': { + category: 'azure', + description: 'ip Address ', + name: 'azure.auditlogs.properties.target_resources.*.ip_address', + type: 'keyword', + }, + 'azure.auditlogs.properties.target_resources.*.user_principal_name': { + category: 'azure', + description: 'User principal name ', + name: 'azure.auditlogs.properties.target_resources.*.user_principal_name', + type: 'keyword', + }, + 'azure.auditlogs.properties.target_resources.*.modified_properties.*.new_value': { + category: 'azure', + description: 'New value ', + name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.new_value', + type: 'keyword', + }, + 'azure.auditlogs.properties.target_resources.*.modified_properties.*.display_name': { + category: 'azure', + description: 'Display value ', + name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.display_name', + type: 'keyword', + }, + 'azure.auditlogs.properties.target_resources.*.modified_properties.*.old_value': { + category: 'azure', + description: 'Old value ', + name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.old_value', + type: 'keyword', + }, + 'azure.auditlogs.properties.initiated_by.app.servicePrincipalName': { + category: 'azure', + description: 'Service principal name ', + name: 'azure.auditlogs.properties.initiated_by.app.servicePrincipalName', + type: 'keyword', + }, + 'azure.auditlogs.properties.initiated_by.app.displayName': { + category: 'azure', + description: 'Display name ', + name: 'azure.auditlogs.properties.initiated_by.app.displayName', + type: 'keyword', + }, + 'azure.auditlogs.properties.initiated_by.app.appId': { + category: 'azure', + description: 'App ID ', + name: 'azure.auditlogs.properties.initiated_by.app.appId', + type: 'keyword', + }, + 'azure.auditlogs.properties.initiated_by.app.servicePrincipalId': { + category: 'azure', + description: 'Service principal ID ', + name: 'azure.auditlogs.properties.initiated_by.app.servicePrincipalId', + type: 'keyword', + }, + 'azure.auditlogs.properties.initiated_by.user.userPrincipalName': { + category: 'azure', + description: 'User principal name ', + name: 'azure.auditlogs.properties.initiated_by.user.userPrincipalName', + type: 'keyword', + }, + 'azure.auditlogs.properties.initiated_by.user.displayName': { + category: 'azure', + description: 'Display name ', + name: 'azure.auditlogs.properties.initiated_by.user.displayName', + type: 'keyword', + }, + 'azure.auditlogs.properties.initiated_by.user.id': { + category: 'azure', + description: 'ID ', + name: 'azure.auditlogs.properties.initiated_by.user.id', + type: 'keyword', + }, + 'azure.auditlogs.properties.initiated_by.user.ipAddress': { + category: 'azure', + description: 'ip Address ', + name: 'azure.auditlogs.properties.initiated_by.user.ipAddress', + type: 'keyword', + }, + 'azure.platformlogs.operation_name': { + category: 'azure', + description: 'Operation name ', + name: 'azure.platformlogs.operation_name', + type: 'keyword', + }, + 'azure.platformlogs.result_type': { + category: 'azure', + description: 'Result type ', + name: 'azure.platformlogs.result_type', + type: 'keyword', + }, + 'azure.platformlogs.result_signature': { + category: 'azure', + description: 'Result signature ', + name: 'azure.platformlogs.result_signature', + type: 'keyword', + }, + 'azure.platformlogs.category': { + category: 'azure', + description: 'Category ', + name: 'azure.platformlogs.category', + type: 'keyword', + }, + 'azure.platformlogs.event_category': { + category: 'azure', + description: 'Event Category ', + name: 'azure.platformlogs.event_category', + type: 'keyword', + }, + 'azure.platformlogs.status': { + category: 'azure', + description: 'Status ', + name: 'azure.platformlogs.status', + type: 'keyword', + }, + 'azure.platformlogs.ccpNamespace': { + category: 'azure', + description: 'ccpNamespace ', + name: 'azure.platformlogs.ccpNamespace', + type: 'keyword', + }, + 'azure.platformlogs.Cloud': { + category: 'azure', + description: 'Cloud ', + name: 'azure.platformlogs.Cloud', + type: 'keyword', + }, + 'azure.platformlogs.Environment': { + category: 'azure', + description: 'Environment ', + name: 'azure.platformlogs.Environment', + type: 'keyword', + }, + 'azure.platformlogs.EventTimeString': { + category: 'azure', + description: 'EventTimeString ', + name: 'azure.platformlogs.EventTimeString', + type: 'keyword', + }, + 'azure.platformlogs.Caller': { + category: 'azure', + description: 'Caller ', + name: 'azure.platformlogs.Caller', + type: 'keyword', + }, + 'azure.platformlogs.ScaleUnit': { + category: 'azure', + description: 'ScaleUnit ', + name: 'azure.platformlogs.ScaleUnit', + type: 'keyword', + }, + 'azure.platformlogs.ActivityId': { + category: 'azure', + description: 'ActivityId ', + name: 'azure.platformlogs.ActivityId', + type: 'keyword', + }, + 'azure.platformlogs.properties': { + category: 'azure', + description: 'Event inner properties ', + name: 'azure.platformlogs.properties', + type: 'flattened', + }, + 'azure.signinlogs.operation_name': { + category: 'azure', + description: 'The operation name ', + name: 'azure.signinlogs.operation_name', + type: 'keyword', + }, + 'azure.signinlogs.operation_version': { + category: 'azure', + description: 'The operation version ', + name: 'azure.signinlogs.operation_version', + type: 'keyword', + }, + 'azure.signinlogs.tenant_id': { + category: 'azure', + description: 'Tenant ID ', + name: 'azure.signinlogs.tenant_id', + type: 'keyword', + }, + 'azure.signinlogs.result_signature': { + category: 'azure', + description: 'Result signature ', + name: 'azure.signinlogs.result_signature', + type: 'keyword', + }, + 'azure.signinlogs.result_description': { + category: 'azure', + description: 'Result description ', + name: 'azure.signinlogs.result_description', + type: 'keyword', + }, + 'azure.signinlogs.result_type': { + category: 'azure', + description: 'Result type ', + name: 'azure.signinlogs.result_type', + type: 'keyword', + }, + 'azure.signinlogs.identity': { + category: 'azure', + description: 'Identity ', + name: 'azure.signinlogs.identity', + type: 'keyword', + }, + 'azure.signinlogs.category': { + category: 'azure', + description: 'Category ', + name: 'azure.signinlogs.category', + type: 'keyword', + }, + 'azure.signinlogs.properties.id': { + category: 'azure', + description: 'Unique ID representing the sign-in activity. ', + name: 'azure.signinlogs.properties.id', + type: 'keyword', + }, + 'azure.signinlogs.properties.created_at': { + category: 'azure', + description: 'Date and time (UTC) the sign-in was initiated. ', + name: 'azure.signinlogs.properties.created_at', + type: 'date', + }, + 'azure.signinlogs.properties.user_display_name': { + category: 'azure', + description: 'User display name ', + name: 'azure.signinlogs.properties.user_display_name', + type: 'keyword', + }, + 'azure.signinlogs.properties.correlation_id': { + category: 'azure', + description: 'Correlation ID ', + name: 'azure.signinlogs.properties.correlation_id', + type: 'keyword', + }, + 'azure.signinlogs.properties.user_principal_name': { + category: 'azure', + description: 'User principal name ', + name: 'azure.signinlogs.properties.user_principal_name', + type: 'keyword', + }, + 'azure.signinlogs.properties.user_id': { + category: 'azure', + description: 'User ID ', + name: 'azure.signinlogs.properties.user_id', + type: 'keyword', + }, + 'azure.signinlogs.properties.app_id': { + category: 'azure', + description: 'App ID ', + name: 'azure.signinlogs.properties.app_id', + type: 'keyword', + }, + 'azure.signinlogs.properties.app_display_name': { + category: 'azure', + description: 'App display name ', + name: 'azure.signinlogs.properties.app_display_name', + type: 'keyword', + }, + 'azure.signinlogs.properties.autonomous_system_number': { + category: 'azure', + description: 'Autonomous system number.', + name: 'azure.signinlogs.properties.autonomous_system_number', + type: 'long', + }, + 'azure.signinlogs.properties.client_app_used': { + category: 'azure', + description: 'Client app used ', + name: 'azure.signinlogs.properties.client_app_used', + type: 'keyword', + }, + 'azure.signinlogs.properties.conditional_access_status': { + category: 'azure', + description: 'Conditional access status ', + name: 'azure.signinlogs.properties.conditional_access_status', + type: 'keyword', + }, + 'azure.signinlogs.properties.original_request_id': { + category: 'azure', + description: 'Original request ID ', + name: 'azure.signinlogs.properties.original_request_id', + type: 'keyword', + }, + 'azure.signinlogs.properties.is_interactive': { + category: 'azure', + description: 'Is interactive ', + name: 'azure.signinlogs.properties.is_interactive', + type: 'boolean', + }, + 'azure.signinlogs.properties.token_issuer_name': { + category: 'azure', + description: 'Token issuer name ', + name: 'azure.signinlogs.properties.token_issuer_name', + type: 'keyword', + }, + 'azure.signinlogs.properties.token_issuer_type': { + category: 'azure', + description: 'Token issuer type ', + name: 'azure.signinlogs.properties.token_issuer_type', + type: 'keyword', + }, + 'azure.signinlogs.properties.processing_time_ms': { + category: 'azure', + description: 'Processing time in milliseconds ', + name: 'azure.signinlogs.properties.processing_time_ms', + type: 'float', + }, + 'azure.signinlogs.properties.risk_detail': { + category: 'azure', + description: 'Risk detail ', + name: 'azure.signinlogs.properties.risk_detail', + type: 'keyword', + }, + 'azure.signinlogs.properties.risk_level_aggregated': { + category: 'azure', + description: 'Risk level aggregated ', + name: 'azure.signinlogs.properties.risk_level_aggregated', + type: 'keyword', + }, + 'azure.signinlogs.properties.risk_level_during_signin': { + category: 'azure', + description: 'Risk level during signIn ', + name: 'azure.signinlogs.properties.risk_level_during_signin', + type: 'keyword', + }, + 'azure.signinlogs.properties.risk_state': { + category: 'azure', + description: 'Risk state ', + name: 'azure.signinlogs.properties.risk_state', + type: 'keyword', + }, + 'azure.signinlogs.properties.resource_display_name': { + category: 'azure', + description: 'Resource display name ', + name: 'azure.signinlogs.properties.resource_display_name', + type: 'keyword', + }, + 'azure.signinlogs.properties.status.error_code': { + category: 'azure', + description: 'Error code ', + name: 'azure.signinlogs.properties.status.error_code', + type: 'long', + }, + 'azure.signinlogs.properties.device_detail.device_id': { + category: 'azure', + description: 'Device ID ', + name: 'azure.signinlogs.properties.device_detail.device_id', + type: 'keyword', + }, + 'azure.signinlogs.properties.device_detail.operating_system': { + category: 'azure', + description: 'Operating system ', + name: 'azure.signinlogs.properties.device_detail.operating_system', + type: 'keyword', + }, + 'azure.signinlogs.properties.device_detail.browser': { + category: 'azure', + description: 'Browser ', + name: 'azure.signinlogs.properties.device_detail.browser', + type: 'keyword', + }, + 'azure.signinlogs.properties.device_detail.display_name': { + category: 'azure', + description: 'Display name ', + name: 'azure.signinlogs.properties.device_detail.display_name', + type: 'keyword', + }, + 'azure.signinlogs.properties.device_detail.trust_type': { + category: 'azure', + description: 'Trust type ', + name: 'azure.signinlogs.properties.device_detail.trust_type', + type: 'keyword', + }, + 'azure.signinlogs.properties.applied_conditional_access_policies': { + category: 'azure', + description: + 'A list of conditional access policies that are triggered by the corresponding sign-in activity. ', + name: 'azure.signinlogs.properties.applied_conditional_access_policies', + type: 'array', + }, + 'azure.signinlogs.properties.authentication_details': { + category: 'azure', + description: + 'The result of the authentication attempt and additional details on the authentication method. ', + name: 'azure.signinlogs.properties.authentication_details', + type: 'array', + }, + 'azure.signinlogs.properties.authentication_processing_details': { + category: 'azure', + description: + 'Additional authentication processing details, such as the agent name in case of PTA/PHS or Server/farm name in case of federated authentication. ', + name: 'azure.signinlogs.properties.authentication_processing_details', + type: 'flattened', + }, + 'azure.signinlogs.properties.authentication_requirement': { + category: 'azure', + description: + 'This holds the highest level of authentication needed through all the sign-in steps, for sign-in to succeed. ', + name: 'azure.signinlogs.properties.authentication_requirement', + type: 'keyword', + }, + 'azure.signinlogs.properties.authentication_requirement_policies': { + category: 'azure', + description: + 'Set of CA policies that apply to this sign-in, each as CA: policy name, and/or MFA: Per-user ', + name: 'azure.signinlogs.properties.authentication_requirement_policies', + type: 'keyword', + }, + 'azure.signinlogs.properties.flagged_for_review': { + category: 'azure', + name: 'azure.signinlogs.properties.flagged_for_review', + type: 'boolean', + }, + 'azure.signinlogs.properties.home_tenant_id': { + category: 'azure', + name: 'azure.signinlogs.properties.home_tenant_id', + type: 'keyword', + }, + 'azure.signinlogs.properties.network_location_details': { + category: 'azure', + description: 'The network location details including the type of network used and its names.', + name: 'azure.signinlogs.properties.network_location_details', + type: 'array', + }, + 'azure.signinlogs.properties.resource_id': { + category: 'azure', + description: 'The identifier of the resource that the user signed in to.', + name: 'azure.signinlogs.properties.resource_id', + type: 'keyword', + }, + 'azure.signinlogs.properties.resource_tenant_id': { + category: 'azure', + name: 'azure.signinlogs.properties.resource_tenant_id', + type: 'keyword', + }, + 'azure.signinlogs.properties.risk_event_types': { + category: 'azure', + description: + 'The list of risk event types associated with the sign-in. Possible values: unlikelyTravel, anonymizedIPAddress, maliciousIPAddress, unfamiliarFeatures, malwareInfectedIPAddress, suspiciousIPAddress, leakedCredentials, investigationsThreatIntelligence, generic, or unknownFutureValue. ', + name: 'azure.signinlogs.properties.risk_event_types', + type: 'keyword', + }, + 'azure.signinlogs.properties.risk_event_types_v2': { + category: 'azure', + description: + 'The list of risk event types associated with the sign-in. Possible values: unlikelyTravel, anonymizedIPAddress, maliciousIPAddress, unfamiliarFeatures, malwareInfectedIPAddress, suspiciousIPAddress, leakedCredentials, investigationsThreatIntelligence, generic, or unknownFutureValue. ', + name: 'azure.signinlogs.properties.risk_event_types_v2', + type: 'keyword', + }, + 'azure.signinlogs.properties.service_principal_name': { + category: 'azure', + description: + 'The application name used for sign-in. This field is populated when you are signing in using an application. ', + name: 'azure.signinlogs.properties.service_principal_name', + type: 'keyword', + }, + 'azure.signinlogs.properties.user_type': { + category: 'azure', + name: 'azure.signinlogs.properties.user_type', + type: 'keyword', + }, + 'azure.signinlogs.properties.service_principal_id': { + category: 'azure', + description: + 'The application identifier used for sign-in. This field is populated when you are signing in using an application. ', + name: 'azure.signinlogs.properties.service_principal_id', + type: 'keyword', + }, + 'azure.signinlogs.properties.cross_tenant_access_type': { + category: 'azure', + name: 'azure.signinlogs.properties.cross_tenant_access_type', + type: 'keyword', + }, + 'azure.signinlogs.properties.is_tenant_restricted': { + category: 'azure', + name: 'azure.signinlogs.properties.is_tenant_restricted', + type: 'boolean', + }, + 'azure.signinlogs.properties.sso_extension_version': { + category: 'azure', + name: 'azure.signinlogs.properties.sso_extension_version', + type: 'keyword', + }, + 'network.interface.name': { + category: 'network', + description: 'Name of the network interface where the traffic has been observed. ', + name: 'network.interface.name', + type: 'keyword', + }, + 'rsa.internal.msg': { + category: 'rsa', + description: 'This key is used to capture the raw message that comes into the Log Decoder', + name: 'rsa.internal.msg', + type: 'keyword', + }, + 'rsa.internal.messageid': { + category: 'rsa', + name: 'rsa.internal.messageid', + type: 'keyword', + }, + 'rsa.internal.event_desc': { + category: 'rsa', + name: 'rsa.internal.event_desc', + type: 'keyword', + }, + 'rsa.internal.message': { + category: 'rsa', + description: 'This key captures the contents of instant messages', + name: 'rsa.internal.message', + type: 'keyword', + }, + 'rsa.internal.time': { + category: 'rsa', + description: + 'This is the time at which a session hits a NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness.', + name: 'rsa.internal.time', + type: 'date', + }, + 'rsa.internal.level': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.level', + type: 'long', + }, + 'rsa.internal.msg_id': { + category: 'rsa', + description: + 'This is the Message ID1 value that identifies the exact log parser definition which parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.msg_id', + type: 'keyword', + }, + 'rsa.internal.msg_vid': { + category: 'rsa', + description: + 'This is the Message ID2 value that identifies the exact log parser definition which parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.msg_vid', + type: 'keyword', + }, + 'rsa.internal.data': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.data', + type: 'keyword', + }, + 'rsa.internal.obj_server': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.obj_server', + type: 'keyword', + }, + 'rsa.internal.obj_val': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.obj_val', + type: 'keyword', + }, + 'rsa.internal.resource': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.resource', + type: 'keyword', + }, + 'rsa.internal.obj_id': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.obj_id', + type: 'keyword', + }, + 'rsa.internal.statement': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.statement', + type: 'keyword', + }, + 'rsa.internal.audit_class': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.audit_class', + type: 'keyword', + }, + 'rsa.internal.entry': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.entry', + type: 'keyword', + }, + 'rsa.internal.hcode': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.hcode', + type: 'keyword', + }, + 'rsa.internal.inode': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.inode', + type: 'long', + }, + 'rsa.internal.resource_class': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.resource_class', + type: 'keyword', + }, + 'rsa.internal.dead': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.dead', + type: 'long', + }, + 'rsa.internal.feed_desc': { + category: 'rsa', + description: + 'This is used to capture the description of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.feed_desc', + type: 'keyword', + }, + 'rsa.internal.feed_name': { + category: 'rsa', + description: + 'This is used to capture the name of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.feed_name', + type: 'keyword', + }, + 'rsa.internal.cid': { + category: 'rsa', + description: + 'This is the unique identifier used to identify a NetWitness Concentrator. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.cid', + type: 'keyword', + }, + 'rsa.internal.device_class': { + category: 'rsa', + description: + 'This is the Classification of the Log Event Source under a predefined fixed set of Event Source Classifications. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.device_class', + type: 'keyword', + }, + 'rsa.internal.device_group': { + category: 'rsa', + description: + 'This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.device_group', + type: 'keyword', + }, + 'rsa.internal.device_host': { + category: 'rsa', + description: + 'This is the Hostname of the log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.device_host', + type: 'keyword', + }, + 'rsa.internal.device_ip': { + category: 'rsa', + description: + 'This is the IPv4 address of the Log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.device_ip', + type: 'ip', + }, + 'rsa.internal.device_ipv6': { + category: 'rsa', + description: + 'This is the IPv6 address of the Log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.device_ipv6', + type: 'ip', + }, + 'rsa.internal.device_type': { + category: 'rsa', + description: + 'This is the name of the log parser which parsed a given session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.device_type', + type: 'keyword', + }, + 'rsa.internal.device_type_id': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.device_type_id', + type: 'long', + }, + 'rsa.internal.did': { + category: 'rsa', + description: + 'This is the unique identifier used to identify a NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.did', + type: 'keyword', + }, + 'rsa.internal.entropy_req': { + category: 'rsa', + description: + 'This key is only used by the Entropy Parser, the Meta Type can be either UInt16 or Float32 based on the configuration', + name: 'rsa.internal.entropy_req', + type: 'long', + }, + 'rsa.internal.entropy_res': { + category: 'rsa', + description: + 'This key is only used by the Entropy Parser, the Meta Type can be either UInt16 or Float32 based on the configuration', + name: 'rsa.internal.entropy_res', + type: 'long', + }, + 'rsa.internal.event_name': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.event_name', + type: 'keyword', + }, + 'rsa.internal.feed_category': { + category: 'rsa', + description: + 'This is used to capture the category of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.feed_category', + type: 'keyword', + }, + 'rsa.internal.forward_ip': { + category: 'rsa', + description: + 'This key should be used to capture the IPV4 address of a relay system which forwarded the events from the original system to NetWitness.', + name: 'rsa.internal.forward_ip', + type: 'ip', + }, + 'rsa.internal.forward_ipv6': { + category: 'rsa', + description: + 'This key is used to capture the IPV6 address of a relay system which forwarded the events from the original system to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.forward_ipv6', + type: 'ip', + }, + 'rsa.internal.header_id': { + category: 'rsa', + description: + 'This is the Header ID value that identifies the exact log parser header definition that parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.header_id', + type: 'keyword', + }, + 'rsa.internal.lc_cid': { + category: 'rsa', + description: + 'This is a unique Identifier of a Log Collector. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.lc_cid', + type: 'keyword', + }, + 'rsa.internal.lc_ctime': { + category: 'rsa', + description: + 'This is the time at which a log is collected in a NetWitness Log Collector. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.lc_ctime', + type: 'date', + }, + 'rsa.internal.mcb_req': { + category: 'rsa', + description: + 'This key is only used by the Entropy Parser, the most common byte request is simply which byte for each side (0 thru 255) was seen the most', + name: 'rsa.internal.mcb_req', + type: 'long', + }, + 'rsa.internal.mcb_res': { + category: 'rsa', + description: + 'This key is only used by the Entropy Parser, the most common byte response is simply which byte for each side (0 thru 255) was seen the most', + name: 'rsa.internal.mcb_res', + type: 'long', + }, + 'rsa.internal.mcbc_req': { + category: 'rsa', + description: + 'This key is only used by the Entropy Parser, the most common byte count is the number of times the most common byte (above) was seen in the session streams', + name: 'rsa.internal.mcbc_req', + type: 'long', + }, + 'rsa.internal.mcbc_res': { + category: 'rsa', + description: + 'This key is only used by the Entropy Parser, the most common byte count is the number of times the most common byte (above) was seen in the session streams', + name: 'rsa.internal.mcbc_res', + type: 'long', + }, + 'rsa.internal.medium': { + category: 'rsa', + description: + 'This key is used to identify if it’s a log/packet session or Layer 2 Encapsulation Type. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness. 32 = log, 33 = correlation session, < 32 is packet session', + name: 'rsa.internal.medium', + type: 'long', + }, + 'rsa.internal.node_name': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.node_name', + type: 'keyword', + }, + 'rsa.internal.nwe_callback_id': { + category: 'rsa', + description: 'This key denotes that event is endpoint related', + name: 'rsa.internal.nwe_callback_id', + type: 'keyword', + }, + 'rsa.internal.parse_error': { + category: 'rsa', + description: + 'This is a special key that stores any Meta key validation error found while parsing a log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.parse_error', + type: 'keyword', + }, + 'rsa.internal.payload_req': { + category: 'rsa', + description: + 'This key is only used by the Entropy Parser, the payload size metrics are the payload sizes of each session side at the time of parsing. However, in order to keep', + name: 'rsa.internal.payload_req', + type: 'long', + }, + 'rsa.internal.payload_res': { + category: 'rsa', + description: + 'This key is only used by the Entropy Parser, the payload size metrics are the payload sizes of each session side at the time of parsing. However, in order to keep', + name: 'rsa.internal.payload_res', + type: 'long', + }, + 'rsa.internal.process_vid_dst': { + category: 'rsa', + description: + 'Endpoint generates and uses a unique virtual ID to identify any similar group of process. This ID represents the target process.', + name: 'rsa.internal.process_vid_dst', + type: 'keyword', + }, + 'rsa.internal.process_vid_src': { + category: 'rsa', + description: + 'Endpoint generates and uses a unique virtual ID to identify any similar group of process. This ID represents the source process.', + name: 'rsa.internal.process_vid_src', + type: 'keyword', + }, + 'rsa.internal.rid': { + category: 'rsa', + description: + 'This is a special ID of the Remote Session created by NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.rid', + type: 'long', + }, + 'rsa.internal.session_split': { + category: 'rsa', + description: + 'This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.session_split', + type: 'keyword', + }, + 'rsa.internal.site': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.internal.site', + type: 'keyword', + }, + 'rsa.internal.size': { + category: 'rsa', + description: + 'This is the size of the session as seen by the NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.size', + type: 'long', + }, + 'rsa.internal.sourcefile': { + category: 'rsa', + description: + 'This is the name of the log file or PCAPs that can be imported into NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.internal.sourcefile', + type: 'keyword', + }, + 'rsa.internal.ubc_req': { + category: 'rsa', + description: + 'This key is only used by the Entropy Parser, Unique byte count is the number of unique bytes seen in each stream. 256 would mean all byte values of 0 thru 255 were seen at least once', + name: 'rsa.internal.ubc_req', + type: 'long', + }, + 'rsa.internal.ubc_res': { + category: 'rsa', + description: + 'This key is only used by the Entropy Parser, Unique byte count is the number of unique bytes seen in each stream. 256 would mean all byte values of 0 thru 255 were seen at least once', + name: 'rsa.internal.ubc_res', + type: 'long', + }, + 'rsa.internal.word': { + category: 'rsa', + description: + 'This is used by the Word Parsing technology to capture the first 5 character of every word in an unparsed log', + name: 'rsa.internal.word', + type: 'keyword', + }, + 'rsa.time.event_time': { + category: 'rsa', + description: + 'This key is used to capture the time mentioned in a raw session that represents the actual time an event occured in a standard normalized form', + name: 'rsa.time.event_time', + type: 'date', + }, + 'rsa.time.duration_time': { + category: 'rsa', + description: 'This key is used to capture the normalized duration/lifetime in seconds.', + name: 'rsa.time.duration_time', + type: 'double', + }, + 'rsa.time.event_time_str': { + category: 'rsa', + description: + 'This key is used to capture the incomplete time mentioned in a session as a string', + name: 'rsa.time.event_time_str', + type: 'keyword', + }, + 'rsa.time.starttime': { + category: 'rsa', + description: + 'This key is used to capture the Start time mentioned in a session in a standard form', + name: 'rsa.time.starttime', + type: 'date', + }, + 'rsa.time.month': { + category: 'rsa', + name: 'rsa.time.month', + type: 'keyword', + }, + 'rsa.time.day': { + category: 'rsa', + name: 'rsa.time.day', + type: 'keyword', + }, + 'rsa.time.endtime': { + category: 'rsa', + description: + 'This key is used to capture the End time mentioned in a session in a standard form', + name: 'rsa.time.endtime', + type: 'date', + }, + 'rsa.time.timezone': { + category: 'rsa', + description: 'This key is used to capture the timezone of the Event Time', + name: 'rsa.time.timezone', + type: 'keyword', + }, + 'rsa.time.duration_str': { + category: 'rsa', + description: 'A text string version of the duration', + name: 'rsa.time.duration_str', + type: 'keyword', + }, + 'rsa.time.date': { + category: 'rsa', + name: 'rsa.time.date', + type: 'keyword', + }, + 'rsa.time.year': { + category: 'rsa', + name: 'rsa.time.year', + type: 'keyword', + }, + 'rsa.time.recorded_time': { + category: 'rsa', + description: + "The event time as recorded by the system the event is collected from. The usage scenario is a multi-tier application where the management layer of the system records it's own timestamp at the time of collection from its child nodes. Must be in timestamp format.", + name: 'rsa.time.recorded_time', + type: 'date', + }, + 'rsa.time.datetime': { + category: 'rsa', + name: 'rsa.time.datetime', + type: 'keyword', + }, + 'rsa.time.effective_time': { + category: 'rsa', + description: + 'This key is the effective time referenced by an individual event in a Standard Timestamp format', + name: 'rsa.time.effective_time', + type: 'date', + }, + 'rsa.time.expire_time': { + category: 'rsa', + description: 'This key is the timestamp that explicitly refers to an expiration.', + name: 'rsa.time.expire_time', + type: 'date', + }, + 'rsa.time.process_time': { + category: 'rsa', + description: 'Deprecated, use duration.time', + name: 'rsa.time.process_time', + type: 'keyword', + }, + 'rsa.time.hour': { + category: 'rsa', + name: 'rsa.time.hour', + type: 'keyword', + }, + 'rsa.time.min': { + category: 'rsa', + name: 'rsa.time.min', + type: 'keyword', + }, + 'rsa.time.timestamp': { + category: 'rsa', + name: 'rsa.time.timestamp', + type: 'keyword', + }, + 'rsa.time.event_queue_time': { + category: 'rsa', + description: 'This key is the Time that the event was queued.', + name: 'rsa.time.event_queue_time', + type: 'date', + }, + 'rsa.time.p_time1': { + category: 'rsa', + name: 'rsa.time.p_time1', + type: 'keyword', + }, + 'rsa.time.tzone': { + category: 'rsa', + name: 'rsa.time.tzone', + type: 'keyword', + }, + 'rsa.time.eventtime': { + category: 'rsa', + name: 'rsa.time.eventtime', + type: 'keyword', + }, + 'rsa.time.gmtdate': { + category: 'rsa', + name: 'rsa.time.gmtdate', + type: 'keyword', + }, + 'rsa.time.gmttime': { + category: 'rsa', + name: 'rsa.time.gmttime', + type: 'keyword', + }, + 'rsa.time.p_date': { + category: 'rsa', + name: 'rsa.time.p_date', + type: 'keyword', + }, + 'rsa.time.p_month': { + category: 'rsa', + name: 'rsa.time.p_month', + type: 'keyword', + }, + 'rsa.time.p_time': { + category: 'rsa', + name: 'rsa.time.p_time', + type: 'keyword', + }, + 'rsa.time.p_time2': { + category: 'rsa', + name: 'rsa.time.p_time2', + type: 'keyword', + }, + 'rsa.time.p_year': { + category: 'rsa', + name: 'rsa.time.p_year', + type: 'keyword', + }, + 'rsa.time.expire_time_str': { + category: 'rsa', + description: + 'This key is used to capture incomplete timestamp that explicitly refers to an expiration.', + name: 'rsa.time.expire_time_str', + type: 'keyword', + }, + 'rsa.time.stamp': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.time.stamp', + type: 'date', + }, + 'rsa.misc.action': { + category: 'rsa', + name: 'rsa.misc.action', + type: 'keyword', + }, + 'rsa.misc.result': { + category: 'rsa', + description: + 'This key is used to capture the outcome/result string value of an action in a session.', + name: 'rsa.misc.result', + type: 'keyword', + }, + 'rsa.misc.severity': { + category: 'rsa', + description: 'This key is used to capture the severity given the session', + name: 'rsa.misc.severity', + type: 'keyword', + }, + 'rsa.misc.event_type': { + category: 'rsa', + description: 'This key captures the event category type as specified by the event source.', + name: 'rsa.misc.event_type', + type: 'keyword', + }, + 'rsa.misc.reference_id': { + category: 'rsa', + description: 'This key is used to capture an event id from the session directly', + name: 'rsa.misc.reference_id', + type: 'keyword', + }, + 'rsa.misc.version': { + category: 'rsa', + description: + 'This key captures Version of the application or OS which is generating the event.', + name: 'rsa.misc.version', + type: 'keyword', + }, + 'rsa.misc.disposition': { + category: 'rsa', + description: 'This key captures the The end state of an action.', + name: 'rsa.misc.disposition', + type: 'keyword', + }, + 'rsa.misc.result_code': { + category: 'rsa', + description: + 'This key is used to capture the outcome/result numeric value of an action in a session', + name: 'rsa.misc.result_code', + type: 'keyword', + }, + 'rsa.misc.category': { + category: 'rsa', + description: + 'This key is used to capture the category of an event given by the vendor in the session', + name: 'rsa.misc.category', + type: 'keyword', + }, + 'rsa.misc.obj_name': { + category: 'rsa', + description: 'This is used to capture name of object', + name: 'rsa.misc.obj_name', + type: 'keyword', + }, + 'rsa.misc.obj_type': { + category: 'rsa', + description: 'This is used to capture type of object', + name: 'rsa.misc.obj_type', + type: 'keyword', + }, + 'rsa.misc.event_source': { + category: 'rsa', + description: 'This key captures Source of the event that’s not a hostname', + name: 'rsa.misc.event_source', + type: 'keyword', + }, + 'rsa.misc.log_session_id': { + category: 'rsa', + description: 'This key is used to capture a sessionid from the session directly', + name: 'rsa.misc.log_session_id', + type: 'keyword', + }, + 'rsa.misc.group': { + category: 'rsa', + description: 'This key captures the Group Name value', + name: 'rsa.misc.group', + type: 'keyword', + }, + 'rsa.misc.policy_name': { + category: 'rsa', + description: 'This key is used to capture the Policy Name only.', + name: 'rsa.misc.policy_name', + type: 'keyword', + }, + 'rsa.misc.rule_name': { + category: 'rsa', + description: 'This key captures the Rule Name', + name: 'rsa.misc.rule_name', + type: 'keyword', + }, + 'rsa.misc.context': { + category: 'rsa', + description: 'This key captures Information which adds additional context to the event.', + name: 'rsa.misc.context', + type: 'keyword', + }, + 'rsa.misc.change_new': { + category: 'rsa', + description: + 'This key is used to capture the new values of the attribute that’s changing in a session', + name: 'rsa.misc.change_new', + type: 'keyword', + }, + 'rsa.misc.space': { + category: 'rsa', + name: 'rsa.misc.space', + type: 'keyword', + }, + 'rsa.misc.client': { + category: 'rsa', + description: + 'This key is used to capture only the name of the client application requesting resources of the server. See the user.agent meta key for capture of the specific user agent identifier or browser identification string.', + name: 'rsa.misc.client', + type: 'keyword', + }, + 'rsa.misc.msgIdPart1': { + category: 'rsa', + name: 'rsa.misc.msgIdPart1', + type: 'keyword', + }, + 'rsa.misc.msgIdPart2': { + category: 'rsa', + name: 'rsa.misc.msgIdPart2', + type: 'keyword', + }, + 'rsa.misc.change_old': { + category: 'rsa', + description: + 'This key is used to capture the old value of the attribute that’s changing in a session', + name: 'rsa.misc.change_old', + type: 'keyword', + }, + 'rsa.misc.operation_id': { + category: 'rsa', + description: + 'An alert number or operation number. The values should be unique and non-repeating.', + name: 'rsa.misc.operation_id', + type: 'keyword', + }, + 'rsa.misc.event_state': { + category: 'rsa', + description: + 'This key captures the current state of the object/item referenced within the event. Describing an on-going event.', + name: 'rsa.misc.event_state', + type: 'keyword', + }, + 'rsa.misc.group_object': { + category: 'rsa', + description: 'This key captures a collection/grouping of entities. Specific usage', + name: 'rsa.misc.group_object', + type: 'keyword', + }, + 'rsa.misc.node': { + category: 'rsa', + description: + 'Common use case is the node name within a cluster. The cluster name is reflected by the host name.', + name: 'rsa.misc.node', + type: 'keyword', + }, + 'rsa.misc.rule': { + category: 'rsa', + description: 'This key captures the Rule number', + name: 'rsa.misc.rule', + type: 'keyword', + }, + 'rsa.misc.device_name': { + category: 'rsa', + description: + 'This is used to capture name of the Device associated with the node Like: a physical disk, printer, etc', + name: 'rsa.misc.device_name', + type: 'keyword', + }, + 'rsa.misc.param': { + category: 'rsa', + description: 'This key is the parameters passed as part of a command or application, etc.', + name: 'rsa.misc.param', + type: 'keyword', + }, + 'rsa.misc.change_attrib': { + category: 'rsa', + description: + 'This key is used to capture the name of the attribute that’s changing in a session', + name: 'rsa.misc.change_attrib', + type: 'keyword', + }, + 'rsa.misc.event_computer': { + category: 'rsa', + description: + 'This key is a windows only concept, where this key is used to capture fully qualified domain name in a windows log.', + name: 'rsa.misc.event_computer', + type: 'keyword', + }, + 'rsa.misc.reference_id1': { + category: 'rsa', + description: 'This key is for Linked ID to be used as an addition to "reference.id"', + name: 'rsa.misc.reference_id1', + type: 'keyword', + }, + 'rsa.misc.event_log': { + category: 'rsa', + description: 'This key captures the Name of the event log', + name: 'rsa.misc.event_log', + type: 'keyword', + }, + 'rsa.misc.OS': { + category: 'rsa', + description: 'This key captures the Name of the Operating System', + name: 'rsa.misc.OS', + type: 'keyword', + }, + 'rsa.misc.terminal': { + category: 'rsa', + description: 'This key captures the Terminal Names only', + name: 'rsa.misc.terminal', + type: 'keyword', + }, + 'rsa.misc.msgIdPart3': { + category: 'rsa', + name: 'rsa.misc.msgIdPart3', + type: 'keyword', + }, + 'rsa.misc.filter': { + category: 'rsa', + description: 'This key captures Filter used to reduce result set', + name: 'rsa.misc.filter', + type: 'keyword', + }, + 'rsa.misc.serial_number': { + category: 'rsa', + description: 'This key is the Serial number associated with a physical asset.', + name: 'rsa.misc.serial_number', + type: 'keyword', + }, + 'rsa.misc.checksum': { + category: 'rsa', + description: + 'This key is used to capture the checksum or hash of the entity such as a file or process. Checksum should be used over checksum.src or checksum.dst when it is unclear whether the entity is a source or target of an action.', + name: 'rsa.misc.checksum', + type: 'keyword', + }, + 'rsa.misc.event_user': { + category: 'rsa', + description: + 'This key is a windows only concept, where this key is used to capture combination of domain name and username in a windows log.', + name: 'rsa.misc.event_user', + type: 'keyword', + }, + 'rsa.misc.virusname': { + category: 'rsa', + description: 'This key captures the name of the virus', + name: 'rsa.misc.virusname', + type: 'keyword', + }, + 'rsa.misc.content_type': { + category: 'rsa', + description: 'This key is used to capture Content Type only.', + name: 'rsa.misc.content_type', + type: 'keyword', + }, + 'rsa.misc.group_id': { + category: 'rsa', + description: 'This key captures Group ID Number (related to the group name)', + name: 'rsa.misc.group_id', + type: 'keyword', + }, + 'rsa.misc.policy_id': { + category: 'rsa', + description: + 'This key is used to capture the Policy ID only, this should be a numeric value, use policy.name otherwise', + name: 'rsa.misc.policy_id', + type: 'keyword', + }, + 'rsa.misc.vsys': { + category: 'rsa', + description: 'This key captures Virtual System Name', + name: 'rsa.misc.vsys', + type: 'keyword', + }, + 'rsa.misc.connection_id': { + category: 'rsa', + description: 'This key captures the Connection ID', + name: 'rsa.misc.connection_id', + type: 'keyword', + }, + 'rsa.misc.reference_id2': { + category: 'rsa', + description: + 'This key is for the 2nd Linked ID. Can be either linked to "reference.id" or "reference.id1" value but should not be used unless the other two variables are in play.', + name: 'rsa.misc.reference_id2', + type: 'keyword', + }, + 'rsa.misc.sensor': { + category: 'rsa', + description: 'This key captures Name of the sensor. Typically used in IDS/IPS based devices', + name: 'rsa.misc.sensor', + type: 'keyword', + }, + 'rsa.misc.sig_id': { + category: 'rsa', + description: 'This key captures IDS/IPS Int Signature ID', + name: 'rsa.misc.sig_id', + type: 'long', + }, + 'rsa.misc.port_name': { + category: 'rsa', + description: + 'This key is used for Physical or logical port connection but does NOT include a network port. (Example: Printer port name).', + name: 'rsa.misc.port_name', + type: 'keyword', + }, + 'rsa.misc.rule_group': { + category: 'rsa', + description: 'This key captures the Rule group name', + name: 'rsa.misc.rule_group', + type: 'keyword', + }, + 'rsa.misc.risk_num': { + category: 'rsa', + description: 'This key captures a Numeric Risk value', + name: 'rsa.misc.risk_num', + type: 'double', + }, + 'rsa.misc.trigger_val': { + category: 'rsa', + description: 'This key captures the Value of the trigger or threshold condition.', + name: 'rsa.misc.trigger_val', + type: 'keyword', + }, + 'rsa.misc.log_session_id1': { + category: 'rsa', + description: + 'This key is used to capture a Linked (Related) Session ID from the session directly', + name: 'rsa.misc.log_session_id1', + type: 'keyword', + }, + 'rsa.misc.comp_version': { + category: 'rsa', + description: 'This key captures the Version level of a sub-component of a product.', + name: 'rsa.misc.comp_version', + type: 'keyword', + }, + 'rsa.misc.content_version': { + category: 'rsa', + description: 'This key captures Version level of a signature or database content.', + name: 'rsa.misc.content_version', + type: 'keyword', + }, + 'rsa.misc.hardware_id': { + category: 'rsa', + description: + 'This key is used to capture unique identifier for a device or system (NOT a Mac address)', + name: 'rsa.misc.hardware_id', + type: 'keyword', + }, + 'rsa.misc.risk': { + category: 'rsa', + description: 'This key captures the non-numeric risk value', + name: 'rsa.misc.risk', + type: 'keyword', + }, + 'rsa.misc.event_id': { + category: 'rsa', + name: 'rsa.misc.event_id', + type: 'keyword', + }, + 'rsa.misc.reason': { + category: 'rsa', + name: 'rsa.misc.reason', + type: 'keyword', + }, + 'rsa.misc.status': { + category: 'rsa', + name: 'rsa.misc.status', + type: 'keyword', + }, + 'rsa.misc.mail_id': { + category: 'rsa', + description: 'This key is used to capture the mailbox id/name', + name: 'rsa.misc.mail_id', + type: 'keyword', + }, + 'rsa.misc.rule_uid': { + category: 'rsa', + description: 'This key is the Unique Identifier for a rule.', + name: 'rsa.misc.rule_uid', + type: 'keyword', + }, + 'rsa.misc.trigger_desc': { + category: 'rsa', + description: 'This key captures the Description of the trigger or threshold condition.', + name: 'rsa.misc.trigger_desc', + type: 'keyword', + }, + 'rsa.misc.inout': { + category: 'rsa', + name: 'rsa.misc.inout', + type: 'keyword', + }, + 'rsa.misc.p_msgid': { + category: 'rsa', + name: 'rsa.misc.p_msgid', + type: 'keyword', + }, + 'rsa.misc.data_type': { + category: 'rsa', + name: 'rsa.misc.data_type', + type: 'keyword', + }, + 'rsa.misc.msgIdPart4': { + category: 'rsa', + name: 'rsa.misc.msgIdPart4', + type: 'keyword', + }, + 'rsa.misc.error': { + category: 'rsa', + description: 'This key captures All non successful Error codes or responses', + name: 'rsa.misc.error', + type: 'keyword', + }, + 'rsa.misc.index': { + category: 'rsa', + name: 'rsa.misc.index', + type: 'keyword', + }, + 'rsa.misc.listnum': { + category: 'rsa', + description: + 'This key is used to capture listname or listnumber, primarily for collecting access-list', + name: 'rsa.misc.listnum', + type: 'keyword', + }, + 'rsa.misc.ntype': { + category: 'rsa', + name: 'rsa.misc.ntype', + type: 'keyword', + }, + 'rsa.misc.observed_val': { + category: 'rsa', + description: + 'This key captures the Value observed (from the perspective of the device generating the log).', + name: 'rsa.misc.observed_val', + type: 'keyword', + }, + 'rsa.misc.policy_value': { + category: 'rsa', + description: + 'This key captures the contents of the policy. This contains details about the policy', + name: 'rsa.misc.policy_value', + type: 'keyword', + }, + 'rsa.misc.pool_name': { + category: 'rsa', + description: 'This key captures the name of a resource pool', + name: 'rsa.misc.pool_name', + type: 'keyword', + }, + 'rsa.misc.rule_template': { + category: 'rsa', + description: + 'A default set of parameters which are overlayed onto a rule (or rulename) which efffectively constitutes a template', + name: 'rsa.misc.rule_template', + type: 'keyword', + }, + 'rsa.misc.count': { + category: 'rsa', + name: 'rsa.misc.count', + type: 'keyword', + }, + 'rsa.misc.number': { + category: 'rsa', + name: 'rsa.misc.number', + type: 'keyword', + }, + 'rsa.misc.sigcat': { + category: 'rsa', + name: 'rsa.misc.sigcat', + type: 'keyword', + }, + 'rsa.misc.type': { + category: 'rsa', + name: 'rsa.misc.type', + type: 'keyword', + }, + 'rsa.misc.comments': { + category: 'rsa', + description: 'Comment information provided in the log message', + name: 'rsa.misc.comments', + type: 'keyword', + }, + 'rsa.misc.doc_number': { + category: 'rsa', + description: 'This key captures File Identification number', + name: 'rsa.misc.doc_number', + type: 'long', + }, + 'rsa.misc.expected_val': { + category: 'rsa', + description: + 'This key captures the Value expected (from the perspective of the device generating the log).', + name: 'rsa.misc.expected_val', + type: 'keyword', + }, + 'rsa.misc.job_num': { + category: 'rsa', + description: 'This key captures the Job Number', + name: 'rsa.misc.job_num', + type: 'keyword', + }, + 'rsa.misc.spi_dst': { + category: 'rsa', + description: 'Destination SPI Index', + name: 'rsa.misc.spi_dst', + type: 'keyword', + }, + 'rsa.misc.spi_src': { + category: 'rsa', + description: 'Source SPI Index', + name: 'rsa.misc.spi_src', + type: 'keyword', + }, + 'rsa.misc.code': { + category: 'rsa', + name: 'rsa.misc.code', + type: 'keyword', + }, + 'rsa.misc.agent_id': { + category: 'rsa', + description: 'This key is used to capture agent id', + name: 'rsa.misc.agent_id', + type: 'keyword', + }, + 'rsa.misc.message_body': { + category: 'rsa', + description: 'This key captures the The contents of the message body.', + name: 'rsa.misc.message_body', + type: 'keyword', + }, + 'rsa.misc.phone': { + category: 'rsa', + name: 'rsa.misc.phone', + type: 'keyword', + }, + 'rsa.misc.sig_id_str': { + category: 'rsa', + description: 'This key captures a string object of the sigid variable.', + name: 'rsa.misc.sig_id_str', + type: 'keyword', + }, + 'rsa.misc.cmd': { + category: 'rsa', + name: 'rsa.misc.cmd', + type: 'keyword', + }, + 'rsa.misc.misc': { + category: 'rsa', + name: 'rsa.misc.misc', + type: 'keyword', + }, + 'rsa.misc.name': { + category: 'rsa', + name: 'rsa.misc.name', + type: 'keyword', + }, + 'rsa.misc.cpu': { + category: 'rsa', + description: 'This key is the CPU time used in the execution of the event being recorded.', + name: 'rsa.misc.cpu', + type: 'long', + }, + 'rsa.misc.event_desc': { + category: 'rsa', + description: + 'This key is used to capture a description of an event available directly or inferred', + name: 'rsa.misc.event_desc', + type: 'keyword', + }, + 'rsa.misc.sig_id1': { + category: 'rsa', + description: 'This key captures IDS/IPS Int Signature ID. This must be linked to the sig.id', + name: 'rsa.misc.sig_id1', + type: 'long', + }, + 'rsa.misc.im_buddyid': { + category: 'rsa', + name: 'rsa.misc.im_buddyid', + type: 'keyword', + }, + 'rsa.misc.im_client': { + category: 'rsa', + name: 'rsa.misc.im_client', + type: 'keyword', + }, + 'rsa.misc.im_userid': { + category: 'rsa', + name: 'rsa.misc.im_userid', + type: 'keyword', + }, + 'rsa.misc.pid': { + category: 'rsa', + name: 'rsa.misc.pid', + type: 'keyword', + }, + 'rsa.misc.priority': { + category: 'rsa', + name: 'rsa.misc.priority', + type: 'keyword', + }, + 'rsa.misc.context_subject': { + category: 'rsa', + description: + 'This key is to be used in an audit context where the subject is the object being identified', + name: 'rsa.misc.context_subject', + type: 'keyword', + }, + 'rsa.misc.context_target': { + category: 'rsa', + name: 'rsa.misc.context_target', + type: 'keyword', + }, + 'rsa.misc.cve': { + category: 'rsa', + description: + 'This key captures CVE (Common Vulnerabilities and Exposures) - an identifier for known information security vulnerabilities.', + name: 'rsa.misc.cve', + type: 'keyword', + }, + 'rsa.misc.fcatnum': { + category: 'rsa', + description: 'This key captures Filter Category Number. Legacy Usage', + name: 'rsa.misc.fcatnum', + type: 'keyword', + }, + 'rsa.misc.library': { + category: 'rsa', + description: 'This key is used to capture library information in mainframe devices', + name: 'rsa.misc.library', + type: 'keyword', + }, + 'rsa.misc.parent_node': { + category: 'rsa', + description: 'This key captures the Parent Node Name. Must be related to node variable.', + name: 'rsa.misc.parent_node', + type: 'keyword', + }, + 'rsa.misc.risk_info': { + category: 'rsa', + description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', + name: 'rsa.misc.risk_info', + type: 'keyword', + }, + 'rsa.misc.tcp_flags': { + category: 'rsa', + description: 'This key is captures the TCP flags set in any packet of session', + name: 'rsa.misc.tcp_flags', + type: 'long', + }, + 'rsa.misc.tos': { + category: 'rsa', + description: 'This key describes the type of service', + name: 'rsa.misc.tos', + type: 'long', + }, + 'rsa.misc.vm_target': { + category: 'rsa', + description: 'VMWare Target **VMWARE** only varaible.', + name: 'rsa.misc.vm_target', + type: 'keyword', + }, + 'rsa.misc.workspace': { + category: 'rsa', + description: 'This key captures Workspace Description', + name: 'rsa.misc.workspace', + type: 'keyword', + }, + 'rsa.misc.command': { + category: 'rsa', + name: 'rsa.misc.command', + type: 'keyword', + }, + 'rsa.misc.event_category': { + category: 'rsa', + name: 'rsa.misc.event_category', + type: 'keyword', + }, + 'rsa.misc.facilityname': { + category: 'rsa', + name: 'rsa.misc.facilityname', + type: 'keyword', + }, + 'rsa.misc.forensic_info': { + category: 'rsa', + name: 'rsa.misc.forensic_info', + type: 'keyword', + }, + 'rsa.misc.jobname': { + category: 'rsa', + name: 'rsa.misc.jobname', + type: 'keyword', + }, + 'rsa.misc.mode': { + category: 'rsa', + name: 'rsa.misc.mode', + type: 'keyword', + }, + 'rsa.misc.policy': { + category: 'rsa', + name: 'rsa.misc.policy', + type: 'keyword', + }, + 'rsa.misc.policy_waiver': { + category: 'rsa', + name: 'rsa.misc.policy_waiver', + type: 'keyword', + }, + 'rsa.misc.second': { + category: 'rsa', + name: 'rsa.misc.second', + type: 'keyword', + }, + 'rsa.misc.space1': { + category: 'rsa', + name: 'rsa.misc.space1', + type: 'keyword', + }, + 'rsa.misc.subcategory': { + category: 'rsa', + name: 'rsa.misc.subcategory', + type: 'keyword', + }, + 'rsa.misc.tbdstr2': { + category: 'rsa', + name: 'rsa.misc.tbdstr2', + type: 'keyword', + }, + 'rsa.misc.alert_id': { + category: 'rsa', + description: 'Deprecated, New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', + name: 'rsa.misc.alert_id', + type: 'keyword', + }, + 'rsa.misc.checksum_dst': { + category: 'rsa', + description: + 'This key is used to capture the checksum or hash of the the target entity such as a process or file.', + name: 'rsa.misc.checksum_dst', + type: 'keyword', + }, + 'rsa.misc.checksum_src': { + category: 'rsa', + description: + 'This key is used to capture the checksum or hash of the source entity such as a file or process.', + name: 'rsa.misc.checksum_src', + type: 'keyword', + }, + 'rsa.misc.fresult': { + category: 'rsa', + description: 'This key captures the Filter Result', + name: 'rsa.misc.fresult', + type: 'long', + }, + 'rsa.misc.payload_dst': { + category: 'rsa', + description: 'This key is used to capture destination payload', + name: 'rsa.misc.payload_dst', + type: 'keyword', + }, + 'rsa.misc.payload_src': { + category: 'rsa', + description: 'This key is used to capture source payload', + name: 'rsa.misc.payload_src', + type: 'keyword', + }, + 'rsa.misc.pool_id': { + category: 'rsa', + description: 'This key captures the identifier (typically numeric field) of a resource pool', + name: 'rsa.misc.pool_id', + type: 'keyword', + }, + 'rsa.misc.process_id_val': { + category: 'rsa', + description: 'This key is a failure key for Process ID when it is not an integer value', + name: 'rsa.misc.process_id_val', + type: 'keyword', + }, + 'rsa.misc.risk_num_comm': { + category: 'rsa', + description: 'This key captures Risk Number Community', + name: 'rsa.misc.risk_num_comm', + type: 'double', + }, + 'rsa.misc.risk_num_next': { + category: 'rsa', + description: 'This key captures Risk Number NextGen', + name: 'rsa.misc.risk_num_next', + type: 'double', + }, + 'rsa.misc.risk_num_sand': { + category: 'rsa', + description: 'This key captures Risk Number SandBox', + name: 'rsa.misc.risk_num_sand', + type: 'double', + }, + 'rsa.misc.risk_num_static': { + category: 'rsa', + description: 'This key captures Risk Number Static', + name: 'rsa.misc.risk_num_static', + type: 'double', + }, + 'rsa.misc.risk_suspicious': { + category: 'rsa', + description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', + name: 'rsa.misc.risk_suspicious', + type: 'keyword', + }, + 'rsa.misc.risk_warning': { + category: 'rsa', + description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', + name: 'rsa.misc.risk_warning', + type: 'keyword', + }, + 'rsa.misc.snmp_oid': { + category: 'rsa', + description: 'SNMP Object Identifier', + name: 'rsa.misc.snmp_oid', + type: 'keyword', + }, + 'rsa.misc.sql': { + category: 'rsa', + description: 'This key captures the SQL query', + name: 'rsa.misc.sql', + type: 'keyword', + }, + 'rsa.misc.vuln_ref': { + category: 'rsa', + description: 'This key captures the Vulnerability Reference details', + name: 'rsa.misc.vuln_ref', + type: 'keyword', + }, + 'rsa.misc.acl_id': { + category: 'rsa', + name: 'rsa.misc.acl_id', + type: 'keyword', + }, + 'rsa.misc.acl_op': { + category: 'rsa', + name: 'rsa.misc.acl_op', + type: 'keyword', + }, + 'rsa.misc.acl_pos': { + category: 'rsa', + name: 'rsa.misc.acl_pos', + type: 'keyword', + }, + 'rsa.misc.acl_table': { + category: 'rsa', + name: 'rsa.misc.acl_table', + type: 'keyword', + }, + 'rsa.misc.admin': { + category: 'rsa', + name: 'rsa.misc.admin', + type: 'keyword', + }, + 'rsa.misc.alarm_id': { + category: 'rsa', + name: 'rsa.misc.alarm_id', + type: 'keyword', + }, + 'rsa.misc.alarmname': { + category: 'rsa', + name: 'rsa.misc.alarmname', + type: 'keyword', + }, + 'rsa.misc.app_id': { + category: 'rsa', + name: 'rsa.misc.app_id', + type: 'keyword', + }, + 'rsa.misc.audit': { + category: 'rsa', + name: 'rsa.misc.audit', + type: 'keyword', + }, + 'rsa.misc.audit_object': { + category: 'rsa', + name: 'rsa.misc.audit_object', + type: 'keyword', + }, + 'rsa.misc.auditdata': { + category: 'rsa', + name: 'rsa.misc.auditdata', + type: 'keyword', + }, + 'rsa.misc.benchmark': { + category: 'rsa', + name: 'rsa.misc.benchmark', + type: 'keyword', + }, + 'rsa.misc.bypass': { + category: 'rsa', + name: 'rsa.misc.bypass', + type: 'keyword', + }, + 'rsa.misc.cache': { + category: 'rsa', + name: 'rsa.misc.cache', + type: 'keyword', + }, + 'rsa.misc.cache_hit': { + category: 'rsa', + name: 'rsa.misc.cache_hit', + type: 'keyword', + }, + 'rsa.misc.cefversion': { + category: 'rsa', + name: 'rsa.misc.cefversion', + type: 'keyword', + }, + 'rsa.misc.cfg_attr': { + category: 'rsa', + name: 'rsa.misc.cfg_attr', + type: 'keyword', + }, + 'rsa.misc.cfg_obj': { + category: 'rsa', + name: 'rsa.misc.cfg_obj', + type: 'keyword', + }, + 'rsa.misc.cfg_path': { + category: 'rsa', + name: 'rsa.misc.cfg_path', + type: 'keyword', + }, + 'rsa.misc.changes': { + category: 'rsa', + name: 'rsa.misc.changes', + type: 'keyword', + }, + 'rsa.misc.client_ip': { + category: 'rsa', + name: 'rsa.misc.client_ip', + type: 'keyword', + }, + 'rsa.misc.clustermembers': { + category: 'rsa', + name: 'rsa.misc.clustermembers', + type: 'keyword', + }, + 'rsa.misc.cn_acttimeout': { + category: 'rsa', + name: 'rsa.misc.cn_acttimeout', + type: 'keyword', + }, + 'rsa.misc.cn_asn_src': { + category: 'rsa', + name: 'rsa.misc.cn_asn_src', + type: 'keyword', + }, + 'rsa.misc.cn_bgpv4nxthop': { + category: 'rsa', + name: 'rsa.misc.cn_bgpv4nxthop', + type: 'keyword', + }, + 'rsa.misc.cn_ctr_dst_code': { + category: 'rsa', + name: 'rsa.misc.cn_ctr_dst_code', + type: 'keyword', + }, + 'rsa.misc.cn_dst_tos': { + category: 'rsa', + name: 'rsa.misc.cn_dst_tos', + type: 'keyword', + }, + 'rsa.misc.cn_dst_vlan': { + category: 'rsa', + name: 'rsa.misc.cn_dst_vlan', + type: 'keyword', + }, + 'rsa.misc.cn_engine_id': { + category: 'rsa', + name: 'rsa.misc.cn_engine_id', + type: 'keyword', + }, + 'rsa.misc.cn_engine_type': { + category: 'rsa', + name: 'rsa.misc.cn_engine_type', + type: 'keyword', + }, + 'rsa.misc.cn_f_switch': { + category: 'rsa', + name: 'rsa.misc.cn_f_switch', + type: 'keyword', + }, + 'rsa.misc.cn_flowsampid': { + category: 'rsa', + name: 'rsa.misc.cn_flowsampid', + type: 'keyword', + }, + 'rsa.misc.cn_flowsampintv': { + category: 'rsa', + name: 'rsa.misc.cn_flowsampintv', + type: 'keyword', + }, + 'rsa.misc.cn_flowsampmode': { + category: 'rsa', + name: 'rsa.misc.cn_flowsampmode', + type: 'keyword', + }, + 'rsa.misc.cn_inacttimeout': { + category: 'rsa', + name: 'rsa.misc.cn_inacttimeout', + type: 'keyword', + }, + 'rsa.misc.cn_inpermbyts': { + category: 'rsa', + name: 'rsa.misc.cn_inpermbyts', + type: 'keyword', + }, + 'rsa.misc.cn_inpermpckts': { + category: 'rsa', + name: 'rsa.misc.cn_inpermpckts', + type: 'keyword', + }, + 'rsa.misc.cn_invalid': { + category: 'rsa', + name: 'rsa.misc.cn_invalid', + type: 'keyword', + }, + 'rsa.misc.cn_ip_proto_ver': { + category: 'rsa', + name: 'rsa.misc.cn_ip_proto_ver', + type: 'keyword', + }, + 'rsa.misc.cn_ipv4_ident': { + category: 'rsa', + name: 'rsa.misc.cn_ipv4_ident', + type: 'keyword', + }, + 'rsa.misc.cn_l_switch': { + category: 'rsa', + name: 'rsa.misc.cn_l_switch', + type: 'keyword', + }, + 'rsa.misc.cn_log_did': { + category: 'rsa', + name: 'rsa.misc.cn_log_did', + type: 'keyword', + }, + 'rsa.misc.cn_log_rid': { + category: 'rsa', + name: 'rsa.misc.cn_log_rid', + type: 'keyword', + }, + 'rsa.misc.cn_max_ttl': { + category: 'rsa', + name: 'rsa.misc.cn_max_ttl', + type: 'keyword', + }, + 'rsa.misc.cn_maxpcktlen': { + category: 'rsa', + name: 'rsa.misc.cn_maxpcktlen', + type: 'keyword', + }, + 'rsa.misc.cn_min_ttl': { + category: 'rsa', + name: 'rsa.misc.cn_min_ttl', + type: 'keyword', + }, + 'rsa.misc.cn_minpcktlen': { + category: 'rsa', + name: 'rsa.misc.cn_minpcktlen', + type: 'keyword', + }, + 'rsa.misc.cn_mpls_lbl_1': { + category: 'rsa', + name: 'rsa.misc.cn_mpls_lbl_1', + type: 'keyword', + }, + 'rsa.misc.cn_mpls_lbl_10': { + category: 'rsa', + name: 'rsa.misc.cn_mpls_lbl_10', + type: 'keyword', + }, + 'rsa.misc.cn_mpls_lbl_2': { + category: 'rsa', + name: 'rsa.misc.cn_mpls_lbl_2', + type: 'keyword', + }, + 'rsa.misc.cn_mpls_lbl_3': { + category: 'rsa', + name: 'rsa.misc.cn_mpls_lbl_3', + type: 'keyword', + }, + 'rsa.misc.cn_mpls_lbl_4': { + category: 'rsa', + name: 'rsa.misc.cn_mpls_lbl_4', + type: 'keyword', + }, + 'rsa.misc.cn_mpls_lbl_5': { + category: 'rsa', + name: 'rsa.misc.cn_mpls_lbl_5', + type: 'keyword', + }, + 'rsa.misc.cn_mpls_lbl_6': { + category: 'rsa', + name: 'rsa.misc.cn_mpls_lbl_6', + type: 'keyword', + }, + 'rsa.misc.cn_mpls_lbl_7': { + category: 'rsa', + name: 'rsa.misc.cn_mpls_lbl_7', + type: 'keyword', + }, + 'rsa.misc.cn_mpls_lbl_8': { + category: 'rsa', + name: 'rsa.misc.cn_mpls_lbl_8', + type: 'keyword', + }, + 'rsa.misc.cn_mpls_lbl_9': { + category: 'rsa', + name: 'rsa.misc.cn_mpls_lbl_9', + type: 'keyword', + }, + 'rsa.misc.cn_mplstoplabel': { + category: 'rsa', + name: 'rsa.misc.cn_mplstoplabel', + type: 'keyword', + }, + 'rsa.misc.cn_mplstoplabip': { + category: 'rsa', + name: 'rsa.misc.cn_mplstoplabip', + type: 'keyword', + }, + 'rsa.misc.cn_mul_dst_byt': { + category: 'rsa', + name: 'rsa.misc.cn_mul_dst_byt', + type: 'keyword', + }, + 'rsa.misc.cn_mul_dst_pks': { + category: 'rsa', + name: 'rsa.misc.cn_mul_dst_pks', + type: 'keyword', + }, + 'rsa.misc.cn_muligmptype': { + category: 'rsa', + name: 'rsa.misc.cn_muligmptype', + type: 'keyword', + }, + 'rsa.misc.cn_sampalgo': { + category: 'rsa', + name: 'rsa.misc.cn_sampalgo', + type: 'keyword', + }, + 'rsa.misc.cn_sampint': { + category: 'rsa', + name: 'rsa.misc.cn_sampint', + type: 'keyword', + }, + 'rsa.misc.cn_seqctr': { + category: 'rsa', + name: 'rsa.misc.cn_seqctr', + type: 'keyword', + }, + 'rsa.misc.cn_spackets': { + category: 'rsa', + name: 'rsa.misc.cn_spackets', + type: 'keyword', + }, + 'rsa.misc.cn_src_tos': { + category: 'rsa', + name: 'rsa.misc.cn_src_tos', + type: 'keyword', + }, + 'rsa.misc.cn_src_vlan': { + category: 'rsa', + name: 'rsa.misc.cn_src_vlan', + type: 'keyword', + }, + 'rsa.misc.cn_sysuptime': { + category: 'rsa', + name: 'rsa.misc.cn_sysuptime', + type: 'keyword', + }, + 'rsa.misc.cn_template_id': { + category: 'rsa', + name: 'rsa.misc.cn_template_id', + type: 'keyword', + }, + 'rsa.misc.cn_totbytsexp': { + category: 'rsa', + name: 'rsa.misc.cn_totbytsexp', + type: 'keyword', + }, + 'rsa.misc.cn_totflowexp': { + category: 'rsa', + name: 'rsa.misc.cn_totflowexp', + type: 'keyword', + }, + 'rsa.misc.cn_totpcktsexp': { + category: 'rsa', + name: 'rsa.misc.cn_totpcktsexp', + type: 'keyword', + }, + 'rsa.misc.cn_unixnanosecs': { + category: 'rsa', + name: 'rsa.misc.cn_unixnanosecs', + type: 'keyword', + }, + 'rsa.misc.cn_v6flowlabel': { + category: 'rsa', + name: 'rsa.misc.cn_v6flowlabel', + type: 'keyword', + }, + 'rsa.misc.cn_v6optheaders': { + category: 'rsa', + name: 'rsa.misc.cn_v6optheaders', + type: 'keyword', + }, + 'rsa.misc.comp_class': { + category: 'rsa', + name: 'rsa.misc.comp_class', + type: 'keyword', + }, + 'rsa.misc.comp_name': { + category: 'rsa', + name: 'rsa.misc.comp_name', + type: 'keyword', + }, + 'rsa.misc.comp_rbytes': { + category: 'rsa', + name: 'rsa.misc.comp_rbytes', + type: 'keyword', + }, + 'rsa.misc.comp_sbytes': { + category: 'rsa', + name: 'rsa.misc.comp_sbytes', + type: 'keyword', + }, + 'rsa.misc.cpu_data': { + category: 'rsa', + name: 'rsa.misc.cpu_data', + type: 'keyword', + }, + 'rsa.misc.criticality': { + category: 'rsa', + name: 'rsa.misc.criticality', + type: 'keyword', + }, + 'rsa.misc.cs_agency_dst': { + category: 'rsa', + name: 'rsa.misc.cs_agency_dst', + type: 'keyword', + }, + 'rsa.misc.cs_analyzedby': { + category: 'rsa', + name: 'rsa.misc.cs_analyzedby', + type: 'keyword', + }, + 'rsa.misc.cs_av_other': { + category: 'rsa', + name: 'rsa.misc.cs_av_other', + type: 'keyword', + }, + 'rsa.misc.cs_av_primary': { + category: 'rsa', + name: 'rsa.misc.cs_av_primary', + type: 'keyword', + }, + 'rsa.misc.cs_av_secondary': { + category: 'rsa', + name: 'rsa.misc.cs_av_secondary', + type: 'keyword', + }, + 'rsa.misc.cs_bgpv6nxthop': { + category: 'rsa', + name: 'rsa.misc.cs_bgpv6nxthop', + type: 'keyword', + }, + 'rsa.misc.cs_bit9status': { + category: 'rsa', + name: 'rsa.misc.cs_bit9status', + type: 'keyword', + }, + 'rsa.misc.cs_context': { + category: 'rsa', + name: 'rsa.misc.cs_context', + type: 'keyword', + }, + 'rsa.misc.cs_control': { + category: 'rsa', + name: 'rsa.misc.cs_control', + type: 'keyword', + }, + 'rsa.misc.cs_data': { + category: 'rsa', + name: 'rsa.misc.cs_data', + type: 'keyword', + }, + 'rsa.misc.cs_datecret': { + category: 'rsa', + name: 'rsa.misc.cs_datecret', + type: 'keyword', + }, + 'rsa.misc.cs_dst_tld': { + category: 'rsa', + name: 'rsa.misc.cs_dst_tld', + type: 'keyword', + }, + 'rsa.misc.cs_eth_dst_ven': { + category: 'rsa', + name: 'rsa.misc.cs_eth_dst_ven', + type: 'keyword', + }, + 'rsa.misc.cs_eth_src_ven': { + category: 'rsa', + name: 'rsa.misc.cs_eth_src_ven', + type: 'keyword', + }, + 'rsa.misc.cs_event_uuid': { + category: 'rsa', + name: 'rsa.misc.cs_event_uuid', + type: 'keyword', + }, + 'rsa.misc.cs_filetype': { + category: 'rsa', + name: 'rsa.misc.cs_filetype', + type: 'keyword', + }, + 'rsa.misc.cs_fld': { + category: 'rsa', + name: 'rsa.misc.cs_fld', + type: 'keyword', + }, + 'rsa.misc.cs_if_desc': { + category: 'rsa', + name: 'rsa.misc.cs_if_desc', + type: 'keyword', + }, + 'rsa.misc.cs_if_name': { + category: 'rsa', + name: 'rsa.misc.cs_if_name', + type: 'keyword', + }, + 'rsa.misc.cs_ip_next_hop': { + category: 'rsa', + name: 'rsa.misc.cs_ip_next_hop', + type: 'keyword', + }, + 'rsa.misc.cs_ipv4dstpre': { + category: 'rsa', + name: 'rsa.misc.cs_ipv4dstpre', + type: 'keyword', + }, + 'rsa.misc.cs_ipv4srcpre': { + category: 'rsa', + name: 'rsa.misc.cs_ipv4srcpre', + type: 'keyword', + }, + 'rsa.misc.cs_lifetime': { + category: 'rsa', + name: 'rsa.misc.cs_lifetime', + type: 'keyword', + }, + 'rsa.misc.cs_log_medium': { + category: 'rsa', + name: 'rsa.misc.cs_log_medium', + type: 'keyword', + }, + 'rsa.misc.cs_loginname': { + category: 'rsa', + name: 'rsa.misc.cs_loginname', + type: 'keyword', + }, + 'rsa.misc.cs_modulescore': { + category: 'rsa', + name: 'rsa.misc.cs_modulescore', + type: 'keyword', + }, + 'rsa.misc.cs_modulesign': { + category: 'rsa', + name: 'rsa.misc.cs_modulesign', + type: 'keyword', + }, + 'rsa.misc.cs_opswatresult': { + category: 'rsa', + name: 'rsa.misc.cs_opswatresult', + type: 'keyword', + }, + 'rsa.misc.cs_payload': { + category: 'rsa', + name: 'rsa.misc.cs_payload', + type: 'keyword', + }, + 'rsa.misc.cs_registrant': { + category: 'rsa', + name: 'rsa.misc.cs_registrant', + type: 'keyword', + }, + 'rsa.misc.cs_registrar': { + category: 'rsa', + name: 'rsa.misc.cs_registrar', + type: 'keyword', + }, + 'rsa.misc.cs_represult': { + category: 'rsa', + name: 'rsa.misc.cs_represult', + type: 'keyword', + }, + 'rsa.misc.cs_rpayload': { + category: 'rsa', + name: 'rsa.misc.cs_rpayload', + type: 'keyword', + }, + 'rsa.misc.cs_sampler_name': { + category: 'rsa', + name: 'rsa.misc.cs_sampler_name', + type: 'keyword', + }, + 'rsa.misc.cs_sourcemodule': { + category: 'rsa', + name: 'rsa.misc.cs_sourcemodule', + type: 'keyword', + }, + 'rsa.misc.cs_streams': { + category: 'rsa', + name: 'rsa.misc.cs_streams', + type: 'keyword', + }, + 'rsa.misc.cs_targetmodule': { + category: 'rsa', + name: 'rsa.misc.cs_targetmodule', + type: 'keyword', + }, + 'rsa.misc.cs_v6nxthop': { + category: 'rsa', + name: 'rsa.misc.cs_v6nxthop', + type: 'keyword', + }, + 'rsa.misc.cs_whois_server': { + category: 'rsa', + name: 'rsa.misc.cs_whois_server', + type: 'keyword', + }, + 'rsa.misc.cs_yararesult': { + category: 'rsa', + name: 'rsa.misc.cs_yararesult', + type: 'keyword', + }, + 'rsa.misc.description': { + category: 'rsa', + name: 'rsa.misc.description', + type: 'keyword', + }, + 'rsa.misc.devvendor': { + category: 'rsa', + name: 'rsa.misc.devvendor', + type: 'keyword', + }, + 'rsa.misc.distance': { + category: 'rsa', + name: 'rsa.misc.distance', + type: 'keyword', + }, + 'rsa.misc.dstburb': { + category: 'rsa', + name: 'rsa.misc.dstburb', + type: 'keyword', + }, + 'rsa.misc.edomain': { + category: 'rsa', + name: 'rsa.misc.edomain', + type: 'keyword', + }, + 'rsa.misc.edomaub': { + category: 'rsa', + name: 'rsa.misc.edomaub', + type: 'keyword', + }, + 'rsa.misc.euid': { + category: 'rsa', + name: 'rsa.misc.euid', + type: 'keyword', + }, + 'rsa.misc.facility': { + category: 'rsa', + name: 'rsa.misc.facility', + type: 'keyword', + }, + 'rsa.misc.finterface': { + category: 'rsa', + name: 'rsa.misc.finterface', + type: 'keyword', + }, + 'rsa.misc.flags': { + category: 'rsa', + name: 'rsa.misc.flags', + type: 'keyword', + }, + 'rsa.misc.gaddr': { + category: 'rsa', + name: 'rsa.misc.gaddr', + type: 'keyword', + }, + 'rsa.misc.id3': { + category: 'rsa', + name: 'rsa.misc.id3', + type: 'keyword', + }, + 'rsa.misc.im_buddyname': { + category: 'rsa', + name: 'rsa.misc.im_buddyname', + type: 'keyword', + }, + 'rsa.misc.im_croomid': { + category: 'rsa', + name: 'rsa.misc.im_croomid', + type: 'keyword', + }, + 'rsa.misc.im_croomtype': { + category: 'rsa', + name: 'rsa.misc.im_croomtype', + type: 'keyword', + }, + 'rsa.misc.im_members': { + category: 'rsa', + name: 'rsa.misc.im_members', + type: 'keyword', + }, + 'rsa.misc.im_username': { + category: 'rsa', + name: 'rsa.misc.im_username', + type: 'keyword', + }, + 'rsa.misc.ipkt': { + category: 'rsa', + name: 'rsa.misc.ipkt', + type: 'keyword', + }, + 'rsa.misc.ipscat': { + category: 'rsa', + name: 'rsa.misc.ipscat', + type: 'keyword', + }, + 'rsa.misc.ipspri': { + category: 'rsa', + name: 'rsa.misc.ipspri', + type: 'keyword', + }, + 'rsa.misc.latitude': { + category: 'rsa', + name: 'rsa.misc.latitude', + type: 'keyword', + }, + 'rsa.misc.linenum': { + category: 'rsa', + name: 'rsa.misc.linenum', + type: 'keyword', + }, + 'rsa.misc.list_name': { + category: 'rsa', + name: 'rsa.misc.list_name', + type: 'keyword', + }, + 'rsa.misc.load_data': { + category: 'rsa', + name: 'rsa.misc.load_data', + type: 'keyword', + }, + 'rsa.misc.location_floor': { + category: 'rsa', + name: 'rsa.misc.location_floor', + type: 'keyword', + }, + 'rsa.misc.location_mark': { + category: 'rsa', + name: 'rsa.misc.location_mark', + type: 'keyword', + }, + 'rsa.misc.log_id': { + category: 'rsa', + name: 'rsa.misc.log_id', + type: 'keyword', + }, + 'rsa.misc.log_type': { + category: 'rsa', + name: 'rsa.misc.log_type', + type: 'keyword', + }, + 'rsa.misc.logid': { + category: 'rsa', + name: 'rsa.misc.logid', + type: 'keyword', + }, + 'rsa.misc.logip': { + category: 'rsa', + name: 'rsa.misc.logip', + type: 'keyword', + }, + 'rsa.misc.logname': { + category: 'rsa', + name: 'rsa.misc.logname', + type: 'keyword', + }, + 'rsa.misc.longitude': { + category: 'rsa', + name: 'rsa.misc.longitude', + type: 'keyword', + }, + 'rsa.misc.lport': { + category: 'rsa', + name: 'rsa.misc.lport', + type: 'keyword', + }, + 'rsa.misc.mbug_data': { + category: 'rsa', + name: 'rsa.misc.mbug_data', + type: 'keyword', + }, + 'rsa.misc.misc_name': { + category: 'rsa', + name: 'rsa.misc.misc_name', + type: 'keyword', + }, + 'rsa.misc.msg_type': { + category: 'rsa', + name: 'rsa.misc.msg_type', + type: 'keyword', + }, + 'rsa.misc.msgid': { + category: 'rsa', + name: 'rsa.misc.msgid', + type: 'keyword', + }, + 'rsa.misc.netsessid': { + category: 'rsa', + name: 'rsa.misc.netsessid', + type: 'keyword', + }, + 'rsa.misc.num': { + category: 'rsa', + name: 'rsa.misc.num', + type: 'keyword', + }, + 'rsa.misc.number1': { + category: 'rsa', + name: 'rsa.misc.number1', + type: 'keyword', + }, + 'rsa.misc.number2': { + category: 'rsa', + name: 'rsa.misc.number2', + type: 'keyword', + }, + 'rsa.misc.nwwn': { + category: 'rsa', + name: 'rsa.misc.nwwn', + type: 'keyword', + }, + 'rsa.misc.object': { + category: 'rsa', + name: 'rsa.misc.object', + type: 'keyword', + }, + 'rsa.misc.operation': { + category: 'rsa', + name: 'rsa.misc.operation', + type: 'keyword', + }, + 'rsa.misc.opkt': { + category: 'rsa', + name: 'rsa.misc.opkt', + type: 'keyword', + }, + 'rsa.misc.orig_from': { + category: 'rsa', + name: 'rsa.misc.orig_from', + type: 'keyword', + }, + 'rsa.misc.owner_id': { + category: 'rsa', + name: 'rsa.misc.owner_id', + type: 'keyword', + }, + 'rsa.misc.p_action': { + category: 'rsa', + name: 'rsa.misc.p_action', + type: 'keyword', + }, + 'rsa.misc.p_filter': { + category: 'rsa', + name: 'rsa.misc.p_filter', + type: 'keyword', + }, + 'rsa.misc.p_group_object': { + category: 'rsa', + name: 'rsa.misc.p_group_object', + type: 'keyword', + }, + 'rsa.misc.p_id': { + category: 'rsa', + name: 'rsa.misc.p_id', + type: 'keyword', + }, + 'rsa.misc.p_msgid1': { + category: 'rsa', + name: 'rsa.misc.p_msgid1', + type: 'keyword', + }, + 'rsa.misc.p_msgid2': { + category: 'rsa', + name: 'rsa.misc.p_msgid2', + type: 'keyword', + }, + 'rsa.misc.p_result1': { + category: 'rsa', + name: 'rsa.misc.p_result1', + type: 'keyword', + }, + 'rsa.misc.password_chg': { + category: 'rsa', + name: 'rsa.misc.password_chg', + type: 'keyword', + }, + 'rsa.misc.password_expire': { + category: 'rsa', + name: 'rsa.misc.password_expire', + type: 'keyword', + }, + 'rsa.misc.permgranted': { + category: 'rsa', + name: 'rsa.misc.permgranted', + type: 'keyword', + }, + 'rsa.misc.permwanted': { + category: 'rsa', + name: 'rsa.misc.permwanted', + type: 'keyword', + }, + 'rsa.misc.pgid': { + category: 'rsa', + name: 'rsa.misc.pgid', + type: 'keyword', + }, + 'rsa.misc.policyUUID': { + category: 'rsa', + name: 'rsa.misc.policyUUID', + type: 'keyword', + }, + 'rsa.misc.prog_asp_num': { + category: 'rsa', + name: 'rsa.misc.prog_asp_num', + type: 'keyword', + }, + 'rsa.misc.program': { + category: 'rsa', + name: 'rsa.misc.program', + type: 'keyword', + }, + 'rsa.misc.real_data': { + category: 'rsa', + name: 'rsa.misc.real_data', + type: 'keyword', + }, + 'rsa.misc.rec_asp_device': { + category: 'rsa', + name: 'rsa.misc.rec_asp_device', + type: 'keyword', + }, + 'rsa.misc.rec_asp_num': { + category: 'rsa', + name: 'rsa.misc.rec_asp_num', + type: 'keyword', + }, + 'rsa.misc.rec_library': { + category: 'rsa', + name: 'rsa.misc.rec_library', + type: 'keyword', + }, + 'rsa.misc.recordnum': { + category: 'rsa', + name: 'rsa.misc.recordnum', + type: 'keyword', + }, + 'rsa.misc.ruid': { + category: 'rsa', + name: 'rsa.misc.ruid', + type: 'keyword', + }, + 'rsa.misc.sburb': { + category: 'rsa', + name: 'rsa.misc.sburb', + type: 'keyword', + }, + 'rsa.misc.sdomain_fld': { + category: 'rsa', + name: 'rsa.misc.sdomain_fld', + type: 'keyword', + }, + 'rsa.misc.sec': { + category: 'rsa', + name: 'rsa.misc.sec', + type: 'keyword', + }, + 'rsa.misc.sensorname': { + category: 'rsa', + name: 'rsa.misc.sensorname', + type: 'keyword', + }, + 'rsa.misc.seqnum': { + category: 'rsa', + name: 'rsa.misc.seqnum', + type: 'keyword', + }, + 'rsa.misc.session': { + category: 'rsa', + name: 'rsa.misc.session', + type: 'keyword', + }, + 'rsa.misc.sessiontype': { + category: 'rsa', + name: 'rsa.misc.sessiontype', + type: 'keyword', + }, + 'rsa.misc.sigUUID': { + category: 'rsa', + name: 'rsa.misc.sigUUID', + type: 'keyword', + }, + 'rsa.misc.spi': { + category: 'rsa', + name: 'rsa.misc.spi', + type: 'keyword', + }, + 'rsa.misc.srcburb': { + category: 'rsa', + name: 'rsa.misc.srcburb', + type: 'keyword', + }, + 'rsa.misc.srcdom': { + category: 'rsa', + name: 'rsa.misc.srcdom', + type: 'keyword', + }, + 'rsa.misc.srcservice': { + category: 'rsa', + name: 'rsa.misc.srcservice', + type: 'keyword', + }, + 'rsa.misc.state': { + category: 'rsa', + name: 'rsa.misc.state', + type: 'keyword', + }, + 'rsa.misc.status1': { + category: 'rsa', + name: 'rsa.misc.status1', + type: 'keyword', + }, + 'rsa.misc.svcno': { + category: 'rsa', + name: 'rsa.misc.svcno', + type: 'keyword', + }, + 'rsa.misc.system': { + category: 'rsa', + name: 'rsa.misc.system', + type: 'keyword', + }, + 'rsa.misc.tbdstr1': { + category: 'rsa', + name: 'rsa.misc.tbdstr1', + type: 'keyword', + }, + 'rsa.misc.tgtdom': { + category: 'rsa', + name: 'rsa.misc.tgtdom', + type: 'keyword', + }, + 'rsa.misc.tgtdomain': { + category: 'rsa', + name: 'rsa.misc.tgtdomain', + type: 'keyword', + }, + 'rsa.misc.threshold': { + category: 'rsa', + name: 'rsa.misc.threshold', + type: 'keyword', + }, + 'rsa.misc.type1': { + category: 'rsa', + name: 'rsa.misc.type1', + type: 'keyword', + }, + 'rsa.misc.udb_class': { + category: 'rsa', + name: 'rsa.misc.udb_class', + type: 'keyword', + }, + 'rsa.misc.url_fld': { + category: 'rsa', + name: 'rsa.misc.url_fld', + type: 'keyword', + }, + 'rsa.misc.user_div': { + category: 'rsa', + name: 'rsa.misc.user_div', + type: 'keyword', + }, + 'rsa.misc.userid': { + category: 'rsa', + name: 'rsa.misc.userid', + type: 'keyword', + }, + 'rsa.misc.username_fld': { + category: 'rsa', + name: 'rsa.misc.username_fld', + type: 'keyword', + }, + 'rsa.misc.utcstamp': { + category: 'rsa', + name: 'rsa.misc.utcstamp', + type: 'keyword', + }, + 'rsa.misc.v_instafname': { + category: 'rsa', + name: 'rsa.misc.v_instafname', + type: 'keyword', + }, + 'rsa.misc.virt_data': { + category: 'rsa', + name: 'rsa.misc.virt_data', + type: 'keyword', + }, + 'rsa.misc.vpnid': { + category: 'rsa', + name: 'rsa.misc.vpnid', + type: 'keyword', + }, + 'rsa.misc.autorun_type': { + category: 'rsa', + description: 'This is used to capture Auto Run type', + name: 'rsa.misc.autorun_type', + type: 'keyword', + }, + 'rsa.misc.cc_number': { + category: 'rsa', + description: 'Valid Credit Card Numbers only', + name: 'rsa.misc.cc_number', + type: 'long', + }, + 'rsa.misc.content': { + category: 'rsa', + description: 'This key captures the content type from protocol headers', + name: 'rsa.misc.content', + type: 'keyword', + }, + 'rsa.misc.ein_number': { + category: 'rsa', + description: 'Employee Identification Numbers only', + name: 'rsa.misc.ein_number', + type: 'long', + }, + 'rsa.misc.found': { + category: 'rsa', + description: 'This is used to capture the results of regex match', + name: 'rsa.misc.found', + type: 'keyword', + }, + 'rsa.misc.language': { + category: 'rsa', + description: 'This is used to capture list of languages the client support and what it prefers', + name: 'rsa.misc.language', + type: 'keyword', + }, + 'rsa.misc.lifetime': { + category: 'rsa', + description: 'This key is used to capture the session lifetime in seconds.', + name: 'rsa.misc.lifetime', + type: 'long', + }, + 'rsa.misc.link': { + category: 'rsa', + description: + 'This key is used to link the sessions together. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', + name: 'rsa.misc.link', + type: 'keyword', + }, + 'rsa.misc.match': { + category: 'rsa', + description: 'This key is for regex match name from search.ini', + name: 'rsa.misc.match', + type: 'keyword', + }, + 'rsa.misc.param_dst': { + category: 'rsa', + description: 'This key captures the command line/launch argument of the target process or file', + name: 'rsa.misc.param_dst', + type: 'keyword', + }, + 'rsa.misc.param_src': { + category: 'rsa', + description: 'This key captures source parameter', + name: 'rsa.misc.param_src', + type: 'keyword', + }, + 'rsa.misc.search_text': { + category: 'rsa', + description: 'This key captures the Search Text used', + name: 'rsa.misc.search_text', + type: 'keyword', + }, + 'rsa.misc.sig_name': { + category: 'rsa', + description: 'This key is used to capture the Signature Name only.', + name: 'rsa.misc.sig_name', + type: 'keyword', + }, + 'rsa.misc.snmp_value': { + category: 'rsa', + description: 'SNMP set request value', + name: 'rsa.misc.snmp_value', + type: 'keyword', + }, + 'rsa.misc.streams': { + category: 'rsa', + description: 'This key captures number of streams in session', + name: 'rsa.misc.streams', + type: 'long', + }, + 'rsa.db.index': { + category: 'rsa', + description: 'This key captures IndexID of the index.', + name: 'rsa.db.index', + type: 'keyword', + }, + 'rsa.db.instance': { + category: 'rsa', + description: 'This key is used to capture the database server instance name', + name: 'rsa.db.instance', + type: 'keyword', + }, + 'rsa.db.database': { + category: 'rsa', + description: + 'This key is used to capture the name of a database or an instance as seen in a session', + name: 'rsa.db.database', + type: 'keyword', + }, + 'rsa.db.transact_id': { + category: 'rsa', + description: 'This key captures the SQL transantion ID of the current session', + name: 'rsa.db.transact_id', + type: 'keyword', + }, + 'rsa.db.permissions': { + category: 'rsa', + description: 'This key captures permission or privilege level assigned to a resource.', + name: 'rsa.db.permissions', + type: 'keyword', + }, + 'rsa.db.table_name': { + category: 'rsa', + description: 'This key is used to capture the table name', + name: 'rsa.db.table_name', + type: 'keyword', + }, + 'rsa.db.db_id': { + category: 'rsa', + description: 'This key is used to capture the unique identifier for a database', + name: 'rsa.db.db_id', + type: 'keyword', + }, + 'rsa.db.db_pid': { + category: 'rsa', + description: 'This key captures the process id of a connection with database server', + name: 'rsa.db.db_pid', + type: 'long', + }, + 'rsa.db.lread': { + category: 'rsa', + description: 'This key is used for the number of logical reads', + name: 'rsa.db.lread', + type: 'long', + }, + 'rsa.db.lwrite': { + category: 'rsa', + description: 'This key is used for the number of logical writes', + name: 'rsa.db.lwrite', + type: 'long', + }, + 'rsa.db.pread': { + category: 'rsa', + description: 'This key is used for the number of physical writes', + name: 'rsa.db.pread', + type: 'long', + }, + 'rsa.network.alias_host': { + category: 'rsa', + description: + 'This key should be used when the source or destination context of a hostname is not clear.Also it captures the Device Hostname. Any Hostname that isnt ad.computer.', + name: 'rsa.network.alias_host', + type: 'keyword', + }, + 'rsa.network.domain': { + category: 'rsa', + name: 'rsa.network.domain', + type: 'keyword', + }, + 'rsa.network.host_dst': { + category: 'rsa', + description: 'This key should only be used when it’s a Destination Hostname', + name: 'rsa.network.host_dst', + type: 'keyword', + }, + 'rsa.network.network_service': { + category: 'rsa', + description: 'This is used to capture layer 7 protocols/service names', + name: 'rsa.network.network_service', + type: 'keyword', + }, + 'rsa.network.interface': { + category: 'rsa', + description: + 'This key should be used when the source or destination context of an interface is not clear', + name: 'rsa.network.interface', + type: 'keyword', + }, + 'rsa.network.network_port': { + category: 'rsa', + description: + 'Deprecated, use port. NOTE: There is a type discrepancy as currently used, TM: Int32, INDEX: UInt64 (why neither chose the correct UInt16?!)', + name: 'rsa.network.network_port', + type: 'long', + }, + 'rsa.network.eth_host': { + category: 'rsa', + description: 'Deprecated, use alias.mac', + name: 'rsa.network.eth_host', + type: 'keyword', + }, + 'rsa.network.sinterface': { + category: 'rsa', + description: 'This key should only be used when it’s a Source Interface', + name: 'rsa.network.sinterface', + type: 'keyword', + }, + 'rsa.network.dinterface': { + category: 'rsa', + description: 'This key should only be used when it’s a Destination Interface', + name: 'rsa.network.dinterface', + type: 'keyword', + }, + 'rsa.network.vlan': { + category: 'rsa', + description: 'This key should only be used to capture the ID of the Virtual LAN', + name: 'rsa.network.vlan', + type: 'long', + }, + 'rsa.network.zone_src': { + category: 'rsa', + description: 'This key should only be used when it’s a Source Zone.', + name: 'rsa.network.zone_src', + type: 'keyword', + }, + 'rsa.network.zone': { + category: 'rsa', + description: + 'This key should be used when the source or destination context of a Zone is not clear', + name: 'rsa.network.zone', + type: 'keyword', + }, + 'rsa.network.zone_dst': { + category: 'rsa', + description: 'This key should only be used when it’s a Destination Zone.', + name: 'rsa.network.zone_dst', + type: 'keyword', + }, + 'rsa.network.gateway': { + category: 'rsa', + description: 'This key is used to capture the IP Address of the gateway', + name: 'rsa.network.gateway', + type: 'keyword', + }, + 'rsa.network.icmp_type': { + category: 'rsa', + description: 'This key is used to capture the ICMP type only', + name: 'rsa.network.icmp_type', + type: 'long', + }, + 'rsa.network.mask': { + category: 'rsa', + description: 'This key is used to capture the device network IPmask.', + name: 'rsa.network.mask', + type: 'keyword', + }, + 'rsa.network.icmp_code': { + category: 'rsa', + description: 'This key is used to capture the ICMP code only', + name: 'rsa.network.icmp_code', + type: 'long', + }, + 'rsa.network.protocol_detail': { + category: 'rsa', + description: 'This key should be used to capture additional protocol information', + name: 'rsa.network.protocol_detail', + type: 'keyword', + }, + 'rsa.network.dmask': { + category: 'rsa', + description: 'This key is used for Destionation Device network mask', + name: 'rsa.network.dmask', + type: 'keyword', + }, + 'rsa.network.port': { + category: 'rsa', + description: + 'This key should only be used to capture a Network Port when the directionality is not clear', + name: 'rsa.network.port', + type: 'long', + }, + 'rsa.network.smask': { + category: 'rsa', + description: 'This key is used for capturing source Network Mask', + name: 'rsa.network.smask', + type: 'keyword', + }, + 'rsa.network.netname': { + category: 'rsa', + description: + 'This key is used to capture the network name associated with an IP range. This is configured by the end user.', + name: 'rsa.network.netname', + type: 'keyword', + }, + 'rsa.network.paddr': { + category: 'rsa', + description: 'Deprecated', + name: 'rsa.network.paddr', + type: 'ip', + }, + 'rsa.network.faddr': { + category: 'rsa', + name: 'rsa.network.faddr', + type: 'keyword', + }, + 'rsa.network.lhost': { + category: 'rsa', + name: 'rsa.network.lhost', + type: 'keyword', + }, + 'rsa.network.origin': { + category: 'rsa', + name: 'rsa.network.origin', + type: 'keyword', + }, + 'rsa.network.remote_domain_id': { + category: 'rsa', + name: 'rsa.network.remote_domain_id', + type: 'keyword', + }, + 'rsa.network.addr': { + category: 'rsa', + name: 'rsa.network.addr', + type: 'keyword', + }, + 'rsa.network.dns_a_record': { + category: 'rsa', + name: 'rsa.network.dns_a_record', + type: 'keyword', + }, + 'rsa.network.dns_ptr_record': { + category: 'rsa', + name: 'rsa.network.dns_ptr_record', + type: 'keyword', + }, + 'rsa.network.fhost': { + category: 'rsa', + name: 'rsa.network.fhost', + type: 'keyword', + }, + 'rsa.network.fport': { + category: 'rsa', + name: 'rsa.network.fport', + type: 'keyword', + }, + 'rsa.network.laddr': { + category: 'rsa', + name: 'rsa.network.laddr', + type: 'keyword', + }, + 'rsa.network.linterface': { + category: 'rsa', + name: 'rsa.network.linterface', + type: 'keyword', + }, + 'rsa.network.phost': { + category: 'rsa', + name: 'rsa.network.phost', + type: 'keyword', + }, + 'rsa.network.ad_computer_dst': { + category: 'rsa', + description: 'Deprecated, use host.dst', + name: 'rsa.network.ad_computer_dst', + type: 'keyword', + }, + 'rsa.network.eth_type': { + category: 'rsa', + description: 'This key is used to capture Ethernet Type, Used for Layer 3 Protocols Only', + name: 'rsa.network.eth_type', + type: 'long', + }, + 'rsa.network.ip_proto': { + category: 'rsa', + description: + 'This key should be used to capture the Protocol number, all the protocol nubers are converted into string in UI', + name: 'rsa.network.ip_proto', + type: 'long', + }, + 'rsa.network.dns_cname_record': { + category: 'rsa', + name: 'rsa.network.dns_cname_record', + type: 'keyword', + }, + 'rsa.network.dns_id': { + category: 'rsa', + name: 'rsa.network.dns_id', + type: 'keyword', + }, + 'rsa.network.dns_opcode': { + category: 'rsa', + name: 'rsa.network.dns_opcode', + type: 'keyword', + }, + 'rsa.network.dns_resp': { + category: 'rsa', + name: 'rsa.network.dns_resp', + type: 'keyword', + }, + 'rsa.network.dns_type': { + category: 'rsa', + name: 'rsa.network.dns_type', + type: 'keyword', + }, + 'rsa.network.domain1': { + category: 'rsa', + name: 'rsa.network.domain1', + type: 'keyword', + }, + 'rsa.network.host_type': { + category: 'rsa', + name: 'rsa.network.host_type', + type: 'keyword', + }, + 'rsa.network.packet_length': { + category: 'rsa', + name: 'rsa.network.packet_length', + type: 'keyword', + }, + 'rsa.network.host_orig': { + category: 'rsa', + description: + 'This is used to capture the original hostname in case of a Forwarding Agent or a Proxy in between.', + name: 'rsa.network.host_orig', + type: 'keyword', + }, + 'rsa.network.rpayload': { + category: 'rsa', + description: + 'This key is used to capture the total number of payload bytes seen in the retransmitted packets.', + name: 'rsa.network.rpayload', + type: 'keyword', + }, + 'rsa.network.vlan_name': { + category: 'rsa', + description: 'This key should only be used to capture the name of the Virtual LAN', + name: 'rsa.network.vlan_name', + type: 'keyword', + }, + 'rsa.investigations.ec_activity': { + category: 'rsa', + description: 'This key captures the particular event activity(Ex:Logoff)', + name: 'rsa.investigations.ec_activity', + type: 'keyword', + }, + 'rsa.investigations.ec_theme': { + category: 'rsa', + description: 'This key captures the Theme of a particular Event(Ex:Authentication)', + name: 'rsa.investigations.ec_theme', + type: 'keyword', + }, + 'rsa.investigations.ec_subject': { + category: 'rsa', + description: 'This key captures the Subject of a particular Event(Ex:User)', + name: 'rsa.investigations.ec_subject', + type: 'keyword', + }, + 'rsa.investigations.ec_outcome': { + category: 'rsa', + description: 'This key captures the outcome of a particular Event(Ex:Success)', + name: 'rsa.investigations.ec_outcome', + type: 'keyword', + }, + 'rsa.investigations.event_cat': { + category: 'rsa', + description: 'This key captures the Event category number', + name: 'rsa.investigations.event_cat', + type: 'long', + }, + 'rsa.investigations.event_cat_name': { + category: 'rsa', + description: 'This key captures the event category name corresponding to the event cat code', + name: 'rsa.investigations.event_cat_name', + type: 'keyword', + }, + 'rsa.investigations.event_vcat': { + category: 'rsa', + description: + 'This is a vendor supplied category. This should be used in situations where the vendor has adopted their own event_category taxonomy.', + name: 'rsa.investigations.event_vcat', + type: 'keyword', + }, + 'rsa.investigations.analysis_file': { + category: 'rsa', + description: + 'This is used to capture all indicators used in a File Analysis. This key should be used to capture an analysis of a file', + name: 'rsa.investigations.analysis_file', + type: 'keyword', + }, + 'rsa.investigations.analysis_service': { + category: 'rsa', + description: + 'This is used to capture all indicators used in a Service Analysis. This key should be used to capture an analysis of a service', + name: 'rsa.investigations.analysis_service', + type: 'keyword', + }, + 'rsa.investigations.analysis_session': { + category: 'rsa', + description: + 'This is used to capture all indicators used for a Session Analysis. This key should be used to capture an analysis of a session', + name: 'rsa.investigations.analysis_session', + type: 'keyword', + }, + 'rsa.investigations.boc': { + category: 'rsa', + description: 'This is used to capture behaviour of compromise', + name: 'rsa.investigations.boc', + type: 'keyword', + }, + 'rsa.investigations.eoc': { + category: 'rsa', + description: 'This is used to capture Enablers of Compromise', + name: 'rsa.investigations.eoc', + type: 'keyword', + }, + 'rsa.investigations.inv_category': { + category: 'rsa', + description: 'This used to capture investigation category', + name: 'rsa.investigations.inv_category', + type: 'keyword', + }, + 'rsa.investigations.inv_context': { + category: 'rsa', + description: 'This used to capture investigation context', + name: 'rsa.investigations.inv_context', + type: 'keyword', + }, + 'rsa.investigations.ioc': { + category: 'rsa', + description: 'This is key capture indicator of compromise', + name: 'rsa.investigations.ioc', + type: 'keyword', + }, + 'rsa.counters.dclass_c1': { + category: 'rsa', + description: + 'This is a generic counter key that should be used with the label dclass.c1.str only', + name: 'rsa.counters.dclass_c1', + type: 'long', + }, + 'rsa.counters.dclass_c2': { + category: 'rsa', + description: + 'This is a generic counter key that should be used with the label dclass.c2.str only', + name: 'rsa.counters.dclass_c2', + type: 'long', + }, + 'rsa.counters.event_counter': { + category: 'rsa', + description: 'This is used to capture the number of times an event repeated', + name: 'rsa.counters.event_counter', + type: 'long', + }, + 'rsa.counters.dclass_r1': { + category: 'rsa', + description: + 'This is a generic ratio key that should be used with the label dclass.r1.str only', + name: 'rsa.counters.dclass_r1', + type: 'keyword', + }, + 'rsa.counters.dclass_c3': { + category: 'rsa', + description: + 'This is a generic counter key that should be used with the label dclass.c3.str only', + name: 'rsa.counters.dclass_c3', + type: 'long', + }, + 'rsa.counters.dclass_c1_str': { + category: 'rsa', + description: + 'This is a generic counter string key that should be used with the label dclass.c1 only', + name: 'rsa.counters.dclass_c1_str', + type: 'keyword', + }, + 'rsa.counters.dclass_c2_str': { + category: 'rsa', + description: + 'This is a generic counter string key that should be used with the label dclass.c2 only', + name: 'rsa.counters.dclass_c2_str', + type: 'keyword', + }, + 'rsa.counters.dclass_r1_str': { + category: 'rsa', + description: + 'This is a generic ratio string key that should be used with the label dclass.r1 only', + name: 'rsa.counters.dclass_r1_str', + type: 'keyword', + }, + 'rsa.counters.dclass_r2': { + category: 'rsa', + description: + 'This is a generic ratio key that should be used with the label dclass.r2.str only', + name: 'rsa.counters.dclass_r2', + type: 'keyword', + }, + 'rsa.counters.dclass_c3_str': { + category: 'rsa', + description: + 'This is a generic counter string key that should be used with the label dclass.c3 only', + name: 'rsa.counters.dclass_c3_str', + type: 'keyword', + }, + 'rsa.counters.dclass_r3': { + category: 'rsa', + description: + 'This is a generic ratio key that should be used with the label dclass.r3.str only', + name: 'rsa.counters.dclass_r3', + type: 'keyword', + }, + 'rsa.counters.dclass_r2_str': { + category: 'rsa', + description: + 'This is a generic ratio string key that should be used with the label dclass.r2 only', + name: 'rsa.counters.dclass_r2_str', + type: 'keyword', + }, + 'rsa.counters.dclass_r3_str': { + category: 'rsa', + description: + 'This is a generic ratio string key that should be used with the label dclass.r3 only', + name: 'rsa.counters.dclass_r3_str', + type: 'keyword', + }, + 'rsa.identity.auth_method': { + category: 'rsa', + description: 'This key is used to capture authentication methods used only', + name: 'rsa.identity.auth_method', + type: 'keyword', + }, + 'rsa.identity.user_role': { + category: 'rsa', + description: 'This key is used to capture the Role of a user only', + name: 'rsa.identity.user_role', + type: 'keyword', + }, + 'rsa.identity.dn': { + category: 'rsa', + description: 'X.500 (LDAP) Distinguished Name', + name: 'rsa.identity.dn', + type: 'keyword', + }, + 'rsa.identity.logon_type': { + category: 'rsa', + description: 'This key is used to capture the type of logon method used.', + name: 'rsa.identity.logon_type', + type: 'keyword', + }, + 'rsa.identity.profile': { + category: 'rsa', + description: 'This key is used to capture the user profile', + name: 'rsa.identity.profile', + type: 'keyword', + }, + 'rsa.identity.accesses': { + category: 'rsa', + description: 'This key is used to capture actual privileges used in accessing an object', + name: 'rsa.identity.accesses', + type: 'keyword', + }, + 'rsa.identity.realm': { + category: 'rsa', + description: 'Radius realm or similar grouping of accounts', + name: 'rsa.identity.realm', + type: 'keyword', + }, + 'rsa.identity.user_sid_dst': { + category: 'rsa', + description: 'This key captures Destination User Session ID', + name: 'rsa.identity.user_sid_dst', + type: 'keyword', + }, + 'rsa.identity.dn_src': { + category: 'rsa', + description: + 'An X.500 (LDAP) Distinguished name that is used in a context that indicates a Source dn', + name: 'rsa.identity.dn_src', + type: 'keyword', + }, + 'rsa.identity.org': { + category: 'rsa', + description: 'This key captures the User organization', + name: 'rsa.identity.org', + type: 'keyword', + }, + 'rsa.identity.dn_dst': { + category: 'rsa', + description: + 'An X.500 (LDAP) Distinguished name that used in a context that indicates a Destination dn', + name: 'rsa.identity.dn_dst', + type: 'keyword', + }, + 'rsa.identity.firstname': { + category: 'rsa', + description: + 'This key is for First Names only, this is used for Healthcare predominantly to capture Patients information', + name: 'rsa.identity.firstname', + type: 'keyword', + }, + 'rsa.identity.lastname': { + category: 'rsa', + description: + 'This key is for Last Names only, this is used for Healthcare predominantly to capture Patients information', + name: 'rsa.identity.lastname', + type: 'keyword', + }, + 'rsa.identity.user_dept': { + category: 'rsa', + description: "User's Department Names only", + name: 'rsa.identity.user_dept', + type: 'keyword', + }, + 'rsa.identity.user_sid_src': { + category: 'rsa', + description: 'This key captures Source User Session ID', + name: 'rsa.identity.user_sid_src', + type: 'keyword', + }, + 'rsa.identity.federated_sp': { + category: 'rsa', + description: + 'This key is the Federated Service Provider. This is the application requesting authentication.', + name: 'rsa.identity.federated_sp', + type: 'keyword', + }, + 'rsa.identity.federated_idp': { + category: 'rsa', + description: + 'This key is the federated Identity Provider. This is the server providing the authentication.', + name: 'rsa.identity.federated_idp', + type: 'keyword', + }, + 'rsa.identity.logon_type_desc': { + category: 'rsa', + description: + "This key is used to capture the textual description of an integer logon type as stored in the meta key 'logon.type'.", + name: 'rsa.identity.logon_type_desc', + type: 'keyword', + }, + 'rsa.identity.middlename': { + category: 'rsa', + description: + 'This key is for Middle Names only, this is used for Healthcare predominantly to capture Patients information', + name: 'rsa.identity.middlename', + type: 'keyword', + }, + 'rsa.identity.password': { + category: 'rsa', + description: 'This key is for Passwords seen in any session, plain text or encrypted', + name: 'rsa.identity.password', + type: 'keyword', + }, + 'rsa.identity.host_role': { + category: 'rsa', + description: 'This key should only be used to capture the role of a Host Machine', + name: 'rsa.identity.host_role', + type: 'keyword', + }, + 'rsa.identity.ldap': { + category: 'rsa', + description: + 'This key is for Uninterpreted LDAP values. Ldap Values that don’t have a clear query or response context', + name: 'rsa.identity.ldap', + type: 'keyword', + }, + 'rsa.identity.ldap_query': { + category: 'rsa', + description: 'This key is the Search criteria from an LDAP search', + name: 'rsa.identity.ldap_query', + type: 'keyword', + }, + 'rsa.identity.ldap_response': { + category: 'rsa', + description: 'This key is to capture Results from an LDAP search', + name: 'rsa.identity.ldap_response', + type: 'keyword', + }, + 'rsa.identity.owner': { + category: 'rsa', + description: + 'This is used to capture username the process or service is running as, the author of the task', + name: 'rsa.identity.owner', + type: 'keyword', + }, + 'rsa.identity.service_account': { + category: 'rsa', + description: + 'This key is a windows specific key, used for capturing name of the account a service (referenced in the event) is running under. Legacy Usage', + name: 'rsa.identity.service_account', + type: 'keyword', + }, + 'rsa.email.email_dst': { + category: 'rsa', + description: + 'This key is used to capture the Destination email address only, when the destination context is not clear use email', + name: 'rsa.email.email_dst', + type: 'keyword', + }, + 'rsa.email.email_src': { + category: 'rsa', + description: + 'This key is used to capture the source email address only, when the source context is not clear use email', + name: 'rsa.email.email_src', + type: 'keyword', + }, + 'rsa.email.subject': { + category: 'rsa', + description: 'This key is used to capture the subject string from an Email only.', + name: 'rsa.email.subject', + type: 'keyword', + }, + 'rsa.email.email': { + category: 'rsa', + description: + 'This key is used to capture a generic email address where the source or destination context is not clear', + name: 'rsa.email.email', + type: 'keyword', + }, + 'rsa.email.trans_from': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.email.trans_from', + type: 'keyword', + }, + 'rsa.email.trans_to': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.email.trans_to', + type: 'keyword', + }, + 'rsa.file.privilege': { + category: 'rsa', + description: 'Deprecated, use permissions', + name: 'rsa.file.privilege', + type: 'keyword', + }, + 'rsa.file.attachment': { + category: 'rsa', + description: 'This key captures the attachment file name', + name: 'rsa.file.attachment', + type: 'keyword', + }, + 'rsa.file.filesystem': { + category: 'rsa', + name: 'rsa.file.filesystem', + type: 'keyword', + }, + 'rsa.file.binary': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.file.binary', + type: 'keyword', + }, + 'rsa.file.filename_dst': { + category: 'rsa', + description: 'This is used to capture name of the file targeted by the action', + name: 'rsa.file.filename_dst', + type: 'keyword', + }, + 'rsa.file.filename_src': { + category: 'rsa', + description: + 'This is used to capture name of the parent filename, the file which performed the action', + name: 'rsa.file.filename_src', + type: 'keyword', + }, + 'rsa.file.filename_tmp': { + category: 'rsa', + name: 'rsa.file.filename_tmp', + type: 'keyword', + }, + 'rsa.file.directory_dst': { + category: 'rsa', + description: + 'This key is used to capture the directory of the target process or file', + name: 'rsa.file.directory_dst', + type: 'keyword', + }, + 'rsa.file.directory_src': { + category: 'rsa', + description: 'This key is used to capture the directory of the source process or file', + name: 'rsa.file.directory_src', + type: 'keyword', + }, + 'rsa.file.file_entropy': { + category: 'rsa', + description: 'This is used to capture entropy vale of a file', + name: 'rsa.file.file_entropy', + type: 'double', + }, + 'rsa.file.file_vendor': { + category: 'rsa', + description: 'This is used to capture Company name of file located in version_info', + name: 'rsa.file.file_vendor', + type: 'keyword', + }, + 'rsa.file.task_name': { + category: 'rsa', + description: 'This is used to capture name of the task', + name: 'rsa.file.task_name', + type: 'keyword', + }, + 'rsa.web.fqdn': { + category: 'rsa', + description: 'Fully Qualified Domain Names', + name: 'rsa.web.fqdn', + type: 'keyword', + }, + 'rsa.web.web_cookie': { + category: 'rsa', + description: 'This key is used to capture the Web cookies specifically.', + name: 'rsa.web.web_cookie', + type: 'keyword', + }, + 'rsa.web.alias_host': { + category: 'rsa', + name: 'rsa.web.alias_host', + type: 'keyword', + }, + 'rsa.web.reputation_num': { + category: 'rsa', + description: 'Reputation Number of an entity. Typically used for Web Domains', + name: 'rsa.web.reputation_num', + type: 'double', + }, + 'rsa.web.web_ref_domain': { + category: 'rsa', + description: "Web referer's domain", + name: 'rsa.web.web_ref_domain', + type: 'keyword', + }, + 'rsa.web.web_ref_query': { + category: 'rsa', + description: "This key captures Web referer's query portion of the URL", + name: 'rsa.web.web_ref_query', + type: 'keyword', + }, + 'rsa.web.remote_domain': { + category: 'rsa', + name: 'rsa.web.remote_domain', + type: 'keyword', + }, + 'rsa.web.web_ref_page': { + category: 'rsa', + description: "This key captures Web referer's page information", + name: 'rsa.web.web_ref_page', + type: 'keyword', + }, + 'rsa.web.web_ref_root': { + category: 'rsa', + description: "Web referer's root URL path", + name: 'rsa.web.web_ref_root', + type: 'keyword', + }, + 'rsa.web.cn_asn_dst': { + category: 'rsa', + name: 'rsa.web.cn_asn_dst', + type: 'keyword', + }, + 'rsa.web.cn_rpackets': { + category: 'rsa', + name: 'rsa.web.cn_rpackets', + type: 'keyword', + }, + 'rsa.web.urlpage': { + category: 'rsa', + name: 'rsa.web.urlpage', + type: 'keyword', + }, + 'rsa.web.urlroot': { + category: 'rsa', + name: 'rsa.web.urlroot', + type: 'keyword', + }, + 'rsa.web.p_url': { + category: 'rsa', + name: 'rsa.web.p_url', + type: 'keyword', + }, + 'rsa.web.p_user_agent': { + category: 'rsa', + name: 'rsa.web.p_user_agent', + type: 'keyword', + }, + 'rsa.web.p_web_cookie': { + category: 'rsa', + name: 'rsa.web.p_web_cookie', + type: 'keyword', + }, + 'rsa.web.p_web_method': { + category: 'rsa', + name: 'rsa.web.p_web_method', + type: 'keyword', + }, + 'rsa.web.p_web_referer': { + category: 'rsa', + name: 'rsa.web.p_web_referer', + type: 'keyword', + }, + 'rsa.web.web_extension_tmp': { + category: 'rsa', + name: 'rsa.web.web_extension_tmp', + type: 'keyword', + }, + 'rsa.web.web_page': { + category: 'rsa', + name: 'rsa.web.web_page', + type: 'keyword', + }, + 'rsa.threat.threat_category': { + category: 'rsa', + description: 'This key captures Threat Name/Threat Category/Categorization of alert', + name: 'rsa.threat.threat_category', + type: 'keyword', + }, + 'rsa.threat.threat_desc': { + category: 'rsa', + description: + 'This key is used to capture the threat description from the session directly or inferred', + name: 'rsa.threat.threat_desc', + type: 'keyword', + }, + 'rsa.threat.alert': { + category: 'rsa', + description: 'This key is used to capture name of the alert', + name: 'rsa.threat.alert', + type: 'keyword', + }, + 'rsa.threat.threat_source': { + category: 'rsa', + description: 'This key is used to capture source of the threat', + name: 'rsa.threat.threat_source', + type: 'keyword', + }, + 'rsa.crypto.crypto': { + category: 'rsa', + description: 'This key is used to capture the Encryption Type or Encryption Key only', + name: 'rsa.crypto.crypto', + type: 'keyword', + }, + 'rsa.crypto.cipher_src': { + category: 'rsa', + description: 'This key is for Source (Client) Cipher', + name: 'rsa.crypto.cipher_src', + type: 'keyword', + }, + 'rsa.crypto.cert_subject': { + category: 'rsa', + description: 'This key is used to capture the Certificate organization only', + name: 'rsa.crypto.cert_subject', + type: 'keyword', + }, + 'rsa.crypto.peer': { + category: 'rsa', + description: "This key is for Encryption peer's IP Address", + name: 'rsa.crypto.peer', + type: 'keyword', + }, + 'rsa.crypto.cipher_size_src': { + category: 'rsa', + description: 'This key captures Source (Client) Cipher Size', + name: 'rsa.crypto.cipher_size_src', + type: 'long', + }, + 'rsa.crypto.ike': { + category: 'rsa', + description: 'IKE negotiation phase.', + name: 'rsa.crypto.ike', + type: 'keyword', + }, + 'rsa.crypto.scheme': { + category: 'rsa', + description: 'This key captures the Encryption scheme used', + name: 'rsa.crypto.scheme', + type: 'keyword', + }, + 'rsa.crypto.peer_id': { + category: 'rsa', + description: 'This key is for Encryption peer’s identity', + name: 'rsa.crypto.peer_id', + type: 'keyword', + }, + 'rsa.crypto.sig_type': { + category: 'rsa', + description: 'This key captures the Signature Type', + name: 'rsa.crypto.sig_type', + type: 'keyword', + }, + 'rsa.crypto.cert_issuer': { + category: 'rsa', + name: 'rsa.crypto.cert_issuer', + type: 'keyword', + }, + 'rsa.crypto.cert_host_name': { + category: 'rsa', + description: 'Deprecated key defined only in table map.', + name: 'rsa.crypto.cert_host_name', + type: 'keyword', + }, + 'rsa.crypto.cert_error': { + category: 'rsa', + description: 'This key captures the Certificate Error String', + name: 'rsa.crypto.cert_error', + type: 'keyword', + }, + 'rsa.crypto.cipher_dst': { + category: 'rsa', + description: 'This key is for Destination (Server) Cipher', + name: 'rsa.crypto.cipher_dst', + type: 'keyword', + }, + 'rsa.crypto.cipher_size_dst': { + category: 'rsa', + description: 'This key captures Destination (Server) Cipher Size', + name: 'rsa.crypto.cipher_size_dst', + type: 'long', + }, + 'rsa.crypto.ssl_ver_src': { + category: 'rsa', + description: 'Deprecated, use version', + name: 'rsa.crypto.ssl_ver_src', + type: 'keyword', + }, + 'rsa.crypto.d_certauth': { + category: 'rsa', + name: 'rsa.crypto.d_certauth', + type: 'keyword', + }, + 'rsa.crypto.s_certauth': { + category: 'rsa', + name: 'rsa.crypto.s_certauth', + type: 'keyword', + }, + 'rsa.crypto.ike_cookie1': { + category: 'rsa', + description: 'ID of the negotiation — sent for ISAKMP Phase One', + name: 'rsa.crypto.ike_cookie1', + type: 'keyword', + }, + 'rsa.crypto.ike_cookie2': { + category: 'rsa', + description: 'ID of the negotiation — sent for ISAKMP Phase Two', + name: 'rsa.crypto.ike_cookie2', + type: 'keyword', + }, + 'rsa.crypto.cert_checksum': { + category: 'rsa', + name: 'rsa.crypto.cert_checksum', + type: 'keyword', + }, + 'rsa.crypto.cert_host_cat': { + category: 'rsa', + description: 'This key is used for the hostname category value of a certificate', + name: 'rsa.crypto.cert_host_cat', + type: 'keyword', + }, + 'rsa.crypto.cert_serial': { + category: 'rsa', + description: 'This key is used to capture the Certificate serial number only', + name: 'rsa.crypto.cert_serial', + type: 'keyword', + }, + 'rsa.crypto.cert_status': { + category: 'rsa', + description: 'This key captures Certificate validation status', + name: 'rsa.crypto.cert_status', + type: 'keyword', + }, + 'rsa.crypto.ssl_ver_dst': { + category: 'rsa', + description: 'Deprecated, use version', + name: 'rsa.crypto.ssl_ver_dst', + type: 'keyword', + }, + 'rsa.crypto.cert_keysize': { + category: 'rsa', + name: 'rsa.crypto.cert_keysize', + type: 'keyword', + }, + 'rsa.crypto.cert_username': { + category: 'rsa', + name: 'rsa.crypto.cert_username', + type: 'keyword', + }, + 'rsa.crypto.https_insact': { + category: 'rsa', + name: 'rsa.crypto.https_insact', + type: 'keyword', + }, + 'rsa.crypto.https_valid': { + category: 'rsa', + name: 'rsa.crypto.https_valid', + type: 'keyword', + }, + 'rsa.crypto.cert_ca': { + category: 'rsa', + description: 'This key is used to capture the Certificate signing authority only', + name: 'rsa.crypto.cert_ca', + type: 'keyword', + }, + 'rsa.crypto.cert_common': { + category: 'rsa', + description: 'This key is used to capture the Certificate common name only', + name: 'rsa.crypto.cert_common', + type: 'keyword', + }, + 'rsa.wireless.wlan_ssid': { + category: 'rsa', + description: 'This key is used to capture the ssid of a Wireless Session', + name: 'rsa.wireless.wlan_ssid', + type: 'keyword', + }, + 'rsa.wireless.access_point': { + category: 'rsa', + description: 'This key is used to capture the access point name.', + name: 'rsa.wireless.access_point', + type: 'keyword', + }, + 'rsa.wireless.wlan_channel': { + category: 'rsa', + description: 'This is used to capture the channel names', + name: 'rsa.wireless.wlan_channel', + type: 'long', + }, + 'rsa.wireless.wlan_name': { + category: 'rsa', + description: 'This key captures either WLAN number/name', + name: 'rsa.wireless.wlan_name', + type: 'keyword', + }, + 'rsa.storage.disk_volume': { + category: 'rsa', + description: 'A unique name assigned to logical units (volumes) within a physical disk', + name: 'rsa.storage.disk_volume', + type: 'keyword', + }, + 'rsa.storage.lun': { + category: 'rsa', + description: 'Logical Unit Number.This key is a very useful concept in Storage.', + name: 'rsa.storage.lun', + type: 'keyword', + }, + 'rsa.storage.pwwn': { + category: 'rsa', + description: 'This uniquely identifies a port on a HBA.', + name: 'rsa.storage.pwwn', + type: 'keyword', + }, + 'rsa.physical.org_dst': { + category: 'rsa', + description: + 'This is used to capture the destination organization based on the GEOPIP Maxmind database.', + name: 'rsa.physical.org_dst', + type: 'keyword', + }, + 'rsa.physical.org_src': { + category: 'rsa', + description: + 'This is used to capture the source organization based on the GEOPIP Maxmind database.', + name: 'rsa.physical.org_src', + type: 'keyword', + }, + 'rsa.healthcare.patient_fname': { + category: 'rsa', + description: + 'This key is for First Names only, this is used for Healthcare predominantly to capture Patients information', + name: 'rsa.healthcare.patient_fname', + type: 'keyword', + }, + 'rsa.healthcare.patient_id': { + category: 'rsa', + description: 'This key captures the unique ID for a patient', + name: 'rsa.healthcare.patient_id', + type: 'keyword', + }, + 'rsa.healthcare.patient_lname': { + category: 'rsa', + description: + 'This key is for Last Names only, this is used for Healthcare predominantly to capture Patients information', + name: 'rsa.healthcare.patient_lname', + type: 'keyword', + }, + 'rsa.healthcare.patient_mname': { + category: 'rsa', + description: + 'This key is for Middle Names only, this is used for Healthcare predominantly to capture Patients information', + name: 'rsa.healthcare.patient_mname', + type: 'keyword', + }, + 'rsa.endpoint.host_state': { + category: 'rsa', + description: + 'This key is used to capture the current state of the machine, such as blacklisted, infected, firewall disabled and so on', + name: 'rsa.endpoint.host_state', + type: 'keyword', + }, + 'rsa.endpoint.registry_key': { + category: 'rsa', + description: 'This key captures the path to the registry key', + name: 'rsa.endpoint.registry_key', + type: 'keyword', + }, + 'rsa.endpoint.registry_value': { + category: 'rsa', + description: 'This key captures values or decorators used within a registry entry', + name: 'rsa.endpoint.registry_value', + type: 'keyword', + }, + 'forcepoint.virus_id': { + category: 'forcepoint', + description: 'Virus ID ', + name: 'forcepoint.virus_id', + type: 'keyword', + }, + 'checkpoint.app_risk': { + category: 'checkpoint', + description: 'Application risk.', + name: 'checkpoint.app_risk', + type: 'keyword', + }, + 'checkpoint.app_severity': { + category: 'checkpoint', + description: 'Application threat severity.', + name: 'checkpoint.app_severity', + type: 'keyword', + }, + 'checkpoint.app_sig_id': { + category: 'checkpoint', + description: 'The signature ID which the application was detected by.', + name: 'checkpoint.app_sig_id', + type: 'keyword', + }, + 'checkpoint.auth_method': { + category: 'checkpoint', + description: 'Password authentication protocol used.', + name: 'checkpoint.auth_method', + type: 'keyword', + }, + 'checkpoint.category': { + category: 'checkpoint', + description: 'Category.', + name: 'checkpoint.category', + type: 'keyword', + }, + 'checkpoint.confidence_level': { + category: 'checkpoint', + description: 'Confidence level determined.', + name: 'checkpoint.confidence_level', + type: 'integer', + }, + 'checkpoint.connectivity_state': { + category: 'checkpoint', + description: 'Connectivity state.', + name: 'checkpoint.connectivity_state', + type: 'keyword', + }, + 'checkpoint.cookie': { + category: 'checkpoint', + description: 'IKE cookie.', + name: 'checkpoint.cookie', + type: 'keyword', + }, + 'checkpoint.dst_phone_number': { + category: 'checkpoint', + description: 'Destination IP-Phone.', + name: 'checkpoint.dst_phone_number', + type: 'keyword', + }, + 'checkpoint.email_control': { + category: 'checkpoint', + description: 'Engine name.', + name: 'checkpoint.email_control', + type: 'keyword', + }, + 'checkpoint.email_id': { + category: 'checkpoint', + description: 'Internal email ID.', + name: 'checkpoint.email_id', + type: 'keyword', + }, + 'checkpoint.email_recipients_num': { + category: 'checkpoint', + description: 'Number of recipients.', + name: 'checkpoint.email_recipients_num', + type: 'long', + }, + 'checkpoint.email_session_id': { + category: 'checkpoint', + description: 'Internal email session ID.', + name: 'checkpoint.email_session_id', + type: 'keyword', + }, + 'checkpoint.email_spool_id': { + category: 'checkpoint', + description: 'Internal email spool ID.', + name: 'checkpoint.email_spool_id', + type: 'keyword', + }, + 'checkpoint.email_subject': { + category: 'checkpoint', + description: 'Email subject.', + name: 'checkpoint.email_subject', + type: 'keyword', + }, + 'checkpoint.event_count': { + category: 'checkpoint', + description: 'Number of events associated with the log.', + name: 'checkpoint.event_count', + type: 'long', + }, + 'checkpoint.frequency': { + category: 'checkpoint', + description: 'Scan frequency.', + name: 'checkpoint.frequency', + type: 'keyword', + }, + 'checkpoint.icmp_type': { + category: 'checkpoint', + description: 'ICMP type.', + name: 'checkpoint.icmp_type', + type: 'long', + }, + 'checkpoint.icmp_code': { + category: 'checkpoint', + description: 'ICMP code.', + name: 'checkpoint.icmp_code', + type: 'long', + }, + 'checkpoint.identity_type': { + category: 'checkpoint', + description: 'Identity type.', + name: 'checkpoint.identity_type', + type: 'keyword', + }, + 'checkpoint.incident_extension': { + category: 'checkpoint', + description: 'Format of original data.', + name: 'checkpoint.incident_extension', + type: 'keyword', + }, + 'checkpoint.integrity_av_invoke_type': { + category: 'checkpoint', + description: 'Scan invoke type.', + name: 'checkpoint.integrity_av_invoke_type', + type: 'keyword', + }, + 'checkpoint.malware_family': { + category: 'checkpoint', + description: 'Malware family.', + name: 'checkpoint.malware_family', + type: 'keyword', + }, + 'checkpoint.peer_gateway': { + category: 'checkpoint', + description: 'Main IP of the peer Security Gateway.', + name: 'checkpoint.peer_gateway', + type: 'ip', + }, + 'checkpoint.performance_impact': { + category: 'checkpoint', + description: 'Protection performance impact.', + name: 'checkpoint.performance_impact', + type: 'integer', + }, + 'checkpoint.protection_id': { + category: 'checkpoint', + description: 'Protection malware ID.', + name: 'checkpoint.protection_id', + type: 'keyword', + }, + 'checkpoint.protection_name': { + category: 'checkpoint', + description: 'Specific signature name of the attack.', + name: 'checkpoint.protection_name', + type: 'keyword', + }, + 'checkpoint.protection_type': { + category: 'checkpoint', + description: 'Type of protection used to detect the attack.', + name: 'checkpoint.protection_type', + type: 'keyword', + }, + 'checkpoint.scan_result': { + category: 'checkpoint', + description: 'Scan result.', + name: 'checkpoint.scan_result', + type: 'keyword', + }, + 'checkpoint.sensor_mode': { + category: 'checkpoint', + description: 'Sensor mode.', + name: 'checkpoint.sensor_mode', + type: 'keyword', + }, + 'checkpoint.severity': { + category: 'checkpoint', + description: 'Threat severity.', + name: 'checkpoint.severity', + type: 'keyword', + }, + 'checkpoint.spyware_name': { + category: 'checkpoint', + description: 'Spyware name.', + name: 'checkpoint.spyware_name', + type: 'keyword', + }, + 'checkpoint.spyware_status': { + category: 'checkpoint', + description: 'Spyware status.', + name: 'checkpoint.spyware_status', + type: 'keyword', + }, + 'checkpoint.subs_exp': { + category: 'checkpoint', + description: 'The expiration date of the subscription.', + name: 'checkpoint.subs_exp', + type: 'date', + }, + 'checkpoint.tcp_flags': { + category: 'checkpoint', + description: 'TCP packet flags.', + name: 'checkpoint.tcp_flags', + type: 'keyword', + }, + 'checkpoint.termination_reason': { + category: 'checkpoint', + description: 'Termination reason.', + name: 'checkpoint.termination_reason', + type: 'keyword', + }, + 'checkpoint.update_status': { + category: 'checkpoint', + description: 'Update status.', + name: 'checkpoint.update_status', + type: 'keyword', + }, + 'checkpoint.user_status': { + category: 'checkpoint', + description: 'User response.', + name: 'checkpoint.user_status', + type: 'keyword', + }, + 'checkpoint.uuid': { + category: 'checkpoint', + description: 'External ID.', + name: 'checkpoint.uuid', + type: 'keyword', + }, + 'checkpoint.virus_name': { + category: 'checkpoint', + description: 'Virus name.', + name: 'checkpoint.virus_name', + type: 'keyword', + }, + 'checkpoint.voip_log_type': { + category: 'checkpoint', + description: 'VoIP log types.', + name: 'checkpoint.voip_log_type', + type: 'keyword', + }, + 'cef.extensions.cp_app_risk': { + category: 'cef', + name: 'cef.extensions.cp_app_risk', + type: 'keyword', + }, + 'cef.extensions.cp_severity': { + category: 'cef', + name: 'cef.extensions.cp_severity', + type: 'keyword', + }, + 'cef.extensions.ifname': { + category: 'cef', + name: 'cef.extensions.ifname', + type: 'keyword', + }, + 'cef.extensions.inzone': { + category: 'cef', + name: 'cef.extensions.inzone', + type: 'keyword', + }, + 'cef.extensions.layer_uuid': { + category: 'cef', + name: 'cef.extensions.layer_uuid', + type: 'keyword', + }, + 'cef.extensions.layer_name': { + category: 'cef', + name: 'cef.extensions.layer_name', + type: 'keyword', + }, + 'cef.extensions.logid': { + category: 'cef', + name: 'cef.extensions.logid', + type: 'keyword', + }, + 'cef.extensions.loguid': { + category: 'cef', + name: 'cef.extensions.loguid', + type: 'keyword', + }, + 'cef.extensions.match_id': { + category: 'cef', + name: 'cef.extensions.match_id', + type: 'keyword', + }, + 'cef.extensions.nat_addtnl_rulenum': { + category: 'cef', + name: 'cef.extensions.nat_addtnl_rulenum', + type: 'keyword', + }, + 'cef.extensions.nat_rulenum': { + category: 'cef', + name: 'cef.extensions.nat_rulenum', + type: 'keyword', + }, + 'cef.extensions.origin': { + category: 'cef', + name: 'cef.extensions.origin', + type: 'keyword', + }, + 'cef.extensions.originsicname': { + category: 'cef', + name: 'cef.extensions.originsicname', + type: 'keyword', + }, + 'cef.extensions.outzone': { + category: 'cef', + name: 'cef.extensions.outzone', + type: 'keyword', + }, + 'cef.extensions.parent_rule': { + category: 'cef', + name: 'cef.extensions.parent_rule', + type: 'keyword', + }, + 'cef.extensions.product': { + category: 'cef', + name: 'cef.extensions.product', + type: 'keyword', + }, + 'cef.extensions.rule_action': { + category: 'cef', + name: 'cef.extensions.rule_action', + type: 'keyword', + }, + 'cef.extensions.rule_uid': { + category: 'cef', + name: 'cef.extensions.rule_uid', + type: 'keyword', + }, + 'cef.extensions.sequencenum': { + category: 'cef', + name: 'cef.extensions.sequencenum', + type: 'keyword', + }, + 'cef.extensions.service_id': { + category: 'cef', + name: 'cef.extensions.service_id', + type: 'keyword', + }, + 'cef.extensions.version': { + category: 'cef', + name: 'cef.extensions.version', + type: 'keyword', + }, + 'checkpoint.calc_desc': { + category: 'checkpoint', + description: 'Log description. ', + name: 'checkpoint.calc_desc', + type: 'keyword', + }, + 'checkpoint.dst_country': { + category: 'checkpoint', + description: 'Destination country. ', + name: 'checkpoint.dst_country', + type: 'keyword', + }, + 'checkpoint.dst_user_name': { + category: 'checkpoint', + description: 'Connected user name on the destination IP. ', + name: 'checkpoint.dst_user_name', + type: 'keyword', + }, + 'checkpoint.sys_message': { + category: 'checkpoint', + description: 'System messages ', + name: 'checkpoint.sys_message', + type: 'keyword', + }, + 'checkpoint.logid': { + category: 'checkpoint', + description: 'System messages ', + name: 'checkpoint.logid', + type: 'keyword', + }, + 'checkpoint.failure_impact': { + category: 'checkpoint', + description: 'The impact of update service failure. ', + name: 'checkpoint.failure_impact', + type: 'keyword', + }, + 'checkpoint.id': { + category: 'checkpoint', + description: 'Override application ID. ', + name: 'checkpoint.id', + type: 'integer', + }, + 'checkpoint.information': { + category: 'checkpoint', + description: 'Policy installation status for a specific blade. ', + name: 'checkpoint.information', + type: 'keyword', + }, + 'checkpoint.layer_name': { + category: 'checkpoint', + description: 'Layer name. ', + name: 'checkpoint.layer_name', + type: 'keyword', + }, + 'checkpoint.layer_uuid': { + category: 'checkpoint', + description: 'Layer UUID. ', + name: 'checkpoint.layer_uuid', + type: 'keyword', + }, + 'checkpoint.log_id': { + category: 'checkpoint', + description: 'Unique identity for logs. ', + name: 'checkpoint.log_id', + type: 'integer', + }, + 'checkpoint.origin_sic_name': { + category: 'checkpoint', + description: 'Machine SIC. ', + name: 'checkpoint.origin_sic_name', + type: 'keyword', + }, + 'checkpoint.policy_mgmt': { + category: 'checkpoint', + description: 'Name of the Management Server that manages this Security Gateway. ', + name: 'checkpoint.policy_mgmt', + type: 'keyword', + }, + 'checkpoint.policy_name': { + category: 'checkpoint', + description: 'Name of the last policy that this Security Gateway fetched. ', + name: 'checkpoint.policy_name', + type: 'keyword', + }, + 'checkpoint.protocol': { + category: 'checkpoint', + description: 'Protocol detected on the connection. ', + name: 'checkpoint.protocol', + type: 'keyword', + }, + 'checkpoint.proxy_src_ip': { + category: 'checkpoint', + description: 'Sender source IP (even when using proxy). ', + name: 'checkpoint.proxy_src_ip', + type: 'ip', + }, + 'checkpoint.rule': { + category: 'checkpoint', + description: 'Matched rule number. ', + name: 'checkpoint.rule', + type: 'integer', + }, + 'checkpoint.rule_action': { + category: 'checkpoint', + description: 'Action of the matched rule in the access policy. ', + name: 'checkpoint.rule_action', + type: 'keyword', + }, + 'checkpoint.scan_direction': { + category: 'checkpoint', + description: 'Scan direction. ', + name: 'checkpoint.scan_direction', + type: 'keyword', + }, + 'checkpoint.session_id': { + category: 'checkpoint', + description: 'Log uuid. ', + name: 'checkpoint.session_id', + type: 'keyword', + }, + 'checkpoint.source_os': { + category: 'checkpoint', + description: 'OS which generated the attack. ', + name: 'checkpoint.source_os', + type: 'keyword', + }, + 'checkpoint.src_country': { + category: 'checkpoint', + description: 'Country name, derived from connection source IP address. ', + name: 'checkpoint.src_country', + type: 'keyword', + }, + 'checkpoint.src_user_name': { + category: 'checkpoint', + description: 'User name connected to source IP ', + name: 'checkpoint.src_user_name', + type: 'keyword', + }, + 'checkpoint.ticket_id': { + category: 'checkpoint', + description: 'Unique ID per file. ', + name: 'checkpoint.ticket_id', + type: 'keyword', + }, + 'checkpoint.tls_server_host_name': { + category: 'checkpoint', + description: 'SNI/CN from encrypted TLS connection used by URLF for categorization. ', + name: 'checkpoint.tls_server_host_name', + type: 'keyword', + }, + 'checkpoint.verdict': { + category: 'checkpoint', + description: 'TE engine verdict Possible values: Malicious/Benign/Error. ', + name: 'checkpoint.verdict', + type: 'keyword', + }, + 'checkpoint.user': { + category: 'checkpoint', + description: 'Source user name. ', + name: 'checkpoint.user', + type: 'keyword', + }, + 'checkpoint.vendor_list': { + category: 'checkpoint', + description: 'The vendor name that provided the verdict for a malicious URL. ', + name: 'checkpoint.vendor_list', + type: 'keyword', + }, + 'checkpoint.web_server_type': { + category: 'checkpoint', + description: 'Web server detected in the HTTP response. ', + name: 'checkpoint.web_server_type', + type: 'keyword', + }, + 'checkpoint.client_name': { + category: 'checkpoint', + description: 'Client Application or Software Blade that detected the event. ', + name: 'checkpoint.client_name', + type: 'keyword', + }, + 'checkpoint.client_version': { + category: 'checkpoint', + description: 'Build version of SandBlast Agent client installed on the computer. ', + name: 'checkpoint.client_version', + type: 'keyword', + }, + 'checkpoint.extension_version': { + category: 'checkpoint', + description: 'Build version of the SandBlast Agent browser extension. ', + name: 'checkpoint.extension_version', + type: 'keyword', + }, + 'checkpoint.host_time': { + category: 'checkpoint', + description: 'Local time on the endpoint computer. ', + name: 'checkpoint.host_time', + type: 'keyword', + }, + 'checkpoint.installed_products': { + category: 'checkpoint', + description: 'List of installed Endpoint Software Blades. ', + name: 'checkpoint.installed_products', + type: 'keyword', + }, + 'checkpoint.cc': { + category: 'checkpoint', + description: 'The Carbon Copy address of the email. ', + name: 'checkpoint.cc', + type: 'keyword', + }, + 'checkpoint.parent_process_username': { + category: 'checkpoint', + description: 'Owner username of the parent process of the process that triggered the attack. ', + name: 'checkpoint.parent_process_username', + type: 'keyword', + }, + 'checkpoint.process_username': { + category: 'checkpoint', + description: 'Owner username of the process that triggered the attack. ', + name: 'checkpoint.process_username', + type: 'keyword', + }, + 'checkpoint.audit_status': { + category: 'checkpoint', + description: 'Audit Status. Can be Success or Failure. ', + name: 'checkpoint.audit_status', + type: 'keyword', + }, + 'checkpoint.objecttable': { + category: 'checkpoint', + description: 'Table of affected objects. ', + name: 'checkpoint.objecttable', + type: 'keyword', + }, + 'checkpoint.objecttype': { + category: 'checkpoint', + description: 'The type of the affected object. ', + name: 'checkpoint.objecttype', + type: 'keyword', + }, + 'checkpoint.operation_number': { + category: 'checkpoint', + description: 'The operation nuber. ', + name: 'checkpoint.operation_number', + type: 'keyword', + }, + 'checkpoint.suppressed_logs': { + category: 'checkpoint', + description: + 'Aggregated connections for five minutes on the same source, destination and port. ', + name: 'checkpoint.suppressed_logs', + type: 'integer', + }, + 'checkpoint.blade_name': { + category: 'checkpoint', + description: 'Blade name. ', + name: 'checkpoint.blade_name', + type: 'keyword', + }, + 'checkpoint.status': { + category: 'checkpoint', + description: 'Ok/Warning/Error. ', + name: 'checkpoint.status', + type: 'keyword', + }, + 'checkpoint.short_desc': { + category: 'checkpoint', + description: 'Short description of the process that was executed. ', + name: 'checkpoint.short_desc', + type: 'keyword', + }, + 'checkpoint.long_desc': { + category: 'checkpoint', + description: 'More information on the process (usually describing error reason in failure). ', + name: 'checkpoint.long_desc', + type: 'keyword', + }, + 'checkpoint.scan_hosts_hour': { + category: 'checkpoint', + description: 'Number of unique hosts during the last hour. ', + name: 'checkpoint.scan_hosts_hour', + type: 'integer', + }, + 'checkpoint.scan_hosts_day': { + category: 'checkpoint', + description: 'Number of unique hosts during the last day. ', + name: 'checkpoint.scan_hosts_day', + type: 'integer', + }, + 'checkpoint.scan_hosts_week': { + category: 'checkpoint', + description: 'Number of unique hosts during the last week. ', + name: 'checkpoint.scan_hosts_week', + type: 'integer', + }, + 'checkpoint.unique_detected_hour': { + category: 'checkpoint', + description: 'Detected virus for a specific host during the last hour. ', + name: 'checkpoint.unique_detected_hour', + type: 'integer', + }, + 'checkpoint.unique_detected_day': { + category: 'checkpoint', + description: 'Detected virus for a specific host during the last day. ', + name: 'checkpoint.unique_detected_day', + type: 'integer', + }, + 'checkpoint.unique_detected_week': { + category: 'checkpoint', + description: 'Detected virus for a specific host during the last week. ', + name: 'checkpoint.unique_detected_week', + type: 'integer', + }, + 'checkpoint.scan_mail': { + category: 'checkpoint', + description: 'Number of emails that were scanned by "AB malicious activity" engine. ', + name: 'checkpoint.scan_mail', + type: 'integer', + }, + 'checkpoint.additional_ip': { + category: 'checkpoint', + description: 'DNS host name. ', + name: 'checkpoint.additional_ip', + type: 'keyword', + }, + 'checkpoint.description': { + category: 'checkpoint', + description: 'Additional explanation how the security gateway enforced the connection. ', + name: 'checkpoint.description', + type: 'keyword', + }, + 'checkpoint.email_spam_category': { + category: 'checkpoint', + description: 'Email categories. Possible values: spam/not spam/phishing. ', + name: 'checkpoint.email_spam_category', + type: 'keyword', + }, + 'checkpoint.email_control_analysis': { + category: 'checkpoint', + description: 'Message classification, received from spam vendor engine. ', + name: 'checkpoint.email_control_analysis', + type: 'keyword', + }, + 'checkpoint.scan_results': { + category: 'checkpoint', + description: '"Infected"/description of a failure. ', + name: 'checkpoint.scan_results', + type: 'keyword', + }, + 'checkpoint.original_queue_id': { + category: 'checkpoint', + description: 'Original postfix email queue id. ', + name: 'checkpoint.original_queue_id', + type: 'keyword', + }, + 'checkpoint.risk': { + category: 'checkpoint', + description: 'Risk level we got from the engine. ', + name: 'checkpoint.risk', + type: 'keyword', + }, + 'checkpoint.observable_name': { + category: 'checkpoint', + description: 'IOC observable signature name. ', + name: 'checkpoint.observable_name', + type: 'keyword', + }, + 'checkpoint.observable_id': { + category: 'checkpoint', + description: 'IOC observable signature id. ', + name: 'checkpoint.observable_id', + type: 'keyword', + }, + 'checkpoint.observable_comment': { + category: 'checkpoint', + description: 'IOC observable signature description. ', + name: 'checkpoint.observable_comment', + type: 'keyword', + }, + 'checkpoint.indicator_name': { + category: 'checkpoint', + description: 'IOC indicator name. ', + name: 'checkpoint.indicator_name', + type: 'keyword', + }, + 'checkpoint.indicator_description': { + category: 'checkpoint', + description: 'IOC indicator description. ', + name: 'checkpoint.indicator_description', + type: 'keyword', + }, + 'checkpoint.indicator_reference': { + category: 'checkpoint', + description: 'IOC indicator reference. ', + name: 'checkpoint.indicator_reference', + type: 'keyword', + }, + 'checkpoint.indicator_uuid': { + category: 'checkpoint', + description: 'IOC indicator uuid. ', + name: 'checkpoint.indicator_uuid', + type: 'keyword', + }, + 'checkpoint.app_desc': { + category: 'checkpoint', + description: 'Application description. ', + name: 'checkpoint.app_desc', + type: 'keyword', + }, + 'checkpoint.app_id': { + category: 'checkpoint', + description: 'Application ID. ', + name: 'checkpoint.app_id', + type: 'integer', + }, + 'checkpoint.certificate_resource': { + category: 'checkpoint', + description: 'HTTPS resource Possible values: SNI or domain name (DN). ', + name: 'checkpoint.certificate_resource', + type: 'keyword', + }, + 'checkpoint.certificate_validation': { + category: 'checkpoint', + description: + 'Precise error, describing HTTPS certificate failure under "HTTPS categorize websites" feature. ', + name: 'checkpoint.certificate_validation', + type: 'keyword', + }, + 'checkpoint.browse_time': { + category: 'checkpoint', + description: 'Application session browse time. ', + name: 'checkpoint.browse_time', + type: 'keyword', + }, + 'checkpoint.limit_requested': { + category: 'checkpoint', + description: 'Indicates whether data limit was requested for the session. ', + name: 'checkpoint.limit_requested', + type: 'integer', + }, + 'checkpoint.limit_applied': { + category: 'checkpoint', + description: 'Indicates whether the session was actually date limited. ', + name: 'checkpoint.limit_applied', + type: 'integer', + }, + 'checkpoint.dropped_total': { + category: 'checkpoint', + description: 'Amount of dropped packets (both incoming and outgoing). ', + name: 'checkpoint.dropped_total', + type: 'integer', + }, + 'checkpoint.client_type_os': { + category: 'checkpoint', + description: 'Client OS detected in the HTTP request. ', + name: 'checkpoint.client_type_os', + type: 'keyword', + }, + 'checkpoint.name': { + category: 'checkpoint', + description: 'Application name. ', + name: 'checkpoint.name', + type: 'keyword', + }, + 'checkpoint.properties': { + category: 'checkpoint', + description: 'Application categories. ', + name: 'checkpoint.properties', + type: 'keyword', + }, + 'checkpoint.sig_id': { + category: 'checkpoint', + description: "Application's signature ID which how it was detected by. ", + name: 'checkpoint.sig_id', + type: 'keyword', + }, + 'checkpoint.desc': { + category: 'checkpoint', + description: 'Override application description. ', + name: 'checkpoint.desc', + type: 'keyword', }, - 'mysql.slowlog.sort_rows': { - category: 'mysql', - description: 'Number of sorted rows. ', - name: 'mysql.slowlog.sort_rows', - type: 'long', + 'checkpoint.referrer_self_uid': { + category: 'checkpoint', + description: 'UUID of the current log. ', + name: 'checkpoint.referrer_self_uid', + type: 'keyword', }, - 'mysql.slowlog.sort_scan_count': { - category: 'mysql', - description: 'Number of sorts that were done by scanning the table. ', - name: 'mysql.slowlog.sort_scan_count', - type: 'long', + 'checkpoint.referrer_parent_uid': { + category: 'checkpoint', + description: 'Log UUID of the referring application. ', + name: 'checkpoint.referrer_parent_uid', + type: 'keyword', }, - 'mysql.slowlog.log_slow_rate_type': { - category: 'mysql', + 'checkpoint.needs_browse_time': { + category: 'checkpoint', + description: 'Browse time required for the connection. ', + name: 'checkpoint.needs_browse_time', + type: 'integer', + }, + 'checkpoint.cluster_info': { + category: 'checkpoint', description: - 'Type of slow log rate limit, it can be `session` if the rate limit is applied per session, or `query` if it applies per query. ', - name: 'mysql.slowlog.log_slow_rate_type', + 'Cluster information. Possible options: Failover reason/cluster state changes/CP cluster or 3rd party. ', + name: 'checkpoint.cluster_info', type: 'keyword', }, - 'mysql.slowlog.log_slow_rate_limit': { - category: 'mysql', - description: - 'Slow log rate limit, a value of 100 means that one in a hundred queries or sessions are being logged. ', - name: 'mysql.slowlog.log_slow_rate_limit', + 'checkpoint.sync': { + category: 'checkpoint', + description: 'Sync status and the reason (stable, at risk). ', + name: 'checkpoint.sync', type: 'keyword', }, - 'mysql.slowlog.read_first': { - category: 'mysql', - description: 'The number of times the first entry in an index was read. ', - name: 'mysql.slowlog.read_first', - type: 'long', + 'checkpoint.file_direction': { + category: 'checkpoint', + description: 'File direction. Possible options: upload/download. ', + name: 'checkpoint.file_direction', + type: 'keyword', }, - 'mysql.slowlog.read_last': { - category: 'mysql', - description: 'The number of times the last key in an index was read. ', - name: 'mysql.slowlog.read_last', - type: 'long', + 'checkpoint.invalid_file_size': { + category: 'checkpoint', + description: 'File_size field is valid only if this field is set to 0. ', + name: 'checkpoint.invalid_file_size', + type: 'integer', }, - 'mysql.slowlog.read_key': { - category: 'mysql', - description: 'The number of requests to read a row based on a key. ', - name: 'mysql.slowlog.read_key', - type: 'long', + 'checkpoint.top_archive_file_name': { + category: 'checkpoint', + description: 'In case of archive file: the file that was sent/received. ', + name: 'checkpoint.top_archive_file_name', + type: 'keyword', }, - 'mysql.slowlog.read_next': { - category: 'mysql', - description: 'The number of requests to read the next row in key order. ', - name: 'mysql.slowlog.read_next', - type: 'long', + 'checkpoint.data_type_name': { + category: 'checkpoint', + description: 'Data type in rulebase that was matched. ', + name: 'checkpoint.data_type_name', + type: 'keyword', }, - 'mysql.slowlog.read_prev': { - category: 'mysql', - description: 'The number of requests to read the previous row in key order. ', - name: 'mysql.slowlog.read_prev', - type: 'long', + 'checkpoint.specific_data_type_name': { + category: 'checkpoint', + description: 'Compound/Group scenario, data type that was matched. ', + name: 'checkpoint.specific_data_type_name', + type: 'keyword', }, - 'mysql.slowlog.read_rnd': { - category: 'mysql', - description: 'The number of requests to read a row based on a fixed position. ', - name: 'mysql.slowlog.read_rnd', - type: 'long', + 'checkpoint.word_list': { + category: 'checkpoint', + description: 'Words matched by data type. ', + name: 'checkpoint.word_list', + type: 'keyword', }, - 'mysql.slowlog.read_rnd_next': { - category: 'mysql', - description: 'The number of requests to read the next row in the data file. ', - name: 'mysql.slowlog.read_rnd_next', - type: 'long', + 'checkpoint.info': { + category: 'checkpoint', + description: 'Special log message. ', + name: 'checkpoint.info', + type: 'keyword', }, - 'mysql.slowlog.innodb.trx_id': { - category: 'mysql', - description: 'Transaction ID ', - name: 'mysql.slowlog.innodb.trx_id', + 'checkpoint.outgoing_url': { + category: 'checkpoint', + description: 'URL related to this log (for HTTP). ', + name: 'checkpoint.outgoing_url', type: 'keyword', }, - 'mysql.slowlog.innodb.io_r_ops': { - category: 'mysql', - description: 'Number of page read operations. ', - name: 'mysql.slowlog.innodb.io_r_ops', - type: 'long', + 'checkpoint.dlp_rule_name': { + category: 'checkpoint', + description: 'Matched rule name. ', + name: 'checkpoint.dlp_rule_name', + type: 'keyword', }, - 'mysql.slowlog.innodb.io_r_bytes': { - category: 'mysql', - description: 'Bytes read during page read operations. ', - name: 'mysql.slowlog.innodb.io_r_bytes', - type: 'long', - format: 'bytes', + 'checkpoint.dlp_recipients': { + category: 'checkpoint', + description: 'Mail recipients. ', + name: 'checkpoint.dlp_recipients', + type: 'keyword', }, - 'mysql.slowlog.innodb.io_r_wait.sec': { - category: 'mysql', - description: 'How long it took to read all needed data from storage. ', - name: 'mysql.slowlog.innodb.io_r_wait.sec', - type: 'long', + 'checkpoint.dlp_subject': { + category: 'checkpoint', + description: 'Mail subject. ', + name: 'checkpoint.dlp_subject', + type: 'keyword', }, - 'mysql.slowlog.innodb.rec_lock_wait.sec': { - category: 'mysql', - description: 'How long the query waited for locks. ', - name: 'mysql.slowlog.innodb.rec_lock_wait.sec', - type: 'long', + 'checkpoint.dlp_word_list': { + category: 'checkpoint', + description: 'Phrases matched by data type. ', + name: 'checkpoint.dlp_word_list', + type: 'keyword', }, - 'mysql.slowlog.innodb.queue_wait.sec': { - category: 'mysql', - description: - 'How long the query waited to enter the InnoDB queue and to be executed once in the queue. ', - name: 'mysql.slowlog.innodb.queue_wait.sec', - type: 'long', + 'checkpoint.dlp_template_score': { + category: 'checkpoint', + description: 'Template data type match score. ', + name: 'checkpoint.dlp_template_score', + type: 'keyword', }, - 'mysql.slowlog.innodb.pages_distinct': { - category: 'mysql', - description: 'Approximated count of pages accessed to execute the query. ', - name: 'mysql.slowlog.innodb.pages_distinct', - type: 'long', + 'checkpoint.message_size': { + category: 'checkpoint', + description: 'Mail/post size. ', + name: 'checkpoint.message_size', + type: 'integer', }, - 'mysql.slowlog.user': { - category: 'mysql', - name: 'mysql.slowlog.user', - type: 'alias', + 'checkpoint.dlp_incident_uid': { + category: 'checkpoint', + description: 'Unique ID of the matched rule. ', + name: 'checkpoint.dlp_incident_uid', + type: 'keyword', }, - 'mysql.slowlog.host': { - category: 'mysql', - name: 'mysql.slowlog.host', - type: 'alias', + 'checkpoint.dlp_related_incident_uid': { + category: 'checkpoint', + description: 'Other ID related to this one. ', + name: 'checkpoint.dlp_related_incident_uid', + type: 'keyword', }, - 'mysql.slowlog.ip': { - category: 'mysql', - name: 'mysql.slowlog.ip', - type: 'alias', + 'checkpoint.dlp_data_type_name': { + category: 'checkpoint', + description: 'Matched data type. ', + name: 'checkpoint.dlp_data_type_name', + type: 'keyword', }, - 'nats.log.client.id': { - category: 'nats', - description: 'The id of the client ', - name: 'nats.log.client.id', - type: 'integer', + 'checkpoint.dlp_data_type_uid': { + category: 'checkpoint', + description: 'Unique ID of the matched data type. ', + name: 'checkpoint.dlp_data_type_uid', + type: 'keyword', }, - 'nats.log.msg.bytes': { - category: 'nats', - description: 'Size of the payload in bytes ', - name: 'nats.log.msg.bytes', - type: 'long', - format: 'bytes', + 'checkpoint.dlp_violation_description': { + category: 'checkpoint', + description: 'Violation descriptions described in the rulebase. ', + name: 'checkpoint.dlp_violation_description', + type: 'keyword', }, - 'nats.log.msg.type': { - category: 'nats', - description: 'The protocol message type ', - name: 'nats.log.msg.type', + 'checkpoint.dlp_relevant_data_types': { + category: 'checkpoint', + description: 'In case of Compound/Group: the inner data types that were matched. ', + name: 'checkpoint.dlp_relevant_data_types', type: 'keyword', }, - 'nats.log.msg.subject': { - category: 'nats', - description: 'Subject name this message was received on ', - name: 'nats.log.msg.subject', + 'checkpoint.dlp_action_reason': { + category: 'checkpoint', + description: 'Action chosen reason. ', + name: 'checkpoint.dlp_action_reason', type: 'keyword', }, - 'nats.log.msg.sid': { - category: 'nats', - description: 'The unique alphanumeric subscription ID of the subject ', - name: 'nats.log.msg.sid', - type: 'integer', + 'checkpoint.dlp_categories': { + category: 'checkpoint', + description: 'Data type category. ', + name: 'checkpoint.dlp_categories', + type: 'keyword', }, - 'nats.log.msg.reply_to': { - category: 'nats', - description: 'The inbox subject on which the publisher is listening for responses ', - name: 'nats.log.msg.reply_to', + 'checkpoint.dlp_transint': { + category: 'checkpoint', + description: 'HTTP/SMTP/FTP. ', + name: 'checkpoint.dlp_transint', type: 'keyword', }, - 'nats.log.msg.max_messages': { - category: 'nats', - description: 'An optional number of messages to wait for before automatically unsubscribing ', - name: 'nats.log.msg.max_messages', - type: 'integer', + 'checkpoint.duplicate': { + category: 'checkpoint', + description: + 'Log marked as duplicated, when mail is split and the Security Gateway sees it twice. ', + name: 'checkpoint.duplicate', + type: 'keyword', }, - 'nats.log.msg.error.message': { - category: 'nats', - description: 'Details about the error occurred ', - name: 'nats.log.msg.error.message', - type: 'text', + 'checkpoint.matched_file': { + category: 'checkpoint', + description: 'Unique ID of the matched data type. ', + name: 'checkpoint.matched_file', + type: 'keyword', }, - 'nats.log.msg.queue_group': { - category: 'nats', - description: 'The queue group which subscriber will join ', - name: 'nats.log.msg.queue_group', - type: 'text', + 'checkpoint.matched_file_text_segments': { + category: 'checkpoint', + description: 'Fingerprint: number of text segments matched by this traffic. ', + name: 'checkpoint.matched_file_text_segments', + type: 'integer', }, - 'nginx.access.remote_ip_list': { - category: 'nginx', - description: - 'An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. Real source IP is restored to `source.ip`. ', - name: 'nginx.access.remote_ip_list', - type: 'array', + 'checkpoint.matched_file_percentage': { + category: 'checkpoint', + description: 'Fingerprint: match percentage of the traffic. ', + name: 'checkpoint.matched_file_percentage', + type: 'integer', }, - 'nginx.access.body_sent.bytes': { - category: 'nginx', - name: 'nginx.access.body_sent.bytes', - type: 'alias', + 'checkpoint.dlp_additional_action': { + category: 'checkpoint', + description: 'Watermark/None. ', + name: 'checkpoint.dlp_additional_action', + type: 'keyword', }, - 'nginx.access.user_name': { - category: 'nginx', - name: 'nginx.access.user_name', - type: 'alias', + 'checkpoint.dlp_watermark_profile': { + category: 'checkpoint', + description: 'Watermark which was applied. ', + name: 'checkpoint.dlp_watermark_profile', + type: 'keyword', }, - 'nginx.access.method': { - category: 'nginx', - name: 'nginx.access.method', - type: 'alias', + 'checkpoint.dlp_repository_id': { + category: 'checkpoint', + description: 'ID of scanned repository. ', + name: 'checkpoint.dlp_repository_id', + type: 'keyword', }, - 'nginx.access.url': { - category: 'nginx', - name: 'nginx.access.url', - type: 'alias', + 'checkpoint.dlp_repository_root_path': { + category: 'checkpoint', + description: 'Repository path. ', + name: 'checkpoint.dlp_repository_root_path', + type: 'keyword', }, - 'nginx.access.http_version': { - category: 'nginx', - name: 'nginx.access.http_version', - type: 'alias', + 'checkpoint.scan_id': { + category: 'checkpoint', + description: 'Sequential number of scan. ', + name: 'checkpoint.scan_id', + type: 'keyword', }, - 'nginx.access.response_code': { - category: 'nginx', - name: 'nginx.access.response_code', - type: 'alias', + 'checkpoint.special_properties': { + category: 'checkpoint', + description: + "If this field is set to '1' the log will not be shown (in use for monitoring scan progress). ", + name: 'checkpoint.special_properties', + type: 'integer', }, - 'nginx.access.referrer': { - category: 'nginx', - name: 'nginx.access.referrer', - type: 'alias', + 'checkpoint.dlp_repository_total_size': { + category: 'checkpoint', + description: 'Repository size. ', + name: 'checkpoint.dlp_repository_total_size', + type: 'integer', }, - 'nginx.access.agent': { - category: 'nginx', - name: 'nginx.access.agent', - type: 'alias', + 'checkpoint.dlp_repository_files_number': { + category: 'checkpoint', + description: 'Number of files in repository. ', + name: 'checkpoint.dlp_repository_files_number', + type: 'integer', }, - 'nginx.access.user_agent.device': { - category: 'nginx', - name: 'nginx.access.user_agent.device', - type: 'alias', + 'checkpoint.dlp_repository_scanned_files_number': { + category: 'checkpoint', + description: 'Number of scanned files in repository. ', + name: 'checkpoint.dlp_repository_scanned_files_number', + type: 'integer', }, - 'nginx.access.user_agent.name': { - category: 'nginx', - name: 'nginx.access.user_agent.name', - type: 'alias', + 'checkpoint.duration': { + category: 'checkpoint', + description: 'Scan duration. ', + name: 'checkpoint.duration', + type: 'keyword', }, - 'nginx.access.user_agent.os': { - category: 'nginx', - name: 'nginx.access.user_agent.os', - type: 'alias', + 'checkpoint.dlp_fingerprint_long_status': { + category: 'checkpoint', + description: 'Scan status - long format. ', + name: 'checkpoint.dlp_fingerprint_long_status', + type: 'keyword', }, - 'nginx.access.user_agent.os_name': { - category: 'nginx', - name: 'nginx.access.user_agent.os_name', - type: 'alias', + 'checkpoint.dlp_fingerprint_short_status': { + category: 'checkpoint', + description: 'Scan status - short format. ', + name: 'checkpoint.dlp_fingerprint_short_status', + type: 'keyword', }, - 'nginx.access.user_agent.original': { - category: 'nginx', - name: 'nginx.access.user_agent.original', - type: 'alias', + 'checkpoint.dlp_repository_directories_number': { + category: 'checkpoint', + description: 'Number of directories in repository. ', + name: 'checkpoint.dlp_repository_directories_number', + type: 'integer', }, - 'nginx.access.geoip.continent_name': { - category: 'nginx', - name: 'nginx.access.geoip.continent_name', - type: 'alias', + 'checkpoint.dlp_repository_unreachable_directories_number': { + category: 'checkpoint', + description: 'Number of directories the Security Gateway was unable to read. ', + name: 'checkpoint.dlp_repository_unreachable_directories_number', + type: 'integer', }, - 'nginx.access.geoip.country_iso_code': { - category: 'nginx', - name: 'nginx.access.geoip.country_iso_code', - type: 'alias', + 'checkpoint.dlp_fingerprint_files_number': { + category: 'checkpoint', + description: 'Number of successfully scanned files in repository. ', + name: 'checkpoint.dlp_fingerprint_files_number', + type: 'integer', }, - 'nginx.access.geoip.location': { - category: 'nginx', - name: 'nginx.access.geoip.location', - type: 'alias', + 'checkpoint.dlp_repository_skipped_files_number': { + category: 'checkpoint', + description: 'Skipped number of files because of configuration. ', + name: 'checkpoint.dlp_repository_skipped_files_number', + type: 'integer', }, - 'nginx.access.geoip.region_name': { - category: 'nginx', - name: 'nginx.access.geoip.region_name', - type: 'alias', + 'checkpoint.dlp_repository_scanned_directories_number': { + category: 'checkpoint', + description: 'Amount of directories scanned. ', + name: 'checkpoint.dlp_repository_scanned_directories_number', + type: 'integer', }, - 'nginx.access.geoip.city_name': { - category: 'nginx', - name: 'nginx.access.geoip.city_name', - type: 'alias', + 'checkpoint.number_of_errors': { + category: 'checkpoint', + description: 'Number of files that were not scanned due to an error. ', + name: 'checkpoint.number_of_errors', + type: 'integer', }, - 'nginx.access.geoip.region_iso_code': { - category: 'nginx', - name: 'nginx.access.geoip.region_iso_code', - type: 'alias', + 'checkpoint.next_scheduled_scan_date': { + category: 'checkpoint', + description: 'Next scan scheduled time according to time object. ', + name: 'checkpoint.next_scheduled_scan_date', + type: 'keyword', }, - 'nginx.error.connection_id': { - category: 'nginx', - description: 'Connection identifier. ', - name: 'nginx.error.connection_id', - type: 'long', + 'checkpoint.dlp_repository_scanned_total_size': { + category: 'checkpoint', + description: 'Size scanned. ', + name: 'checkpoint.dlp_repository_scanned_total_size', + type: 'integer', }, - 'nginx.error.level': { - category: 'nginx', - name: 'nginx.error.level', - type: 'alias', + 'checkpoint.dlp_repository_reached_directories_number': { + category: 'checkpoint', + description: 'Number of scanned directories in repository. ', + name: 'checkpoint.dlp_repository_reached_directories_number', + type: 'integer', }, - 'nginx.error.pid': { - category: 'nginx', - name: 'nginx.error.pid', - type: 'alias', + 'checkpoint.dlp_repository_not_scanned_directories_percentage': { + category: 'checkpoint', + description: 'Percentage of directories the Security Gateway was unable to read. ', + name: 'checkpoint.dlp_repository_not_scanned_directories_percentage', + type: 'integer', }, - 'nginx.error.tid': { - category: 'nginx', - name: 'nginx.error.tid', - type: 'alias', + 'checkpoint.speed': { + category: 'checkpoint', + description: 'Current scan speed. ', + name: 'checkpoint.speed', + type: 'integer', }, - 'nginx.error.message': { - category: 'nginx', - name: 'nginx.error.message', - type: 'alias', + 'checkpoint.dlp_repository_scan_progress': { + category: 'checkpoint', + description: 'Scan percentage. ', + name: 'checkpoint.dlp_repository_scan_progress', + type: 'integer', }, - 'nginx.ingress_controller.remote_ip_list': { - category: 'nginx', - description: - 'An array of remote IP addresses. It is a list because it is common to include, besides the client IP address, IP addresses from headers like `X-Forwarded-For`. Real source IP is restored to `source.ip`. ', - name: 'nginx.ingress_controller.remote_ip_list', - type: 'array', + 'checkpoint.sub_policy_name': { + category: 'checkpoint', + description: 'Layer name. ', + name: 'checkpoint.sub_policy_name', + type: 'keyword', }, - 'nginx.ingress_controller.http.request.length': { - category: 'nginx', - description: 'The request length (including request line, header, and request body) ', - name: 'nginx.ingress_controller.http.request.length', - type: 'long', - format: 'bytes', + 'checkpoint.sub_policy_uid': { + category: 'checkpoint', + description: 'Layer uid. ', + name: 'checkpoint.sub_policy_uid', + type: 'keyword', }, - 'nginx.ingress_controller.http.request.time': { - category: 'nginx', - description: 'Time elapsed since the first bytes were read from the client ', - name: 'nginx.ingress_controller.http.request.time', - type: 'double', - format: 'duration', + 'checkpoint.fw_message': { + category: 'checkpoint', + description: 'Used for various firewall errors. ', + name: 'checkpoint.fw_message', + type: 'keyword', }, - 'nginx.ingress_controller.upstream.name': { - category: 'nginx', - description: 'The name of the upstream. ', - name: 'nginx.ingress_controller.upstream.name', + 'checkpoint.message': { + category: 'checkpoint', + description: 'ISP link has failed. ', + name: 'checkpoint.message', type: 'keyword', }, - 'nginx.ingress_controller.upstream.alternative_name': { - category: 'nginx', - description: 'The name of the alternative upstream. ', - name: 'nginx.ingress_controller.upstream.alternative_name', + 'checkpoint.isp_link': { + category: 'checkpoint', + description: 'Name of ISP link. ', + name: 'checkpoint.isp_link', type: 'keyword', }, - 'nginx.ingress_controller.upstream.response.length': { - category: 'nginx', - description: 'The length of the response obtained from the upstream server ', - name: 'nginx.ingress_controller.upstream.response.length', - type: 'long', - format: 'bytes', + 'checkpoint.fw_subproduct': { + category: 'checkpoint', + description: 'Can be vpn/non vpn. ', + name: 'checkpoint.fw_subproduct', + type: 'keyword', }, - 'nginx.ingress_controller.upstream.response.time': { - category: 'nginx', - description: - 'The time spent on receiving the response from the upstream server as seconds with millisecond resolution ', - name: 'nginx.ingress_controller.upstream.response.time', - type: 'double', - format: 'duration', + 'checkpoint.sctp_error': { + category: 'checkpoint', + description: 'Error information, what caused sctp to fail on out_of_state. ', + name: 'checkpoint.sctp_error', + type: 'keyword', }, - 'nginx.ingress_controller.upstream.response.status_code': { - category: 'nginx', - description: 'The status code of the response obtained from the upstream server ', - name: 'nginx.ingress_controller.upstream.response.status_code', - type: 'long', + 'checkpoint.chunk_type': { + category: 'checkpoint', + description: 'Chunck of the sctp stream. ', + name: 'checkpoint.chunk_type', + type: 'keyword', }, - 'nginx.ingress_controller.http.request.id': { - category: 'nginx', - description: 'The randomly generated ID of the request ', - name: 'nginx.ingress_controller.http.request.id', + 'checkpoint.sctp_association_state': { + category: 'checkpoint', + description: 'The bad state you were trying to update to. ', + name: 'checkpoint.sctp_association_state', type: 'keyword', }, - 'nginx.ingress_controller.upstream.ip': { - category: 'nginx', - description: - 'The IP address of the upstream server. If several servers were contacted during request processing, their addresses are separated by commas. ', - name: 'nginx.ingress_controller.upstream.ip', - type: 'ip', + 'checkpoint.tcp_packet_out_of_state': { + category: 'checkpoint', + description: 'State violation. ', + name: 'checkpoint.tcp_packet_out_of_state', + type: 'keyword', }, - 'nginx.ingress_controller.upstream.port': { - category: 'nginx', - description: 'The port of the upstream server. ', - name: 'nginx.ingress_controller.upstream.port', - type: 'long', + 'checkpoint.connectivity_level': { + category: 'checkpoint', + description: 'Log for a new connection in wire mode. ', + name: 'checkpoint.connectivity_level', + type: 'keyword', }, - 'nginx.ingress_controller.body_sent.bytes': { - category: 'nginx', - name: 'nginx.ingress_controller.body_sent.bytes', - type: 'alias', + 'checkpoint.ip_option': { + category: 'checkpoint', + description: 'IP option that was dropped. ', + name: 'checkpoint.ip_option', + type: 'integer', }, - 'nginx.ingress_controller.user_name': { - category: 'nginx', - name: 'nginx.ingress_controller.user_name', - type: 'alias', + 'checkpoint.tcp_state': { + category: 'checkpoint', + description: 'Log reinting a tcp state change. ', + name: 'checkpoint.tcp_state', + type: 'keyword', }, - 'nginx.ingress_controller.method': { - category: 'nginx', - name: 'nginx.ingress_controller.method', - type: 'alias', + 'checkpoint.expire_time': { + category: 'checkpoint', + description: 'Connection closing time. ', + name: 'checkpoint.expire_time', + type: 'keyword', }, - 'nginx.ingress_controller.url': { - category: 'nginx', - name: 'nginx.ingress_controller.url', - type: 'alias', + 'checkpoint.rpc_prog': { + category: 'checkpoint', + description: 'Log for new RPC state - prog values. ', + name: 'checkpoint.rpc_prog', + type: 'integer', }, - 'nginx.ingress_controller.http_version': { - category: 'nginx', - name: 'nginx.ingress_controller.http_version', - type: 'alias', + 'checkpoint.dce-rpc_interface_uuid': { + category: 'checkpoint', + description: 'Log for new RPC state - UUID values ', + name: 'checkpoint.dce-rpc_interface_uuid', + type: 'keyword', }, - 'nginx.ingress_controller.response_code': { - category: 'nginx', - name: 'nginx.ingress_controller.response_code', - type: 'alias', + 'checkpoint.elapsed': { + category: 'checkpoint', + description: 'Time passed since start time. ', + name: 'checkpoint.elapsed', + type: 'keyword', }, - 'nginx.ingress_controller.referrer': { - category: 'nginx', - name: 'nginx.ingress_controller.referrer', - type: 'alias', + 'checkpoint.icmp': { + category: 'checkpoint', + description: 'Number of packets, received by the client. ', + name: 'checkpoint.icmp', + type: 'keyword', }, - 'nginx.ingress_controller.agent': { - category: 'nginx', - name: 'nginx.ingress_controller.agent', - type: 'alias', + 'checkpoint.capture_uuid': { + category: 'checkpoint', + description: 'UUID generated for the capture. Used when enabling the capture when logging. ', + name: 'checkpoint.capture_uuid', + type: 'keyword', }, - 'nginx.ingress_controller.user_agent.device': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.device', - type: 'alias', + 'checkpoint.diameter_app_ID': { + category: 'checkpoint', + description: 'The ID of diameter application. ', + name: 'checkpoint.diameter_app_ID', + type: 'integer', }, - 'nginx.ingress_controller.user_agent.name': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.name', - type: 'alias', + 'checkpoint.diameter_cmd_code': { + category: 'checkpoint', + description: 'Diameter not allowed application command id. ', + name: 'checkpoint.diameter_cmd_code', + type: 'integer', }, - 'nginx.ingress_controller.user_agent.os': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.os', - type: 'alias', + 'checkpoint.diameter_msg_type': { + category: 'checkpoint', + description: 'Diameter message type. ', + name: 'checkpoint.diameter_msg_type', + type: 'keyword', }, - 'nginx.ingress_controller.user_agent.os_name': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.os_name', - type: 'alias', + 'checkpoint.cp_message': { + category: 'checkpoint', + description: 'Used to log a general message. ', + name: 'checkpoint.cp_message', + type: 'integer', }, - 'nginx.ingress_controller.user_agent.original': { - category: 'nginx', - name: 'nginx.ingress_controller.user_agent.original', - type: 'alias', + 'checkpoint.log_delay': { + category: 'checkpoint', + description: 'Time left before deleting template. ', + name: 'checkpoint.log_delay', + type: 'integer', }, - 'nginx.ingress_controller.geoip.continent_name': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.continent_name', - type: 'alias', + 'checkpoint.attack_status': { + category: 'checkpoint', + description: 'In case of a malicious event on an endpoint computer, the status of the attack. ', + name: 'checkpoint.attack_status', + type: 'keyword', }, - 'nginx.ingress_controller.geoip.country_iso_code': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.country_iso_code', - type: 'alias', + 'checkpoint.impacted_files': { + category: 'checkpoint', + description: + 'In case of an infection on an endpoint computer, the list of files that the malware impacted. ', + name: 'checkpoint.impacted_files', + type: 'keyword', }, - 'nginx.ingress_controller.geoip.location': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.location', - type: 'alias', + 'checkpoint.remediated_files': { + category: 'checkpoint', + description: + 'In case of an infection and a successful cleaning of that infection, this is a list of remediated files on the computer. ', + name: 'checkpoint.remediated_files', + type: 'keyword', }, - 'nginx.ingress_controller.geoip.region_name': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.region_name', - type: 'alias', + 'checkpoint.triggered_by': { + category: 'checkpoint', + description: + 'The name of the mechanism that triggered the Software Blade to enforce a protection. ', + name: 'checkpoint.triggered_by', + type: 'keyword', }, - 'nginx.ingress_controller.geoip.city_name': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.city_name', - type: 'alias', + 'checkpoint.https_inspection_rule_id': { + category: 'checkpoint', + description: 'ID of the matched rule. ', + name: 'checkpoint.https_inspection_rule_id', + type: 'keyword', }, - 'nginx.ingress_controller.geoip.region_iso_code': { - category: 'nginx', - name: 'nginx.ingress_controller.geoip.region_iso_code', - type: 'alias', + 'checkpoint.https_inspection_rule_name': { + category: 'checkpoint', + description: 'Name of the matched rule. ', + name: 'checkpoint.https_inspection_rule_name', + type: 'keyword', }, - 'osquery.result.name': { - category: 'osquery', - description: 'The name of the query that generated this event. ', - name: 'osquery.result.name', + 'checkpoint.app_properties': { + category: 'checkpoint', + description: 'List of all found categories. ', + name: 'checkpoint.app_properties', type: 'keyword', }, - 'osquery.result.action': { - category: 'osquery', - description: - 'For incremental data, marks whether the entry was added or removed. It can be one of "added", "removed", or "snapshot". ', - name: 'osquery.result.action', + 'checkpoint.https_validation': { + category: 'checkpoint', + description: 'Precise error, describing HTTPS inspection failure. ', + name: 'checkpoint.https_validation', type: 'keyword', }, - 'osquery.result.host_identifier': { - category: 'osquery', - description: - 'The identifier for the host on which the osquery agent is running. Normally the hostname. ', - name: 'osquery.result.host_identifier', + 'checkpoint.https_inspection_action': { + category: 'checkpoint', + description: 'HTTPS inspection action (Inspect/Bypass/Error). ', + name: 'checkpoint.https_inspection_action', type: 'keyword', }, - 'osquery.result.unix_time': { - category: 'osquery', - description: - 'Unix timestamp of the event, in seconds since the epoch. Used for computing the `@timestamp` column. ', - name: 'osquery.result.unix_time', - type: 'long', + 'checkpoint.icap_service_id': { + category: 'checkpoint', + description: 'Service ID, can work with multiple servers, treated as services. ', + name: 'checkpoint.icap_service_id', + type: 'integer', }, - 'osquery.result.calendar_time': { - category: 'osquery', - description: 'String representation of the collection time, as formatted by osquery. ', - name: 'osquery.result.calendar_time', + 'checkpoint.icap_server_name': { + category: 'checkpoint', + description: 'Server name. ', + name: 'checkpoint.icap_server_name', type: 'keyword', }, - 'postgresql.log.timestamp': { - category: 'postgresql', - description: 'The timestamp from the log line. ', - name: 'postgresql.log.timestamp', + 'checkpoint.internal_error': { + category: 'checkpoint', + description: 'Internal error, for troubleshooting ', + name: 'checkpoint.internal_error', + type: 'keyword', }, - 'postgresql.log.core_id': { - category: 'postgresql', - description: 'Core id ', - name: 'postgresql.log.core_id', - type: 'long', + 'checkpoint.icap_more_info': { + category: 'checkpoint', + description: 'Free text for verdict. ', + name: 'checkpoint.icap_more_info', + type: 'integer', }, - 'postgresql.log.database': { - category: 'postgresql', - description: 'Name of database ', - example: 'mydb', - name: 'postgresql.log.database', + 'checkpoint.reply_status': { + category: 'checkpoint', + description: 'ICAP reply status code, e.g. 200 or 204. ', + name: 'checkpoint.reply_status', + type: 'integer', }, - 'postgresql.log.query': { - category: 'postgresql', - description: 'Query statement. ', - example: 'SELECT * FROM users;', - name: 'postgresql.log.query', + 'checkpoint.icap_server_service': { + category: 'checkpoint', + description: 'Service name, as given in the ICAP URI ', + name: 'checkpoint.icap_server_service', + type: 'keyword', }, - 'postgresql.log.query_step': { - category: 'postgresql', + 'checkpoint.mirror_and_decrypt_type': { + category: 'checkpoint', description: - 'Statement step when using extended query protocol (one of statement, parse, bind or execute) ', - example: 'parse', - name: 'postgresql.log.query_step', + 'Information about decrypt and forward. Possible values: Mirror only, Decrypt and mirror, Partial mirroring (HTTPS inspection Bypass). ', + name: 'checkpoint.mirror_and_decrypt_type', + type: 'keyword', }, - 'postgresql.log.query_name': { - category: 'postgresql', - description: - 'Name given to a query when using extended query protocol. If it is "", or not present, this field is ignored. ', - example: 'pdo_stmt_00000001', - name: 'postgresql.log.query_name', + 'checkpoint.interface_name': { + category: 'checkpoint', + description: 'Designated interface for mirror And decrypt. ', + name: 'checkpoint.interface_name', + type: 'keyword', }, - 'postgresql.log.error.code': { - category: 'postgresql', - description: 'Error code returned by Postgres (if any)', - name: 'postgresql.log.error.code', - type: 'long', + 'checkpoint.session_uid': { + category: 'checkpoint', + description: 'HTTP session-id. ', + name: 'checkpoint.session_uid', + type: 'keyword', }, - 'postgresql.log.timezone': { - category: 'postgresql', - name: 'postgresql.log.timezone', - type: 'alias', + 'checkpoint.broker_publisher': { + category: 'checkpoint', + description: 'IP address of the broker publisher who shared the session information. ', + name: 'checkpoint.broker_publisher', + type: 'ip', }, - 'postgresql.log.thread_id': { - category: 'postgresql', - name: 'postgresql.log.thread_id', - type: 'alias', + 'checkpoint.src_user_dn': { + category: 'checkpoint', + description: 'User distinguished name connected to source IP. ', + name: 'checkpoint.src_user_dn', + type: 'keyword', }, - 'postgresql.log.user': { - category: 'postgresql', - name: 'postgresql.log.user', - type: 'alias', + 'checkpoint.proxy_user_name': { + category: 'checkpoint', + description: 'User name connected to proxy IP. ', + name: 'checkpoint.proxy_user_name', + type: 'keyword', }, - 'postgresql.log.level': { - category: 'postgresql', - name: 'postgresql.log.level', - type: 'alias', + 'checkpoint.proxy_machine_name': { + category: 'checkpoint', + description: 'Machine name connected to proxy IP. ', + name: 'checkpoint.proxy_machine_name', + type: 'integer', }, - 'postgresql.log.message': { - category: 'postgresql', - name: 'postgresql.log.message', - type: 'alias', + 'checkpoint.proxy_user_dn': { + category: 'checkpoint', + description: 'User distinguished name connected to proxy IP. ', + name: 'checkpoint.proxy_user_dn', + type: 'keyword', }, - 'redis.log.role': { - category: 'redis', - description: - 'The role of the Redis instance. Can be one of `master`, `slave`, `child` (for RDF/AOF writing child), or `sentinel`. ', - name: 'redis.log.role', + 'checkpoint.query': { + category: 'checkpoint', + description: 'DNS query. ', + name: 'checkpoint.query', type: 'keyword', }, - 'redis.log.pid': { - category: 'redis', - name: 'redis.log.pid', - type: 'alias', + 'checkpoint.dns_query': { + category: 'checkpoint', + description: 'DNS query. ', + name: 'checkpoint.dns_query', + type: 'keyword', }, - 'redis.log.level': { - category: 'redis', - name: 'redis.log.level', - type: 'alias', + 'checkpoint.inspection_item': { + category: 'checkpoint', + description: 'Blade element performed inspection. ', + name: 'checkpoint.inspection_item', + type: 'keyword', }, - 'redis.log.message': { - category: 'redis', - name: 'redis.log.message', - type: 'alias', + 'checkpoint.inspection_category': { + category: 'checkpoint', + description: 'Inspection category: protocol anomaly, signature etc. ', + name: 'checkpoint.inspection_category', + type: 'keyword', }, - 'redis.slowlog.cmd': { - category: 'redis', - description: 'The command executed. ', - name: 'redis.slowlog.cmd', + 'checkpoint.inspection_profile': { + category: 'checkpoint', + description: 'Profile which the activated protection belongs to. ', + name: 'checkpoint.inspection_profile', type: 'keyword', }, - 'redis.slowlog.duration.us': { - category: 'redis', - description: 'How long it took to execute the command in microseconds. ', - name: 'redis.slowlog.duration.us', - type: 'long', + 'checkpoint.summary': { + category: 'checkpoint', + description: 'Summary message of a non-compliant DNS traffic drops or detects. ', + name: 'checkpoint.summary', + type: 'keyword', }, - 'redis.slowlog.id': { - category: 'redis', - description: 'The ID of the query. ', - name: 'redis.slowlog.id', - type: 'long', + 'checkpoint.question_rdata': { + category: 'checkpoint', + description: 'List of question records domains. ', + name: 'checkpoint.question_rdata', + type: 'keyword', }, - 'redis.slowlog.key': { - category: 'redis', - description: 'The key on which the command was executed. ', - name: 'redis.slowlog.key', + 'checkpoint.answer_rdata': { + category: 'checkpoint', + description: 'List of answer resource records to the questioned domains. ', + name: 'checkpoint.answer_rdata', type: 'keyword', }, - 'redis.slowlog.args': { - category: 'redis', - description: 'The arguments with which the command was called. ', - name: 'redis.slowlog.args', + 'checkpoint.authority_rdata': { + category: 'checkpoint', + description: 'List of authoritative servers. ', + name: 'checkpoint.authority_rdata', type: 'keyword', }, - 'santa.action': { - category: 'santa', - description: 'Action', - example: 'EXEC', - name: 'santa.action', + 'checkpoint.additional_rdata': { + category: 'checkpoint', + description: 'List of additional resource records. ', + name: 'checkpoint.additional_rdata', type: 'keyword', }, - 'santa.decision': { - category: 'santa', - description: 'Decision that santad took.', - example: 'ALLOW', - name: 'santa.decision', + 'checkpoint.files_names': { + category: 'checkpoint', + description: 'List of files requested by FTP. ', + name: 'checkpoint.files_names', type: 'keyword', }, - 'santa.reason': { - category: 'santa', - description: 'Reason for the decsision.', - example: 'CERT', - name: 'santa.reason', + 'checkpoint.ftp_user': { + category: 'checkpoint', + description: 'FTP username. ', + name: 'checkpoint.ftp_user', type: 'keyword', }, - 'santa.mode': { - category: 'santa', - description: 'Operating mode of Santa.', - example: 'M', - name: 'santa.mode', + 'checkpoint.mime_from': { + category: 'checkpoint', + description: "Sender's address. ", + name: 'checkpoint.mime_from', type: 'keyword', }, - 'santa.disk.volume': { - category: 'santa', - description: 'The volume name.', - name: 'santa.disk.volume', + 'checkpoint.mime_to': { + category: 'checkpoint', + description: 'List of receiver address. ', + name: 'checkpoint.mime_to', + type: 'keyword', }, - 'santa.disk.bus': { - category: 'santa', - description: 'The disk bus protocol.', - name: 'santa.disk.bus', + 'checkpoint.bcc': { + category: 'checkpoint', + description: 'List of BCC addresses. ', + name: 'checkpoint.bcc', + type: 'keyword', }, - 'santa.disk.serial': { - category: 'santa', - description: 'The disk serial number.', - name: 'santa.disk.serial', + 'checkpoint.content_type': { + category: 'checkpoint', + description: + 'Mail content type. Possible values: application/msword, text/html, image/gif etc. ', + name: 'checkpoint.content_type', + type: 'keyword', }, - 'santa.disk.bsdname': { - category: 'santa', - description: 'The disk BSD name.', - example: 'disk1s3', - name: 'santa.disk.bsdname', + 'checkpoint.user_agent': { + category: 'checkpoint', + description: 'String identifying requesting software user agent. ', + name: 'checkpoint.user_agent', + type: 'keyword', }, - 'santa.disk.model': { - category: 'santa', - description: 'The disk model.', - example: 'APPLE SSD SM0512L', - name: 'santa.disk.model', + 'checkpoint.referrer': { + category: 'checkpoint', + description: 'Referrer HTTP request header, previous web page address. ', + name: 'checkpoint.referrer', + type: 'keyword', }, - 'santa.disk.fs': { - category: 'santa', - description: 'The disk volume kind (filesystem type).', - example: 'apfs', - name: 'santa.disk.fs', + 'checkpoint.http_location': { + category: 'checkpoint', + description: 'Response header, indicates the URL to redirect a page to. ', + name: 'checkpoint.http_location', + type: 'keyword', }, - 'santa.disk.mount': { - category: 'santa', - description: 'The disk volume path.', - name: 'santa.disk.mount', + 'checkpoint.content_disposition': { + category: 'checkpoint', + description: 'Indicates how the content is expected to be displayed inline in the browser. ', + name: 'checkpoint.content_disposition', + type: 'keyword', }, - 'santa.certificate.common_name': { - category: 'santa', - description: 'Common name from code signing certificate.', - name: 'santa.certificate.common_name', + 'checkpoint.via': { + category: 'checkpoint', + description: + 'Via header is added by proxies for tracking purposes to avoid sending reqests in loop. ', + name: 'checkpoint.via', type: 'keyword', }, - 'santa.certificate.sha256': { - category: 'santa', - description: 'SHA256 hash of code signing certificate.', - name: 'santa.certificate.sha256', + 'checkpoint.http_server': { + category: 'checkpoint', + description: + 'Server HTTP header value, contains information about the software used by the origin server, which handles the request. ', + name: 'checkpoint.http_server', type: 'keyword', }, - 'system.auth.timestamp': { - category: 'system', - name: 'system.auth.timestamp', - type: 'alias', + 'checkpoint.content_length': { + category: 'checkpoint', + description: 'Indicates the size of the entity-body of the HTTP header. ', + name: 'checkpoint.content_length', + type: 'keyword', }, - 'system.auth.hostname': { - category: 'system', - name: 'system.auth.hostname', - type: 'alias', + 'checkpoint.authorization': { + category: 'checkpoint', + description: 'Authorization HTTP header value. ', + name: 'checkpoint.authorization', + type: 'keyword', }, - 'system.auth.program': { - category: 'system', - name: 'system.auth.program', - type: 'alias', + 'checkpoint.http_host': { + category: 'checkpoint', + description: 'Domain name of the server that the HTTP request is sent to. ', + name: 'checkpoint.http_host', + type: 'keyword', }, - 'system.auth.pid': { - category: 'system', - name: 'system.auth.pid', - type: 'alias', + 'checkpoint.inspection_settings_log': { + category: 'checkpoint', + description: 'Indicats that the log was released by inspection settings. ', + name: 'checkpoint.inspection_settings_log', + type: 'keyword', }, - 'system.auth.message': { - category: 'system', - name: 'system.auth.message', - type: 'alias', + 'checkpoint.cvpn_resource': { + category: 'checkpoint', + description: 'Mobile Access application. ', + name: 'checkpoint.cvpn_resource', + type: 'keyword', }, - 'system.auth.user': { - category: 'system', - name: 'system.auth.user', - type: 'alias', + 'checkpoint.cvpn_category': { + category: 'checkpoint', + description: 'Mobile Access application type. ', + name: 'checkpoint.cvpn_category', + type: 'keyword', }, - 'system.auth.ssh.method': { - category: 'system', - description: 'The SSH authentication method. Can be one of "password" or "publickey". ', - name: 'system.auth.ssh.method', + 'checkpoint.url': { + category: 'checkpoint', + description: 'Translated URL. ', + name: 'checkpoint.url', + type: 'keyword', }, - 'system.auth.ssh.signature': { - category: 'system', - description: 'The signature of the client public key. ', - name: 'system.auth.ssh.signature', + 'checkpoint.reject_id': { + category: 'checkpoint', + description: + 'A reject ID that corresponds to the one presented in the Mobile Access error page. ', + name: 'checkpoint.reject_id', + type: 'keyword', }, - 'system.auth.ssh.dropped_ip': { - category: 'system', - description: 'The client IP from SSH connections that are open and immediately dropped. ', - name: 'system.auth.ssh.dropped_ip', - type: 'ip', + 'checkpoint.fs-proto': { + category: 'checkpoint', + description: 'The file share protocol used in mobile acess file share application. ', + name: 'checkpoint.fs-proto', + type: 'keyword', }, - 'system.auth.ssh.event': { - category: 'system', - description: 'The SSH event as found in the logs (Accepted, Invalid, Failed, etc.) ', - example: 'Accepted', - name: 'system.auth.ssh.event', + 'checkpoint.app_package': { + category: 'checkpoint', + description: 'Unique identifier of the application on the protected mobile device. ', + name: 'checkpoint.app_package', + type: 'keyword', }, - 'system.auth.ssh.ip': { - category: 'system', - name: 'system.auth.ssh.ip', - type: 'alias', + 'checkpoint.appi_name': { + category: 'checkpoint', + description: 'Name of application downloaded on the protected mobile device. ', + name: 'checkpoint.appi_name', + type: 'keyword', }, - 'system.auth.ssh.port': { - category: 'system', - name: 'system.auth.ssh.port', - type: 'alias', + 'checkpoint.app_repackaged': { + category: 'checkpoint', + description: + 'Indicates whether the original application was repackage not by the official developer. ', + name: 'checkpoint.app_repackaged', + type: 'keyword', }, - 'system.auth.ssh.geoip.continent_name': { - category: 'system', - name: 'system.auth.ssh.geoip.continent_name', - type: 'alias', + 'checkpoint.app_sid_id': { + category: 'checkpoint', + description: 'Unique SHA identifier of a mobile application. ', + name: 'checkpoint.app_sid_id', + type: 'keyword', }, - 'system.auth.ssh.geoip.country_iso_code': { - category: 'system', - name: 'system.auth.ssh.geoip.country_iso_code', - type: 'alias', + 'checkpoint.app_version': { + category: 'checkpoint', + description: 'Version of the application downloaded on the protected mobile device. ', + name: 'checkpoint.app_version', + type: 'keyword', }, - 'system.auth.ssh.geoip.location': { - category: 'system', - name: 'system.auth.ssh.geoip.location', - type: 'alias', + 'checkpoint.developer_certificate_name': { + category: 'checkpoint', + description: + "Name of the developer's certificate that was used to sign the mobile application. ", + name: 'checkpoint.developer_certificate_name', + type: 'keyword', }, - 'system.auth.ssh.geoip.region_name': { - category: 'system', - name: 'system.auth.ssh.geoip.region_name', - type: 'alias', + 'checkpoint.email_message_id': { + category: 'checkpoint', + description: 'Email session id (uniqe ID of the mail). ', + name: 'checkpoint.email_message_id', + type: 'keyword', }, - 'system.auth.ssh.geoip.city_name': { - category: 'system', - name: 'system.auth.ssh.geoip.city_name', - type: 'alias', + 'checkpoint.email_queue_id': { + category: 'checkpoint', + description: 'Postfix email queue id. ', + name: 'checkpoint.email_queue_id', + type: 'keyword', }, - 'system.auth.ssh.geoip.region_iso_code': { - category: 'system', - name: 'system.auth.ssh.geoip.region_iso_code', - type: 'alias', + 'checkpoint.email_queue_name': { + category: 'checkpoint', + description: 'Postfix email queue name. ', + name: 'checkpoint.email_queue_name', + type: 'keyword', }, - 'system.auth.sudo.error': { - category: 'system', - description: 'The error message in case the sudo command failed. ', - example: 'user NOT in sudoers', - name: 'system.auth.sudo.error', + 'checkpoint.file_name': { + category: 'checkpoint', + description: 'Malicious file name. ', + name: 'checkpoint.file_name', + type: 'keyword', }, - 'system.auth.sudo.tty': { - category: 'system', - description: 'The TTY where the sudo command is executed. ', - name: 'system.auth.sudo.tty', + 'checkpoint.failure_reason': { + category: 'checkpoint', + description: 'MTA failure description. ', + name: 'checkpoint.failure_reason', + type: 'keyword', }, - 'system.auth.sudo.pwd': { - category: 'system', - description: 'The current directory where the sudo command is executed. ', - name: 'system.auth.sudo.pwd', + 'checkpoint.email_headers': { + category: 'checkpoint', + description: 'String containing all the email headers. ', + name: 'checkpoint.email_headers', + type: 'keyword', }, - 'system.auth.sudo.user': { - category: 'system', - description: 'The target user to which the sudo command is switching. ', - example: 'root', - name: 'system.auth.sudo.user', + 'checkpoint.arrival_time': { + category: 'checkpoint', + description: 'Email arrival timestamp. ', + name: 'checkpoint.arrival_time', + type: 'keyword', }, - 'system.auth.sudo.command': { - category: 'system', - description: 'The command executed via sudo. ', - name: 'system.auth.sudo.command', + 'checkpoint.email_status': { + category: 'checkpoint', + description: + "Describes the email's state. Possible options: delivered, deferred, skipped, bounced, hold, new, scan_started, scan_ended ", + name: 'checkpoint.email_status', + type: 'keyword', }, - 'system.auth.useradd.home': { - category: 'system', - description: 'The home folder for the new user.', - name: 'system.auth.useradd.home', + 'checkpoint.status_update': { + category: 'checkpoint', + description: 'Last time log was updated. ', + name: 'checkpoint.status_update', + type: 'keyword', }, - 'system.auth.useradd.shell': { - category: 'system', - description: 'The default shell for the new user.', - name: 'system.auth.useradd.shell', + 'checkpoint.delivery_time': { + category: 'checkpoint', + description: 'Timestamp of when email was delivered (MTA finished handling the email. ', + name: 'checkpoint.delivery_time', + type: 'keyword', }, - 'system.auth.useradd.name': { - category: 'system', - name: 'system.auth.useradd.name', - type: 'alias', + 'checkpoint.links_num': { + category: 'checkpoint', + description: 'Number of links in the mail. ', + name: 'checkpoint.links_num', + type: 'integer', }, - 'system.auth.useradd.uid': { - category: 'system', - name: 'system.auth.useradd.uid', - type: 'alias', + 'checkpoint.attachments_num': { + category: 'checkpoint', + description: 'Number of attachments in the mail. ', + name: 'checkpoint.attachments_num', + type: 'integer', }, - 'system.auth.useradd.gid': { - category: 'system', - name: 'system.auth.useradd.gid', - type: 'alias', + 'checkpoint.email_content': { + category: 'checkpoint', + description: + 'Mail contents. Possible options: attachments/links & attachments/links/text only. ', + name: 'checkpoint.email_content', + type: 'keyword', }, - 'system.auth.groupadd.name': { - category: 'system', - name: 'system.auth.groupadd.name', - type: 'alias', + 'checkpoint.allocated_ports': { + category: 'checkpoint', + description: 'Amount of allocated ports. ', + name: 'checkpoint.allocated_ports', + type: 'integer', }, - 'system.auth.groupadd.gid': { - category: 'system', - name: 'system.auth.groupadd.gid', - type: 'alias', + 'checkpoint.capacity': { + category: 'checkpoint', + description: 'Capacity of the ports. ', + name: 'checkpoint.capacity', + type: 'integer', }, - 'system.syslog.timestamp': { - category: 'system', - name: 'system.syslog.timestamp', - type: 'alias', + 'checkpoint.ports_usage': { + category: 'checkpoint', + description: 'Percentage of allocated ports. ', + name: 'checkpoint.ports_usage', + type: 'integer', }, - 'system.syslog.hostname': { - category: 'system', - name: 'system.syslog.hostname', - type: 'alias', + 'checkpoint.nat_exhausted_pool': { + category: 'checkpoint', + description: '4-tuple of an exhausted pool. ', + name: 'checkpoint.nat_exhausted_pool', + type: 'keyword', }, - 'system.syslog.program': { - category: 'system', - name: 'system.syslog.program', - type: 'alias', + 'checkpoint.nat_rulenum': { + category: 'checkpoint', + description: 'NAT rulebase first matched rule. ', + name: 'checkpoint.nat_rulenum', + type: 'integer', }, - 'system.syslog.pid': { - category: 'system', - name: 'system.syslog.pid', - type: 'alias', + 'checkpoint.nat_addtnl_rulenum': { + category: 'checkpoint', + description: + 'When matching 2 automatic rules , second rule match will be shown otherwise field will be 0. ', + name: 'checkpoint.nat_addtnl_rulenum', + type: 'integer', }, - 'system.syslog.message': { - category: 'system', - name: 'system.syslog.message', - type: 'alias', + 'checkpoint.message_info': { + category: 'checkpoint', + description: 'Used for information messages, for example:NAT connection has ended. ', + name: 'checkpoint.message_info', + type: 'keyword', }, - 'traefik.access.user_identifier': { - category: 'traefik', - description: 'Is the RFC 1413 identity of the client ', - name: 'traefik.access.user_identifier', + 'checkpoint.nat46': { + category: 'checkpoint', + description: 'NAT 46 status, in most cases "enabled". ', + name: 'checkpoint.nat46', type: 'keyword', }, - 'traefik.access.request_count': { - category: 'traefik', - description: 'The number of requests ', - name: 'traefik.access.request_count', - type: 'long', + 'checkpoint.end_time': { + category: 'checkpoint', + description: 'TCP connection end time. ', + name: 'checkpoint.end_time', + type: 'keyword', }, - 'traefik.access.frontend_name': { - category: 'traefik', - description: 'The name of the frontend used ', - name: 'traefik.access.frontend_name', + 'checkpoint.tcp_end_reason': { + category: 'checkpoint', + description: 'Reason for TCP connection closure. ', + name: 'checkpoint.tcp_end_reason', type: 'keyword', }, - 'traefik.access.backend_url': { - category: 'traefik', - description: 'The url of the backend where request is forwarded', - name: 'traefik.access.backend_url', + 'checkpoint.cgnet': { + category: 'checkpoint', + description: 'Describes NAT allocation for specific subscriber. ', + name: 'checkpoint.cgnet', type: 'keyword', }, - 'traefik.access.body_sent.bytes': { - category: 'traefik', - name: 'traefik.access.body_sent.bytes', - type: 'alias', + 'checkpoint.subscriber': { + category: 'checkpoint', + description: 'Source IP before CGNAT. ', + name: 'checkpoint.subscriber', + type: 'ip', + }, + 'checkpoint.hide_ip': { + category: 'checkpoint', + description: 'Source IP which will be used after CGNAT. ', + name: 'checkpoint.hide_ip', + type: 'ip', + }, + 'checkpoint.int_start': { + category: 'checkpoint', + description: 'Subscriber start int which will be used for NAT. ', + name: 'checkpoint.int_start', + type: 'integer', }, - 'traefik.access.remote_ip': { - category: 'traefik', - name: 'traefik.access.remote_ip', - type: 'alias', + 'checkpoint.int_end': { + category: 'checkpoint', + description: 'Subscriber end int which will be used for NAT. ', + name: 'checkpoint.int_end', + type: 'integer', }, - 'traefik.access.user_name': { - category: 'traefik', - name: 'traefik.access.user_name', - type: 'alias', + 'checkpoint.packet_amount': { + category: 'checkpoint', + description: 'Amount of packets dropped. ', + name: 'checkpoint.packet_amount', + type: 'integer', }, - 'traefik.access.method': { - category: 'traefik', - name: 'traefik.access.method', - type: 'alias', + 'checkpoint.monitor_reason': { + category: 'checkpoint', + description: 'Aggregated logs of monitored packets. ', + name: 'checkpoint.monitor_reason', + type: 'keyword', }, - 'traefik.access.url': { - category: 'traefik', - name: 'traefik.access.url', - type: 'alias', + 'checkpoint.drops_amount': { + category: 'checkpoint', + description: 'Amount of multicast packets dropped. ', + name: 'checkpoint.drops_amount', + type: 'integer', }, - 'traefik.access.http_version': { - category: 'traefik', - name: 'traefik.access.http_version', - type: 'alias', + 'checkpoint.securexl_message': { + category: 'checkpoint', + description: + 'Two options for a SecureXL message: 1. Missed accounting records after heavy load on logging system. 2. FW log message regarding a packet drop. ', + name: 'checkpoint.securexl_message', + type: 'keyword', }, - 'traefik.access.response_code': { - category: 'traefik', - name: 'traefik.access.response_code', - type: 'alias', + 'checkpoint.conns_amount': { + category: 'checkpoint', + description: 'Connections amount of aggregated log info. ', + name: 'checkpoint.conns_amount', + type: 'integer', }, - 'traefik.access.referrer': { - category: 'traefik', - name: 'traefik.access.referrer', - type: 'alias', + 'checkpoint.scope': { + category: 'checkpoint', + description: 'IP related to the attack. ', + name: 'checkpoint.scope', + type: 'keyword', }, - 'traefik.access.agent': { - category: 'traefik', - name: 'traefik.access.agent', - type: 'alias', + 'checkpoint.analyzed_on': { + category: 'checkpoint', + description: 'Check Point ThreatCloud / emulator name. ', + name: 'checkpoint.analyzed_on', + type: 'keyword', }, - 'traefik.access.user_agent.device': { - category: 'traefik', - name: 'traefik.access.user_agent.device', - type: 'alias', + 'checkpoint.detected_on': { + category: 'checkpoint', + description: 'System and applications version the file was emulated on. ', + name: 'checkpoint.detected_on', + type: 'keyword', }, - 'traefik.access.user_agent.name': { - category: 'traefik', - name: 'traefik.access.user_agent.name', - type: 'alias', + 'checkpoint.dropped_file_name': { + category: 'checkpoint', + description: 'List of names dropped from the original file. ', + name: 'checkpoint.dropped_file_name', + type: 'keyword', }, - 'traefik.access.user_agent.os': { - category: 'traefik', - name: 'traefik.access.user_agent.os', - type: 'alias', + 'checkpoint.dropped_file_type': { + category: 'checkpoint', + description: 'List of file types dropped from the original file. ', + name: 'checkpoint.dropped_file_type', + type: 'keyword', }, - 'traefik.access.user_agent.os_name': { - category: 'traefik', - name: 'traefik.access.user_agent.os_name', - type: 'alias', + 'checkpoint.dropped_file_hash': { + category: 'checkpoint', + description: 'List of file hashes dropped from the original file. ', + name: 'checkpoint.dropped_file_hash', + type: 'keyword', }, - 'traefik.access.user_agent.original': { - category: 'traefik', - name: 'traefik.access.user_agent.original', - type: 'alias', + 'checkpoint.dropped_file_verdict': { + category: 'checkpoint', + description: 'List of file verdics dropped from the original file. ', + name: 'checkpoint.dropped_file_verdict', + type: 'keyword', }, - 'traefik.access.geoip.continent_name': { - category: 'traefik', - name: 'traefik.access.geoip.continent_name', - type: 'alias', + 'checkpoint.emulated_on': { + category: 'checkpoint', + description: 'Images the files were emulated on. ', + name: 'checkpoint.emulated_on', + type: 'keyword', }, - 'traefik.access.geoip.country_iso_code': { - category: 'traefik', - name: 'traefik.access.geoip.country_iso_code', - type: 'alias', + 'checkpoint.extracted_file_type': { + category: 'checkpoint', + description: 'Types of extracted files in case of an archive. ', + name: 'checkpoint.extracted_file_type', + type: 'keyword', }, - 'traefik.access.geoip.location': { - category: 'traefik', - name: 'traefik.access.geoip.location', - type: 'alias', + 'checkpoint.extracted_file_names': { + category: 'checkpoint', + description: 'Names of extracted files in case of an archive. ', + name: 'checkpoint.extracted_file_names', + type: 'keyword', }, - 'traefik.access.geoip.region_name': { - category: 'traefik', - name: 'traefik.access.geoip.region_name', - type: 'alias', + 'checkpoint.extracted_file_hash': { + category: 'checkpoint', + description: 'Archive hash in case of extracted files. ', + name: 'checkpoint.extracted_file_hash', + type: 'keyword', }, - 'traefik.access.geoip.city_name': { - category: 'traefik', - name: 'traefik.access.geoip.city_name', - type: 'alias', + 'checkpoint.extracted_file_verdict': { + category: 'checkpoint', + description: 'Verdict of extracted files in case of an archive. ', + name: 'checkpoint.extracted_file_verdict', + type: 'keyword', }, - 'traefik.access.geoip.region_iso_code': { - category: 'traefik', - name: 'traefik.access.geoip.region_iso_code', - type: 'alias', + 'checkpoint.extracted_file_uid': { + category: 'checkpoint', + description: 'UID of extracted files in case of an archive. ', + name: 'checkpoint.extracted_file_uid', + type: 'keyword', }, - 'activemq.caller': { - category: 'activemq', - description: 'Name of the caller issuing the logging request (class or resource). ', - name: 'activemq.caller', + 'checkpoint.mitre_initial_access': { + category: 'checkpoint', + description: 'The adversary is trying to break into your network. ', + name: 'checkpoint.mitre_initial_access', type: 'keyword', }, - 'activemq.thread': { - category: 'activemq', - description: 'Thread that generated the logging event. ', - name: 'activemq.thread', + 'checkpoint.mitre_execution': { + category: 'checkpoint', + description: 'The adversary is trying to run malicious code. ', + name: 'checkpoint.mitre_execution', type: 'keyword', }, - 'activemq.user': { - category: 'activemq', - description: 'User that generated the logging event. ', - name: 'activemq.user', + 'checkpoint.mitre_persistence': { + category: 'checkpoint', + description: 'The adversary is trying to maintain his foothold. ', + name: 'checkpoint.mitre_persistence', type: 'keyword', }, - 'activemq.audit': { - category: 'activemq', - description: 'Fields from ActiveMQ audit logs. ', - name: 'activemq.audit', - type: 'group', + 'checkpoint.mitre_privilege_escalation': { + category: 'checkpoint', + description: 'The adversary is trying to gain higher-level permissions. ', + name: 'checkpoint.mitre_privilege_escalation', + type: 'keyword', }, - 'activemq.log.stack_trace': { - category: 'activemq', - name: 'activemq.log.stack_trace', + 'checkpoint.mitre_defense_evasion': { + category: 'checkpoint', + description: 'The adversary is trying to avoid being detected. ', + name: 'checkpoint.mitre_defense_evasion', type: 'keyword', }, - 'aws.cloudtrail.event_version': { - category: 'aws', - description: 'The CloudTrail version of the log event format. ', - name: 'aws.cloudtrail.event_version', + 'checkpoint.mitre_credential_access': { + category: 'checkpoint', + description: 'The adversary is trying to steal account names and passwords. ', + name: 'checkpoint.mitre_credential_access', type: 'keyword', }, - 'aws.cloudtrail.user_identity.type': { - category: 'aws', - description: 'The type of the identity ', - name: 'aws.cloudtrail.user_identity.type', + 'checkpoint.mitre_discovery': { + category: 'checkpoint', + description: 'The adversary is trying to expose information about your environment. ', + name: 'checkpoint.mitre_discovery', type: 'keyword', }, - 'aws.cloudtrail.user_identity.arn': { - category: 'aws', - description: 'The Amazon Resource Name (ARN) of the principal that made the call.', - name: 'aws.cloudtrail.user_identity.arn', + 'checkpoint.mitre_lateral_movement': { + category: 'checkpoint', + description: 'The adversary is trying to explore your environment. ', + name: 'checkpoint.mitre_lateral_movement', type: 'keyword', }, - 'aws.cloudtrail.user_identity.access_key_id': { - category: 'aws', - description: 'The access key ID that was used to sign the request.', - name: 'aws.cloudtrail.user_identity.access_key_id', + 'checkpoint.mitre_collection': { + category: 'checkpoint', + description: 'The adversary is trying to collect data of interest to achieve his goal. ', + name: 'checkpoint.mitre_collection', type: 'keyword', }, - 'aws.cloudtrail.user_identity.session_context.mfa_authenticated': { - category: 'aws', + 'checkpoint.mitre_command_and_control': { + category: 'checkpoint', description: - 'The value is true if the root user or IAM user whose credentials were used for the request also was authenticated with an MFA device; otherwise, false.', - name: 'aws.cloudtrail.user_identity.session_context.mfa_authenticated', + 'The adversary is trying to communicate with compromised systems in order to control them. ', + name: 'checkpoint.mitre_command_and_control', type: 'keyword', }, - 'aws.cloudtrail.user_identity.session_context.creation_date': { - category: 'aws', - description: 'The date and time when the temporary security credentials were issued.', - name: 'aws.cloudtrail.user_identity.session_context.creation_date', - type: 'date', + 'checkpoint.mitre_exfiltration': { + category: 'checkpoint', + description: 'The adversary is trying to steal data. ', + name: 'checkpoint.mitre_exfiltration', + type: 'keyword', }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.type': { - category: 'aws', + 'checkpoint.mitre_impact': { + category: 'checkpoint', description: - 'The source of the temporary security credentials, such as Root, IAMUser, or Role.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.type', + 'The adversary is trying to manipulate, interrupt, or destroy your systems and data. ', + name: 'checkpoint.mitre_impact', type: 'keyword', }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.principal_id': { - category: 'aws', - description: 'The internal ID of the entity that was used to get credentials.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.principal_id', + 'checkpoint.parent_file_hash': { + category: 'checkpoint', + description: "Archive's hash in case of extracted files. ", + name: 'checkpoint.parent_file_hash', type: 'keyword', }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.arn': { - category: 'aws', - description: - 'The ARN of the source (account, IAM user, or role) that was used to get temporary security credentials.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.arn', + 'checkpoint.parent_file_name': { + category: 'checkpoint', + description: "Archive's name in case of extracted files. ", + name: 'checkpoint.parent_file_name', type: 'keyword', }, - 'aws.cloudtrail.user_identity.session_context.session_issuer.account_id': { - category: 'aws', - description: 'The account that owns the entity that was used to get credentials.', - name: 'aws.cloudtrail.user_identity.session_context.session_issuer.account_id', + 'checkpoint.parent_file_uid': { + category: 'checkpoint', + description: "Archive's UID in case of extracted files. ", + name: 'checkpoint.parent_file_uid', type: 'keyword', }, - 'aws.cloudtrail.user_identity.invoked_by': { - category: 'aws', - description: - 'The name of the AWS service that made the request, such as Amazon EC2 Auto Scaling or AWS Elastic Beanstalk.', - name: 'aws.cloudtrail.user_identity.invoked_by', + 'checkpoint.similiar_iocs': { + category: 'checkpoint', + description: 'Other IoCs similar to the ones found, related to the malicious file. ', + name: 'checkpoint.similiar_iocs', type: 'keyword', }, - 'aws.cloudtrail.error_code': { - category: 'aws', - description: 'The AWS service error if the request returns an error.', - name: 'aws.cloudtrail.error_code', + 'checkpoint.similar_hashes': { + category: 'checkpoint', + description: 'Hashes found similar to the malicious file. ', + name: 'checkpoint.similar_hashes', type: 'keyword', }, - 'aws.cloudtrail.error_message': { - category: 'aws', - description: 'If the request returns an error, the description of the error.', - name: 'aws.cloudtrail.error_message', + 'checkpoint.similar_strings': { + category: 'checkpoint', + description: 'Strings found similar to the malicious file. ', + name: 'checkpoint.similar_strings', type: 'keyword', }, - 'aws.cloudtrail.request_parameters': { - category: 'aws', - description: 'The parameters, if any, that were sent with the request.', - name: 'aws.cloudtrail.request_parameters', + 'checkpoint.similar_communication': { + category: 'checkpoint', + description: 'Network action found similar to the malicious file. ', + name: 'checkpoint.similar_communication', type: 'keyword', }, - 'aws.cloudtrail.response_elements': { - category: 'aws', - description: - 'The response element for actions that make changes (create, update, or delete actions).', - name: 'aws.cloudtrail.response_elements', + 'checkpoint.te_verdict_determined_by': { + category: 'checkpoint', + description: 'Emulators determined file verdict. ', + name: 'checkpoint.te_verdict_determined_by', type: 'keyword', }, - 'aws.cloudtrail.additional_eventdata': { - category: 'aws', - description: 'Additional data about the event that was not part of the request or response.', - name: 'aws.cloudtrail.additional_eventdata', + 'checkpoint.packet_capture_unique_id': { + category: 'checkpoint', + description: 'Identifier of the packet capture files. ', + name: 'checkpoint.packet_capture_unique_id', type: 'keyword', }, - 'aws.cloudtrail.request_id': { - category: 'aws', - description: - 'The value that identifies the request. The service being called generates this value.', - name: 'aws.cloudtrail.request_id', + 'checkpoint.total_attachments': { + category: 'checkpoint', + description: 'The number of attachments in an email. ', + name: 'checkpoint.total_attachments', + type: 'integer', + }, + 'checkpoint.additional_info': { + category: 'checkpoint', + description: 'ID of original file/mail which are sent by admin. ', + name: 'checkpoint.additional_info', type: 'keyword', }, - 'aws.cloudtrail.event_type': { - category: 'aws', - description: 'Identifies the type of event that generated the event record.', - name: 'aws.cloudtrail.event_type', + 'checkpoint.content_risk': { + category: 'checkpoint', + description: 'File risk. ', + name: 'checkpoint.content_risk', + type: 'integer', + }, + 'checkpoint.operation': { + category: 'checkpoint', + description: 'Operation made by Threat Extraction. ', + name: 'checkpoint.operation', type: 'keyword', }, - 'aws.cloudtrail.api_version': { - category: 'aws', - description: 'Identifies the API version associated with the AwsApiCall eventType value.', - name: 'aws.cloudtrail.api_version', + 'checkpoint.scrubbed_content': { + category: 'checkpoint', + description: 'Active content that was found. ', + name: 'checkpoint.scrubbed_content', type: 'keyword', }, - 'aws.cloudtrail.management_event': { - category: 'aws', - description: 'A Boolean value that identifies whether the event is a management event.', - name: 'aws.cloudtrail.management_event', + 'checkpoint.scrub_time': { + category: 'checkpoint', + description: 'Extraction process duration. ', + name: 'checkpoint.scrub_time', type: 'keyword', }, - 'aws.cloudtrail.read_only': { - category: 'aws', - description: 'Identifies whether this operation is a read-only operation.', - name: 'aws.cloudtrail.read_only', + 'checkpoint.scrub_download_time': { + category: 'checkpoint', + description: 'File download time from resource. ', + name: 'checkpoint.scrub_download_time', type: 'keyword', }, - 'aws.cloudtrail.resources.arn': { - category: 'aws', - description: 'Resource ARNs', - name: 'aws.cloudtrail.resources.arn', + 'checkpoint.scrub_total_time': { + category: 'checkpoint', + description: 'Threat extraction total file handling time. ', + name: 'checkpoint.scrub_total_time', type: 'keyword', }, - 'aws.cloudtrail.resources.account_id': { - category: 'aws', - description: 'Account ID of the resource owner', - name: 'aws.cloudtrail.resources.account_id', + 'checkpoint.scrub_activity': { + category: 'checkpoint', + description: 'The result of the extraction ', + name: 'checkpoint.scrub_activity', type: 'keyword', }, - 'aws.cloudtrail.resources.type': { - category: 'aws', - description: 'Resource type identifier in the format: AWS::aws-service-name::data-type-name', - name: 'aws.cloudtrail.resources.type', + 'checkpoint.watermark': { + category: 'checkpoint', + description: 'Reports whether watermark is added to the cleaned file. ', + name: 'checkpoint.watermark', type: 'keyword', }, - 'aws.cloudtrail.recipient_account_id': { - category: 'aws', - description: 'Represents the account ID that received this event.', - name: 'aws.cloudtrail.recipient_account_id', + 'checkpoint.source_object': { + category: 'checkpoint', + description: 'Matched object name on source column. ', + name: 'checkpoint.source_object', type: 'keyword', }, - 'aws.cloudtrail.service_event_details': { - category: 'aws', - description: 'Identifies the service event, including what triggered the event and the result.', - name: 'aws.cloudtrail.service_event_details', + 'checkpoint.destination_object': { + category: 'checkpoint', + description: 'Matched object name on destination column. ', + name: 'checkpoint.destination_object', type: 'keyword', }, - 'aws.cloudtrail.shared_event_id': { - category: 'aws', - description: - 'GUID generated by CloudTrail to uniquely identify CloudTrail events from the same AWS action that is sent to different AWS accounts.', - name: 'aws.cloudtrail.shared_event_id', + 'checkpoint.drop_reason': { + category: 'checkpoint', + description: 'Drop reason description. ', + name: 'checkpoint.drop_reason', type: 'keyword', }, - 'aws.cloudtrail.vpc_endpoint_id': { - category: 'aws', + 'checkpoint.hit': { + category: 'checkpoint', + description: 'Number of hits on a rule. ', + name: 'checkpoint.hit', + type: 'integer', + }, + 'checkpoint.rulebase_id': { + category: 'checkpoint', + description: 'Layer number. ', + name: 'checkpoint.rulebase_id', + type: 'integer', + }, + 'checkpoint.first_hit_time': { + category: 'checkpoint', + description: 'First hit time in current interval. ', + name: 'checkpoint.first_hit_time', + type: 'integer', + }, + 'checkpoint.last_hit_time': { + category: 'checkpoint', + description: 'Last hit time in current interval. ', + name: 'checkpoint.last_hit_time', + type: 'integer', + }, + 'checkpoint.rematch_info': { + category: 'checkpoint', description: - 'Identifies the VPC endpoint in which requests were made from a VPC to another AWS service, such as Amazon S3.', - name: 'aws.cloudtrail.vpc_endpoint_id', + 'Information sent when old connections cannot be matched during policy installation. ', + name: 'checkpoint.rematch_info', type: 'keyword', }, - 'aws.cloudtrail.console_login.additional_eventdata.mobile_version': { - category: 'aws', - description: 'Identifies whether ConsoleLogin was from mobile version', - name: 'aws.cloudtrail.console_login.additional_eventdata.mobile_version', - type: 'boolean', + 'checkpoint.last_rematch_time': { + category: 'checkpoint', + description: 'Connection rematched time. ', + name: 'checkpoint.last_rematch_time', + type: 'keyword', }, - 'aws.cloudtrail.console_login.additional_eventdata.login_to': { - category: 'aws', - description: 'URL for ConsoleLogin', - name: 'aws.cloudtrail.console_login.additional_eventdata.login_to', + 'checkpoint.action_reason': { + category: 'checkpoint', + description: 'Connection drop reason. ', + name: 'checkpoint.action_reason', + type: 'integer', + }, + 'checkpoint.action_reason_msg': { + category: 'checkpoint', + description: 'Connection drop reason message. ', + name: 'checkpoint.action_reason_msg', type: 'keyword', }, - 'aws.cloudtrail.console_login.additional_eventdata.mfa_used': { - category: 'aws', - description: 'Identifies whether multi factor authentication was used during ConsoleLogin', - name: 'aws.cloudtrail.console_login.additional_eventdata.mfa_used', - type: 'boolean', + 'checkpoint.c_bytes': { + category: 'checkpoint', + description: 'Boolean value indicates whether bytes sent from the client side are used. ', + name: 'checkpoint.c_bytes', + type: 'integer', + }, + 'checkpoint.context_num': { + category: 'checkpoint', + description: 'Serial number of the log for a specific connection. ', + name: 'checkpoint.context_num', + type: 'integer', }, - 'aws.cloudtrail.flattened.additional_eventdata': { - category: 'aws', - description: 'Additional data about the event that was not part of the request or response. ', - name: 'aws.cloudtrail.flattened.additional_eventdata', - type: 'flattened', + 'checkpoint.match_id': { + category: 'checkpoint', + description: 'Private key of the rule ', + name: 'checkpoint.match_id', + type: 'integer', }, - 'aws.cloudtrail.flattened.request_parameters': { - category: 'aws', - description: 'The parameters, if any, that were sent with the request.', - name: 'aws.cloudtrail.flattened.request_parameters', - type: 'flattened', + 'checkpoint.alert': { + category: 'checkpoint', + description: 'Alert level of matched rule (for connection logs). ', + name: 'checkpoint.alert', + type: 'keyword', }, - 'aws.cloudtrail.flattened.response_elements': { - category: 'aws', - description: - 'The response element for actions that make changes (create, update, or delete actions).', - name: 'aws.cloudtrail.flattened.response_elements', - type: 'flattened', + 'checkpoint.parent_rule': { + category: 'checkpoint', + description: 'Parent rule number, in case of inline layer. ', + name: 'checkpoint.parent_rule', + type: 'integer', }, - 'aws.cloudtrail.flattened.service_event_details': { - category: 'aws', - description: 'Identifies the service event, including what triggered the event and the result.', - name: 'aws.cloudtrail.flattened.service_event_details', - type: 'flattened', + 'checkpoint.match_fk': { + category: 'checkpoint', + description: 'Rule number. ', + name: 'checkpoint.match_fk', + type: 'integer', }, - 'aws.cloudwatch.message': { - category: 'aws', - description: 'CloudWatch log message. ', - name: 'aws.cloudwatch.message', - type: 'text', + 'checkpoint.dropped_outgoing': { + category: 'checkpoint', + description: 'Number of outgoing bytes dropped when using UP-limit feature. ', + name: 'checkpoint.dropped_outgoing', + type: 'integer', }, - 'aws.ec2.ip_address': { - category: 'aws', - description: 'The internet address of the requester. ', - name: 'aws.ec2.ip_address', - type: 'keyword', + 'checkpoint.dropped_incoming': { + category: 'checkpoint', + description: 'Number of incoming bytes dropped when using UP-limit feature. ', + name: 'checkpoint.dropped_incoming', + type: 'integer', }, - 'aws.elb.name': { - category: 'aws', - description: 'The name of the load balancer. ', - name: 'aws.elb.name', + 'checkpoint.media_type': { + category: 'checkpoint', + description: 'Media used (audio, video, etc.) ', + name: 'checkpoint.media_type', type: 'keyword', }, - 'aws.elb.type': { - category: 'aws', - description: 'The type of the load balancer for v2 Load Balancers. ', - name: 'aws.elb.type', + 'checkpoint.sip_reason': { + category: 'checkpoint', + description: "Explains why 'source_ip' isn't allowed to redirect (handover). ", + name: 'checkpoint.sip_reason', type: 'keyword', }, - 'aws.elb.target_group.arn': { - category: 'aws', - description: 'The ARN of the target group handling the request. ', - name: 'aws.elb.target_group.arn', + 'checkpoint.voip_method': { + category: 'checkpoint', + description: 'Registration request. ', + name: 'checkpoint.voip_method', type: 'keyword', }, - 'aws.elb.listener': { - category: 'aws', - description: 'The ELB listener that received the connection. ', - name: 'aws.elb.listener', + 'checkpoint.registered_ip-phones': { + category: 'checkpoint', + description: 'Registered IP-Phones. ', + name: 'checkpoint.registered_ip-phones', type: 'keyword', }, - 'aws.elb.protocol': { - category: 'aws', - description: 'The protocol of the load balancer (http or tcp). ', - name: 'aws.elb.protocol', + 'checkpoint.voip_reg_user_type': { + category: 'checkpoint', + description: 'Registered IP-Phone type. ', + name: 'checkpoint.voip_reg_user_type', type: 'keyword', }, - 'aws.elb.request_processing_time.sec': { - category: 'aws', - description: - 'The total time in seconds since the connection or request is received until it is sent to a registered backend. ', - name: 'aws.elb.request_processing_time.sec', - type: 'float', - }, - 'aws.elb.backend_processing_time.sec': { - category: 'aws', - description: - 'The total time in seconds since the connection is sent to the backend till the backend starts responding. ', - name: 'aws.elb.backend_processing_time.sec', - type: 'float', + 'checkpoint.voip_call_id': { + category: 'checkpoint', + description: 'Call-ID. ', + name: 'checkpoint.voip_call_id', + type: 'keyword', }, - 'aws.elb.response_processing_time.sec': { - category: 'aws', - description: - 'The total time in seconds since the response is received from the backend till it is sent to the client. ', - name: 'aws.elb.response_processing_time.sec', - type: 'float', + 'checkpoint.voip_reg_int': { + category: 'checkpoint', + description: 'Registration port. ', + name: 'checkpoint.voip_reg_int', + type: 'integer', }, - 'aws.elb.connection_time.ms': { - category: 'aws', - description: - 'The total time of the connection in milliseconds, since it is opened till it is closed. ', - name: 'aws.elb.connection_time.ms', - type: 'long', + 'checkpoint.voip_reg_ipp': { + category: 'checkpoint', + description: 'Registration IP protocol. ', + name: 'checkpoint.voip_reg_ipp', + type: 'integer', }, - 'aws.elb.tls_handshake_time.ms': { - category: 'aws', - description: - 'The total time for the TLS handshake to complete in milliseconds once the connection has been established. ', - name: 'aws.elb.tls_handshake_time.ms', - type: 'long', + 'checkpoint.voip_reg_period': { + category: 'checkpoint', + description: 'Registration period. ', + name: 'checkpoint.voip_reg_period', + type: 'integer', }, - 'aws.elb.backend.ip': { - category: 'aws', - description: 'The IP address of the backend processing this connection. ', - name: 'aws.elb.backend.ip', + 'checkpoint.src_phone_number': { + category: 'checkpoint', + description: 'Source IP-Phone. ', + name: 'checkpoint.src_phone_number', type: 'keyword', }, - 'aws.elb.backend.port': { - category: 'aws', - description: 'The port in the backend processing this connection. ', - name: 'aws.elb.backend.port', + 'checkpoint.voip_from_user_type': { + category: 'checkpoint', + description: 'Source IP-Phone type. ', + name: 'checkpoint.voip_from_user_type', type: 'keyword', }, - 'aws.elb.backend.http.response.status_code': { - category: 'aws', - description: - 'The status code from the backend (status code sent to the client from ELB is stored in `http.response.status_code` ', - name: 'aws.elb.backend.http.response.status_code', + 'checkpoint.voip_to_user_type': { + category: 'checkpoint', + description: 'Destination IP-Phone type. ', + name: 'checkpoint.voip_to_user_type', type: 'keyword', }, - 'aws.elb.ssl_cipher': { - category: 'aws', - description: 'The SSL cipher used in TLS/SSL connections. ', - name: 'aws.elb.ssl_cipher', + 'checkpoint.voip_call_dir': { + category: 'checkpoint', + description: 'Call direction: in/out. ', + name: 'checkpoint.voip_call_dir', type: 'keyword', }, - 'aws.elb.ssl_protocol': { - category: 'aws', - description: 'The SSL protocol used in TLS/SSL connections. ', - name: 'aws.elb.ssl_protocol', + 'checkpoint.voip_call_state': { + category: 'checkpoint', + description: 'Call state. Possible values: in/out. ', + name: 'checkpoint.voip_call_state', type: 'keyword', }, - 'aws.elb.chosen_cert.arn': { - category: 'aws', - description: - 'The ARN of the chosen certificate presented to the client in TLS/SSL connections. ', - name: 'aws.elb.chosen_cert.arn', + 'checkpoint.voip_call_term_time': { + category: 'checkpoint', + description: 'Call termination time stamp. ', + name: 'checkpoint.voip_call_term_time', type: 'keyword', }, - 'aws.elb.chosen_cert.serial': { - category: 'aws', - description: - 'The serial number of the chosen certificate presented to the client in TLS/SSL connections. ', - name: 'aws.elb.chosen_cert.serial', + 'checkpoint.voip_duration': { + category: 'checkpoint', + description: 'Call duration (seconds). ', + name: 'checkpoint.voip_duration', type: 'keyword', }, - 'aws.elb.incoming_tls_alert': { - category: 'aws', - description: - 'The integer value of TLS alerts received by the load balancer from the client, if present. ', - name: 'aws.elb.incoming_tls_alert', + 'checkpoint.voip_media_port': { + category: 'checkpoint', + description: 'Media int. ', + name: 'checkpoint.voip_media_port', type: 'keyword', }, - 'aws.elb.tls_named_group': { - category: 'aws', - description: 'The TLS named group. ', - name: 'aws.elb.tls_named_group', + 'checkpoint.voip_media_ipp': { + category: 'checkpoint', + description: 'Media IP protocol. ', + name: 'checkpoint.voip_media_ipp', type: 'keyword', }, - 'aws.elb.trace_id': { - category: 'aws', - description: 'The contents of the `X-Amzn-Trace-Id` header. ', - name: 'aws.elb.trace_id', + 'checkpoint.voip_est_codec': { + category: 'checkpoint', + description: 'Estimated codec. ', + name: 'checkpoint.voip_est_codec', type: 'keyword', }, - 'aws.elb.matched_rule_priority': { - category: 'aws', - description: 'The priority value of the rule that matched the request, if a rule matched. ', - name: 'aws.elb.matched_rule_priority', - type: 'keyword', + 'checkpoint.voip_exp': { + category: 'checkpoint', + description: 'Expiration. ', + name: 'checkpoint.voip_exp', + type: 'integer', }, - 'aws.elb.action_executed': { - category: 'aws', - description: - 'The action executed when processing the request (forward, fixed-response, authenticate...). It can contain several values. ', - name: 'aws.elb.action_executed', + 'checkpoint.voip_attach_sz': { + category: 'checkpoint', + description: 'Attachment size. ', + name: 'checkpoint.voip_attach_sz', + type: 'integer', + }, + 'checkpoint.voip_attach_action_info': { + category: 'checkpoint', + description: 'Attachment action Info. ', + name: 'checkpoint.voip_attach_action_info', type: 'keyword', }, - 'aws.elb.redirect_url': { - category: 'aws', - description: 'The URL used if a redirection action was executed. ', - name: 'aws.elb.redirect_url', + 'checkpoint.voip_media_codec': { + category: 'checkpoint', + description: 'Estimated codec. ', + name: 'checkpoint.voip_media_codec', type: 'keyword', }, - 'aws.elb.error.reason': { - category: 'aws', - description: 'The error reason if the executed action failed. ', - name: 'aws.elb.error.reason', + 'checkpoint.voip_reject_reason': { + category: 'checkpoint', + description: 'Reject reason. ', + name: 'checkpoint.voip_reject_reason', type: 'keyword', }, - 'aws.s3access.bucket_owner': { - category: 'aws', - description: 'The canonical user ID of the owner of the source bucket. ', - name: 'aws.s3access.bucket_owner', + 'checkpoint.voip_reason_info': { + category: 'checkpoint', + description: 'Information. ', + name: 'checkpoint.voip_reason_info', type: 'keyword', }, - 'aws.s3access.bucket': { - category: 'aws', - description: 'The name of the bucket that the request was processed against. ', - name: 'aws.s3access.bucket', + 'checkpoint.voip_config': { + category: 'checkpoint', + description: 'Configuration. ', + name: 'checkpoint.voip_config', type: 'keyword', }, - 'aws.s3access.remote_ip': { - category: 'aws', - description: 'The apparent internet address of the requester. ', - name: 'aws.s3access.remote_ip', + 'checkpoint.voip_reg_server': { + category: 'checkpoint', + description: 'Registrar server IP address. ', + name: 'checkpoint.voip_reg_server', type: 'ip', }, - 'aws.s3access.requester': { - category: 'aws', - description: 'The canonical user ID of the requester, or a - for unauthenticated requests. ', - name: 'aws.s3access.requester', + 'checkpoint.scv_user': { + category: 'checkpoint', + description: 'Username whose packets are dropped on SCV. ', + name: 'checkpoint.scv_user', type: 'keyword', }, - 'aws.s3access.request_id': { - category: 'aws', - description: 'A string generated by Amazon S3 to uniquely identify each request. ', - name: 'aws.s3access.request_id', + 'checkpoint.scv_message_info': { + category: 'checkpoint', + description: 'Drop reason. ', + name: 'checkpoint.scv_message_info', type: 'keyword', }, - 'aws.s3access.operation': { - category: 'aws', - description: - 'The operation listed here is declared as SOAP.operation, REST.HTTP_method.resource_type, WEBSITE.HTTP_method.resource_type, or BATCH.DELETE.OBJECT. ', - name: 'aws.s3access.operation', + 'checkpoint.ppp': { + category: 'checkpoint', + description: 'Authentication status. ', + name: 'checkpoint.ppp', type: 'keyword', }, - 'aws.s3access.key': { - category: 'aws', - description: - 'The "key" part of the request, URL encoded, or "-" if the operation does not take a key parameter. ', - name: 'aws.s3access.key', + 'checkpoint.scheme': { + category: 'checkpoint', + description: 'Describes the scheme used for the log. ', + name: 'checkpoint.scheme', type: 'keyword', }, - 'aws.s3access.request_uri': { - category: 'aws', - description: 'The Request-URI part of the HTTP request message. ', - name: 'aws.s3access.request_uri', + 'checkpoint.machine': { + category: 'checkpoint', + description: 'L2TP machine which triggered the log and the log refers to it. ', + name: 'checkpoint.machine', type: 'keyword', }, - 'aws.s3access.http_status': { - category: 'aws', - description: 'The numeric HTTP status code of the response. ', - name: 'aws.s3access.http_status', - type: 'long', - }, - 'aws.s3access.error_code': { - category: 'aws', - description: 'The Amazon S3 Error Code, or "-" if no error occurred. ', - name: 'aws.s3access.error_code', + 'checkpoint.vpn_feature_name': { + category: 'checkpoint', + description: 'L2TP /IKE / Link Selection. ', + name: 'checkpoint.vpn_feature_name', type: 'keyword', }, - 'aws.s3access.bytes_sent': { - category: 'aws', - description: - 'The number of response bytes sent, excluding HTTP protocol overhead, or "-" if zero. ', - name: 'aws.s3access.bytes_sent', - type: 'long', + 'checkpoint.reject_category': { + category: 'checkpoint', + description: 'Authentication failure reason. ', + name: 'checkpoint.reject_category', + type: 'keyword', }, - 'aws.s3access.object_size': { - category: 'aws', - description: 'The total size of the object in question. ', - name: 'aws.s3access.object_size', - type: 'long', + 'checkpoint.peer_ip_probing_status_update': { + category: 'checkpoint', + description: 'IP address response status. ', + name: 'checkpoint.peer_ip_probing_status_update', + type: 'keyword', }, - 'aws.s3access.total_time': { - category: 'aws', - description: - "The number of milliseconds the request was in flight from the server's perspective. ", - name: 'aws.s3access.total_time', - type: 'long', + 'checkpoint.peer_ip': { + category: 'checkpoint', + description: 'IP address which the client connects to. ', + name: 'checkpoint.peer_ip', + type: 'keyword', }, - 'aws.s3access.turn_around_time': { - category: 'aws', - description: 'The number of milliseconds that Amazon S3 spent processing your request. ', - name: 'aws.s3access.turn_around_time', - type: 'long', + 'checkpoint.link_probing_status_update': { + category: 'checkpoint', + description: 'IP address response status. ', + name: 'checkpoint.link_probing_status_update', + type: 'keyword', }, - 'aws.s3access.referrer': { - category: 'aws', - description: 'The value of the HTTP Referrer header, if present. ', - name: 'aws.s3access.referrer', + 'checkpoint.source_interface': { + category: 'checkpoint', + description: 'External Interface name for source interface or Null if not found. ', + name: 'checkpoint.source_interface', type: 'keyword', }, - 'aws.s3access.user_agent': { - category: 'aws', - description: 'The value of the HTTP User-Agent header. ', - name: 'aws.s3access.user_agent', + 'checkpoint.next_hop_ip': { + category: 'checkpoint', + description: 'Next hop IP address. ', + name: 'checkpoint.next_hop_ip', type: 'keyword', }, - 'aws.s3access.version_id': { - category: 'aws', - description: - 'The version ID in the request, or "-" if the operation does not take a versionId parameter. ', - name: 'aws.s3access.version_id', + 'checkpoint.srckeyid': { + category: 'checkpoint', + description: 'Initiator Spi ID. ', + name: 'checkpoint.srckeyid', type: 'keyword', }, - 'aws.s3access.host_id': { - category: 'aws', - description: 'The x-amz-id-2 or Amazon S3 extended request ID. ', - name: 'aws.s3access.host_id', + 'checkpoint.dstkeyid': { + category: 'checkpoint', + description: 'Responder Spi ID. ', + name: 'checkpoint.dstkeyid', type: 'keyword', }, - 'aws.s3access.signature_version': { - category: 'aws', - description: - 'The signature version, SigV2 or SigV4, that was used to authenticate the request or a - for unauthenticated requests. ', - name: 'aws.s3access.signature_version', + 'checkpoint.encryption_failure': { + category: 'checkpoint', + description: 'Message indicating why the encryption failed. ', + name: 'checkpoint.encryption_failure', type: 'keyword', }, - 'aws.s3access.cipher_suite': { - category: 'aws', - description: - 'The Secure Sockets Layer (SSL) cipher that was negotiated for HTTPS request or a - for HTTP. ', - name: 'aws.s3access.cipher_suite', + 'checkpoint.ike_ids': { + category: 'checkpoint', + description: 'All QM ids. ', + name: 'checkpoint.ike_ids', type: 'keyword', }, - 'aws.s3access.authentication_type': { - category: 'aws', - description: - 'The type of request authentication used, AuthHeader for authentication headers, QueryString for query string (pre-signed URL) or a - for unauthenticated requests. ', - name: 'aws.s3access.authentication_type', + 'checkpoint.community': { + category: 'checkpoint', + description: 'Community name for the IPSec key and the use of the IKEv. ', + name: 'checkpoint.community', type: 'keyword', }, - 'aws.s3access.host_header': { - category: 'aws', - description: 'The endpoint used to connect to Amazon S3. ', - name: 'aws.s3access.host_header', + 'checkpoint.ike': { + category: 'checkpoint', + description: 'IKEMode (PHASE1, PHASE2, etc..). ', + name: 'checkpoint.ike', type: 'keyword', }, - 'aws.s3access.tls_version': { - category: 'aws', - description: 'The Transport Layer Security (TLS) version negotiated by the client. ', - name: 'aws.s3access.tls_version', + 'checkpoint.cookieI': { + category: 'checkpoint', + description: 'Initiator cookie. ', + name: 'checkpoint.cookieI', type: 'keyword', }, - 'aws.vpcflow.version': { - category: 'aws', - description: - 'The VPC Flow Logs version. If you use the default format, the version is 2. If you specify a custom format, the version is 3. ', - name: 'aws.vpcflow.version', + 'checkpoint.cookieR': { + category: 'checkpoint', + description: 'Responder cookie. ', + name: 'checkpoint.cookieR', type: 'keyword', }, - 'aws.vpcflow.account_id': { - category: 'aws', - description: 'The AWS account ID for the flow log. ', - name: 'aws.vpcflow.account_id', + 'checkpoint.msgid': { + category: 'checkpoint', + description: 'Message ID. ', + name: 'checkpoint.msgid', type: 'keyword', }, - 'aws.vpcflow.interface_id': { - category: 'aws', - description: 'The ID of the network interface for which the traffic is recorded. ', - name: 'aws.vpcflow.interface_id', + 'checkpoint.methods': { + category: 'checkpoint', + description: 'IPSEc methods. ', + name: 'checkpoint.methods', type: 'keyword', }, - 'aws.vpcflow.action': { - category: 'aws', - description: 'The action that is associated with the traffic, ACCEPT or REJECT. ', - name: 'aws.vpcflow.action', + 'checkpoint.connection_uid': { + category: 'checkpoint', + description: 'Calculation of md5 of the IP and user name as UID. ', + name: 'checkpoint.connection_uid', type: 'keyword', }, - 'aws.vpcflow.log_status': { - category: 'aws', - description: 'The logging status of the flow log, OK, NODATA or SKIPDATA. ', - name: 'aws.vpcflow.log_status', + 'checkpoint.site_name': { + category: 'checkpoint', + description: 'Site name. ', + name: 'checkpoint.site_name', type: 'keyword', }, - 'aws.vpcflow.instance_id': { - category: 'aws', - description: - "The ID of the instance that's associated with network interface for which the traffic is recorded, if the instance is owned by you. ", - name: 'aws.vpcflow.instance_id', + 'checkpoint.esod_rule_name': { + category: 'checkpoint', + description: 'Unknown rule name. ', + name: 'checkpoint.esod_rule_name', type: 'keyword', }, - 'aws.vpcflow.pkt_srcaddr': { - category: 'aws', - description: 'The packet-level (original) source IP address of the traffic. ', - name: 'aws.vpcflow.pkt_srcaddr', - type: 'ip', + 'checkpoint.esod_rule_action': { + category: 'checkpoint', + description: 'Unknown rule action. ', + name: 'checkpoint.esod_rule_action', + type: 'keyword', }, - 'aws.vpcflow.pkt_dstaddr': { - category: 'aws', - description: 'The packet-level (original) destination IP address for the traffic. ', - name: 'aws.vpcflow.pkt_dstaddr', - type: 'ip', + 'checkpoint.esod_rule_type': { + category: 'checkpoint', + description: 'Unknown rule type. ', + name: 'checkpoint.esod_rule_type', + type: 'keyword', }, - 'aws.vpcflow.vpc_id': { - category: 'aws', - description: - 'The ID of the VPC that contains the network interface for which the traffic is recorded. ', - name: 'aws.vpcflow.vpc_id', + 'checkpoint.esod_noncompliance_reason': { + category: 'checkpoint', + description: 'Non-compliance reason. ', + name: 'checkpoint.esod_noncompliance_reason', type: 'keyword', }, - 'aws.vpcflow.subnet_id': { - category: 'aws', - description: - 'The ID of the subnet that contains the network interface for which the traffic is recorded. ', - name: 'aws.vpcflow.subnet_id', + 'checkpoint.esod_associated_policies': { + category: 'checkpoint', + description: 'Associated policies. ', + name: 'checkpoint.esod_associated_policies', type: 'keyword', }, - 'aws.vpcflow.tcp_flags': { - category: 'aws', - description: 'The bitmask value for the following TCP flags: 2=SYN,18=SYN-ACK,1=FIN,4=RST ', - name: 'aws.vpcflow.tcp_flags', + 'checkpoint.spyware_type': { + category: 'checkpoint', + description: 'Spyware type. ', + name: 'checkpoint.spyware_type', type: 'keyword', }, - 'aws.vpcflow.type': { - category: 'aws', - description: 'The type of traffic: IPv4, IPv6, or EFA. ', - name: 'aws.vpcflow.type', + 'checkpoint.anti_virus_type': { + category: 'checkpoint', + description: 'Anti virus type. ', + name: 'checkpoint.anti_virus_type', type: 'keyword', }, - 'azure.subscription_id': { - category: 'azure', - description: 'Azure subscription ID ', - name: 'azure.subscription_id', + 'checkpoint.end_user_firewall_type': { + category: 'checkpoint', + description: 'End user firewall type. ', + name: 'checkpoint.end_user_firewall_type', type: 'keyword', }, - 'azure.correlation_id': { - category: 'azure', - description: 'Correlation ID ', - name: 'azure.correlation_id', + 'checkpoint.esod_scan_status': { + category: 'checkpoint', + description: 'Scan failed. ', + name: 'checkpoint.esod_scan_status', type: 'keyword', }, - 'azure.tenant_id': { - category: 'azure', - description: 'tenant ID ', - name: 'azure.tenant_id', + 'checkpoint.esod_access_status': { + category: 'checkpoint', + description: 'Access denied. ', + name: 'checkpoint.esod_access_status', type: 'keyword', }, - 'azure.resource.id': { - category: 'azure', - description: 'Resource ID ', - name: 'azure.resource.id', + 'checkpoint.client_type': { + category: 'checkpoint', + description: 'Endpoint Connect. ', + name: 'checkpoint.client_type', type: 'keyword', }, - 'azure.resource.group': { - category: 'azure', - description: 'Resource group ', - name: 'azure.resource.group', + 'checkpoint.precise_error': { + category: 'checkpoint', + description: 'HTTP parser error. ', + name: 'checkpoint.precise_error', type: 'keyword', }, - 'azure.resource.provider': { - category: 'azure', - description: 'Resource type/namespace ', - name: 'azure.resource.provider', + 'checkpoint.method': { + category: 'checkpoint', + description: 'HTTP method. ', + name: 'checkpoint.method', type: 'keyword', }, - 'azure.resource.namespace': { - category: 'azure', - description: 'Resource type/namespace ', - name: 'azure.resource.namespace', + 'checkpoint.trusted_domain': { + category: 'checkpoint', + description: 'In case of phishing event, the domain, which the attacker was impersonating. ', + name: 'checkpoint.trusted_domain', type: 'keyword', }, - 'azure.resource.name': { - category: 'azure', - description: 'Name ', - name: 'azure.resource.name', + 'cisco.amp.timestamp_nanoseconds': { + category: 'cisco', + description: 'The timestamp in Epoch nanoseconds. ', + name: 'cisco.amp.timestamp_nanoseconds', + type: 'date', + }, + 'cisco.amp.event_type_id': { + category: 'cisco', + description: 'A sub ID of the event, depending on event type. ', + name: 'cisco.amp.event_type_id', type: 'keyword', }, - 'azure.resource.authorization_rule': { - category: 'azure', - description: 'Authorization rule ', - name: 'azure.resource.authorization_rule', + 'cisco.amp.detection': { + category: 'cisco', + description: 'The name of the malware detected. ', + name: 'cisco.amp.detection', type: 'keyword', }, - 'azure.activitylogs.identity.claims_initiated_by_user.name': { - category: 'azure', - description: 'Name ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.name', + 'cisco.amp.detection_id': { + category: 'cisco', + description: 'The ID of the detection. ', + name: 'cisco.amp.detection_id', type: 'keyword', }, - 'azure.activitylogs.identity.claims_initiated_by_user.givenname': { - category: 'azure', - description: 'Givenname ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.givenname', + 'cisco.amp.connector_guid': { + category: 'cisco', + description: 'The GUID of the connector sending information to AMP. ', + name: 'cisco.amp.connector_guid', type: 'keyword', }, - 'azure.activitylogs.identity.claims_initiated_by_user.surname': { - category: 'azure', - description: 'Surname ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.surname', + 'cisco.amp.group_guids': { + category: 'cisco', + description: 'An array of group GUIDS related to the connector sending information to AMP. ', + name: 'cisco.amp.group_guids', type: 'keyword', }, - 'azure.activitylogs.identity.claims_initiated_by_user.fullname': { - category: 'azure', - description: 'Fullname ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.fullname', + 'cisco.amp.vulnerabilities': { + category: 'cisco', + description: 'An array of related vulnerabilities to the malicious event. ', + name: 'cisco.amp.vulnerabilities', + type: 'flattened', + }, + 'cisco.amp.scan.description': { + category: 'cisco', + description: + 'Description of an event related to a scan being initiated, for example the specific directory name. ', + name: 'cisco.amp.scan.description', type: 'keyword', }, - 'azure.activitylogs.identity.claims_initiated_by_user.schema': { - category: 'azure', - description: 'Schema ', - name: 'azure.activitylogs.identity.claims_initiated_by_user.schema', + 'cisco.amp.scan.clean': { + category: 'cisco', + description: 'Boolean value if a scanned file was clean or not. ', + name: 'cisco.amp.scan.clean', + type: 'boolean', + }, + 'cisco.amp.scan.scanned_files': { + category: 'cisco', + description: 'Count of files scanned in a directory. ', + name: 'cisco.amp.scan.scanned_files', + type: 'long', + }, + 'cisco.amp.scan.scanned_processes': { + category: 'cisco', + description: 'Count of processes scanned related to a single scan event. ', + name: 'cisco.amp.scan.scanned_processes', + type: 'long', + }, + 'cisco.amp.scan.scanned_paths': { + category: 'cisco', + description: 'Count of different directories scanned related to a single scan event. ', + name: 'cisco.amp.scan.scanned_paths', + type: 'long', + }, + 'cisco.amp.scan.malicious_detections': { + category: 'cisco', + description: 'Count of malicious files or documents detected related to a single scan event. ', + name: 'cisco.amp.scan.malicious_detections', + type: 'long', + }, + 'cisco.amp.computer.connector_guid': { + category: 'cisco', + description: + 'The GUID of the connector, similar to top level connector_guid, but unique if multiple connectors are involved. ', + name: 'cisco.amp.computer.connector_guid', type: 'keyword', }, - 'azure.activitylogs.identity.claims.*': { - category: 'azure', - description: 'Claims ', - name: 'azure.activitylogs.identity.claims.*', - type: 'object', + 'cisco.amp.computer.external_ip': { + category: 'cisco', + description: 'The external IP of the related host. ', + name: 'cisco.amp.computer.external_ip', + type: 'ip', }, - 'azure.activitylogs.identity.authorization.scope': { - category: 'azure', - description: 'Scope ', - name: 'azure.activitylogs.identity.authorization.scope', + 'cisco.amp.computer.active': { + category: 'cisco', + description: 'If the current endpoint is active or not. ', + name: 'cisco.amp.computer.active', + type: 'boolean', + }, + 'cisco.amp.computer.network_addresses': { + category: 'cisco', + description: 'All network interface information on the related host. ', + name: 'cisco.amp.computer.network_addresses', + type: 'flattened', + }, + 'cisco.amp.file.disposition': { + category: 'cisco', + description: 'Categorization of file, for example "Malicious" or "Clean". ', + name: 'cisco.amp.file.disposition', type: 'keyword', }, - 'azure.activitylogs.identity.authorization.action': { - category: 'azure', - description: 'Action ', - name: 'azure.activitylogs.identity.authorization.action', + 'cisco.amp.network_info.disposition': { + category: 'cisco', + description: + 'Categorization of a network event related to a file, for example "Malicious" or "Clean". ', + name: 'cisco.amp.network_info.disposition', type: 'keyword', }, - 'azure.activitylogs.identity.authorization.evidence.role_assignment_scope': { - category: 'azure', - description: 'Role assignment scope ', - name: 'azure.activitylogs.identity.authorization.evidence.role_assignment_scope', + 'cisco.amp.network_info.nfm.direction': { + category: 'cisco', + description: 'The current direction based on source and destination IP. ', + name: 'cisco.amp.network_info.nfm.direction', type: 'keyword', }, - 'azure.activitylogs.identity.authorization.evidence.role_definition_id': { - category: 'azure', - description: 'Role definition ID ', - name: 'azure.activitylogs.identity.authorization.evidence.role_definition_id', + 'cisco.amp.related.mac': { + category: 'cisco', + description: 'An array of all related MAC addresses. ', + name: 'cisco.amp.related.mac', type: 'keyword', }, - 'azure.activitylogs.identity.authorization.evidence.role': { - category: 'azure', - description: 'Role ', - name: 'azure.activitylogs.identity.authorization.evidence.role', + 'cisco.amp.related.cve': { + category: 'cisco', + description: 'An array of all related MAC addresses. ', + name: 'cisco.amp.related.cve', type: 'keyword', }, - 'azure.activitylogs.identity.authorization.evidence.role_assignment_id': { - category: 'azure', - description: 'Role assignment ID ', - name: 'azure.activitylogs.identity.authorization.evidence.role_assignment_id', + 'cisco.amp.cloud_ioc.description': { + category: 'cisco', + description: 'Description of the related IOC for specific IOC events from AMP. ', + name: 'cisco.amp.cloud_ioc.description', type: 'keyword', }, - 'azure.activitylogs.identity.authorization.evidence.principal_id': { - category: 'azure', - description: 'Principal ID ', - name: 'azure.activitylogs.identity.authorization.evidence.principal_id', + 'cisco.amp.cloud_ioc.short_description': { + category: 'cisco', + description: 'Short description of the related IOC for specific IOC events from AMP. ', + name: 'cisco.amp.cloud_ioc.short_description', type: 'keyword', }, - 'azure.activitylogs.identity.authorization.evidence.principal_type': { - category: 'azure', - description: 'Principal type ', - name: 'azure.activitylogs.identity.authorization.evidence.principal_type', + 'cisco.amp.network_info.parent.disposition': { + category: 'cisco', + description: 'Categorization of a IOC for example "Malicious" or "Clean". ', + name: 'cisco.amp.network_info.parent.disposition', type: 'keyword', }, - 'azure.activitylogs.operation_name': { - category: 'azure', - description: 'Operation name ', - name: 'azure.activitylogs.operation_name', + 'cisco.amp.network_info.parent.identity.md5': { + category: 'cisco', + description: 'MD5 hash of the related IOC. ', + name: 'cisco.amp.network_info.parent.identity.md5', type: 'keyword', }, - 'azure.activitylogs.result_type': { - category: 'azure', - description: 'Result type ', - name: 'azure.activitylogs.result_type', + 'cisco.amp.network_info.parent.identity.sha1': { + category: 'cisco', + description: 'SHA1 hash of the related IOC. ', + name: 'cisco.amp.network_info.parent.identity.sha1', type: 'keyword', }, - 'azure.activitylogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.activitylogs.result_signature', + 'cisco.amp.network_info.parent.identify.sha256': { + category: 'cisco', + description: 'SHA256 hash of the related IOC. ', + name: 'cisco.amp.network_info.parent.identify.sha256', type: 'keyword', }, - 'azure.activitylogs.category': { - category: 'azure', - description: 'Category ', - name: 'azure.activitylogs.category', + 'cisco.amp.file.archived_file.disposition': { + category: 'cisco', + description: + 'Categorization of a file archive related to a file, for example "Malicious" or "Clean". ', + name: 'cisco.amp.file.archived_file.disposition', type: 'keyword', }, - 'azure.activitylogs.event_category': { - category: 'azure', - description: 'Event Category ', - name: 'azure.activitylogs.event_category', + 'cisco.amp.file.archived_file.identity.md5': { + category: 'cisco', + description: 'MD5 hash of the archived file related to the malicious event. ', + name: 'cisco.amp.file.archived_file.identity.md5', type: 'keyword', }, - 'azure.activitylogs.properties.service_request_id': { - category: 'azure', - description: 'Service Request Id ', - name: 'azure.activitylogs.properties.service_request_id', + 'cisco.amp.file.archived_file.identity.sha1': { + category: 'cisco', + description: 'SHA1 hash of the archived file related to the malicious event. ', + name: 'cisco.amp.file.archived_file.identity.sha1', type: 'keyword', }, - 'azure.activitylogs.properties.status_code': { - category: 'azure', - description: 'Status code ', - name: 'azure.activitylogs.properties.status_code', + 'cisco.amp.file.archived_file.identity.sha256': { + category: 'cisco', + description: 'SHA256 hash of the archived file related to the malicious event. ', + name: 'cisco.amp.file.archived_file.identity.sha256', type: 'keyword', }, - 'azure.auditlogs.category': { - category: 'azure', - description: 'The category of the operation. Currently, Audit is the only supported value. ', - name: 'azure.auditlogs.category', + 'cisco.amp.file.attack_details.application': { + category: 'cisco', + description: 'The application name related to Exploit Prevention events. ', + name: 'cisco.amp.file.attack_details.application', type: 'keyword', }, - 'azure.auditlogs.operation_name': { - category: 'azure', - description: 'The operation name ', - name: 'azure.auditlogs.operation_name', + 'cisco.amp.file.attack_details.attacked_module': { + category: 'cisco', + description: + 'Path to the executable or dll that was attacked and detected by Exploit Prevention. ', + name: 'cisco.amp.file.attack_details.attacked_module', type: 'keyword', }, - 'azure.auditlogs.operation_version': { - category: 'azure', - description: 'The operation version ', - name: 'azure.auditlogs.operation_version', + 'cisco.amp.file.attack_details.base_address': { + category: 'cisco', + description: 'The base memory address related to the exploit detected. ', + name: 'cisco.amp.file.attack_details.base_address', type: 'keyword', }, - 'azure.auditlogs.identity': { - category: 'azure', - description: 'Identity ', - name: 'azure.auditlogs.identity', + 'cisco.amp.file.attack_details.suspicious_files': { + category: 'cisco', + description: 'An array of related files when an attack is detected by Exploit Prevention. ', + name: 'cisco.amp.file.attack_details.suspicious_files', type: 'keyword', }, - 'azure.auditlogs.tenant_id': { - category: 'azure', - description: 'Tenant ID ', - name: 'azure.auditlogs.tenant_id', + 'cisco.amp.file.parent.disposition': { + category: 'cisco', + description: 'Categorization of parrent, for example "Malicious" or "Clean". ', + name: 'cisco.amp.file.parent.disposition', type: 'keyword', }, - 'azure.auditlogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.auditlogs.result_signature', + 'cisco.amp.error.description': { + category: 'cisco', + description: 'Description of an endpoint error event. ', + name: 'cisco.amp.error.description', type: 'keyword', }, - 'azure.auditlogs.properties.result': { - category: 'azure', - description: 'Log result ', - name: 'azure.auditlogs.properties.result', + 'cisco.amp.error.error_code': { + category: 'cisco', + description: 'The error code describing the related error event. ', + name: 'cisco.amp.error.error_code', type: 'keyword', }, - 'azure.auditlogs.properties.activity_display_name': { - category: 'azure', - description: 'Activity display name ', - name: 'azure.auditlogs.properties.activity_display_name', + 'cisco.amp.threat_hunting.severity': { + category: 'cisco', + description: + 'Severity result of the threat hunt registered to the malicious event. Can be Low-Critical. ', + name: 'cisco.amp.threat_hunting.severity', type: 'keyword', }, - 'azure.auditlogs.properties.result_reason': { - category: 'azure', - description: 'Reason for the log result ', - name: 'azure.auditlogs.properties.result_reason', + 'cisco.amp.threat_hunting.incident_report_guid': { + category: 'cisco', + description: 'The GUID of the related threat hunting report. ', + name: 'cisco.amp.threat_hunting.incident_report_guid', type: 'keyword', }, - 'azure.auditlogs.properties.correlation_id': { - category: 'azure', - description: 'Correlation ID ', - name: 'azure.auditlogs.properties.correlation_id', + 'cisco.amp.threat_hunting.incident_hunt_guid': { + category: 'cisco', + description: 'The GUID of the related investigation tracking issue. ', + name: 'cisco.amp.threat_hunting.incident_hunt_guid', type: 'keyword', }, - 'azure.auditlogs.properties.logged_by_service': { - category: 'azure', - description: 'Logged by service ', - name: 'azure.auditlogs.properties.logged_by_service', + 'cisco.amp.threat_hunting.incident_title': { + category: 'cisco', + description: 'Title of the incident related to the threat hunting activity. ', + name: 'cisco.amp.threat_hunting.incident_title', type: 'keyword', }, - 'azure.auditlogs.properties.operation_type': { - category: 'azure', - description: 'Operation type ', - name: 'azure.auditlogs.properties.operation_type', + 'cisco.amp.threat_hunting.incident_summary': { + category: 'cisco', + description: 'Summary of the outcome on the threat hunting activity. ', + name: 'cisco.amp.threat_hunting.incident_summary', type: 'keyword', }, - 'azure.auditlogs.properties.id': { - category: 'azure', - description: 'ID ', - name: 'azure.auditlogs.properties.id', + 'cisco.amp.threat_hunting.incident_remediation': { + category: 'cisco', + description: 'Recommendations to resolve the vulnerability or exploited host. ', + name: 'cisco.amp.threat_hunting.incident_remediation', type: 'keyword', }, - 'azure.auditlogs.properties.activity_datetime': { - category: 'azure', - description: 'Activity timestamp ', - name: 'azure.auditlogs.properties.activity_datetime', + 'cisco.amp.threat_hunting.incident_id': { + category: 'cisco', + description: 'The id of the related incident for the threat hunting activity. ', + name: 'cisco.amp.threat_hunting.incident_id', + type: 'keyword', + }, + 'cisco.amp.threat_hunting.incident_end_time': { + category: 'cisco', + description: 'When the threat hunt finalized or closed. ', + name: 'cisco.amp.threat_hunting.incident_end_time', type: 'date', }, - 'azure.auditlogs.properties.category': { - category: 'azure', - description: 'category ', - name: 'azure.auditlogs.properties.category', - type: 'keyword', + 'cisco.amp.threat_hunting.incident_start_time': { + category: 'cisco', + description: 'When the threat hunt was initiated. ', + name: 'cisco.amp.threat_hunting.incident_start_time', + type: 'date', }, - 'azure.auditlogs.properties.target_resources.*.display_name': { - category: 'azure', - description: 'Display name ', - name: 'azure.auditlogs.properties.target_resources.*.display_name', - type: 'keyword', + 'cisco.amp.file.attack_details.indicators': { + category: 'cisco', + description: + 'Different indicator types that matches the exploit detected, for example different MITRE tactics. ', + name: 'cisco.amp.file.attack_details.indicators', + type: 'flattened', }, - 'azure.auditlogs.properties.target_resources.*.id': { - category: 'azure', - description: 'ID ', - name: 'azure.auditlogs.properties.target_resources.*.id', - type: 'keyword', + 'cisco.amp.threat_hunting.tactics': { + category: 'cisco', + description: 'List of all MITRE tactics related to the incident found. ', + name: 'cisco.amp.threat_hunting.tactics', + type: 'flattened', }, - 'azure.auditlogs.properties.target_resources.*.type': { - category: 'azure', - description: 'Type ', - name: 'azure.auditlogs.properties.target_resources.*.type', - type: 'keyword', + 'cisco.amp.threat_hunting.techniques': { + category: 'cisco', + description: 'List of all MITRE techniques related to the incident found. ', + name: 'cisco.amp.threat_hunting.techniques', + type: 'flattened', }, - 'azure.auditlogs.properties.target_resources.*.ip_address': { - category: 'azure', - description: 'ip Address ', - name: 'azure.auditlogs.properties.target_resources.*.ip_address', - type: 'keyword', + 'cisco.amp.tactics': { + category: 'cisco', + description: 'List of all MITRE tactics related to the incident found. ', + name: 'cisco.amp.tactics', + type: 'flattened', }, - 'azure.auditlogs.properties.target_resources.*.user_principal_name': { - category: 'azure', - description: 'User principal name ', - name: 'azure.auditlogs.properties.target_resources.*.user_principal_name', + 'cisco.amp.mitre_tactics': { + category: 'cisco', + description: "Array of all related mitre tactic ID's ", + name: 'cisco.amp.mitre_tactics', type: 'keyword', }, - 'azure.auditlogs.properties.target_resources.*.modified_properties.*.new_value': { - category: 'azure', - description: 'New value ', - name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.new_value', - type: 'keyword', + 'cisco.amp.techniques': { + category: 'cisco', + description: 'List of all MITRE techniques related to the incident found. ', + name: 'cisco.amp.techniques', + type: 'flattened', }, - 'azure.auditlogs.properties.target_resources.*.modified_properties.*.display_name': { - category: 'azure', - description: 'Display value ', - name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.display_name', + 'cisco.amp.mitre_techniques': { + category: 'cisco', + description: "Array of all related mitre technique ID's ", + name: 'cisco.amp.mitre_techniques', type: 'keyword', }, - 'azure.auditlogs.properties.target_resources.*.modified_properties.*.old_value': { - category: 'azure', - description: 'Old value ', - name: 'azure.auditlogs.properties.target_resources.*.modified_properties.*.old_value', + 'cisco.amp.command_line.arguments': { + category: 'cisco', + description: 'The CLI arguments related to the Cloud Threat IOC reported by Cisco. ', + name: 'cisco.amp.command_line.arguments', type: 'keyword', }, - 'azure.auditlogs.properties.initiated_by.app.servicePrincipalName': { - category: 'azure', - description: 'Service principal name ', - name: 'azure.auditlogs.properties.initiated_by.app.servicePrincipalName', - type: 'keyword', + 'cisco.amp.bp_data': { + category: 'cisco', + description: 'Endpoint isolation information ', + name: 'cisco.amp.bp_data', + type: 'flattened', }, - 'azure.auditlogs.properties.initiated_by.app.displayName': { - category: 'azure', - description: 'Display name ', - name: 'azure.auditlogs.properties.initiated_by.app.displayName', + 'cisco.asa.message_id': { + category: 'cisco', + description: 'The Cisco ASA message identifier. ', + name: 'cisco.asa.message_id', type: 'keyword', }, - 'azure.auditlogs.properties.initiated_by.app.appId': { - category: 'azure', - description: 'App ID ', - name: 'azure.auditlogs.properties.initiated_by.app.appId', + 'cisco.asa.suffix': { + category: 'cisco', + description: 'Optional suffix after %ASA identifier. ', + example: 'session', + name: 'cisco.asa.suffix', type: 'keyword', }, - 'azure.auditlogs.properties.initiated_by.app.servicePrincipalId': { - category: 'azure', - description: 'Service principal ID ', - name: 'azure.auditlogs.properties.initiated_by.app.servicePrincipalId', + 'cisco.asa.source_interface': { + category: 'cisco', + description: 'Source interface for the flow or event. ', + name: 'cisco.asa.source_interface', type: 'keyword', }, - 'azure.auditlogs.properties.initiated_by.user.userPrincipalName': { - category: 'azure', - description: 'User principal name ', - name: 'azure.auditlogs.properties.initiated_by.user.userPrincipalName', + 'cisco.asa.destination_interface': { + category: 'cisco', + description: 'Destination interface for the flow or event. ', + name: 'cisco.asa.destination_interface', type: 'keyword', }, - 'azure.auditlogs.properties.initiated_by.user.displayName': { - category: 'azure', - description: 'Display name ', - name: 'azure.auditlogs.properties.initiated_by.user.displayName', + 'cisco.asa.rule_name': { + category: 'cisco', + description: 'Name of the Access Control List rule that matched this event. ', + name: 'cisco.asa.rule_name', type: 'keyword', }, - 'azure.auditlogs.properties.initiated_by.user.id': { - category: 'azure', - description: 'ID ', - name: 'azure.auditlogs.properties.initiated_by.user.id', + 'cisco.asa.source_username': { + category: 'cisco', + description: 'Name of the user that is the source for this event. ', + name: 'cisco.asa.source_username', type: 'keyword', }, - 'azure.auditlogs.properties.initiated_by.user.ipAddress': { - category: 'azure', - description: 'ip Address ', - name: 'azure.auditlogs.properties.initiated_by.user.ipAddress', + 'cisco.asa.destination_username': { + category: 'cisco', + description: 'Name of the user that is the destination for this event. ', + name: 'cisco.asa.destination_username', type: 'keyword', }, - 'azure.signinlogs.operation_name': { - category: 'azure', - description: 'The operation name ', - name: 'azure.signinlogs.operation_name', - type: 'keyword', + 'cisco.asa.mapped_source_ip': { + category: 'cisco', + description: 'The translated source IP address. ', + name: 'cisco.asa.mapped_source_ip', + type: 'ip', }, - 'azure.signinlogs.operation_version': { - category: 'azure', - description: 'The operation version ', - name: 'azure.signinlogs.operation_version', + 'cisco.asa.mapped_source_host': { + category: 'cisco', + description: 'The translated source host. ', + name: 'cisco.asa.mapped_source_host', type: 'keyword', }, - 'azure.signinlogs.tenant_id': { - category: 'azure', - description: 'Tenant ID ', - name: 'azure.signinlogs.tenant_id', - type: 'keyword', + 'cisco.asa.mapped_source_port': { + category: 'cisco', + description: 'The translated source port. ', + name: 'cisco.asa.mapped_source_port', + type: 'long', }, - 'azure.signinlogs.result_signature': { - category: 'azure', - description: 'Result signature ', - name: 'azure.signinlogs.result_signature', - type: 'keyword', + 'cisco.asa.mapped_destination_ip': { + category: 'cisco', + description: 'The translated destination IP address. ', + name: 'cisco.asa.mapped_destination_ip', + type: 'ip', }, - 'azure.signinlogs.result_description': { - category: 'azure', - description: 'Result description ', - name: 'azure.signinlogs.result_description', + 'cisco.asa.mapped_destination_host': { + category: 'cisco', + description: 'The translated destination host. ', + name: 'cisco.asa.mapped_destination_host', type: 'keyword', }, - 'azure.signinlogs.result_type': { - category: 'azure', - description: 'Result type ', - name: 'azure.signinlogs.result_type', - type: 'keyword', + 'cisco.asa.mapped_destination_port': { + category: 'cisco', + description: 'The translated destination port. ', + name: 'cisco.asa.mapped_destination_port', + type: 'long', }, - 'azure.signinlogs.identity': { - category: 'azure', - description: 'Identity ', - name: 'azure.signinlogs.identity', + 'cisco.asa.threat_level': { + category: 'cisco', + description: + 'Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. ', + name: 'cisco.asa.threat_level', type: 'keyword', }, - 'azure.signinlogs.category': { - category: 'azure', - description: 'Category ', - name: 'azure.signinlogs.category', + 'cisco.asa.threat_category': { + category: 'cisco', + description: + 'Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. ', + name: 'cisco.asa.threat_category', type: 'keyword', }, - 'azure.signinlogs.properties.id': { - category: 'azure', - description: 'ID ', - name: 'azure.signinlogs.properties.id', + 'cisco.asa.connection_id': { + category: 'cisco', + description: 'Unique identifier for a flow. ', + name: 'cisco.asa.connection_id', type: 'keyword', }, - 'azure.signinlogs.properties.created_at': { - category: 'azure', - description: 'Created date time ', - name: 'azure.signinlogs.properties.created_at', - type: 'date', + 'cisco.asa.icmp_type': { + category: 'cisco', + description: 'ICMP type. ', + name: 'cisco.asa.icmp_type', + type: 'short', }, - 'azure.signinlogs.properties.user_display_name': { - category: 'azure', - description: 'User display name ', - name: 'azure.signinlogs.properties.user_display_name', - type: 'keyword', + 'cisco.asa.icmp_code': { + category: 'cisco', + description: 'ICMP code. ', + name: 'cisco.asa.icmp_code', + type: 'short', }, - 'azure.signinlogs.properties.correlation_id': { - category: 'azure', - description: 'Correlation ID ', - name: 'azure.signinlogs.properties.correlation_id', + 'cisco.asa.connection_type': { + category: 'cisco', + description: 'The VPN connection type ', + name: 'cisco.asa.connection_type', type: 'keyword', }, - 'azure.signinlogs.properties.user_principal_name': { - category: 'azure', - description: 'User principal name ', - name: 'azure.signinlogs.properties.user_principal_name', + 'cisco.asa.dap_records': { + category: 'cisco', + description: 'The assigned DAP records ', + name: 'cisco.asa.dap_records', type: 'keyword', }, - 'azure.signinlogs.properties.user_id': { - category: 'azure', - description: 'User ID ', - name: 'azure.signinlogs.properties.user_id', + 'cisco.asa.command_line_arguments': { + category: 'cisco', + description: 'The command line arguments logged by the local audit log ', + name: 'cisco.asa.command_line_arguments', type: 'keyword', }, - 'azure.signinlogs.properties.app_id': { - category: 'azure', - description: 'App ID ', - name: 'azure.signinlogs.properties.app_id', - type: 'keyword', + 'cisco.asa.assigned_ip': { + category: 'cisco', + description: 'The IP address assigned to a VPN client successfully connecting ', + name: 'cisco.asa.assigned_ip', + type: 'ip', }, - 'azure.signinlogs.properties.app_display_name': { - category: 'azure', - description: 'App display name ', - name: 'azure.signinlogs.properties.app_display_name', + 'cisco.asa.privilege.old': { + category: 'cisco', + description: 'When a users privilege is changed this is the old value ', + name: 'cisco.asa.privilege.old', type: 'keyword', }, - 'azure.signinlogs.properties.ip_address': { - category: 'azure', - description: 'Ip address ', - name: 'azure.signinlogs.properties.ip_address', + 'cisco.asa.privilege.new': { + category: 'cisco', + description: 'When a users privilege is changed this is the new value ', + name: 'cisco.asa.privilege.new', type: 'keyword', }, - 'azure.signinlogs.properties.client_app_used': { - category: 'azure', - description: 'Client app used ', - name: 'azure.signinlogs.properties.client_app_used', + 'cisco.asa.burst.object': { + category: 'cisco', + description: 'The related object for burst warnings ', + name: 'cisco.asa.burst.object', type: 'keyword', }, - 'azure.signinlogs.properties.conditional_access_status': { - category: 'azure', - description: 'Conditional access status ', - name: 'azure.signinlogs.properties.conditional_access_status', + 'cisco.asa.burst.id': { + category: 'cisco', + description: 'The related rate ID for burst warnings ', + name: 'cisco.asa.burst.id', type: 'keyword', }, - 'azure.signinlogs.properties.original_request_id': { - category: 'azure', - description: 'Original request ID ', - name: 'azure.signinlogs.properties.original_request_id', + 'cisco.asa.burst.current_rate': { + category: 'cisco', + description: 'The current burst rate seen ', + name: 'cisco.asa.burst.current_rate', type: 'keyword', }, - 'azure.signinlogs.properties.is_interactive': { - category: 'azure', - description: 'Is interactive ', - name: 'azure.signinlogs.properties.is_interactive', + 'cisco.asa.burst.configured_rate': { + category: 'cisco', + description: 'The current configured burst rate ', + name: 'cisco.asa.burst.configured_rate', type: 'keyword', }, - 'azure.signinlogs.properties.token_issuer_name': { - category: 'azure', - description: 'Token issuer name ', - name: 'azure.signinlogs.properties.token_issuer_name', + 'cisco.asa.burst.avg_rate': { + category: 'cisco', + description: 'The current average burst rate seen ', + name: 'cisco.asa.burst.avg_rate', type: 'keyword', }, - 'azure.signinlogs.properties.token_issuer_type': { - category: 'azure', - description: 'Token issuer type ', - name: 'azure.signinlogs.properties.token_issuer_type', + 'cisco.asa.burst.configured_avg_rate': { + category: 'cisco', + description: 'The current configured average burst rate allowed ', + name: 'cisco.asa.burst.configured_avg_rate', type: 'keyword', }, - 'azure.signinlogs.properties.processing_time_ms': { - category: 'azure', - description: 'Processing time in milliseconds ', - name: 'azure.signinlogs.properties.processing_time_ms', - type: 'float', - }, - 'azure.signinlogs.properties.risk_detail': { - category: 'azure', - description: 'Risk detail ', - name: 'azure.signinlogs.properties.risk_detail', + 'cisco.asa.burst.cumulative_count': { + category: 'cisco', + description: 'The total count of burst rate hits since the object was created or cleared ', + name: 'cisco.asa.burst.cumulative_count', type: 'keyword', }, - 'azure.signinlogs.properties.risk_level_aggregated': { - category: 'azure', - description: 'Risk level aggregated ', - name: 'azure.signinlogs.properties.risk_level_aggregated', + 'cisco.asa.termination_user': { + category: 'cisco', + description: 'AAA name of user requesting termination ', + name: 'cisco.asa.termination_user', type: 'keyword', }, - 'azure.signinlogs.properties.risk_level_during_signin': { - category: 'azure', - description: 'Risk level during signIn ', - name: 'azure.signinlogs.properties.risk_level_during_signin', + 'cisco.asa.webvpn.group_name': { + category: 'cisco', + description: 'The WebVPN group name the user belongs to ', + name: 'cisco.asa.webvpn.group_name', type: 'keyword', }, - 'azure.signinlogs.properties.risk_state': { - category: 'azure', - description: 'Risk state ', - name: 'azure.signinlogs.properties.risk_state', + 'cisco.asa.termination_initiator': { + category: 'cisco', + description: 'Interface name of the side that initiated the teardown ', + name: 'cisco.asa.termination_initiator', type: 'keyword', }, - 'azure.signinlogs.properties.resource_display_name': { - category: 'azure', - description: 'Resource display name ', - name: 'azure.signinlogs.properties.resource_display_name', + 'cisco.asa.tunnel_type': { + category: 'cisco', + description: 'SA type (remote access or L2L) ', + name: 'cisco.asa.tunnel_type', type: 'keyword', }, - 'azure.signinlogs.properties.status.error_code': { - category: 'azure', - description: 'Error code ', - name: 'azure.signinlogs.properties.status.error_code', + 'cisco.asa.session_type': { + category: 'cisco', + description: 'Session type (for example, IPsec or UDP) ', + name: 'cisco.asa.session_type', type: 'keyword', }, - 'azure.signinlogs.properties.device_detail.device_id': { - category: 'azure', - description: 'Device ID ', - name: 'azure.signinlogs.properties.device_detail.device_id', + 'cisco.ftd.message_id': { + category: 'cisco', + description: 'The Cisco FTD message identifier. ', + name: 'cisco.ftd.message_id', type: 'keyword', }, - 'azure.signinlogs.properties.device_detail.operating_system': { - category: 'azure', - description: 'Operating system ', - name: 'azure.signinlogs.properties.device_detail.operating_system', + 'cisco.ftd.suffix': { + category: 'cisco', + description: 'Optional suffix after %FTD identifier. ', + example: 'session', + name: 'cisco.ftd.suffix', type: 'keyword', }, - 'azure.signinlogs.properties.device_detail.browser': { - category: 'azure', - description: 'Browser ', - name: 'azure.signinlogs.properties.device_detail.browser', + 'cisco.ftd.source_interface': { + category: 'cisco', + description: 'Source interface for the flow or event. ', + name: 'cisco.ftd.source_interface', type: 'keyword', }, - 'azure.signinlogs.properties.device_detail.display_name': { - category: 'azure', - description: 'Display name ', - name: 'azure.signinlogs.properties.device_detail.display_name', + 'cisco.ftd.destination_interface': { + category: 'cisco', + description: 'Destination interface for the flow or event. ', + name: 'cisco.ftd.destination_interface', type: 'keyword', }, - 'azure.signinlogs.properties.device_detail.trust_type': { - category: 'azure', - description: 'Trust type ', - name: 'azure.signinlogs.properties.device_detail.trust_type', + 'cisco.ftd.rule_name': { + category: 'cisco', + description: 'Name of the Access Control List rule that matched this event. ', + name: 'cisco.ftd.rule_name', type: 'keyword', }, - 'azure.signinlogs.properties.service_principal_id': { - category: 'azure', - description: 'Status ', - name: 'azure.signinlogs.properties.service_principal_id', + 'cisco.ftd.source_username': { + category: 'cisco', + description: 'Name of the user that is the source for this event. ', + name: 'cisco.ftd.source_username', type: 'keyword', }, - 'network.interface.name': { - category: 'network', - description: 'Name of the network interface where the traffic has been observed. ', - name: 'network.interface.name', + 'cisco.ftd.destination_username': { + category: 'cisco', + description: 'Name of the user that is the destination for this event. ', + name: 'cisco.ftd.destination_username', type: 'keyword', }, - 'rsa.internal.msg': { - category: 'rsa', - description: 'This key is used to capture the raw message that comes into the Log Decoder', - name: 'rsa.internal.msg', - type: 'keyword', + 'cisco.ftd.mapped_source_ip': { + category: 'cisco', + description: 'The translated source IP address. Use ECS source.nat.ip. ', + name: 'cisco.ftd.mapped_source_ip', + type: 'ip', }, - 'rsa.internal.messageid': { - category: 'rsa', - name: 'rsa.internal.messageid', + 'cisco.ftd.mapped_source_host': { + category: 'cisco', + description: 'The translated source host. ', + name: 'cisco.ftd.mapped_source_host', type: 'keyword', }, - 'rsa.internal.event_desc': { - category: 'rsa', - name: 'rsa.internal.event_desc', - type: 'keyword', + 'cisco.ftd.mapped_source_port': { + category: 'cisco', + description: 'The translated source port. Use ECS source.nat.port. ', + name: 'cisco.ftd.mapped_source_port', + type: 'long', }, - 'rsa.internal.message': { - category: 'rsa', - description: 'This key captures the contents of instant messages', - name: 'rsa.internal.message', - type: 'keyword', + 'cisco.ftd.mapped_destination_ip': { + category: 'cisco', + description: 'The translated destination IP address. Use ECS destination.nat.ip. ', + name: 'cisco.ftd.mapped_destination_ip', + type: 'ip', }, - 'rsa.internal.time': { - category: 'rsa', - description: - 'This is the time at which a session hits a NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness.', - name: 'rsa.internal.time', - type: 'date', + 'cisco.ftd.mapped_destination_host': { + category: 'cisco', + description: 'The translated destination host. ', + name: 'cisco.ftd.mapped_destination_host', + type: 'keyword', }, - 'rsa.internal.level': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.level', + 'cisco.ftd.mapped_destination_port': { + category: 'cisco', + description: 'The translated destination port. Use ECS destination.nat.port. ', + name: 'cisco.ftd.mapped_destination_port', type: 'long', }, - 'rsa.internal.msg_id': { - category: 'rsa', + 'cisco.ftd.threat_level': { + category: 'cisco', description: - 'This is the Message ID1 value that identifies the exact log parser definition which parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.msg_id', + 'Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. ', + name: 'cisco.ftd.threat_level', type: 'keyword', }, - 'rsa.internal.msg_vid': { - category: 'rsa', + 'cisco.ftd.threat_category': { + category: 'cisco', description: - 'This is the Message ID2 value that identifies the exact log parser definition which parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.msg_vid', + 'Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. ', + name: 'cisco.ftd.threat_category', type: 'keyword', }, - 'rsa.internal.data': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.data', + 'cisco.ftd.connection_id': { + category: 'cisco', + description: 'Unique identifier for a flow. ', + name: 'cisco.ftd.connection_id', type: 'keyword', }, - 'rsa.internal.obj_server': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.obj_server', - type: 'keyword', + 'cisco.ftd.icmp_type': { + category: 'cisco', + description: 'ICMP type. ', + name: 'cisco.ftd.icmp_type', + type: 'short', }, - 'rsa.internal.obj_val': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.obj_val', - type: 'keyword', + 'cisco.ftd.icmp_code': { + category: 'cisco', + description: 'ICMP code. ', + name: 'cisco.ftd.icmp_code', + type: 'short', }, - 'rsa.internal.resource': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.resource', - type: 'keyword', + 'cisco.ftd.security': { + category: 'cisco', + description: 'Raw fields for Security Events.', + name: 'cisco.ftd.security', + type: 'object', }, - 'rsa.internal.obj_id': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.obj_id', + 'cisco.ftd.connection_type': { + category: 'cisco', + description: 'The VPN connection type ', + name: 'cisco.ftd.connection_type', type: 'keyword', }, - 'rsa.internal.statement': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.statement', + 'cisco.ftd.dap_records': { + category: 'cisco', + description: 'The assigned DAP records ', + name: 'cisco.ftd.dap_records', type: 'keyword', }, - 'rsa.internal.audit_class': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.audit_class', + 'cisco.ftd.termination_user': { + category: 'cisco', + description: 'AAA name of user requesting termination ', + name: 'cisco.ftd.termination_user', type: 'keyword', }, - 'rsa.internal.entry': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.entry', + 'cisco.ftd.webvpn.group_name': { + category: 'cisco', + description: 'The WebVPN group name the user belongs to ', + name: 'cisco.ftd.webvpn.group_name', type: 'keyword', }, - 'rsa.internal.hcode': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.hcode', + 'cisco.ftd.termination_initiator': { + category: 'cisco', + description: 'Interface name of the side that initiated the teardown ', + name: 'cisco.ftd.termination_initiator', type: 'keyword', }, - 'rsa.internal.inode': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.inode', - type: 'long', - }, - 'rsa.internal.resource_class': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.resource_class', + 'cisco.ios.access_list': { + category: 'cisco', + description: 'Name of the IP access list. ', + name: 'cisco.ios.access_list', type: 'keyword', }, - 'rsa.internal.dead': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.dead', - type: 'long', - }, - 'rsa.internal.feed_desc': { - category: 'rsa', + 'cisco.ios.facility': { + category: 'cisco', description: - 'This is used to capture the description of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.feed_desc', + 'The facility to which the message refers (for example, SNMP, SYS, and so forth). A facility can be a hardware device, a protocol, or a module of the system software. It denotes the source or the cause of the system message. ', + example: 'SEC', + name: 'cisco.ios.facility', type: 'keyword', }, - 'rsa.internal.feed_name': { - category: 'rsa', - description: - 'This is used to capture the name of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.feed_name', + 'cisco.umbrella.identities': { + category: 'cisco', + description: 'An array of the different identities related to the event. ', + name: 'cisco.umbrella.identities', type: 'keyword', }, - 'rsa.internal.cid': { - category: 'rsa', - description: - 'This is the unique identifier used to identify a NetWitness Concentrator. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.cid', + 'cisco.umbrella.categories': { + category: 'cisco', + description: 'The security or content categories that the destination matches. ', + name: 'cisco.umbrella.categories', type: 'keyword', }, - 'rsa.internal.device_class': { - category: 'rsa', + 'cisco.umbrella.policy_identity_type': { + category: 'cisco', description: - 'This is the Classification of the Log Event Source under a predefined fixed set of Event Source Classifications. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_class', + 'The first identity type matched with this request. Available in version 3 and above. ', + name: 'cisco.umbrella.policy_identity_type', type: 'keyword', }, - 'rsa.internal.device_group': { - category: 'rsa', + 'cisco.umbrella.identity_types': { + category: 'cisco', description: - 'This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_group', + 'The type of identity that made the request. For example, Roaming Computer or Network. ', + name: 'cisco.umbrella.identity_types', type: 'keyword', }, - 'rsa.internal.device_host': { - category: 'rsa', + 'cisco.umbrella.blocked_categories': { + category: 'cisco', description: - 'This is the Hostname of the log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_host', + 'The categories that resulted in the destination being blocked. Available in version 4 and above. ', + name: 'cisco.umbrella.blocked_categories', type: 'keyword', }, - 'rsa.internal.device_ip': { - category: 'rsa', - description: - 'This is the IPv4 address of the Log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_ip', - type: 'ip', - }, - 'rsa.internal.device_ipv6': { - category: 'rsa', - description: - 'This is the IPv6 address of the Log Event Source sending the logs to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_ipv6', - type: 'ip', + 'cisco.umbrella.content_type': { + category: 'cisco', + description: 'The type of web content, typically text/html. ', + name: 'cisco.umbrella.content_type', + type: 'keyword', }, - 'rsa.internal.device_type': { - category: 'rsa', - description: - 'This is the name of the log parser which parsed a given session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.device_type', + 'cisco.umbrella.sha_sha256': { + category: 'cisco', + description: 'Hex digest of the response content. ', + name: 'cisco.umbrella.sha_sha256', type: 'keyword', }, - 'rsa.internal.device_type_id': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.device_type_id', - type: 'long', + 'cisco.umbrella.av_detections': { + category: 'cisco', + description: 'The detection name according to the antivirus engine used in file inspection. ', + name: 'cisco.umbrella.av_detections', + type: 'keyword', }, - 'rsa.internal.did': { - category: 'rsa', + 'cisco.umbrella.puas': { + category: 'cisco', description: - 'This is the unique identifier used to identify a NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.did', + 'A list of all potentially unwanted application (PUA) results for the proxied file as returned by the antivirus scanner. ', + name: 'cisco.umbrella.puas', type: 'keyword', }, - 'rsa.internal.entropy_req': { - category: 'rsa', + 'cisco.umbrella.amp_disposition': { + category: 'cisco', description: - 'This key is only used by the Entropy Parser, the Meta Type can be either UInt16 or Float32 based on the configuration', - name: 'rsa.internal.entropy_req', - type: 'long', + 'The status of the files proxied and scanned by Cisco Advanced Malware Protection (AMP) as part of the Umbrella File Inspection feature; can be Clean, Malicious or Unknown. ', + name: 'cisco.umbrella.amp_disposition', + type: 'keyword', }, - 'rsa.internal.entropy_res': { - category: 'rsa', + 'cisco.umbrella.amp_malware_name': { + category: 'cisco', + description: 'If Malicious, the name of the malware according to AMP. ', + name: 'cisco.umbrella.amp_malware_name', + type: 'keyword', + }, + 'cisco.umbrella.amp_score': { + category: 'cisco', description: - 'This key is only used by the Entropy Parser, the Meta Type can be either UInt16 or Float32 based on the configuration', - name: 'rsa.internal.entropy_res', - type: 'long', + 'The score of the malware from AMP. This field is not currently used and will be blank. ', + name: 'cisco.umbrella.amp_score', + type: 'keyword', }, - 'rsa.internal.event_name': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.event_name', + 'cisco.umbrella.datacenter': { + category: 'cisco', + description: 'The name of the Umbrella Data Center that processed the user-generated traffic. ', + name: 'cisco.umbrella.datacenter', type: 'keyword', }, - 'rsa.internal.feed_category': { - category: 'rsa', - description: - 'This is used to capture the category of the feed. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.feed_category', + 'cisco.umbrella.origin_id': { + category: 'cisco', + description: 'The unique identity of the network tunnel. ', + name: 'cisco.umbrella.origin_id', type: 'keyword', }, - 'rsa.internal.forward_ip': { - category: 'rsa', - description: - 'This key should be used to capture the IPV4 address of a relay system which forwarded the events from the original system to NetWitness.', - name: 'rsa.internal.forward_ip', - type: 'ip', + 'coredns.query.size': { + category: 'coredns', + description: 'size of the DNS query ', + name: 'coredns.query.size', + type: 'integer', + format: 'bytes', }, - 'rsa.internal.forward_ipv6': { - category: 'rsa', + 'coredns.response.size': { + category: 'coredns', + description: 'size of the DNS response ', + name: 'coredns.response.size', + type: 'integer', + format: 'bytes', + }, + 'crowdstrike.metadata.eventType': { + category: 'crowdstrike', description: - 'This key is used to capture the IPV6 address of a relay system which forwarded the events from the original system to NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.forward_ipv6', - type: 'ip', + 'DetectionSummaryEvent, FirewallMatchEvent, IncidentSummaryEvent, RemoteResponseSessionStartEvent, RemoteResponseSessionEndEvent, AuthActivityAuditEvent, or UserActivityAuditEvent ', + name: 'crowdstrike.metadata.eventType', + type: 'keyword', + }, + 'crowdstrike.metadata.eventCreationTime': { + category: 'crowdstrike', + description: 'The time this event occurred on the endpoint in UTC UNIX_MS format. ', + name: 'crowdstrike.metadata.eventCreationTime', + type: 'date', }, - 'rsa.internal.header_id': { - category: 'rsa', + 'crowdstrike.metadata.offset': { + category: 'crowdstrike', description: - 'This is the Header ID value that identifies the exact log parser header definition that parses a particular log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.header_id', + 'Offset number that tracks the location of the event in stream. This is used to identify unique detection events. ', + name: 'crowdstrike.metadata.offset', + type: 'integer', + }, + 'crowdstrike.metadata.customerIDString': { + category: 'crowdstrike', + description: 'Customer identifier ', + name: 'crowdstrike.metadata.customerIDString', type: 'keyword', }, - 'rsa.internal.lc_cid': { - category: 'rsa', - description: - 'This is a unique Identifier of a Log Collector. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.lc_cid', + 'crowdstrike.metadata.version': { + category: 'crowdstrike', + description: 'Schema version ', + name: 'crowdstrike.metadata.version', type: 'keyword', }, - 'rsa.internal.lc_ctime': { - category: 'rsa', - description: - 'This is the time at which a log is collected in a NetWitness Log Collector. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.lc_ctime', + 'crowdstrike.event.ProcessStartTime': { + category: 'crowdstrike', + description: 'The process start time in UTC UNIX_MS format. ', + name: 'crowdstrike.event.ProcessStartTime', type: 'date', }, - 'rsa.internal.mcb_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte request is simply which byte for each side (0 thru 255) was seen the most', - name: 'rsa.internal.mcb_req', - type: 'long', - }, - 'rsa.internal.mcb_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte response is simply which byte for each side (0 thru 255) was seen the most', - name: 'rsa.internal.mcb_res', - type: 'long', + 'crowdstrike.event.ProcessEndTime': { + category: 'crowdstrike', + description: 'The process termination time in UTC UNIX_MS format. ', + name: 'crowdstrike.event.ProcessEndTime', + type: 'date', }, - 'rsa.internal.mcbc_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte count is the number of times the most common byte (above) was seen in the session streams', - name: 'rsa.internal.mcbc_req', - type: 'long', + 'crowdstrike.event.ProcessId': { + category: 'crowdstrike', + description: 'Process ID related to the detection. ', + name: 'crowdstrike.event.ProcessId', + type: 'integer', }, - 'rsa.internal.mcbc_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the most common byte count is the number of times the most common byte (above) was seen in the session streams', - name: 'rsa.internal.mcbc_res', - type: 'long', + 'crowdstrike.event.ParentProcessId': { + category: 'crowdstrike', + description: 'Parent process ID related to the detection. ', + name: 'crowdstrike.event.ParentProcessId', + type: 'integer', }, - 'rsa.internal.medium': { - category: 'rsa', - description: - 'This key is used to identify if it’s a log/packet session or Layer 2 Encapsulation Type. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness. 32 = log, 33 = correlation session, < 32 is packet session', - name: 'rsa.internal.medium', - type: 'long', + 'crowdstrike.event.ComputerName': { + category: 'crowdstrike', + description: 'Name of the computer where the detection occurred. ', + name: 'crowdstrike.event.ComputerName', + type: 'keyword', }, - 'rsa.internal.node_name': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.node_name', + 'crowdstrike.event.UserName': { + category: 'crowdstrike', + description: 'User name associated with the detection. ', + name: 'crowdstrike.event.UserName', type: 'keyword', }, - 'rsa.internal.nwe_callback_id': { - category: 'rsa', - description: 'This key denotes that event is endpoint related', - name: 'rsa.internal.nwe_callback_id', + 'crowdstrike.event.DetectName': { + category: 'crowdstrike', + description: 'Name of the detection. ', + name: 'crowdstrike.event.DetectName', type: 'keyword', }, - 'rsa.internal.parse_error': { - category: 'rsa', - description: - 'This is a special key that stores any Meta key validation error found while parsing a log session. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.parse_error', + 'crowdstrike.event.DetectDescription': { + category: 'crowdstrike', + description: 'Description of the detection. ', + name: 'crowdstrike.event.DetectDescription', type: 'keyword', }, - 'rsa.internal.payload_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the payload size metrics are the payload sizes of each session side at the time of parsing. However, in order to keep', - name: 'rsa.internal.payload_req', - type: 'long', + 'crowdstrike.event.Severity': { + category: 'crowdstrike', + description: 'Severity score of the detection. ', + name: 'crowdstrike.event.Severity', + type: 'integer', }, - 'rsa.internal.payload_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, the payload size metrics are the payload sizes of each session side at the time of parsing. However, in order to keep', - name: 'rsa.internal.payload_res', - type: 'long', + 'crowdstrike.event.SeverityName': { + category: 'crowdstrike', + description: 'Severity score text. ', + name: 'crowdstrike.event.SeverityName', + type: 'keyword', }, - 'rsa.internal.process_vid_dst': { - category: 'rsa', - description: - 'Endpoint generates and uses a unique virtual ID to identify any similar group of process. This ID represents the target process.', - name: 'rsa.internal.process_vid_dst', + 'crowdstrike.event.FileName': { + category: 'crowdstrike', + description: 'File name of the associated process for the detection. ', + name: 'crowdstrike.event.FileName', type: 'keyword', }, - 'rsa.internal.process_vid_src': { - category: 'rsa', - description: - 'Endpoint generates and uses a unique virtual ID to identify any similar group of process. This ID represents the source process.', - name: 'rsa.internal.process_vid_src', + 'crowdstrike.event.FilePath': { + category: 'crowdstrike', + description: 'Path of the executable associated with the detection. ', + name: 'crowdstrike.event.FilePath', type: 'keyword', }, - 'rsa.internal.rid': { - category: 'rsa', - description: - 'This is a special ID of the Remote Session created by NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.rid', - type: 'long', + 'crowdstrike.event.CommandLine': { + category: 'crowdstrike', + description: 'Executable path with command line arguments. ', + name: 'crowdstrike.event.CommandLine', + type: 'keyword', }, - 'rsa.internal.session_split': { - category: 'rsa', - description: - 'This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.session_split', + 'crowdstrike.event.SHA1String': { + category: 'crowdstrike', + description: 'SHA1 sum of the executable associated with the detection. ', + name: 'crowdstrike.event.SHA1String', type: 'keyword', }, - 'rsa.internal.site': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.internal.site', + 'crowdstrike.event.SHA256String': { + category: 'crowdstrike', + description: 'SHA256 sum of the executable associated with the detection. ', + name: 'crowdstrike.event.SHA256String', type: 'keyword', }, - 'rsa.internal.size': { - category: 'rsa', - description: - 'This is the size of the session as seen by the NetWitness Decoder. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.size', - type: 'long', + 'crowdstrike.event.MD5String': { + category: 'crowdstrike', + description: 'MD5 sum of the executable associated with the detection. ', + name: 'crowdstrike.event.MD5String', + type: 'keyword', }, - 'rsa.internal.sourcefile': { - category: 'rsa', - description: - 'This is the name of the log file or PCAPs that can be imported into NetWitness. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.internal.sourcefile', + 'crowdstrike.event.MachineDomain': { + category: 'crowdstrike', + description: 'Domain for the machine associated with the detection. ', + name: 'crowdstrike.event.MachineDomain', type: 'keyword', }, - 'rsa.internal.ubc_req': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, Unique byte count is the number of unique bytes seen in each stream. 256 would mean all byte values of 0 thru 255 were seen at least once', - name: 'rsa.internal.ubc_req', - type: 'long', + 'crowdstrike.event.FalconHostLink': { + category: 'crowdstrike', + description: 'URL to view the detection in Falcon. ', + name: 'crowdstrike.event.FalconHostLink', + type: 'keyword', }, - 'rsa.internal.ubc_res': { - category: 'rsa', - description: - 'This key is only used by the Entropy Parser, Unique byte count is the number of unique bytes seen in each stream. 256 would mean all byte values of 0 thru 255 were seen at least once', - name: 'rsa.internal.ubc_res', - type: 'long', + 'crowdstrike.event.SensorId': { + category: 'crowdstrike', + description: 'Unique ID associated with the Falcon sensor. ', + name: 'crowdstrike.event.SensorId', + type: 'keyword', }, - 'rsa.internal.word': { - category: 'rsa', - description: - 'This is used by the Word Parsing technology to capture the first 5 character of every word in an unparsed log', - name: 'rsa.internal.word', + 'crowdstrike.event.DetectId': { + category: 'crowdstrike', + description: 'Unique ID associated with the detection. ', + name: 'crowdstrike.event.DetectId', type: 'keyword', }, - 'rsa.time.event_time': { - category: 'rsa', - description: - 'This key is used to capture the time mentioned in a raw session that represents the actual time an event occured in a standard normalized form', - name: 'rsa.time.event_time', - type: 'date', + 'crowdstrike.event.LocalIP': { + category: 'crowdstrike', + description: 'IP address of the host associated with the detection. ', + name: 'crowdstrike.event.LocalIP', + type: 'keyword', }, - 'rsa.time.duration_time': { - category: 'rsa', - description: 'This key is used to capture the normalized duration/lifetime in seconds.', - name: 'rsa.time.duration_time', - type: 'double', + 'crowdstrike.event.MACAddress': { + category: 'crowdstrike', + description: 'MAC address of the host associated with the detection. ', + name: 'crowdstrike.event.MACAddress', + type: 'keyword', }, - 'rsa.time.event_time_str': { - category: 'rsa', - description: - 'This key is used to capture the incomplete time mentioned in a session as a string', - name: 'rsa.time.event_time_str', + 'crowdstrike.event.Tactic': { + category: 'crowdstrike', + description: 'MITRE tactic category of the detection. ', + name: 'crowdstrike.event.Tactic', type: 'keyword', }, - 'rsa.time.starttime': { - category: 'rsa', - description: - 'This key is used to capture the Start time mentioned in a session in a standard form', - name: 'rsa.time.starttime', - type: 'date', + 'crowdstrike.event.Technique': { + category: 'crowdstrike', + description: 'MITRE technique category of the detection. ', + name: 'crowdstrike.event.Technique', + type: 'keyword', }, - 'rsa.time.month': { - category: 'rsa', - name: 'rsa.time.month', + 'crowdstrike.event.Objective': { + category: 'crowdstrike', + description: 'Method of detection. ', + name: 'crowdstrike.event.Objective', type: 'keyword', }, - 'rsa.time.day': { - category: 'rsa', - name: 'rsa.time.day', + 'crowdstrike.event.PatternDispositionDescription': { + category: 'crowdstrike', + description: 'Action taken by Falcon. ', + name: 'crowdstrike.event.PatternDispositionDescription', type: 'keyword', }, - 'rsa.time.endtime': { - category: 'rsa', - description: - 'This key is used to capture the End time mentioned in a session in a standard form', - name: 'rsa.time.endtime', + 'crowdstrike.event.PatternDispositionValue': { + category: 'crowdstrike', + description: 'Unique ID associated with action taken. ', + name: 'crowdstrike.event.PatternDispositionValue', + type: 'integer', + }, + 'crowdstrike.event.PatternDispositionFlags': { + category: 'crowdstrike', + description: 'Flags indicating actions taken. ', + name: 'crowdstrike.event.PatternDispositionFlags', + type: 'object', + }, + 'crowdstrike.event.State': { + category: 'crowdstrike', + description: 'Whether the incident summary is open and ongoing or closed. ', + name: 'crowdstrike.event.State', + type: 'keyword', + }, + 'crowdstrike.event.IncidentStartTime': { + category: 'crowdstrike', + description: 'Start time for the incident in UTC UNIX format. ', + name: 'crowdstrike.event.IncidentStartTime', type: 'date', }, - 'rsa.time.timezone': { - category: 'rsa', - description: 'This key is used to capture the timezone of the Event Time', - name: 'rsa.time.timezone', + 'crowdstrike.event.IncidentEndTime': { + category: 'crowdstrike', + description: 'End time for the incident in UTC UNIX format. ', + name: 'crowdstrike.event.IncidentEndTime', + type: 'date', + }, + 'crowdstrike.event.FineScore': { + category: 'crowdstrike', + description: 'Score for incident. ', + name: 'crowdstrike.event.FineScore', + type: 'float', + }, + 'crowdstrike.event.UserId': { + category: 'crowdstrike', + description: 'Email address or user ID associated with the event. ', + name: 'crowdstrike.event.UserId', type: 'keyword', }, - 'rsa.time.duration_str': { - category: 'rsa', - description: 'A text string version of the duration', - name: 'rsa.time.duration_str', + 'crowdstrike.event.UserIp': { + category: 'crowdstrike', + description: 'IP address associated with the user. ', + name: 'crowdstrike.event.UserIp', type: 'keyword', }, - 'rsa.time.date': { - category: 'rsa', - name: 'rsa.time.date', + 'crowdstrike.event.OperationName': { + category: 'crowdstrike', + description: 'Event subtype. ', + name: 'crowdstrike.event.OperationName', type: 'keyword', }, - 'rsa.time.year': { - category: 'rsa', - name: 'rsa.time.year', + 'crowdstrike.event.ServiceName': { + category: 'crowdstrike', + description: 'Service associated with this event. ', + name: 'crowdstrike.event.ServiceName', type: 'keyword', }, - 'rsa.time.recorded_time': { - category: 'rsa', - description: - "The event time as recorded by the system the event is collected from. The usage scenario is a multi-tier application where the management layer of the system records it's own timestamp at the time of collection from its child nodes. Must be in timestamp format.", - name: 'rsa.time.recorded_time', + 'crowdstrike.event.Success': { + category: 'crowdstrike', + description: 'Indicator of whether or not this event was successful. ', + name: 'crowdstrike.event.Success', + type: 'boolean', + }, + 'crowdstrike.event.UTCTimestamp': { + category: 'crowdstrike', + description: 'Timestamp associated with this event in UTC UNIX format. ', + name: 'crowdstrike.event.UTCTimestamp', type: 'date', }, - 'rsa.time.datetime': { - category: 'rsa', - name: 'rsa.time.datetime', + 'crowdstrike.event.AuditKeyValues': { + category: 'crowdstrike', + description: 'Fields that were changed in this event. ', + name: 'crowdstrike.event.AuditKeyValues', + type: 'nested', + }, + 'crowdstrike.event.ExecutablesWritten': { + category: 'crowdstrike', + description: 'Detected executables written to disk by a process. ', + name: 'crowdstrike.event.ExecutablesWritten', + type: 'nested', + }, + 'crowdstrike.event.SessionId': { + category: 'crowdstrike', + description: 'Session ID of the remote response session. ', + name: 'crowdstrike.event.SessionId', type: 'keyword', }, - 'rsa.time.effective_time': { - category: 'rsa', - description: - 'This key is the effective time referenced by an individual event in a Standard Timestamp format', - name: 'rsa.time.effective_time', + 'crowdstrike.event.HostnameField': { + category: 'crowdstrike', + description: 'Host name of the machine for the remote session. ', + name: 'crowdstrike.event.HostnameField', + type: 'keyword', + }, + 'crowdstrike.event.StartTimestamp': { + category: 'crowdstrike', + description: 'Start time for the remote session in UTC UNIX format. ', + name: 'crowdstrike.event.StartTimestamp', type: 'date', }, - 'rsa.time.expire_time': { - category: 'rsa', - description: 'This key is the timestamp that explicitly refers to an expiration.', - name: 'rsa.time.expire_time', + 'crowdstrike.event.EndTimestamp': { + category: 'crowdstrike', + description: 'End time for the remote session in UTC UNIX format. ', + name: 'crowdstrike.event.EndTimestamp', type: 'date', }, - 'rsa.time.process_time': { - category: 'rsa', - description: 'Deprecated, use duration.time', - name: 'rsa.time.process_time', + 'crowdstrike.event.LateralMovement': { + category: 'crowdstrike', + description: 'Lateral movement field for incident. ', + name: 'crowdstrike.event.LateralMovement', + type: 'long', + }, + 'crowdstrike.event.ParentImageFileName': { + category: 'crowdstrike', + description: 'Path to the parent process. ', + name: 'crowdstrike.event.ParentImageFileName', type: 'keyword', }, - 'rsa.time.hour': { - category: 'rsa', - name: 'rsa.time.hour', + 'crowdstrike.event.ParentCommandLine': { + category: 'crowdstrike', + description: 'Parent process command line arguments. ', + name: 'crowdstrike.event.ParentCommandLine', type: 'keyword', }, - 'rsa.time.min': { - category: 'rsa', - name: 'rsa.time.min', + 'crowdstrike.event.GrandparentImageFileName': { + category: 'crowdstrike', + description: 'Path to the grandparent process. ', + name: 'crowdstrike.event.GrandparentImageFileName', type: 'keyword', }, - 'rsa.time.timestamp': { - category: 'rsa', - name: 'rsa.time.timestamp', + 'crowdstrike.event.GrandparentCommandLine': { + category: 'crowdstrike', + description: 'Grandparent process command line arguments. ', + name: 'crowdstrike.event.GrandparentCommandLine', type: 'keyword', }, - 'rsa.time.event_queue_time': { - category: 'rsa', - description: 'This key is the Time that the event was queued.', - name: 'rsa.time.event_queue_time', - type: 'date', + 'crowdstrike.event.IOCType': { + category: 'crowdstrike', + description: 'CrowdStrike type for indicator of compromise. ', + name: 'crowdstrike.event.IOCType', + type: 'keyword', }, - 'rsa.time.p_time1': { - category: 'rsa', - name: 'rsa.time.p_time1', + 'crowdstrike.event.IOCValue': { + category: 'crowdstrike', + description: 'CrowdStrike value for indicator of compromise. ', + name: 'crowdstrike.event.IOCValue', type: 'keyword', }, - 'rsa.time.tzone': { - category: 'rsa', - name: 'rsa.time.tzone', + 'crowdstrike.event.CustomerId': { + category: 'crowdstrike', + description: 'Customer identifier. ', + name: 'crowdstrike.event.CustomerId', type: 'keyword', }, - 'rsa.time.eventtime': { - category: 'rsa', - name: 'rsa.time.eventtime', + 'crowdstrike.event.DeviceId': { + category: 'crowdstrike', + description: 'Device on which the event occurred. ', + name: 'crowdstrike.event.DeviceId', type: 'keyword', }, - 'rsa.time.gmtdate': { - category: 'rsa', - name: 'rsa.time.gmtdate', + 'crowdstrike.event.Ipv': { + category: 'crowdstrike', + description: 'Protocol for network request. ', + name: 'crowdstrike.event.Ipv', type: 'keyword', }, - 'rsa.time.gmttime': { - category: 'rsa', - name: 'rsa.time.gmttime', + 'crowdstrike.event.ConnectionDirection': { + category: 'crowdstrike', + description: 'Direction for network connection. ', + name: 'crowdstrike.event.ConnectionDirection', type: 'keyword', }, - 'rsa.time.p_date': { - category: 'rsa', - name: 'rsa.time.p_date', + 'crowdstrike.event.EventType': { + category: 'crowdstrike', + description: 'CrowdStrike provided event type. ', + name: 'crowdstrike.event.EventType', type: 'keyword', }, - 'rsa.time.p_month': { - category: 'rsa', - name: 'rsa.time.p_month', + 'crowdstrike.event.HostName': { + category: 'crowdstrike', + description: 'Host name of the local machine. ', + name: 'crowdstrike.event.HostName', type: 'keyword', }, - 'rsa.time.p_time': { - category: 'rsa', - name: 'rsa.time.p_time', + 'crowdstrike.event.ICMPCode': { + category: 'crowdstrike', + description: 'RFC2780 ICMP Code field. ', + name: 'crowdstrike.event.ICMPCode', type: 'keyword', }, - 'rsa.time.p_time2': { - category: 'rsa', - name: 'rsa.time.p_time2', + 'crowdstrike.event.ICMPType': { + category: 'crowdstrike', + description: 'RFC2780 ICMP Type field. ', + name: 'crowdstrike.event.ICMPType', type: 'keyword', }, - 'rsa.time.p_year': { - category: 'rsa', - name: 'rsa.time.p_year', + 'crowdstrike.event.ImageFileName': { + category: 'crowdstrike', + description: 'File name of the associated process for the detection. ', + name: 'crowdstrike.event.ImageFileName', type: 'keyword', }, - 'rsa.time.expire_time_str': { - category: 'rsa', - description: - 'This key is used to capture incomplete timestamp that explicitly refers to an expiration.', - name: 'rsa.time.expire_time_str', - type: 'keyword', + 'crowdstrike.event.PID': { + category: 'crowdstrike', + description: 'Associated process id for the detection. ', + name: 'crowdstrike.event.PID', + type: 'long', }, - 'rsa.time.stamp': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.time.stamp', - type: 'date', + 'crowdstrike.event.LocalAddress': { + category: 'crowdstrike', + description: 'IP address of local machine. ', + name: 'crowdstrike.event.LocalAddress', + type: 'ip', }, - 'rsa.misc.action': { - category: 'rsa', - name: 'rsa.misc.action', - type: 'keyword', + 'crowdstrike.event.LocalPort': { + category: 'crowdstrike', + description: 'Port of local machine. ', + name: 'crowdstrike.event.LocalPort', + type: 'long', }, - 'rsa.misc.result': { - category: 'rsa', - description: - 'This key is used to capture the outcome/result string value of an action in a session.', - name: 'rsa.misc.result', - type: 'keyword', + 'crowdstrike.event.RemoteAddress': { + category: 'crowdstrike', + description: 'IP address of remote machine. ', + name: 'crowdstrike.event.RemoteAddress', + type: 'ip', }, - 'rsa.misc.severity': { - category: 'rsa', - description: 'This key is used to capture the severity given the session', - name: 'rsa.misc.severity', - type: 'keyword', + 'crowdstrike.event.RemotePort': { + category: 'crowdstrike', + description: 'Port of remote machine. ', + name: 'crowdstrike.event.RemotePort', + type: 'long', }, - 'rsa.misc.event_type': { - category: 'rsa', - description: 'This key captures the event category type as specified by the event source.', - name: 'rsa.misc.event_type', + 'crowdstrike.event.RuleAction': { + category: 'crowdstrike', + description: 'Firewall rule action. ', + name: 'crowdstrike.event.RuleAction', type: 'keyword', }, - 'rsa.misc.reference_id': { - category: 'rsa', - description: 'This key is used to capture an event id from the session directly', - name: 'rsa.misc.reference_id', + 'crowdstrike.event.RuleDescription': { + category: 'crowdstrike', + description: 'Firewall rule description. ', + name: 'crowdstrike.event.RuleDescription', type: 'keyword', }, - 'rsa.misc.version': { - category: 'rsa', - description: - 'This key captures Version of the application or OS which is generating the event.', - name: 'rsa.misc.version', + 'crowdstrike.event.RuleFamilyID': { + category: 'crowdstrike', + description: 'Firewall rule family id. ', + name: 'crowdstrike.event.RuleFamilyID', type: 'keyword', }, - 'rsa.misc.disposition': { - category: 'rsa', - description: 'This key captures the The end state of an action.', - name: 'rsa.misc.disposition', + 'crowdstrike.event.RuleGroupName': { + category: 'crowdstrike', + description: 'Firewall rule group name. ', + name: 'crowdstrike.event.RuleGroupName', type: 'keyword', }, - 'rsa.misc.result_code': { - category: 'rsa', - description: - 'This key is used to capture the outcome/result numeric value of an action in a session', - name: 'rsa.misc.result_code', + 'crowdstrike.event.RuleName': { + category: 'crowdstrike', + description: 'Firewall rule name. ', + name: 'crowdstrike.event.RuleName', type: 'keyword', }, - 'rsa.misc.category': { - category: 'rsa', - description: - 'This key is used to capture the category of an event given by the vendor in the session', - name: 'rsa.misc.category', + 'crowdstrike.event.RuleId': { + category: 'crowdstrike', + description: 'Firewall rule id. ', + name: 'crowdstrike.event.RuleId', type: 'keyword', }, - 'rsa.misc.obj_name': { - category: 'rsa', - description: 'This is used to capture name of object', - name: 'rsa.misc.obj_name', - type: 'keyword', + 'crowdstrike.event.MatchCount': { + category: 'crowdstrike', + description: 'Number of firewall rule matches. ', + name: 'crowdstrike.event.MatchCount', + type: 'long', }, - 'rsa.misc.obj_type': { - category: 'rsa', - description: 'This is used to capture type of object', - name: 'rsa.misc.obj_type', - type: 'keyword', + 'crowdstrike.event.MatchCountSinceLastReport': { + category: 'crowdstrike', + description: 'Number of firewall rule matches since the last report. ', + name: 'crowdstrike.event.MatchCountSinceLastReport', + type: 'long', }, - 'rsa.misc.event_source': { - category: 'rsa', - description: 'This key captures Source of the event that’s not a hostname', - name: 'rsa.misc.event_source', - type: 'keyword', + 'crowdstrike.event.Timestamp': { + category: 'crowdstrike', + description: 'Firewall rule triggered timestamp. ', + name: 'crowdstrike.event.Timestamp', + type: 'date', }, - 'rsa.misc.log_session_id': { - category: 'rsa', - description: 'This key is used to capture a sessionid from the session directly', - name: 'rsa.misc.log_session_id', - type: 'keyword', + 'crowdstrike.event.Flags.Audit': { + category: 'crowdstrike', + description: 'CrowdStrike audit flag. ', + name: 'crowdstrike.event.Flags.Audit', + type: 'boolean', }, - 'rsa.misc.group': { - category: 'rsa', - description: 'This key captures the Group Name value', - name: 'rsa.misc.group', - type: 'keyword', + 'crowdstrike.event.Flags.Log': { + category: 'crowdstrike', + description: 'CrowdStrike log flag. ', + name: 'crowdstrike.event.Flags.Log', + type: 'boolean', }, - 'rsa.misc.policy_name': { - category: 'rsa', - description: 'This key is used to capture the Policy Name only.', - name: 'rsa.misc.policy_name', - type: 'keyword', + 'crowdstrike.event.Flags.Monitor': { + category: 'crowdstrike', + description: 'CrowdStrike monitor flag. ', + name: 'crowdstrike.event.Flags.Monitor', + type: 'boolean', }, - 'rsa.misc.rule_name': { - category: 'rsa', - description: 'This key captures the Rule Name', - name: 'rsa.misc.rule_name', + 'crowdstrike.event.Protocol': { + category: 'crowdstrike', + description: 'CrowdStrike provided protocol. ', + name: 'crowdstrike.event.Protocol', type: 'keyword', }, - 'rsa.misc.context': { - category: 'rsa', - description: 'This key captures Information which adds additional context to the event.', - name: 'rsa.misc.context', + 'crowdstrike.event.NetworkProfile': { + category: 'crowdstrike', + description: 'CrowdStrike network profile. ', + name: 'crowdstrike.event.NetworkProfile', type: 'keyword', }, - 'rsa.misc.change_new': { - category: 'rsa', - description: - 'This key is used to capture the new values of the attribute that’s changing in a session', - name: 'rsa.misc.change_new', + 'crowdstrike.event.PolicyName': { + category: 'crowdstrike', + description: 'CrowdStrike policy name. ', + name: 'crowdstrike.event.PolicyName', type: 'keyword', }, - 'rsa.misc.space': { - category: 'rsa', - name: 'rsa.misc.space', + 'crowdstrike.event.PolicyID': { + category: 'crowdstrike', + description: 'CrowdStrike policy id. ', + name: 'crowdstrike.event.PolicyID', type: 'keyword', }, - 'rsa.misc.client': { - category: 'rsa', - description: - 'This key is used to capture only the name of the client application requesting resources of the server. See the user.agent meta key for capture of the specific user agent identifier or browser identification string.', - name: 'rsa.misc.client', + 'crowdstrike.event.Status': { + category: 'crowdstrike', + description: 'CrowdStrike status. ', + name: 'crowdstrike.event.Status', type: 'keyword', }, - 'rsa.misc.msgIdPart1': { - category: 'rsa', - name: 'rsa.misc.msgIdPart1', + 'crowdstrike.event.TreeID': { + category: 'crowdstrike', + description: 'CrowdStrike tree id. ', + name: 'crowdstrike.event.TreeID', type: 'keyword', }, - 'rsa.misc.msgIdPart2': { - category: 'rsa', - name: 'rsa.misc.msgIdPart2', + 'crowdstrike.event.Commands': { + category: 'crowdstrike', + description: 'Commands run in a remote session. ', + name: 'crowdstrike.event.Commands', type: 'keyword', }, - 'rsa.misc.change_old': { - category: 'rsa', - description: - 'This key is used to capture the old value of the attribute that’s changing in a session', - name: 'rsa.misc.change_old', + 'cyberarkpas.audit.action': { + category: 'cyberarkpas', + description: 'A description of the audit record.', + name: 'cyberarkpas.audit.action', type: 'keyword', }, - 'rsa.misc.operation_id': { - category: 'rsa', - description: - 'An alert number or operation number. The values should be unique and non-repeating.', - name: 'rsa.misc.operation_id', + 'cyberarkpas.audit.ca_properties.address': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.address', type: 'keyword', }, - 'rsa.misc.event_state': { - category: 'rsa', - description: - 'This key captures the current state of the object/item referenced within the event. Describing an on-going event.', - name: 'rsa.misc.event_state', + 'cyberarkpas.audit.ca_properties.cpm_disabled': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.cpm_disabled', type: 'keyword', }, - 'rsa.misc.group_object': { - category: 'rsa', - description: 'This key captures a collection/grouping of entities. Specific usage', - name: 'rsa.misc.group_object', + 'cyberarkpas.audit.ca_properties.cpm_error_details': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.cpm_error_details', type: 'keyword', }, - 'rsa.misc.node': { - category: 'rsa', - description: - 'Common use case is the node name within a cluster. The cluster name is reflected by the host name.', - name: 'rsa.misc.node', + 'cyberarkpas.audit.ca_properties.cpm_status': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.cpm_status', type: 'keyword', }, - 'rsa.misc.rule': { - category: 'rsa', - description: 'This key captures the Rule number', - name: 'rsa.misc.rule', + 'cyberarkpas.audit.ca_properties.creation_method': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.creation_method', type: 'keyword', }, - 'rsa.misc.device_name': { - category: 'rsa', - description: - 'This is used to capture name of the Device associated with the node Like: a physical disk, printer, etc', - name: 'rsa.misc.device_name', + 'cyberarkpas.audit.ca_properties.customer': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.customer', type: 'keyword', }, - 'rsa.misc.param': { - category: 'rsa', - description: 'This key is the parameters passed as part of a command or application, etc.', - name: 'rsa.misc.param', + 'cyberarkpas.audit.ca_properties.database': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.database', type: 'keyword', }, - 'rsa.misc.change_attrib': { - category: 'rsa', - description: - 'This key is used to capture the name of the attribute that’s changing in a session', - name: 'rsa.misc.change_attrib', + 'cyberarkpas.audit.ca_properties.device_type': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.device_type', type: 'keyword', }, - 'rsa.misc.event_computer': { - category: 'rsa', - description: - 'This key is a windows only concept, where this key is used to capture fully qualified domain name in a windows log.', - name: 'rsa.misc.event_computer', + 'cyberarkpas.audit.ca_properties.dual_account_status': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.dual_account_status', type: 'keyword', }, - 'rsa.misc.reference_id1': { - category: 'rsa', - description: 'This key is for Linked ID to be used as an addition to "reference.id"', - name: 'rsa.misc.reference_id1', + 'cyberarkpas.audit.ca_properties.group_name': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.group_name', type: 'keyword', }, - 'rsa.misc.event_log': { - category: 'rsa', - description: 'This key captures the Name of the event log', - name: 'rsa.misc.event_log', + 'cyberarkpas.audit.ca_properties.in_process': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.in_process', type: 'keyword', }, - 'rsa.misc.OS': { - category: 'rsa', - description: 'This key captures the Name of the Operating System', - name: 'rsa.misc.OS', + 'cyberarkpas.audit.ca_properties.index': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.index', type: 'keyword', }, - 'rsa.misc.terminal': { - category: 'rsa', - description: 'This key captures the Terminal Names only', - name: 'rsa.misc.terminal', + 'cyberarkpas.audit.ca_properties.last_fail_date': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.last_fail_date', type: 'keyword', }, - 'rsa.misc.msgIdPart3': { - category: 'rsa', - name: 'rsa.misc.msgIdPart3', + 'cyberarkpas.audit.ca_properties.last_success_change': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.last_success_change', type: 'keyword', }, - 'rsa.misc.filter': { - category: 'rsa', - description: 'This key captures Filter used to reduce result set', - name: 'rsa.misc.filter', + 'cyberarkpas.audit.ca_properties.last_success_reconciliation': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.last_success_reconciliation', type: 'keyword', }, - 'rsa.misc.serial_number': { - category: 'rsa', - description: 'This key is the Serial number associated with a physical asset.', - name: 'rsa.misc.serial_number', + 'cyberarkpas.audit.ca_properties.last_success_verification': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.last_success_verification', type: 'keyword', }, - 'rsa.misc.checksum': { - category: 'rsa', - description: - 'This key is used to capture the checksum or hash of the entity such as a file or process. Checksum should be used over checksum.src or checksum.dst when it is unclear whether the entity is a source or target of an action.', - name: 'rsa.misc.checksum', + 'cyberarkpas.audit.ca_properties.last_task': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.last_task', type: 'keyword', }, - 'rsa.misc.event_user': { - category: 'rsa', - description: - 'This key is a windows only concept, where this key is used to capture combination of domain name and username in a windows log.', - name: 'rsa.misc.event_user', + 'cyberarkpas.audit.ca_properties.logon_domain': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.logon_domain', type: 'keyword', }, - 'rsa.misc.virusname': { - category: 'rsa', - description: 'This key captures the name of the virus', - name: 'rsa.misc.virusname', + 'cyberarkpas.audit.ca_properties.policy_id': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.policy_id', type: 'keyword', }, - 'rsa.misc.content_type': { - category: 'rsa', - description: 'This key is used to capture Content Type only.', - name: 'rsa.misc.content_type', + 'cyberarkpas.audit.ca_properties.port': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.port', type: 'keyword', }, - 'rsa.misc.group_id': { - category: 'rsa', - description: 'This key captures Group ID Number (related to the group name)', - name: 'rsa.misc.group_id', + 'cyberarkpas.audit.ca_properties.privcloud': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.privcloud', type: 'keyword', }, - 'rsa.misc.policy_id': { - category: 'rsa', - description: - 'This key is used to capture the Policy ID only, this should be a numeric value, use policy.name otherwise', - name: 'rsa.misc.policy_id', + 'cyberarkpas.audit.ca_properties.reset_immediately': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.reset_immediately', type: 'keyword', }, - 'rsa.misc.vsys': { - category: 'rsa', - description: 'This key captures Virtual System Name', - name: 'rsa.misc.vsys', + 'cyberarkpas.audit.ca_properties.retries_count': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.retries_count', type: 'keyword', }, - 'rsa.misc.connection_id': { - category: 'rsa', - description: 'This key captures the Connection ID', - name: 'rsa.misc.connection_id', + 'cyberarkpas.audit.ca_properties.sequence_id': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.sequence_id', type: 'keyword', }, - 'rsa.misc.reference_id2': { - category: 'rsa', - description: - 'This key is for the 2nd Linked ID. Can be either linked to "reference.id" or "reference.id1" value but should not be used unless the other two variables are in play.', - name: 'rsa.misc.reference_id2', + 'cyberarkpas.audit.ca_properties.tags': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.tags', type: 'keyword', }, - 'rsa.misc.sensor': { - category: 'rsa', - description: 'This key captures Name of the sensor. Typically used in IDS/IPS based devices', - name: 'rsa.misc.sensor', + 'cyberarkpas.audit.ca_properties.user_dn': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.user_dn', type: 'keyword', }, - 'rsa.misc.sig_id': { - category: 'rsa', - description: 'This key captures IDS/IPS Int Signature ID', - name: 'rsa.misc.sig_id', - type: 'long', - }, - 'rsa.misc.port_name': { - category: 'rsa', - description: - 'This key is used for Physical or logical port connection but does NOT include a network port. (Example: Printer port name).', - name: 'rsa.misc.port_name', + 'cyberarkpas.audit.ca_properties.user_name': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.user_name', type: 'keyword', }, - 'rsa.misc.rule_group': { - category: 'rsa', - description: 'This key captures the Rule group name', - name: 'rsa.misc.rule_group', + 'cyberarkpas.audit.ca_properties.virtual_username': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.virtual_username', type: 'keyword', }, - 'rsa.misc.risk_num': { - category: 'rsa', - description: 'This key captures a Numeric Risk value', - name: 'rsa.misc.risk_num', - type: 'double', + 'cyberarkpas.audit.ca_properties.other': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.ca_properties.other', + type: 'flattened', }, - 'rsa.misc.trigger_val': { - category: 'rsa', - description: 'This key captures the Value of the trigger or threshold condition.', - name: 'rsa.misc.trigger_val', + 'cyberarkpas.audit.category': { + category: 'cyberarkpas', + description: 'The category name (for category-related operations).', + name: 'cyberarkpas.audit.category', type: 'keyword', }, - 'rsa.misc.log_session_id1': { - category: 'rsa', - description: - 'This key is used to capture a Linked (Related) Session ID from the session directly', - name: 'rsa.misc.log_session_id1', + 'cyberarkpas.audit.desc': { + category: 'cyberarkpas', + description: 'A static value that displays a description of the audit codes.', + name: 'cyberarkpas.audit.desc', type: 'keyword', }, - 'rsa.misc.comp_version': { - category: 'rsa', - description: 'This key captures the Version level of a sub-component of a product.', - name: 'rsa.misc.comp_version', + 'cyberarkpas.audit.extra_details.ad_process_id': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.ad_process_id', type: 'keyword', }, - 'rsa.misc.content_version': { - category: 'rsa', - description: 'This key captures Version level of a signature or database content.', - name: 'rsa.misc.content_version', + 'cyberarkpas.audit.extra_details.ad_process_name': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.ad_process_name', type: 'keyword', }, - 'rsa.misc.hardware_id': { - category: 'rsa', - description: - 'This key is used to capture unique identifier for a device or system (NOT a Mac address)', - name: 'rsa.misc.hardware_id', + 'cyberarkpas.audit.extra_details.application_type': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.application_type', type: 'keyword', }, - 'rsa.misc.risk': { - category: 'rsa', - description: 'This key captures the non-numeric risk value', - name: 'rsa.misc.risk', + 'cyberarkpas.audit.extra_details.command': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.command', type: 'keyword', }, - 'rsa.misc.event_id': { - category: 'rsa', - name: 'rsa.misc.event_id', + 'cyberarkpas.audit.extra_details.connection_component_id': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.connection_component_id', type: 'keyword', }, - 'rsa.misc.reason': { - category: 'rsa', - name: 'rsa.misc.reason', + 'cyberarkpas.audit.extra_details.dst_host': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.dst_host', type: 'keyword', }, - 'rsa.misc.status': { - category: 'rsa', - name: 'rsa.misc.status', + 'cyberarkpas.audit.extra_details.logon_account': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.logon_account', type: 'keyword', }, - 'rsa.misc.mail_id': { - category: 'rsa', - description: 'This key is used to capture the mailbox id/name', - name: 'rsa.misc.mail_id', + 'cyberarkpas.audit.extra_details.managed_account': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.managed_account', type: 'keyword', }, - 'rsa.misc.rule_uid': { - category: 'rsa', - description: 'This key is the Unique Identifier for a rule.', - name: 'rsa.misc.rule_uid', + 'cyberarkpas.audit.extra_details.process_id': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.process_id', type: 'keyword', }, - 'rsa.misc.trigger_desc': { - category: 'rsa', - description: 'This key captures the Description of the trigger or threshold condition.', - name: 'rsa.misc.trigger_desc', + 'cyberarkpas.audit.extra_details.process_name': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.process_name', type: 'keyword', }, - 'rsa.misc.inout': { - category: 'rsa', - name: 'rsa.misc.inout', + 'cyberarkpas.audit.extra_details.protocol': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.protocol', type: 'keyword', }, - 'rsa.misc.p_msgid': { - category: 'rsa', - name: 'rsa.misc.p_msgid', + 'cyberarkpas.audit.extra_details.psmid': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.psmid', type: 'keyword', }, - 'rsa.misc.data_type': { - category: 'rsa', - name: 'rsa.misc.data_type', + 'cyberarkpas.audit.extra_details.session_duration': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.session_duration', type: 'keyword', }, - 'rsa.misc.msgIdPart4': { - category: 'rsa', - name: 'rsa.misc.msgIdPart4', + 'cyberarkpas.audit.extra_details.session_id': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.session_id', type: 'keyword', }, - 'rsa.misc.error': { - category: 'rsa', - description: 'This key captures All non successful Error codes or responses', - name: 'rsa.misc.error', + 'cyberarkpas.audit.extra_details.src_host': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.src_host', type: 'keyword', }, - 'rsa.misc.index': { - category: 'rsa', - name: 'rsa.misc.index', + 'cyberarkpas.audit.extra_details.username': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.username', type: 'keyword', }, - 'rsa.misc.listnum': { - category: 'rsa', - description: - 'This key is used to capture listname or listnumber, primarily for collecting access-list', - name: 'rsa.misc.listnum', - type: 'keyword', + 'cyberarkpas.audit.extra_details.other': { + category: 'cyberarkpas', + name: 'cyberarkpas.audit.extra_details.other', + type: 'flattened', }, - 'rsa.misc.ntype': { - category: 'rsa', - name: 'rsa.misc.ntype', + 'cyberarkpas.audit.file': { + category: 'cyberarkpas', + description: 'The name of the target file.', + name: 'cyberarkpas.audit.file', type: 'keyword', }, - 'rsa.misc.observed_val': { - category: 'rsa', - description: - 'This key captures the Value observed (from the perspective of the device generating the log).', - name: 'rsa.misc.observed_val', - type: 'keyword', + 'cyberarkpas.audit.gateway_station': { + category: 'cyberarkpas', + description: 'The IP of the web application machine (PVWA).', + name: 'cyberarkpas.audit.gateway_station', + type: 'ip', }, - 'rsa.misc.policy_value': { - category: 'rsa', - description: - 'This key captures the contents of the policy. This contains details about the policy', - name: 'rsa.misc.policy_value', + 'cyberarkpas.audit.hostname': { + category: 'cyberarkpas', + description: 'The hostname, in upper case.', + example: 'MY-COMPUTER', + name: 'cyberarkpas.audit.hostname', type: 'keyword', }, - 'rsa.misc.pool_name': { - category: 'rsa', - description: 'This key captures the name of a resource pool', - name: 'rsa.misc.pool_name', - type: 'keyword', + 'cyberarkpas.audit.iso_timestamp': { + category: 'cyberarkpas', + description: 'The timestamp, in ISO Timestamp format (RFC 3339).', + example: '"2013-06-25T10:47:19.000Z"', + name: 'cyberarkpas.audit.iso_timestamp', + type: 'date', }, - 'rsa.misc.rule_template': { - category: 'rsa', + 'cyberarkpas.audit.issuer': { + category: 'cyberarkpas', description: - 'A default set of parameters which are overlayed onto a rule (or rulename) which efffectively constitutes a template', - name: 'rsa.misc.rule_template', - type: 'keyword', - }, - 'rsa.misc.count': { - category: 'rsa', - name: 'rsa.misc.count', + 'The Vault user who wrote the audit. This is usually the user who performed the operation.', + name: 'cyberarkpas.audit.issuer', type: 'keyword', }, - 'rsa.misc.number': { - category: 'rsa', - name: 'rsa.misc.number', + 'cyberarkpas.audit.location': { + category: 'cyberarkpas', + description: 'The target Location (for Location operations).', + name: 'cyberarkpas.audit.location', type: 'keyword', }, - 'rsa.misc.sigcat': { - category: 'rsa', - name: 'rsa.misc.sigcat', + 'cyberarkpas.audit.message': { + category: 'cyberarkpas', + description: 'A description of the audit records (same information as in the Desc field).', + name: 'cyberarkpas.audit.message', type: 'keyword', }, - 'rsa.misc.type': { - category: 'rsa', - name: 'rsa.misc.type', + 'cyberarkpas.audit.message_id': { + category: 'cyberarkpas', + description: 'The code ID of the audit records.', + name: 'cyberarkpas.audit.message_id', type: 'keyword', }, - 'rsa.misc.comments': { - category: 'rsa', - description: 'Comment information provided in the log message', - name: 'rsa.misc.comments', + 'cyberarkpas.audit.product': { + category: 'cyberarkpas', + description: 'A static value that represents the product.', + name: 'cyberarkpas.audit.product', type: 'keyword', }, - 'rsa.misc.doc_number': { - category: 'rsa', - description: 'This key captures File Identification number', - name: 'rsa.misc.doc_number', - type: 'long', + 'cyberarkpas.audit.pvwa_details': { + category: 'cyberarkpas', + description: 'Specific details of the PVWA audit records.', + name: 'cyberarkpas.audit.pvwa_details', + type: 'flattened', }, - 'rsa.misc.expected_val': { - category: 'rsa', + 'cyberarkpas.audit.raw': { + category: 'cyberarkpas', description: - 'This key captures the Value expected (from the perspective of the device generating the log).', - name: 'rsa.misc.expected_val', + 'Raw XML for the original audit record. Only present when XSLT file has debugging enabled. ', + name: 'cyberarkpas.audit.raw', type: 'keyword', }, - 'rsa.misc.job_num': { - category: 'rsa', - description: 'This key captures the Job Number', - name: 'rsa.misc.job_num', - type: 'keyword', + 'cyberarkpas.audit.reason': { + category: 'cyberarkpas', + description: 'The reason entered by the user.', + name: 'cyberarkpas.audit.reason', + type: 'text', }, - 'rsa.misc.spi_dst': { - category: 'rsa', - description: 'Destination SPI Index', - name: 'rsa.misc.spi_dst', - type: 'keyword', + 'cyberarkpas.audit.rfc5424': { + category: 'cyberarkpas', + description: 'Whether the syslog format complies with RFC5424.', + example: 'yes', + name: 'cyberarkpas.audit.rfc5424', + type: 'boolean', }, - 'rsa.misc.spi_src': { - category: 'rsa', - description: 'Source SPI Index', - name: 'rsa.misc.spi_src', + 'cyberarkpas.audit.safe': { + category: 'cyberarkpas', + description: 'The name of the target Safe.', + name: 'cyberarkpas.audit.safe', type: 'keyword', }, - 'rsa.misc.code': { - category: 'rsa', - name: 'rsa.misc.code', + 'cyberarkpas.audit.severity': { + category: 'cyberarkpas', + description: 'The severity of the audit records.', + name: 'cyberarkpas.audit.severity', type: 'keyword', }, - 'rsa.misc.agent_id': { - category: 'rsa', - description: 'This key is used to capture agent id', - name: 'rsa.misc.agent_id', + 'cyberarkpas.audit.source_user': { + category: 'cyberarkpas', + description: 'The name of the Vault user who performed the operation.', + name: 'cyberarkpas.audit.source_user', type: 'keyword', }, - 'rsa.misc.message_body': { - category: 'rsa', - description: 'This key captures the The contents of the message body.', - name: 'rsa.misc.message_body', + 'cyberarkpas.audit.station': { + category: 'cyberarkpas', + description: + 'The IP from where the operation was performed. For PVWA sessions, this will be the real client machine IP.', + name: 'cyberarkpas.audit.station', + type: 'ip', + }, + 'cyberarkpas.audit.target_user': { + category: 'cyberarkpas', + description: 'The name of the Vault user on which the operation was performed.', + name: 'cyberarkpas.audit.target_user', type: 'keyword', }, - 'rsa.misc.phone': { - category: 'rsa', - name: 'rsa.misc.phone', + 'cyberarkpas.audit.timestamp': { + category: 'cyberarkpas', + description: 'The timestamp, in MMM DD HH:MM:SS format.', + example: 'Jun 25 10:47:19', + name: 'cyberarkpas.audit.timestamp', type: 'keyword', }, - 'rsa.misc.sig_id_str': { - category: 'rsa', - description: 'This key captures a string object of the sigid variable.', - name: 'rsa.misc.sig_id_str', + 'cyberarkpas.audit.vendor': { + category: 'cyberarkpas', + description: 'A static value that represents the vendor.', + name: 'cyberarkpas.audit.vendor', type: 'keyword', }, - 'rsa.misc.cmd': { - category: 'rsa', - name: 'rsa.misc.cmd', + 'cyberarkpas.audit.version': { + category: 'cyberarkpas', + description: 'A static value that represents the version of the Vault.', + name: 'cyberarkpas.audit.version', type: 'keyword', }, - 'rsa.misc.misc': { - category: 'rsa', - name: 'rsa.misc.misc', + 'envoyproxy.log_type': { + category: 'envoyproxy', + description: 'Envoy log type, normally ACCESS ', + name: 'envoyproxy.log_type', type: 'keyword', }, - 'rsa.misc.name': { - category: 'rsa', - name: 'rsa.misc.name', + 'envoyproxy.response_flags': { + category: 'envoyproxy', + description: 'Response flags ', + name: 'envoyproxy.response_flags', type: 'keyword', }, - 'rsa.misc.cpu': { - category: 'rsa', - description: 'This key is the CPU time used in the execution of the event being recorded.', - name: 'rsa.misc.cpu', + 'envoyproxy.upstream_service_time': { + category: 'envoyproxy', + description: 'Upstream service time in nanoseconds ', + name: 'envoyproxy.upstream_service_time', type: 'long', + format: 'duration', }, - 'rsa.misc.event_desc': { - category: 'rsa', - description: - 'This key is used to capture a description of an event available directly or inferred', - name: 'rsa.misc.event_desc', + 'envoyproxy.request_id': { + category: 'envoyproxy', + description: 'ID of the request ', + name: 'envoyproxy.request_id', type: 'keyword', }, - 'rsa.misc.sig_id1': { - category: 'rsa', - description: 'This key captures IDS/IPS Int Signature ID. This must be linked to the sig.id', - name: 'rsa.misc.sig_id1', - type: 'long', - }, - 'rsa.misc.im_buddyid': { - category: 'rsa', - name: 'rsa.misc.im_buddyid', + 'envoyproxy.authority': { + category: 'envoyproxy', + description: 'Envoy proxy authority field ', + name: 'envoyproxy.authority', type: 'keyword', }, - 'rsa.misc.im_client': { - category: 'rsa', - name: 'rsa.misc.im_client', + 'envoyproxy.proxy_type': { + category: 'envoyproxy', + description: 'Envoy proxy type, tcp or http ', + name: 'envoyproxy.proxy_type', type: 'keyword', }, - 'rsa.misc.im_userid': { - category: 'rsa', - name: 'rsa.misc.im_userid', + 'fortinet.file.hash.crc32': { + category: 'fortinet', + description: 'CRC32 Hash of file ', + name: 'fortinet.file.hash.crc32', type: 'keyword', }, - 'rsa.misc.pid': { - category: 'rsa', - name: 'rsa.misc.pid', + 'fortinet.firewall.acct_stat': { + category: 'fortinet', + description: 'Accounting state (RADIUS) ', + name: 'fortinet.firewall.acct_stat', type: 'keyword', }, - 'rsa.misc.priority': { - category: 'rsa', - name: 'rsa.misc.priority', + 'fortinet.firewall.acktime': { + category: 'fortinet', + description: 'Alarm Acknowledge Time ', + name: 'fortinet.firewall.acktime', type: 'keyword', }, - 'rsa.misc.context_subject': { - category: 'rsa', - description: - 'This key is to be used in an audit context where the subject is the object being identified', - name: 'rsa.misc.context_subject', + 'fortinet.firewall.act': { + category: 'fortinet', + description: 'Action ', + name: 'fortinet.firewall.act', type: 'keyword', }, - 'rsa.misc.context_target': { - category: 'rsa', - name: 'rsa.misc.context_target', + 'fortinet.firewall.action': { + category: 'fortinet', + description: 'Status of the session ', + name: 'fortinet.firewall.action', type: 'keyword', }, - 'rsa.misc.cve': { - category: 'rsa', - description: - 'This key captures CVE (Common Vulnerabilities and Exposures) - an identifier for known information security vulnerabilities.', - name: 'rsa.misc.cve', + 'fortinet.firewall.activity': { + category: 'fortinet', + description: 'HA activity message ', + name: 'fortinet.firewall.activity', type: 'keyword', }, - 'rsa.misc.fcatnum': { - category: 'rsa', - description: 'This key captures Filter Category Number. Legacy Usage', - name: 'rsa.misc.fcatnum', + 'fortinet.firewall.addr': { + category: 'fortinet', + description: 'IP Address ', + name: 'fortinet.firewall.addr', + type: 'ip', + }, + 'fortinet.firewall.addr_type': { + category: 'fortinet', + description: 'Address Type ', + name: 'fortinet.firewall.addr_type', type: 'keyword', }, - 'rsa.misc.library': { - category: 'rsa', - description: 'This key is used to capture library information in mainframe devices', - name: 'rsa.misc.library', + 'fortinet.firewall.addrgrp': { + category: 'fortinet', + description: 'Address Group ', + name: 'fortinet.firewall.addrgrp', type: 'keyword', }, - 'rsa.misc.parent_node': { - category: 'rsa', - description: 'This key captures the Parent Node Name. Must be related to node variable.', - name: 'rsa.misc.parent_node', + 'fortinet.firewall.adgroup': { + category: 'fortinet', + description: 'AD Group Name ', + name: 'fortinet.firewall.adgroup', type: 'keyword', }, - 'rsa.misc.risk_info': { - category: 'rsa', - description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.risk_info', + 'fortinet.firewall.admin': { + category: 'fortinet', + description: 'Admin User ', + name: 'fortinet.firewall.admin', type: 'keyword', }, - 'rsa.misc.tcp_flags': { - category: 'rsa', - description: 'This key is captures the TCP flags set in any packet of session', - name: 'rsa.misc.tcp_flags', - type: 'long', + 'fortinet.firewall.age': { + category: 'fortinet', + description: 'Time in seconds - time passed since last seen ', + name: 'fortinet.firewall.age', + type: 'integer', }, - 'rsa.misc.tos': { - category: 'rsa', - description: 'This key describes the type of service', - name: 'rsa.misc.tos', - type: 'long', + 'fortinet.firewall.agent': { + category: 'fortinet', + description: 'User agent - eg. agent="Mozilla/5.0" ', + name: 'fortinet.firewall.agent', + type: 'keyword', }, - 'rsa.misc.vm_target': { - category: 'rsa', - description: 'VMWare Target **VMWARE** only varaible.', - name: 'rsa.misc.vm_target', + 'fortinet.firewall.alarmid': { + category: 'fortinet', + description: 'Alarm ID ', + name: 'fortinet.firewall.alarmid', + type: 'integer', + }, + 'fortinet.firewall.alert': { + category: 'fortinet', + description: 'Alert ', + name: 'fortinet.firewall.alert', type: 'keyword', }, - 'rsa.misc.workspace': { - category: 'rsa', - description: 'This key captures Workspace Description', - name: 'rsa.misc.workspace', + 'fortinet.firewall.analyticscksum': { + category: 'fortinet', + description: 'The checksum of the file submitted for analytics ', + name: 'fortinet.firewall.analyticscksum', type: 'keyword', }, - 'rsa.misc.command': { - category: 'rsa', - name: 'rsa.misc.command', + 'fortinet.firewall.analyticssubmit': { + category: 'fortinet', + description: 'The flag for analytics submission ', + name: 'fortinet.firewall.analyticssubmit', type: 'keyword', }, - 'rsa.misc.event_category': { - category: 'rsa', - name: 'rsa.misc.event_category', + 'fortinet.firewall.ap': { + category: 'fortinet', + description: 'Access Point ', + name: 'fortinet.firewall.ap', type: 'keyword', }, - 'rsa.misc.facilityname': { - category: 'rsa', - name: 'rsa.misc.facilityname', + 'fortinet.firewall.app-type': { + category: 'fortinet', + description: 'Address Type ', + name: 'fortinet.firewall.app-type', type: 'keyword', }, - 'rsa.misc.forensic_info': { - category: 'rsa', - name: 'rsa.misc.forensic_info', + 'fortinet.firewall.appact': { + category: 'fortinet', + description: 'The security action from app control ', + name: 'fortinet.firewall.appact', type: 'keyword', }, - 'rsa.misc.jobname': { - category: 'rsa', - name: 'rsa.misc.jobname', + 'fortinet.firewall.appid': { + category: 'fortinet', + description: 'Application ID ', + name: 'fortinet.firewall.appid', + type: 'integer', + }, + 'fortinet.firewall.applist': { + category: 'fortinet', + description: 'Application Control profile ', + name: 'fortinet.firewall.applist', type: 'keyword', }, - 'rsa.misc.mode': { - category: 'rsa', - name: 'rsa.misc.mode', + 'fortinet.firewall.apprisk': { + category: 'fortinet', + description: 'Application Risk Level ', + name: 'fortinet.firewall.apprisk', type: 'keyword', }, - 'rsa.misc.policy': { - category: 'rsa', - name: 'rsa.misc.policy', + 'fortinet.firewall.apscan': { + category: 'fortinet', + description: 'The name of the AP, which scanned and detected the rogue AP ', + name: 'fortinet.firewall.apscan', type: 'keyword', }, - 'rsa.misc.policy_waiver': { - category: 'rsa', - name: 'rsa.misc.policy_waiver', + 'fortinet.firewall.apsn': { + category: 'fortinet', + description: 'Access Point ', + name: 'fortinet.firewall.apsn', type: 'keyword', }, - 'rsa.misc.second': { - category: 'rsa', - name: 'rsa.misc.second', + 'fortinet.firewall.apstatus': { + category: 'fortinet', + description: 'Access Point status ', + name: 'fortinet.firewall.apstatus', type: 'keyword', }, - 'rsa.misc.space1': { - category: 'rsa', - name: 'rsa.misc.space1', + 'fortinet.firewall.aptype': { + category: 'fortinet', + description: 'Access Point type ', + name: 'fortinet.firewall.aptype', type: 'keyword', }, - 'rsa.misc.subcategory': { - category: 'rsa', - name: 'rsa.misc.subcategory', + 'fortinet.firewall.assigned': { + category: 'fortinet', + description: 'Assigned IP Address ', + name: 'fortinet.firewall.assigned', + type: 'ip', + }, + 'fortinet.firewall.assignip': { + category: 'fortinet', + description: 'Assigned IP Address ', + name: 'fortinet.firewall.assignip', + type: 'ip', + }, + 'fortinet.firewall.attachment': { + category: 'fortinet', + description: 'The flag for email attachement ', + name: 'fortinet.firewall.attachment', type: 'keyword', }, - 'rsa.misc.tbdstr2': { - category: 'rsa', - name: 'rsa.misc.tbdstr2', + 'fortinet.firewall.attack': { + category: 'fortinet', + description: 'Attack Name ', + name: 'fortinet.firewall.attack', type: 'keyword', }, - 'rsa.misc.alert_id': { - category: 'rsa', - description: 'Deprecated, New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.alert_id', + 'fortinet.firewall.attackcontext': { + category: 'fortinet', + description: 'The trigger patterns and the packetdata with base64 encoding ', + name: 'fortinet.firewall.attackcontext', type: 'keyword', }, - 'rsa.misc.checksum_dst': { - category: 'rsa', - description: - 'This key is used to capture the checksum or hash of the the target entity such as a process or file.', - name: 'rsa.misc.checksum_dst', + 'fortinet.firewall.attackcontextid': { + category: 'fortinet', + description: 'Attack context id / total ', + name: 'fortinet.firewall.attackcontextid', type: 'keyword', }, - 'rsa.misc.checksum_src': { - category: 'rsa', - description: - 'This key is used to capture the checksum or hash of the source entity such as a file or process.', - name: 'rsa.misc.checksum_src', + 'fortinet.firewall.attackid': { + category: 'fortinet', + description: 'Attack ID ', + name: 'fortinet.firewall.attackid', + type: 'integer', + }, + 'fortinet.firewall.auditid': { + category: 'fortinet', + description: 'Audit ID ', + name: 'fortinet.firewall.auditid', + type: 'long', + }, + 'fortinet.firewall.auditscore': { + category: 'fortinet', + description: 'The Audit Score ', + name: 'fortinet.firewall.auditscore', type: 'keyword', }, - 'rsa.misc.fresult': { - category: 'rsa', - description: 'This key captures the Filter Result', - name: 'rsa.misc.fresult', + 'fortinet.firewall.audittime': { + category: 'fortinet', + description: 'The time of the audit ', + name: 'fortinet.firewall.audittime', type: 'long', }, - 'rsa.misc.payload_dst': { - category: 'rsa', - description: 'This key is used to capture destination payload', - name: 'rsa.misc.payload_dst', + 'fortinet.firewall.authgrp': { + category: 'fortinet', + description: 'Authorization Group ', + name: 'fortinet.firewall.authgrp', type: 'keyword', }, - 'rsa.misc.payload_src': { - category: 'rsa', - description: 'This key is used to capture source payload', - name: 'rsa.misc.payload_src', + 'fortinet.firewall.authid': { + category: 'fortinet', + description: 'Authentication ID ', + name: 'fortinet.firewall.authid', type: 'keyword', }, - 'rsa.misc.pool_id': { - category: 'rsa', - description: 'This key captures the identifier (typically numeric field) of a resource pool', - name: 'rsa.misc.pool_id', + 'fortinet.firewall.authproto': { + category: 'fortinet', + description: 'The protocol that initiated the authentication ', + name: 'fortinet.firewall.authproto', type: 'keyword', }, - 'rsa.misc.process_id_val': { - category: 'rsa', - description: 'This key is a failure key for Process ID when it is not an integer value', - name: 'rsa.misc.process_id_val', + 'fortinet.firewall.authserver': { + category: 'fortinet', + description: 'Authentication server ', + name: 'fortinet.firewall.authserver', type: 'keyword', }, - 'rsa.misc.risk_num_comm': { - category: 'rsa', - description: 'This key captures Risk Number Community', - name: 'rsa.misc.risk_num_comm', - type: 'double', + 'fortinet.firewall.bandwidth': { + category: 'fortinet', + description: 'Bandwidth ', + name: 'fortinet.firewall.bandwidth', + type: 'keyword', }, - 'rsa.misc.risk_num_next': { - category: 'rsa', - description: 'This key captures Risk Number NextGen', - name: 'rsa.misc.risk_num_next', - type: 'double', + 'fortinet.firewall.banned_rule': { + category: 'fortinet', + description: 'NAC quarantine Banned Rule Name ', + name: 'fortinet.firewall.banned_rule', + type: 'keyword', }, - 'rsa.misc.risk_num_sand': { - category: 'rsa', - description: 'This key captures Risk Number SandBox', - name: 'rsa.misc.risk_num_sand', - type: 'double', + 'fortinet.firewall.banned_src': { + category: 'fortinet', + description: 'NAC quarantine Banned Source IP ', + name: 'fortinet.firewall.banned_src', + type: 'keyword', }, - 'rsa.misc.risk_num_static': { - category: 'rsa', - description: 'This key captures Risk Number Static', - name: 'rsa.misc.risk_num_static', - type: 'double', + 'fortinet.firewall.banword': { + category: 'fortinet', + description: 'Banned word ', + name: 'fortinet.firewall.banword', + type: 'keyword', }, - 'rsa.misc.risk_suspicious': { - category: 'rsa', - description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.risk_suspicious', + 'fortinet.firewall.botnetdomain': { + category: 'fortinet', + description: 'Botnet Domain Name ', + name: 'fortinet.firewall.botnetdomain', type: 'keyword', }, - 'rsa.misc.risk_warning': { - category: 'rsa', - description: 'Deprecated, use New Hunting Model (inv.*, ioc, boc, eoc, analysis.*)', - name: 'rsa.misc.risk_warning', + 'fortinet.firewall.botnetip': { + category: 'fortinet', + description: 'Botnet IP Address ', + name: 'fortinet.firewall.botnetip', + type: 'ip', + }, + 'fortinet.firewall.bssid': { + category: 'fortinet', + description: 'Service Set ID ', + name: 'fortinet.firewall.bssid', type: 'keyword', }, - 'rsa.misc.snmp_oid': { - category: 'rsa', - description: 'SNMP Object Identifier', - name: 'rsa.misc.snmp_oid', + 'fortinet.firewall.call_id': { + category: 'fortinet', + description: 'Caller ID ', + name: 'fortinet.firewall.call_id', type: 'keyword', }, - 'rsa.misc.sql': { - category: 'rsa', - description: 'This key captures the SQL query', - name: 'rsa.misc.sql', + 'fortinet.firewall.carrier_ep': { + category: 'fortinet', + description: 'The FortiOS Carrier end-point identification ', + name: 'fortinet.firewall.carrier_ep', type: 'keyword', }, - 'rsa.misc.vuln_ref': { - category: 'rsa', - description: 'This key captures the Vulnerability Reference details', - name: 'rsa.misc.vuln_ref', + 'fortinet.firewall.cat': { + category: 'fortinet', + description: 'DNS category ID ', + name: 'fortinet.firewall.cat', + type: 'integer', + }, + 'fortinet.firewall.category': { + category: 'fortinet', + description: 'Authentication category ', + name: 'fortinet.firewall.category', type: 'keyword', }, - 'rsa.misc.acl_id': { - category: 'rsa', - name: 'rsa.misc.acl_id', + 'fortinet.firewall.cc': { + category: 'fortinet', + description: 'CC Email Address ', + name: 'fortinet.firewall.cc', type: 'keyword', }, - 'rsa.misc.acl_op': { - category: 'rsa', - name: 'rsa.misc.acl_op', + 'fortinet.firewall.cdrcontent': { + category: 'fortinet', + description: 'Cdrcontent ', + name: 'fortinet.firewall.cdrcontent', + type: 'keyword', + }, + 'fortinet.firewall.centralnatid': { + category: 'fortinet', + description: 'Central NAT ID ', + name: 'fortinet.firewall.centralnatid', + type: 'integer', + }, + 'fortinet.firewall.cert': { + category: 'fortinet', + description: 'Certificate ', + name: 'fortinet.firewall.cert', + type: 'keyword', + }, + 'fortinet.firewall.cert-type': { + category: 'fortinet', + description: 'Certificate type ', + name: 'fortinet.firewall.cert-type', + type: 'keyword', + }, + 'fortinet.firewall.certhash': { + category: 'fortinet', + description: 'Certificate hash ', + name: 'fortinet.firewall.certhash', type: 'keyword', }, - 'rsa.misc.acl_pos': { - category: 'rsa', - name: 'rsa.misc.acl_pos', + 'fortinet.firewall.cfgattr': { + category: 'fortinet', + description: 'Configuration attribute ', + name: 'fortinet.firewall.cfgattr', type: 'keyword', }, - 'rsa.misc.acl_table': { - category: 'rsa', - name: 'rsa.misc.acl_table', + 'fortinet.firewall.cfgobj': { + category: 'fortinet', + description: 'Configuration object ', + name: 'fortinet.firewall.cfgobj', type: 'keyword', }, - 'rsa.misc.admin': { - category: 'rsa', - name: 'rsa.misc.admin', + 'fortinet.firewall.cfgpath': { + category: 'fortinet', + description: 'Configuration path ', + name: 'fortinet.firewall.cfgpath', type: 'keyword', }, - 'rsa.misc.alarm_id': { - category: 'rsa', - name: 'rsa.misc.alarm_id', + 'fortinet.firewall.cfgtid': { + category: 'fortinet', + description: 'Configuration transaction ID ', + name: 'fortinet.firewall.cfgtid', type: 'keyword', }, - 'rsa.misc.alarmname': { - category: 'rsa', - name: 'rsa.misc.alarmname', - type: 'keyword', + 'fortinet.firewall.cfgtxpower': { + category: 'fortinet', + description: 'Configuration TX power ', + name: 'fortinet.firewall.cfgtxpower', + type: 'integer', }, - 'rsa.misc.app_id': { - category: 'rsa', - name: 'rsa.misc.app_id', - type: 'keyword', + 'fortinet.firewall.channel': { + category: 'fortinet', + description: 'Wireless Channel ', + name: 'fortinet.firewall.channel', + type: 'integer', }, - 'rsa.misc.audit': { - category: 'rsa', - name: 'rsa.misc.audit', + 'fortinet.firewall.channeltype': { + category: 'fortinet', + description: 'SSH channel type ', + name: 'fortinet.firewall.channeltype', type: 'keyword', }, - 'rsa.misc.audit_object': { - category: 'rsa', - name: 'rsa.misc.audit_object', - type: 'keyword', + 'fortinet.firewall.chassisid': { + category: 'fortinet', + description: 'Chassis ID ', + name: 'fortinet.firewall.chassisid', + type: 'integer', }, - 'rsa.misc.auditdata': { - category: 'rsa', - name: 'rsa.misc.auditdata', + 'fortinet.firewall.checksum': { + category: 'fortinet', + description: 'The checksum of the scanned file ', + name: 'fortinet.firewall.checksum', type: 'keyword', }, - 'rsa.misc.benchmark': { - category: 'rsa', - name: 'rsa.misc.benchmark', + 'fortinet.firewall.chgheaders': { + category: 'fortinet', + description: 'HTTP Headers ', + name: 'fortinet.firewall.chgheaders', type: 'keyword', }, - 'rsa.misc.bypass': { - category: 'rsa', - name: 'rsa.misc.bypass', + 'fortinet.firewall.cldobjid': { + category: 'fortinet', + description: 'Connector object ID ', + name: 'fortinet.firewall.cldobjid', type: 'keyword', }, - 'rsa.misc.cache': { - category: 'rsa', - name: 'rsa.misc.cache', + 'fortinet.firewall.client_addr': { + category: 'fortinet', + description: 'Wifi client address ', + name: 'fortinet.firewall.client_addr', type: 'keyword', }, - 'rsa.misc.cache_hit': { - category: 'rsa', - name: 'rsa.misc.cache_hit', + 'fortinet.firewall.cloudaction': { + category: 'fortinet', + description: 'Cloud Action ', + name: 'fortinet.firewall.cloudaction', type: 'keyword', }, - 'rsa.misc.cefversion': { - category: 'rsa', - name: 'rsa.misc.cefversion', + 'fortinet.firewall.clouduser': { + category: 'fortinet', + description: 'Cloud User ', + name: 'fortinet.firewall.clouduser', type: 'keyword', }, - 'rsa.misc.cfg_attr': { - category: 'rsa', - name: 'rsa.misc.cfg_attr', - type: 'keyword', + 'fortinet.firewall.column': { + category: 'fortinet', + description: 'VOIP Column ', + name: 'fortinet.firewall.column', + type: 'integer', }, - 'rsa.misc.cfg_obj': { - category: 'rsa', - name: 'rsa.misc.cfg_obj', + 'fortinet.firewall.command': { + category: 'fortinet', + description: 'CLI Command ', + name: 'fortinet.firewall.command', type: 'keyword', }, - 'rsa.misc.cfg_path': { - category: 'rsa', - name: 'rsa.misc.cfg_path', + 'fortinet.firewall.community': { + category: 'fortinet', + description: 'SNMP Community ', + name: 'fortinet.firewall.community', type: 'keyword', }, - 'rsa.misc.changes': { - category: 'rsa', - name: 'rsa.misc.changes', + 'fortinet.firewall.configcountry': { + category: 'fortinet', + description: 'Configuration country ', + name: 'fortinet.firewall.configcountry', type: 'keyword', }, - 'rsa.misc.client_ip': { - category: 'rsa', - name: 'rsa.misc.client_ip', + 'fortinet.firewall.connection_type': { + category: 'fortinet', + description: 'FortiClient Connection Type ', + name: 'fortinet.firewall.connection_type', type: 'keyword', }, - 'rsa.misc.clustermembers': { - category: 'rsa', - name: 'rsa.misc.clustermembers', + 'fortinet.firewall.conserve': { + category: 'fortinet', + description: 'Flag for conserve mode ', + name: 'fortinet.firewall.conserve', type: 'keyword', }, - 'rsa.misc.cn_acttimeout': { - category: 'rsa', - name: 'rsa.misc.cn_acttimeout', + 'fortinet.firewall.constraint': { + category: 'fortinet', + description: 'WAF http protocol restrictions ', + name: 'fortinet.firewall.constraint', type: 'keyword', }, - 'rsa.misc.cn_asn_src': { - category: 'rsa', - name: 'rsa.misc.cn_asn_src', + 'fortinet.firewall.contentdisarmed': { + category: 'fortinet', + description: 'Email scanned content ', + name: 'fortinet.firewall.contentdisarmed', type: 'keyword', }, - 'rsa.misc.cn_bgpv4nxthop': { - category: 'rsa', - name: 'rsa.misc.cn_bgpv4nxthop', + 'fortinet.firewall.contenttype': { + category: 'fortinet', + description: 'Content Type from HTTP header ', + name: 'fortinet.firewall.contenttype', type: 'keyword', }, - 'rsa.misc.cn_ctr_dst_code': { - category: 'rsa', - name: 'rsa.misc.cn_ctr_dst_code', + 'fortinet.firewall.cookies': { + category: 'fortinet', + description: 'VPN Cookie ', + name: 'fortinet.firewall.cookies', type: 'keyword', }, - 'rsa.misc.cn_dst_tos': { - category: 'rsa', - name: 'rsa.misc.cn_dst_tos', - type: 'keyword', + 'fortinet.firewall.count': { + category: 'fortinet', + description: 'Counts of action type ', + name: 'fortinet.firewall.count', + type: 'integer', }, - 'rsa.misc.cn_dst_vlan': { - category: 'rsa', - name: 'rsa.misc.cn_dst_vlan', - type: 'keyword', + 'fortinet.firewall.countapp': { + category: 'fortinet', + description: 'Number of App Ctrl logs associated with the session ', + name: 'fortinet.firewall.countapp', + type: 'integer', }, - 'rsa.misc.cn_engine_id': { - category: 'rsa', - name: 'rsa.misc.cn_engine_id', - type: 'keyword', + 'fortinet.firewall.countav': { + category: 'fortinet', + description: 'Number of AV logs associated with the session ', + name: 'fortinet.firewall.countav', + type: 'integer', }, - 'rsa.misc.cn_engine_type': { - category: 'rsa', - name: 'rsa.misc.cn_engine_type', - type: 'keyword', + 'fortinet.firewall.countcifs': { + category: 'fortinet', + description: 'Number of CIFS logs associated with the session ', + name: 'fortinet.firewall.countcifs', + type: 'integer', }, - 'rsa.misc.cn_f_switch': { - category: 'rsa', - name: 'rsa.misc.cn_f_switch', - type: 'keyword', + 'fortinet.firewall.countdlp': { + category: 'fortinet', + description: 'Number of DLP logs associated with the session ', + name: 'fortinet.firewall.countdlp', + type: 'integer', }, - 'rsa.misc.cn_flowsampid': { - category: 'rsa', - name: 'rsa.misc.cn_flowsampid', - type: 'keyword', + 'fortinet.firewall.countdns': { + category: 'fortinet', + description: 'Number of DNS logs associated with the session ', + name: 'fortinet.firewall.countdns', + type: 'integer', }, - 'rsa.misc.cn_flowsampintv': { - category: 'rsa', - name: 'rsa.misc.cn_flowsampintv', - type: 'keyword', + 'fortinet.firewall.countemail': { + category: 'fortinet', + description: 'Number of email logs associated with the session ', + name: 'fortinet.firewall.countemail', + type: 'integer', }, - 'rsa.misc.cn_flowsampmode': { - category: 'rsa', - name: 'rsa.misc.cn_flowsampmode', - type: 'keyword', + 'fortinet.firewall.countff': { + category: 'fortinet', + description: 'Number of ff logs associated with the session ', + name: 'fortinet.firewall.countff', + type: 'integer', }, - 'rsa.misc.cn_inacttimeout': { - category: 'rsa', - name: 'rsa.misc.cn_inacttimeout', - type: 'keyword', + 'fortinet.firewall.countips': { + category: 'fortinet', + description: 'Number of IPS logs associated with the session ', + name: 'fortinet.firewall.countips', + type: 'integer', }, - 'rsa.misc.cn_inpermbyts': { - category: 'rsa', - name: 'rsa.misc.cn_inpermbyts', - type: 'keyword', + 'fortinet.firewall.countssh': { + category: 'fortinet', + description: 'Number of SSH logs associated with the session ', + name: 'fortinet.firewall.countssh', + type: 'integer', }, - 'rsa.misc.cn_inpermpckts': { - category: 'rsa', - name: 'rsa.misc.cn_inpermpckts', - type: 'keyword', + 'fortinet.firewall.countssl': { + category: 'fortinet', + description: 'Number of SSL logs associated with the session ', + name: 'fortinet.firewall.countssl', + type: 'integer', }, - 'rsa.misc.cn_invalid': { - category: 'rsa', - name: 'rsa.misc.cn_invalid', - type: 'keyword', + 'fortinet.firewall.countwaf': { + category: 'fortinet', + description: 'Number of WAF logs associated with the session ', + name: 'fortinet.firewall.countwaf', + type: 'integer', }, - 'rsa.misc.cn_ip_proto_ver': { - category: 'rsa', - name: 'rsa.misc.cn_ip_proto_ver', - type: 'keyword', + 'fortinet.firewall.countweb': { + category: 'fortinet', + description: 'Number of Web filter logs associated with the session ', + name: 'fortinet.firewall.countweb', + type: 'integer', }, - 'rsa.misc.cn_ipv4_ident': { - category: 'rsa', - name: 'rsa.misc.cn_ipv4_ident', - type: 'keyword', + 'fortinet.firewall.cpu': { + category: 'fortinet', + description: 'CPU Usage ', + name: 'fortinet.firewall.cpu', + type: 'integer', }, - 'rsa.misc.cn_l_switch': { - category: 'rsa', - name: 'rsa.misc.cn_l_switch', - type: 'keyword', + 'fortinet.firewall.craction': { + category: 'fortinet', + description: 'Client Reputation Action ', + name: 'fortinet.firewall.craction', + type: 'integer', }, - 'rsa.misc.cn_log_did': { - category: 'rsa', - name: 'rsa.misc.cn_log_did', - type: 'keyword', + 'fortinet.firewall.criticalcount': { + category: 'fortinet', + description: 'Number of critical ratings ', + name: 'fortinet.firewall.criticalcount', + type: 'integer', }, - 'rsa.misc.cn_log_rid': { - category: 'rsa', - name: 'rsa.misc.cn_log_rid', + 'fortinet.firewall.crl': { + category: 'fortinet', + description: 'Client Reputation Level ', + name: 'fortinet.firewall.crl', type: 'keyword', }, - 'rsa.misc.cn_max_ttl': { - category: 'rsa', - name: 'rsa.misc.cn_max_ttl', + 'fortinet.firewall.crlevel': { + category: 'fortinet', + description: 'Client Reputation Level ', + name: 'fortinet.firewall.crlevel', type: 'keyword', }, - 'rsa.misc.cn_maxpcktlen': { - category: 'rsa', - name: 'rsa.misc.cn_maxpcktlen', - type: 'keyword', + 'fortinet.firewall.crscore': { + category: 'fortinet', + description: 'Some description ', + name: 'fortinet.firewall.crscore', + type: 'integer', }, - 'rsa.misc.cn_min_ttl': { - category: 'rsa', - name: 'rsa.misc.cn_min_ttl', + 'fortinet.firewall.cveid': { + category: 'fortinet', + description: 'CVE ID ', + name: 'fortinet.firewall.cveid', type: 'keyword', }, - 'rsa.misc.cn_minpcktlen': { - category: 'rsa', - name: 'rsa.misc.cn_minpcktlen', + 'fortinet.firewall.daemon': { + category: 'fortinet', + description: 'Daemon name ', + name: 'fortinet.firewall.daemon', type: 'keyword', }, - 'rsa.misc.cn_mpls_lbl_1': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_1', + 'fortinet.firewall.datarange': { + category: 'fortinet', + description: 'Data range for reports ', + name: 'fortinet.firewall.datarange', type: 'keyword', }, - 'rsa.misc.cn_mpls_lbl_10': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_10', + 'fortinet.firewall.date': { + category: 'fortinet', + description: 'Date ', + name: 'fortinet.firewall.date', type: 'keyword', }, - 'rsa.misc.cn_mpls_lbl_2': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_2', - type: 'keyword', + 'fortinet.firewall.ddnsserver': { + category: 'fortinet', + description: 'DDNS server ', + name: 'fortinet.firewall.ddnsserver', + type: 'ip', }, - 'rsa.misc.cn_mpls_lbl_3': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_3', + 'fortinet.firewall.desc': { + category: 'fortinet', + description: 'Description ', + name: 'fortinet.firewall.desc', type: 'keyword', }, - 'rsa.misc.cn_mpls_lbl_4': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_4', + 'fortinet.firewall.detectionmethod': { + category: 'fortinet', + description: 'Detection method ', + name: 'fortinet.firewall.detectionmethod', type: 'keyword', }, - 'rsa.misc.cn_mpls_lbl_5': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_5', + 'fortinet.firewall.devcategory': { + category: 'fortinet', + description: 'Device category ', + name: 'fortinet.firewall.devcategory', type: 'keyword', }, - 'rsa.misc.cn_mpls_lbl_6': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_6', + 'fortinet.firewall.devintfname': { + category: 'fortinet', + description: 'HA device Interface Name ', + name: 'fortinet.firewall.devintfname', type: 'keyword', }, - 'rsa.misc.cn_mpls_lbl_7': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_7', + 'fortinet.firewall.devtype': { + category: 'fortinet', + description: 'Device type ', + name: 'fortinet.firewall.devtype', type: 'keyword', }, - 'rsa.misc.cn_mpls_lbl_8': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_8', + 'fortinet.firewall.dhcp_msg': { + category: 'fortinet', + description: 'DHCP Message ', + name: 'fortinet.firewall.dhcp_msg', type: 'keyword', }, - 'rsa.misc.cn_mpls_lbl_9': { - category: 'rsa', - name: 'rsa.misc.cn_mpls_lbl_9', + 'fortinet.firewall.dintf': { + category: 'fortinet', + description: 'Destination interface ', + name: 'fortinet.firewall.dintf', type: 'keyword', }, - 'rsa.misc.cn_mplstoplabel': { - category: 'rsa', - name: 'rsa.misc.cn_mplstoplabel', + 'fortinet.firewall.disk': { + category: 'fortinet', + description: 'Assosciated disk ', + name: 'fortinet.firewall.disk', type: 'keyword', }, - 'rsa.misc.cn_mplstoplabip': { - category: 'rsa', - name: 'rsa.misc.cn_mplstoplabip', - type: 'keyword', + 'fortinet.firewall.disklograte': { + category: 'fortinet', + description: 'Disk logging rate ', + name: 'fortinet.firewall.disklograte', + type: 'long', }, - 'rsa.misc.cn_mul_dst_byt': { - category: 'rsa', - name: 'rsa.misc.cn_mul_dst_byt', + 'fortinet.firewall.dlpextra': { + category: 'fortinet', + description: 'DLP extra information ', + name: 'fortinet.firewall.dlpextra', type: 'keyword', }, - 'rsa.misc.cn_mul_dst_pks': { - category: 'rsa', - name: 'rsa.misc.cn_mul_dst_pks', + 'fortinet.firewall.docsource': { + category: 'fortinet', + description: 'DLP fingerprint document source ', + name: 'fortinet.firewall.docsource', type: 'keyword', }, - 'rsa.misc.cn_muligmptype': { - category: 'rsa', - name: 'rsa.misc.cn_muligmptype', - type: 'keyword', + 'fortinet.firewall.domainctrlauthstate': { + category: 'fortinet', + description: 'CIFS domain auth state ', + name: 'fortinet.firewall.domainctrlauthstate', + type: 'integer', }, - 'rsa.misc.cn_sampalgo': { - category: 'rsa', - name: 'rsa.misc.cn_sampalgo', - type: 'keyword', + 'fortinet.firewall.domainctrlauthtype': { + category: 'fortinet', + description: 'CIFS domain auth type ', + name: 'fortinet.firewall.domainctrlauthtype', + type: 'integer', }, - 'rsa.misc.cn_sampint': { - category: 'rsa', - name: 'rsa.misc.cn_sampint', + 'fortinet.firewall.domainctrldomain': { + category: 'fortinet', + description: 'CIFS domain auth domain ', + name: 'fortinet.firewall.domainctrldomain', type: 'keyword', }, - 'rsa.misc.cn_seqctr': { - category: 'rsa', - name: 'rsa.misc.cn_seqctr', - type: 'keyword', + 'fortinet.firewall.domainctrlip': { + category: 'fortinet', + description: 'CIFS Domain IP ', + name: 'fortinet.firewall.domainctrlip', + type: 'ip', }, - 'rsa.misc.cn_spackets': { - category: 'rsa', - name: 'rsa.misc.cn_spackets', + 'fortinet.firewall.domainctrlname': { + category: 'fortinet', + description: 'CIFS Domain name ', + name: 'fortinet.firewall.domainctrlname', type: 'keyword', }, - 'rsa.misc.cn_src_tos': { - category: 'rsa', - name: 'rsa.misc.cn_src_tos', + 'fortinet.firewall.domainctrlprotocoltype': { + category: 'fortinet', + description: 'CIFS Domain connection protocol ', + name: 'fortinet.firewall.domainctrlprotocoltype', + type: 'integer', + }, + 'fortinet.firewall.domainctrlusername': { + category: 'fortinet', + description: 'CIFS Domain username ', + name: 'fortinet.firewall.domainctrlusername', type: 'keyword', }, - 'rsa.misc.cn_src_vlan': { - category: 'rsa', - name: 'rsa.misc.cn_src_vlan', - type: 'keyword', + 'fortinet.firewall.domainfilteridx': { + category: 'fortinet', + description: 'Domain filter ID ', + name: 'fortinet.firewall.domainfilteridx', + type: 'integer', }, - 'rsa.misc.cn_sysuptime': { - category: 'rsa', - name: 'rsa.misc.cn_sysuptime', + 'fortinet.firewall.domainfilterlist': { + category: 'fortinet', + description: 'Domain filter name ', + name: 'fortinet.firewall.domainfilterlist', type: 'keyword', }, - 'rsa.misc.cn_template_id': { - category: 'rsa', - name: 'rsa.misc.cn_template_id', + 'fortinet.firewall.ds': { + category: 'fortinet', + description: 'Direction with distribution system ', + name: 'fortinet.firewall.ds', type: 'keyword', }, - 'rsa.misc.cn_totbytsexp': { - category: 'rsa', - name: 'rsa.misc.cn_totbytsexp', + 'fortinet.firewall.dst_int': { + category: 'fortinet', + description: 'Destination interface ', + name: 'fortinet.firewall.dst_int', type: 'keyword', }, - 'rsa.misc.cn_totflowexp': { - category: 'rsa', - name: 'rsa.misc.cn_totflowexp', + 'fortinet.firewall.dstintfrole': { + category: 'fortinet', + description: 'Destination interface role ', + name: 'fortinet.firewall.dstintfrole', type: 'keyword', }, - 'rsa.misc.cn_totpcktsexp': { - category: 'rsa', - name: 'rsa.misc.cn_totpcktsexp', + 'fortinet.firewall.dstcountry': { + category: 'fortinet', + description: 'Destination country ', + name: 'fortinet.firewall.dstcountry', type: 'keyword', }, - 'rsa.misc.cn_unixnanosecs': { - category: 'rsa', - name: 'rsa.misc.cn_unixnanosecs', + 'fortinet.firewall.dstdevcategory': { + category: 'fortinet', + description: 'Destination device category ', + name: 'fortinet.firewall.dstdevcategory', type: 'keyword', }, - 'rsa.misc.cn_v6flowlabel': { - category: 'rsa', - name: 'rsa.misc.cn_v6flowlabel', + 'fortinet.firewall.dstdevtype': { + category: 'fortinet', + description: 'Destination device type ', + name: 'fortinet.firewall.dstdevtype', type: 'keyword', }, - 'rsa.misc.cn_v6optheaders': { - category: 'rsa', - name: 'rsa.misc.cn_v6optheaders', + 'fortinet.firewall.dstfamily': { + category: 'fortinet', + description: 'Destination OS family ', + name: 'fortinet.firewall.dstfamily', type: 'keyword', }, - 'rsa.misc.comp_class': { - category: 'rsa', - name: 'rsa.misc.comp_class', + 'fortinet.firewall.dsthwvendor': { + category: 'fortinet', + description: 'Destination HW vendor ', + name: 'fortinet.firewall.dsthwvendor', type: 'keyword', }, - 'rsa.misc.comp_name': { - category: 'rsa', - name: 'rsa.misc.comp_name', + 'fortinet.firewall.dsthwversion': { + category: 'fortinet', + description: 'Destination HW version ', + name: 'fortinet.firewall.dsthwversion', type: 'keyword', }, - 'rsa.misc.comp_rbytes': { - category: 'rsa', - name: 'rsa.misc.comp_rbytes', + 'fortinet.firewall.dstinetsvc': { + category: 'fortinet', + description: 'Destination interface service ', + name: 'fortinet.firewall.dstinetsvc', type: 'keyword', }, - 'rsa.misc.comp_sbytes': { - category: 'rsa', - name: 'rsa.misc.comp_sbytes', + 'fortinet.firewall.dstosname': { + category: 'fortinet', + description: 'Destination OS name ', + name: 'fortinet.firewall.dstosname', type: 'keyword', }, - 'rsa.misc.cpu_data': { - category: 'rsa', - name: 'rsa.misc.cpu_data', + 'fortinet.firewall.dstosversion': { + category: 'fortinet', + description: 'Destination OS version ', + name: 'fortinet.firewall.dstosversion', type: 'keyword', }, - 'rsa.misc.criticality': { - category: 'rsa', - name: 'rsa.misc.criticality', - type: 'keyword', + 'fortinet.firewall.dstserver': { + category: 'fortinet', + description: 'Destination server ', + name: 'fortinet.firewall.dstserver', + type: 'integer', }, - 'rsa.misc.cs_agency_dst': { - category: 'rsa', - name: 'rsa.misc.cs_agency_dst', + 'fortinet.firewall.dstssid': { + category: 'fortinet', + description: 'Destination SSID ', + name: 'fortinet.firewall.dstssid', type: 'keyword', }, - 'rsa.misc.cs_analyzedby': { - category: 'rsa', - name: 'rsa.misc.cs_analyzedby', + 'fortinet.firewall.dstswversion': { + category: 'fortinet', + description: 'Destination software version ', + name: 'fortinet.firewall.dstswversion', type: 'keyword', }, - 'rsa.misc.cs_av_other': { - category: 'rsa', - name: 'rsa.misc.cs_av_other', + 'fortinet.firewall.dstunauthusersource': { + category: 'fortinet', + description: 'Destination unauthenticated source ', + name: 'fortinet.firewall.dstunauthusersource', type: 'keyword', }, - 'rsa.misc.cs_av_primary': { - category: 'rsa', - name: 'rsa.misc.cs_av_primary', + 'fortinet.firewall.dstuuid': { + category: 'fortinet', + description: 'UUID of the Destination IP address ', + name: 'fortinet.firewall.dstuuid', type: 'keyword', }, - 'rsa.misc.cs_av_secondary': { - category: 'rsa', - name: 'rsa.misc.cs_av_secondary', + 'fortinet.firewall.duid': { + category: 'fortinet', + description: 'DHCP UID ', + name: 'fortinet.firewall.duid', type: 'keyword', }, - 'rsa.misc.cs_bgpv6nxthop': { - category: 'rsa', - name: 'rsa.misc.cs_bgpv6nxthop', - type: 'keyword', + 'fortinet.firewall.eapolcnt': { + category: 'fortinet', + description: 'EAPOL packet count ', + name: 'fortinet.firewall.eapolcnt', + type: 'integer', }, - 'rsa.misc.cs_bit9status': { - category: 'rsa', - name: 'rsa.misc.cs_bit9status', + 'fortinet.firewall.eapoltype': { + category: 'fortinet', + description: 'EAPOL packet type ', + name: 'fortinet.firewall.eapoltype', type: 'keyword', }, - 'rsa.misc.cs_context': { - category: 'rsa', - name: 'rsa.misc.cs_context', - type: 'keyword', + 'fortinet.firewall.encrypt': { + category: 'fortinet', + description: 'Whether the packet is encrypted or not ', + name: 'fortinet.firewall.encrypt', + type: 'integer', }, - 'rsa.misc.cs_control': { - category: 'rsa', - name: 'rsa.misc.cs_control', + 'fortinet.firewall.encryption': { + category: 'fortinet', + description: 'Encryption method ', + name: 'fortinet.firewall.encryption', type: 'keyword', }, - 'rsa.misc.cs_data': { - category: 'rsa', - name: 'rsa.misc.cs_data', - type: 'keyword', + 'fortinet.firewall.epoch': { + category: 'fortinet', + description: 'Epoch used for locating file ', + name: 'fortinet.firewall.epoch', + type: 'integer', }, - 'rsa.misc.cs_datecret': { - category: 'rsa', - name: 'rsa.misc.cs_datecret', + 'fortinet.firewall.espauth': { + category: 'fortinet', + description: 'ESP Authentication ', + name: 'fortinet.firewall.espauth', type: 'keyword', }, - 'rsa.misc.cs_dst_tld': { - category: 'rsa', - name: 'rsa.misc.cs_dst_tld', + 'fortinet.firewall.esptransform': { + category: 'fortinet', + description: 'ESP Transform ', + name: 'fortinet.firewall.esptransform', type: 'keyword', }, - 'rsa.misc.cs_eth_dst_ven': { - category: 'rsa', - name: 'rsa.misc.cs_eth_dst_ven', + 'fortinet.firewall.eventtype': { + category: 'fortinet', + description: 'UTM Event Type ', + name: 'fortinet.firewall.eventtype', type: 'keyword', }, - 'rsa.misc.cs_eth_src_ven': { - category: 'rsa', - name: 'rsa.misc.cs_eth_src_ven', + 'fortinet.firewall.exch': { + category: 'fortinet', + description: 'Mail Exchanges from DNS response answer section ', + name: 'fortinet.firewall.exch', type: 'keyword', }, - 'rsa.misc.cs_event_uuid': { - category: 'rsa', - name: 'rsa.misc.cs_event_uuid', + 'fortinet.firewall.exchange': { + category: 'fortinet', + description: 'Mail Exchanges from DNS response answer section ', + name: 'fortinet.firewall.exchange', type: 'keyword', }, - 'rsa.misc.cs_filetype': { - category: 'rsa', - name: 'rsa.misc.cs_filetype', + 'fortinet.firewall.expectedsignature': { + category: 'fortinet', + description: 'Expected SSL signature ', + name: 'fortinet.firewall.expectedsignature', type: 'keyword', }, - 'rsa.misc.cs_fld': { - category: 'rsa', - name: 'rsa.misc.cs_fld', + 'fortinet.firewall.expiry': { + category: 'fortinet', + description: 'FortiGuard override expiry timestamp ', + name: 'fortinet.firewall.expiry', type: 'keyword', }, - 'rsa.misc.cs_if_desc': { - category: 'rsa', - name: 'rsa.misc.cs_if_desc', - type: 'keyword', + 'fortinet.firewall.fams_pause': { + category: 'fortinet', + description: 'Fortinet Analysis and Management Service Pause ', + name: 'fortinet.firewall.fams_pause', + type: 'integer', }, - 'rsa.misc.cs_if_name': { - category: 'rsa', - name: 'rsa.misc.cs_if_name', - type: 'keyword', + 'fortinet.firewall.fazlograte': { + category: 'fortinet', + description: 'FortiAnalyzer Logging Rate ', + name: 'fortinet.firewall.fazlograte', + type: 'long', }, - 'rsa.misc.cs_ip_next_hop': { - category: 'rsa', - name: 'rsa.misc.cs_ip_next_hop', + 'fortinet.firewall.fctemssn': { + category: 'fortinet', + description: 'FortiClient Endpoint SSN ', + name: 'fortinet.firewall.fctemssn', type: 'keyword', }, - 'rsa.misc.cs_ipv4dstpre': { - category: 'rsa', - name: 'rsa.misc.cs_ipv4dstpre', + 'fortinet.firewall.fctuid': { + category: 'fortinet', + description: 'FortiClient UID ', + name: 'fortinet.firewall.fctuid', type: 'keyword', }, - 'rsa.misc.cs_ipv4srcpre': { - category: 'rsa', - name: 'rsa.misc.cs_ipv4srcpre', + 'fortinet.firewall.field': { + category: 'fortinet', + description: 'NTP status field ', + name: 'fortinet.firewall.field', type: 'keyword', }, - 'rsa.misc.cs_lifetime': { - category: 'rsa', - name: 'rsa.misc.cs_lifetime', + 'fortinet.firewall.filefilter': { + category: 'fortinet', + description: 'The filter used to identify the affected file ', + name: 'fortinet.firewall.filefilter', type: 'keyword', }, - 'rsa.misc.cs_log_medium': { - category: 'rsa', - name: 'rsa.misc.cs_log_medium', + 'fortinet.firewall.filehashsrc': { + category: 'fortinet', + description: 'Filehash source ', + name: 'fortinet.firewall.filehashsrc', type: 'keyword', }, - 'rsa.misc.cs_loginname': { - category: 'rsa', - name: 'rsa.misc.cs_loginname', + 'fortinet.firewall.filtercat': { + category: 'fortinet', + description: 'DLP filter category ', + name: 'fortinet.firewall.filtercat', type: 'keyword', }, - 'rsa.misc.cs_modulescore': { - category: 'rsa', - name: 'rsa.misc.cs_modulescore', - type: 'keyword', + 'fortinet.firewall.filteridx': { + category: 'fortinet', + description: 'DLP filter ID ', + name: 'fortinet.firewall.filteridx', + type: 'integer', }, - 'rsa.misc.cs_modulesign': { - category: 'rsa', - name: 'rsa.misc.cs_modulesign', + 'fortinet.firewall.filtername': { + category: 'fortinet', + description: 'DLP rule name ', + name: 'fortinet.firewall.filtername', type: 'keyword', }, - 'rsa.misc.cs_opswatresult': { - category: 'rsa', - name: 'rsa.misc.cs_opswatresult', + 'fortinet.firewall.filtertype': { + category: 'fortinet', + description: 'DLP filter type ', + name: 'fortinet.firewall.filtertype', type: 'keyword', }, - 'rsa.misc.cs_payload': { - category: 'rsa', - name: 'rsa.misc.cs_payload', + 'fortinet.firewall.fortiguardresp': { + category: 'fortinet', + description: 'Antispam ESP value ', + name: 'fortinet.firewall.fortiguardresp', type: 'keyword', }, - 'rsa.misc.cs_registrant': { - category: 'rsa', - name: 'rsa.misc.cs_registrant', + 'fortinet.firewall.forwardedfor': { + category: 'fortinet', + description: 'Email address forwarded ', + name: 'fortinet.firewall.forwardedfor', type: 'keyword', }, - 'rsa.misc.cs_registrar': { - category: 'rsa', - name: 'rsa.misc.cs_registrar', + 'fortinet.firewall.fqdn': { + category: 'fortinet', + description: 'FQDN ', + name: 'fortinet.firewall.fqdn', type: 'keyword', }, - 'rsa.misc.cs_represult': { - category: 'rsa', - name: 'rsa.misc.cs_represult', + 'fortinet.firewall.frametype': { + category: 'fortinet', + description: 'Wireless frametype ', + name: 'fortinet.firewall.frametype', type: 'keyword', }, - 'rsa.misc.cs_rpayload': { - category: 'rsa', - name: 'rsa.misc.cs_rpayload', - type: 'keyword', + 'fortinet.firewall.freediskstorage': { + category: 'fortinet', + description: 'Free disk integer ', + name: 'fortinet.firewall.freediskstorage', + type: 'integer', }, - 'rsa.misc.cs_sampler_name': { - category: 'rsa', - name: 'rsa.misc.cs_sampler_name', + 'fortinet.firewall.from': { + category: 'fortinet', + description: 'From email address ', + name: 'fortinet.firewall.from', type: 'keyword', }, - 'rsa.misc.cs_sourcemodule': { - category: 'rsa', - name: 'rsa.misc.cs_sourcemodule', - type: 'keyword', + 'fortinet.firewall.from_vcluster': { + category: 'fortinet', + description: 'Source virtual cluster number ', + name: 'fortinet.firewall.from_vcluster', + type: 'integer', }, - 'rsa.misc.cs_streams': { - category: 'rsa', - name: 'rsa.misc.cs_streams', + 'fortinet.firewall.fsaverdict': { + category: 'fortinet', + description: 'FSA verdict ', + name: 'fortinet.firewall.fsaverdict', type: 'keyword', }, - 'rsa.misc.cs_targetmodule': { - category: 'rsa', - name: 'rsa.misc.cs_targetmodule', + 'fortinet.firewall.fwserver_name': { + category: 'fortinet', + description: 'Web proxy server name ', + name: 'fortinet.firewall.fwserver_name', type: 'keyword', }, - 'rsa.misc.cs_v6nxthop': { - category: 'rsa', - name: 'rsa.misc.cs_v6nxthop', - type: 'keyword', + 'fortinet.firewall.gateway': { + category: 'fortinet', + description: 'Gateway ip address for PPPoE status report ', + name: 'fortinet.firewall.gateway', + type: 'ip', }, - 'rsa.misc.cs_whois_server': { - category: 'rsa', - name: 'rsa.misc.cs_whois_server', + 'fortinet.firewall.green': { + category: 'fortinet', + description: 'Memory status ', + name: 'fortinet.firewall.green', type: 'keyword', }, - 'rsa.misc.cs_yararesult': { - category: 'rsa', - name: 'rsa.misc.cs_yararesult', - type: 'keyword', + 'fortinet.firewall.groupid': { + category: 'fortinet', + description: 'User Group ID ', + name: 'fortinet.firewall.groupid', + type: 'integer', }, - 'rsa.misc.description': { - category: 'rsa', - name: 'rsa.misc.description', - type: 'keyword', + 'fortinet.firewall.ha-prio': { + category: 'fortinet', + description: 'HA Priority ', + name: 'fortinet.firewall.ha-prio', + type: 'integer', }, - 'rsa.misc.devvendor': { - category: 'rsa', - name: 'rsa.misc.devvendor', + 'fortinet.firewall.ha_group': { + category: 'fortinet', + description: 'HA Group ', + name: 'fortinet.firewall.ha_group', type: 'keyword', }, - 'rsa.misc.distance': { - category: 'rsa', - name: 'rsa.misc.distance', + 'fortinet.firewall.ha_role': { + category: 'fortinet', + description: 'HA Role ', + name: 'fortinet.firewall.ha_role', type: 'keyword', }, - 'rsa.misc.dstburb': { - category: 'rsa', - name: 'rsa.misc.dstburb', + 'fortinet.firewall.handshake': { + category: 'fortinet', + description: 'SSL Handshake ', + name: 'fortinet.firewall.handshake', type: 'keyword', }, - 'rsa.misc.edomain': { - category: 'rsa', - name: 'rsa.misc.edomain', + 'fortinet.firewall.hash': { + category: 'fortinet', + description: 'Hash value of downloaded file ', + name: 'fortinet.firewall.hash', type: 'keyword', }, - 'rsa.misc.edomaub': { - category: 'rsa', - name: 'rsa.misc.edomaub', + 'fortinet.firewall.hbdn_reason': { + category: 'fortinet', + description: 'Heartbeat down reason ', + name: 'fortinet.firewall.hbdn_reason', type: 'keyword', }, - 'rsa.misc.euid': { - category: 'rsa', - name: 'rsa.misc.euid', - type: 'keyword', + 'fortinet.firewall.highcount': { + category: 'fortinet', + description: 'Highcount fabric summary ', + name: 'fortinet.firewall.highcount', + type: 'integer', }, - 'rsa.misc.facility': { - category: 'rsa', - name: 'rsa.misc.facility', + 'fortinet.firewall.host': { + category: 'fortinet', + description: 'Hostname ', + name: 'fortinet.firewall.host', type: 'keyword', }, - 'rsa.misc.finterface': { - category: 'rsa', - name: 'rsa.misc.finterface', + 'fortinet.firewall.iaid': { + category: 'fortinet', + description: 'DHCPv6 id ', + name: 'fortinet.firewall.iaid', type: 'keyword', }, - 'rsa.misc.flags': { - category: 'rsa', - name: 'rsa.misc.flags', + 'fortinet.firewall.icmpcode': { + category: 'fortinet', + description: 'Destination Port of the ICMP message ', + name: 'fortinet.firewall.icmpcode', type: 'keyword', }, - 'rsa.misc.gaddr': { - category: 'rsa', - name: 'rsa.misc.gaddr', + 'fortinet.firewall.icmpid': { + category: 'fortinet', + description: 'Source port of the ICMP message ', + name: 'fortinet.firewall.icmpid', type: 'keyword', }, - 'rsa.misc.id3': { - category: 'rsa', - name: 'rsa.misc.id3', + 'fortinet.firewall.icmptype': { + category: 'fortinet', + description: 'The type of ICMP message ', + name: 'fortinet.firewall.icmptype', type: 'keyword', }, - 'rsa.misc.im_buddyname': { - category: 'rsa', - name: 'rsa.misc.im_buddyname', + 'fortinet.firewall.identifier': { + category: 'fortinet', + description: 'Network traffic identifier ', + name: 'fortinet.firewall.identifier', + type: 'integer', + }, + 'fortinet.firewall.in_spi': { + category: 'fortinet', + description: 'IPSEC inbound SPI ', + name: 'fortinet.firewall.in_spi', type: 'keyword', }, - 'rsa.misc.im_croomid': { - category: 'rsa', - name: 'rsa.misc.im_croomid', - type: 'keyword', + 'fortinet.firewall.incidentserialno': { + category: 'fortinet', + description: 'Incident serial number ', + name: 'fortinet.firewall.incidentserialno', + type: 'integer', + }, + 'fortinet.firewall.infected': { + category: 'fortinet', + description: 'Infected MMS ', + name: 'fortinet.firewall.infected', + type: 'integer', }, - 'rsa.misc.im_croomtype': { - category: 'rsa', - name: 'rsa.misc.im_croomtype', - type: 'keyword', + 'fortinet.firewall.infectedfilelevel': { + category: 'fortinet', + description: 'DLP infected file level ', + name: 'fortinet.firewall.infectedfilelevel', + type: 'integer', }, - 'rsa.misc.im_members': { - category: 'rsa', - name: 'rsa.misc.im_members', + 'fortinet.firewall.informationsource': { + category: 'fortinet', + description: 'Information source ', + name: 'fortinet.firewall.informationsource', type: 'keyword', }, - 'rsa.misc.im_username': { - category: 'rsa', - name: 'rsa.misc.im_username', + 'fortinet.firewall.init': { + category: 'fortinet', + description: 'IPSEC init stage ', + name: 'fortinet.firewall.init', type: 'keyword', }, - 'rsa.misc.ipkt': { - category: 'rsa', - name: 'rsa.misc.ipkt', + 'fortinet.firewall.initiator': { + category: 'fortinet', + description: 'Original login user name for Fortiguard override ', + name: 'fortinet.firewall.initiator', type: 'keyword', }, - 'rsa.misc.ipscat': { - category: 'rsa', - name: 'rsa.misc.ipscat', + 'fortinet.firewall.interface': { + category: 'fortinet', + description: 'Related interface ', + name: 'fortinet.firewall.interface', type: 'keyword', }, - 'rsa.misc.ipspri': { - category: 'rsa', - name: 'rsa.misc.ipspri', + 'fortinet.firewall.intf': { + category: 'fortinet', + description: 'Related interface ', + name: 'fortinet.firewall.intf', type: 'keyword', }, - 'rsa.misc.latitude': { - category: 'rsa', - name: 'rsa.misc.latitude', + 'fortinet.firewall.invalidmac': { + category: 'fortinet', + description: 'The MAC address with invalid OUI ', + name: 'fortinet.firewall.invalidmac', type: 'keyword', }, - 'rsa.misc.linenum': { - category: 'rsa', - name: 'rsa.misc.linenum', - type: 'keyword', + 'fortinet.firewall.ip': { + category: 'fortinet', + description: 'Related IP ', + name: 'fortinet.firewall.ip', + type: 'ip', }, - 'rsa.misc.list_name': { - category: 'rsa', - name: 'rsa.misc.list_name', + 'fortinet.firewall.iptype': { + category: 'fortinet', + description: 'Related IP type ', + name: 'fortinet.firewall.iptype', type: 'keyword', }, - 'rsa.misc.load_data': { - category: 'rsa', - name: 'rsa.misc.load_data', + 'fortinet.firewall.keyword': { + category: 'fortinet', + description: 'Keyword used for search ', + name: 'fortinet.firewall.keyword', type: 'keyword', }, - 'rsa.misc.location_floor': { - category: 'rsa', - name: 'rsa.misc.location_floor', + 'fortinet.firewall.kind': { + category: 'fortinet', + description: 'VOIP kind ', + name: 'fortinet.firewall.kind', type: 'keyword', }, - 'rsa.misc.location_mark': { - category: 'rsa', - name: 'rsa.misc.location_mark', - type: 'keyword', + 'fortinet.firewall.lanin': { + category: 'fortinet', + description: 'LAN incoming traffic in bytes ', + name: 'fortinet.firewall.lanin', + type: 'long', }, - 'rsa.misc.log_id': { - category: 'rsa', - name: 'rsa.misc.log_id', - type: 'keyword', + 'fortinet.firewall.lanout': { + category: 'fortinet', + description: 'LAN outbound traffic in bytes ', + name: 'fortinet.firewall.lanout', + type: 'long', }, - 'rsa.misc.log_type': { - category: 'rsa', - name: 'rsa.misc.log_type', - type: 'keyword', + 'fortinet.firewall.lease': { + category: 'fortinet', + description: 'DHCP lease ', + name: 'fortinet.firewall.lease', + type: 'integer', }, - 'rsa.misc.logid': { - category: 'rsa', - name: 'rsa.misc.logid', + 'fortinet.firewall.license_limit': { + category: 'fortinet', + description: 'Maximum Number of FortiClients for the License ', + name: 'fortinet.firewall.license_limit', type: 'keyword', }, - 'rsa.misc.logip': { - category: 'rsa', - name: 'rsa.misc.logip', - type: 'keyword', + 'fortinet.firewall.limit': { + category: 'fortinet', + description: 'Virtual Domain Resource Limit ', + name: 'fortinet.firewall.limit', + type: 'integer', }, - 'rsa.misc.logname': { - category: 'rsa', - name: 'rsa.misc.logname', + 'fortinet.firewall.line': { + category: 'fortinet', + description: 'VOIP line ', + name: 'fortinet.firewall.line', type: 'keyword', }, - 'rsa.misc.longitude': { - category: 'rsa', - name: 'rsa.misc.longitude', - type: 'keyword', + 'fortinet.firewall.live': { + category: 'fortinet', + description: 'Time in seconds ', + name: 'fortinet.firewall.live', + type: 'integer', }, - 'rsa.misc.lport': { - category: 'rsa', - name: 'rsa.misc.lport', - type: 'keyword', + 'fortinet.firewall.local': { + category: 'fortinet', + description: 'Local IP for a PPPD Connection ', + name: 'fortinet.firewall.local', + type: 'ip', }, - 'rsa.misc.mbug_data': { - category: 'rsa', - name: 'rsa.misc.mbug_data', + 'fortinet.firewall.log': { + category: 'fortinet', + description: 'Log message ', + name: 'fortinet.firewall.log', type: 'keyword', }, - 'rsa.misc.misc_name': { - category: 'rsa', - name: 'rsa.misc.misc_name', + 'fortinet.firewall.login': { + category: 'fortinet', + description: 'SSH login ', + name: 'fortinet.firewall.login', type: 'keyword', }, - 'rsa.misc.msg_type': { - category: 'rsa', - name: 'rsa.misc.msg_type', - type: 'keyword', + 'fortinet.firewall.lowcount': { + category: 'fortinet', + description: 'Fabric lowcount ', + name: 'fortinet.firewall.lowcount', + type: 'integer', }, - 'rsa.misc.msgid': { - category: 'rsa', - name: 'rsa.misc.msgid', + 'fortinet.firewall.mac': { + category: 'fortinet', + description: 'DHCP mac address ', + name: 'fortinet.firewall.mac', type: 'keyword', }, - 'rsa.misc.netsessid': { - category: 'rsa', - name: 'rsa.misc.netsessid', - type: 'keyword', + 'fortinet.firewall.malform_data': { + category: 'fortinet', + description: 'VOIP malformed data ', + name: 'fortinet.firewall.malform_data', + type: 'integer', }, - 'rsa.misc.num': { - category: 'rsa', - name: 'rsa.misc.num', + 'fortinet.firewall.malform_desc': { + category: 'fortinet', + description: 'VOIP malformed data description ', + name: 'fortinet.firewall.malform_desc', type: 'keyword', }, - 'rsa.misc.number1': { - category: 'rsa', - name: 'rsa.misc.number1', + 'fortinet.firewall.manuf': { + category: 'fortinet', + description: 'Manufacturer name ', + name: 'fortinet.firewall.manuf', type: 'keyword', }, - 'rsa.misc.number2': { - category: 'rsa', - name: 'rsa.misc.number2', + 'fortinet.firewall.masterdstmac': { + category: 'fortinet', + description: 'Master mac address for a host with multiple network interfaces ', + name: 'fortinet.firewall.masterdstmac', type: 'keyword', }, - 'rsa.misc.nwwn': { - category: 'rsa', - name: 'rsa.misc.nwwn', + 'fortinet.firewall.mastersrcmac': { + category: 'fortinet', + description: 'The master MAC address for a host that has multiple network interfaces ', + name: 'fortinet.firewall.mastersrcmac', type: 'keyword', }, - 'rsa.misc.object': { - category: 'rsa', - name: 'rsa.misc.object', - type: 'keyword', + 'fortinet.firewall.mediumcount': { + category: 'fortinet', + description: 'Fabric medium count ', + name: 'fortinet.firewall.mediumcount', + type: 'integer', }, - 'rsa.misc.operation': { - category: 'rsa', - name: 'rsa.misc.operation', - type: 'keyword', + 'fortinet.firewall.mem': { + category: 'fortinet', + description: 'Memory usage system statistics ', + name: 'fortinet.firewall.mem', + type: 'integer', }, - 'rsa.misc.opkt': { - category: 'rsa', - name: 'rsa.misc.opkt', + 'fortinet.firewall.meshmode': { + category: 'fortinet', + description: 'Wireless mesh mode ', + name: 'fortinet.firewall.meshmode', type: 'keyword', }, - 'rsa.misc.orig_from': { - category: 'rsa', - name: 'rsa.misc.orig_from', + 'fortinet.firewall.message_type': { + category: 'fortinet', + description: 'VOIP message type ', + name: 'fortinet.firewall.message_type', type: 'keyword', }, - 'rsa.misc.owner_id': { - category: 'rsa', - name: 'rsa.misc.owner_id', + 'fortinet.firewall.method': { + category: 'fortinet', + description: 'HTTP method ', + name: 'fortinet.firewall.method', type: 'keyword', }, - 'rsa.misc.p_action': { - category: 'rsa', - name: 'rsa.misc.p_action', - type: 'keyword', + 'fortinet.firewall.mgmtcnt': { + category: 'fortinet', + description: 'The number of unauthorized client flooding managemet frames ', + name: 'fortinet.firewall.mgmtcnt', + type: 'integer', }, - 'rsa.misc.p_filter': { - category: 'rsa', - name: 'rsa.misc.p_filter', + 'fortinet.firewall.mode': { + category: 'fortinet', + description: 'IPSEC mode ', + name: 'fortinet.firewall.mode', type: 'keyword', }, - 'rsa.misc.p_group_object': { - category: 'rsa', - name: 'rsa.misc.p_group_object', + 'fortinet.firewall.module': { + category: 'fortinet', + description: 'PCI-DSS module ', + name: 'fortinet.firewall.module', type: 'keyword', }, - 'rsa.misc.p_id': { - category: 'rsa', - name: 'rsa.misc.p_id', + 'fortinet.firewall.monitor-name': { + category: 'fortinet', + description: 'Health Monitor Name ', + name: 'fortinet.firewall.monitor-name', type: 'keyword', }, - 'rsa.misc.p_msgid1': { - category: 'rsa', - name: 'rsa.misc.p_msgid1', + 'fortinet.firewall.monitor-type': { + category: 'fortinet', + description: 'Health Monitor Type ', + name: 'fortinet.firewall.monitor-type', type: 'keyword', }, - 'rsa.misc.p_msgid2': { - category: 'rsa', - name: 'rsa.misc.p_msgid2', + 'fortinet.firewall.mpsk': { + category: 'fortinet', + description: 'Wireless MPSK ', + name: 'fortinet.firewall.mpsk', type: 'keyword', }, - 'rsa.misc.p_result1': { - category: 'rsa', - name: 'rsa.misc.p_result1', + 'fortinet.firewall.msgproto': { + category: 'fortinet', + description: 'Message Protocol Number ', + name: 'fortinet.firewall.msgproto', type: 'keyword', }, - 'rsa.misc.password_chg': { - category: 'rsa', - name: 'rsa.misc.password_chg', - type: 'keyword', + 'fortinet.firewall.mtu': { + category: 'fortinet', + description: 'Max Transmission Unit Value ', + name: 'fortinet.firewall.mtu', + type: 'integer', }, - 'rsa.misc.password_expire': { - category: 'rsa', - name: 'rsa.misc.password_expire', + 'fortinet.firewall.name': { + category: 'fortinet', + description: 'Name ', + name: 'fortinet.firewall.name', type: 'keyword', }, - 'rsa.misc.permgranted': { - category: 'rsa', - name: 'rsa.misc.permgranted', + 'fortinet.firewall.nat': { + category: 'fortinet', + description: 'NAT IP Address ', + name: 'fortinet.firewall.nat', type: 'keyword', }, - 'rsa.misc.permwanted': { - category: 'rsa', - name: 'rsa.misc.permwanted', + 'fortinet.firewall.netid': { + category: 'fortinet', + description: 'Connector NetID ', + name: 'fortinet.firewall.netid', type: 'keyword', }, - 'rsa.misc.pgid': { - category: 'rsa', - name: 'rsa.misc.pgid', + 'fortinet.firewall.new_status': { + category: 'fortinet', + description: 'New status on user change ', + name: 'fortinet.firewall.new_status', type: 'keyword', }, - 'rsa.misc.policyUUID': { - category: 'rsa', - name: 'rsa.misc.policyUUID', + 'fortinet.firewall.new_value': { + category: 'fortinet', + description: 'New Virtual Domain Name ', + name: 'fortinet.firewall.new_value', type: 'keyword', }, - 'rsa.misc.prog_asp_num': { - category: 'rsa', - name: 'rsa.misc.prog_asp_num', - type: 'keyword', + 'fortinet.firewall.newchannel': { + category: 'fortinet', + description: 'New Channel Number ', + name: 'fortinet.firewall.newchannel', + type: 'integer', }, - 'rsa.misc.program': { - category: 'rsa', - name: 'rsa.misc.program', - type: 'keyword', + 'fortinet.firewall.newchassisid': { + category: 'fortinet', + description: 'New Chassis ID ', + name: 'fortinet.firewall.newchassisid', + type: 'integer', }, - 'rsa.misc.real_data': { - category: 'rsa', - name: 'rsa.misc.real_data', - type: 'keyword', + 'fortinet.firewall.newslot': { + category: 'fortinet', + description: 'New Slot Number ', + name: 'fortinet.firewall.newslot', + type: 'integer', }, - 'rsa.misc.rec_asp_device': { - category: 'rsa', - name: 'rsa.misc.rec_asp_device', - type: 'keyword', + 'fortinet.firewall.nextstat': { + category: 'fortinet', + description: 'Time interval in seconds for the next statistics. ', + name: 'fortinet.firewall.nextstat', + type: 'integer', }, - 'rsa.misc.rec_asp_num': { - category: 'rsa', - name: 'rsa.misc.rec_asp_num', + 'fortinet.firewall.nf_type': { + category: 'fortinet', + description: 'Notification Type ', + name: 'fortinet.firewall.nf_type', type: 'keyword', }, - 'rsa.misc.rec_library': { - category: 'rsa', - name: 'rsa.misc.rec_library', - type: 'keyword', + 'fortinet.firewall.noise': { + category: 'fortinet', + description: 'Wifi Noise ', + name: 'fortinet.firewall.noise', + type: 'integer', }, - 'rsa.misc.recordnum': { - category: 'rsa', - name: 'rsa.misc.recordnum', + 'fortinet.firewall.old_status': { + category: 'fortinet', + description: 'Original Status ', + name: 'fortinet.firewall.old_status', type: 'keyword', }, - 'rsa.misc.ruid': { - category: 'rsa', - name: 'rsa.misc.ruid', + 'fortinet.firewall.old_value': { + category: 'fortinet', + description: 'Original Virtual Domain name ', + name: 'fortinet.firewall.old_value', type: 'keyword', }, - 'rsa.misc.sburb': { - category: 'rsa', - name: 'rsa.misc.sburb', - type: 'keyword', + 'fortinet.firewall.oldchannel': { + category: 'fortinet', + description: 'Original channel ', + name: 'fortinet.firewall.oldchannel', + type: 'integer', }, - 'rsa.misc.sdomain_fld': { - category: 'rsa', - name: 'rsa.misc.sdomain_fld', - type: 'keyword', + 'fortinet.firewall.oldchassisid': { + category: 'fortinet', + description: 'Original Chassis Number ', + name: 'fortinet.firewall.oldchassisid', + type: 'integer', }, - 'rsa.misc.sec': { - category: 'rsa', - name: 'rsa.misc.sec', - type: 'keyword', + 'fortinet.firewall.oldslot': { + category: 'fortinet', + description: 'Original Slot Number ', + name: 'fortinet.firewall.oldslot', + type: 'integer', }, - 'rsa.misc.sensorname': { - category: 'rsa', - name: 'rsa.misc.sensorname', + 'fortinet.firewall.oldsn': { + category: 'fortinet', + description: 'Old Serial number ', + name: 'fortinet.firewall.oldsn', type: 'keyword', }, - 'rsa.misc.seqnum': { - category: 'rsa', - name: 'rsa.misc.seqnum', + 'fortinet.firewall.oldwprof': { + category: 'fortinet', + description: 'Old Web Filter Profile ', + name: 'fortinet.firewall.oldwprof', type: 'keyword', }, - 'rsa.misc.session': { - category: 'rsa', - name: 'rsa.misc.session', + 'fortinet.firewall.onwire': { + category: 'fortinet', + description: 'A flag to indicate if the AP is onwire or not ', + name: 'fortinet.firewall.onwire', type: 'keyword', }, - 'rsa.misc.sessiontype': { - category: 'rsa', - name: 'rsa.misc.sessiontype', + 'fortinet.firewall.opercountry': { + category: 'fortinet', + description: 'Operating Country ', + name: 'fortinet.firewall.opercountry', type: 'keyword', }, - 'rsa.misc.sigUUID': { - category: 'rsa', - name: 'rsa.misc.sigUUID', - type: 'keyword', + 'fortinet.firewall.opertxpower': { + category: 'fortinet', + description: 'Operating TX power ', + name: 'fortinet.firewall.opertxpower', + type: 'integer', }, - 'rsa.misc.spi': { - category: 'rsa', - name: 'rsa.misc.spi', + 'fortinet.firewall.osname': { + category: 'fortinet', + description: 'Operating System name ', + name: 'fortinet.firewall.osname', type: 'keyword', }, - 'rsa.misc.srcburb': { - category: 'rsa', - name: 'rsa.misc.srcburb', + 'fortinet.firewall.osversion': { + category: 'fortinet', + description: 'Operating System version ', + name: 'fortinet.firewall.osversion', type: 'keyword', }, - 'rsa.misc.srcdom': { - category: 'rsa', - name: 'rsa.misc.srcdom', + 'fortinet.firewall.out_spi': { + category: 'fortinet', + description: 'Out SPI ', + name: 'fortinet.firewall.out_spi', type: 'keyword', }, - 'rsa.misc.srcservice': { - category: 'rsa', - name: 'rsa.misc.srcservice', + 'fortinet.firewall.outintf': { + category: 'fortinet', + description: 'Out interface ', + name: 'fortinet.firewall.outintf', type: 'keyword', }, - 'rsa.misc.state': { - category: 'rsa', - name: 'rsa.misc.state', - type: 'keyword', + 'fortinet.firewall.passedcount': { + category: 'fortinet', + description: 'Fabric passed count ', + name: 'fortinet.firewall.passedcount', + type: 'integer', }, - 'rsa.misc.status1': { - category: 'rsa', - name: 'rsa.misc.status1', + 'fortinet.firewall.passwd': { + category: 'fortinet', + description: 'Changed user password information ', + name: 'fortinet.firewall.passwd', type: 'keyword', }, - 'rsa.misc.svcno': { - category: 'rsa', - name: 'rsa.misc.svcno', + 'fortinet.firewall.path': { + category: 'fortinet', + description: 'Path of looped configuration for security fabric ', + name: 'fortinet.firewall.path', type: 'keyword', }, - 'rsa.misc.system': { - category: 'rsa', - name: 'rsa.misc.system', + 'fortinet.firewall.peer': { + category: 'fortinet', + description: 'WAN optimization peer ', + name: 'fortinet.firewall.peer', type: 'keyword', }, - 'rsa.misc.tbdstr1': { - category: 'rsa', - name: 'rsa.misc.tbdstr1', + 'fortinet.firewall.peer_notif': { + category: 'fortinet', + description: 'VPN peer notification ', + name: 'fortinet.firewall.peer_notif', type: 'keyword', }, - 'rsa.misc.tgtdom': { - category: 'rsa', - name: 'rsa.misc.tgtdom', + 'fortinet.firewall.phase2_name': { + category: 'fortinet', + description: 'VPN phase2 name ', + name: 'fortinet.firewall.phase2_name', type: 'keyword', }, - 'rsa.misc.tgtdomain': { - category: 'rsa', - name: 'rsa.misc.tgtdomain', + 'fortinet.firewall.phone': { + category: 'fortinet', + description: 'VOIP Phone ', + name: 'fortinet.firewall.phone', type: 'keyword', }, - 'rsa.misc.threshold': { - category: 'rsa', - name: 'rsa.misc.threshold', - type: 'keyword', + 'fortinet.firewall.pid': { + category: 'fortinet', + description: 'Process ID ', + name: 'fortinet.firewall.pid', + type: 'integer', }, - 'rsa.misc.type1': { - category: 'rsa', - name: 'rsa.misc.type1', + 'fortinet.firewall.policytype': { + category: 'fortinet', + description: 'Policy Type ', + name: 'fortinet.firewall.policytype', type: 'keyword', }, - 'rsa.misc.udb_class': { - category: 'rsa', - name: 'rsa.misc.udb_class', + 'fortinet.firewall.poolname': { + category: 'fortinet', + description: 'IP Pool name ', + name: 'fortinet.firewall.poolname', type: 'keyword', }, - 'rsa.misc.url_fld': { - category: 'rsa', - name: 'rsa.misc.url_fld', - type: 'keyword', + 'fortinet.firewall.port': { + category: 'fortinet', + description: 'Log upload error port ', + name: 'fortinet.firewall.port', + type: 'integer', }, - 'rsa.misc.user_div': { - category: 'rsa', - name: 'rsa.misc.user_div', + 'fortinet.firewall.portbegin': { + category: 'fortinet', + description: 'IP Pool port number to begin ', + name: 'fortinet.firewall.portbegin', + type: 'integer', + }, + 'fortinet.firewall.portend': { + category: 'fortinet', + description: 'IP Pool port number to end ', + name: 'fortinet.firewall.portend', + type: 'integer', + }, + 'fortinet.firewall.probeproto': { + category: 'fortinet', + description: 'Link Monitor Probe Protocol ', + name: 'fortinet.firewall.probeproto', type: 'keyword', }, - 'rsa.misc.userid': { - category: 'rsa', - name: 'rsa.misc.userid', + 'fortinet.firewall.process': { + category: 'fortinet', + description: 'URL Filter process ', + name: 'fortinet.firewall.process', type: 'keyword', }, - 'rsa.misc.username_fld': { - category: 'rsa', - name: 'rsa.misc.username_fld', + 'fortinet.firewall.processtime': { + category: 'fortinet', + description: 'Process time for reports ', + name: 'fortinet.firewall.processtime', + type: 'integer', + }, + 'fortinet.firewall.profile': { + category: 'fortinet', + description: 'Profile Name ', + name: 'fortinet.firewall.profile', type: 'keyword', }, - 'rsa.misc.utcstamp': { - category: 'rsa', - name: 'rsa.misc.utcstamp', + 'fortinet.firewall.profile_vd': { + category: 'fortinet', + description: 'Virtual Domain Name ', + name: 'fortinet.firewall.profile_vd', type: 'keyword', }, - 'rsa.misc.v_instafname': { - category: 'rsa', - name: 'rsa.misc.v_instafname', + 'fortinet.firewall.profilegroup': { + category: 'fortinet', + description: 'Profile Group Name ', + name: 'fortinet.firewall.profilegroup', type: 'keyword', }, - 'rsa.misc.virt_data': { - category: 'rsa', - name: 'rsa.misc.virt_data', + 'fortinet.firewall.profiletype': { + category: 'fortinet', + description: 'Profile Type ', + name: 'fortinet.firewall.profiletype', type: 'keyword', }, - 'rsa.misc.vpnid': { - category: 'rsa', - name: 'rsa.misc.vpnid', + 'fortinet.firewall.qtypeval': { + category: 'fortinet', + description: 'DNS question type value ', + name: 'fortinet.firewall.qtypeval', + type: 'integer', + }, + 'fortinet.firewall.quarskip': { + category: 'fortinet', + description: 'Quarantine skip explanation ', + name: 'fortinet.firewall.quarskip', type: 'keyword', }, - 'rsa.misc.autorun_type': { - category: 'rsa', - description: 'This is used to capture Auto Run type', - name: 'rsa.misc.autorun_type', + 'fortinet.firewall.quotaexceeded': { + category: 'fortinet', + description: 'If quota has been exceeded ', + name: 'fortinet.firewall.quotaexceeded', type: 'keyword', }, - 'rsa.misc.cc_number': { - category: 'rsa', - description: 'Valid Credit Card Numbers only', - name: 'rsa.misc.cc_number', + 'fortinet.firewall.quotamax': { + category: 'fortinet', + description: 'Maximum quota allowed - in seconds if time-based - in bytes if traffic-based ', + name: 'fortinet.firewall.quotamax', type: 'long', }, - 'rsa.misc.content': { - category: 'rsa', - description: 'This key captures the content type from protocol headers', - name: 'rsa.misc.content', + 'fortinet.firewall.quotatype': { + category: 'fortinet', + description: 'Quota type ', + name: 'fortinet.firewall.quotatype', type: 'keyword', }, - 'rsa.misc.ein_number': { - category: 'rsa', - description: 'Employee Identification Numbers only', - name: 'rsa.misc.ein_number', + 'fortinet.firewall.quotaused': { + category: 'fortinet', + description: 'Quota used - in seconds if time-based - in bytes if trafficbased) ', + name: 'fortinet.firewall.quotaused', type: 'long', }, - 'rsa.misc.found': { - category: 'rsa', - description: 'This is used to capture the results of regex match', - name: 'rsa.misc.found', + 'fortinet.firewall.radioband': { + category: 'fortinet', + description: 'Radio band ', + name: 'fortinet.firewall.radioband', type: 'keyword', }, - 'rsa.misc.language': { - category: 'rsa', - description: 'This is used to capture list of languages the client support and what it prefers', - name: 'rsa.misc.language', + 'fortinet.firewall.radioid': { + category: 'fortinet', + description: 'Radio ID ', + name: 'fortinet.firewall.radioid', + type: 'integer', + }, + 'fortinet.firewall.radioidclosest': { + category: 'fortinet', + description: 'Radio ID on the AP closest the rogue AP ', + name: 'fortinet.firewall.radioidclosest', + type: 'integer', + }, + 'fortinet.firewall.radioiddetected': { + category: 'fortinet', + description: 'Radio ID on the AP which detected the rogue AP ', + name: 'fortinet.firewall.radioiddetected', + type: 'integer', + }, + 'fortinet.firewall.rate': { + category: 'fortinet', + description: 'Wireless rogue rate value ', + name: 'fortinet.firewall.rate', type: 'keyword', }, - 'rsa.misc.lifetime': { - category: 'rsa', - description: 'This key is used to capture the session lifetime in seconds.', - name: 'rsa.misc.lifetime', - type: 'long', + 'fortinet.firewall.rawdata': { + category: 'fortinet', + description: 'Raw data value ', + name: 'fortinet.firewall.rawdata', + type: 'keyword', }, - 'rsa.misc.link': { - category: 'rsa', - description: - 'This key is used to link the sessions together. This key should never be used to parse Meta data from a session (Logs/Packets) Directly, this is a Reserved key in NetWitness', - name: 'rsa.misc.link', + 'fortinet.firewall.rawdataid': { + category: 'fortinet', + description: 'Raw data ID ', + name: 'fortinet.firewall.rawdataid', type: 'keyword', }, - 'rsa.misc.match': { - category: 'rsa', - description: 'This key is for regex match name from search.ini', - name: 'rsa.misc.match', + 'fortinet.firewall.rcvddelta': { + category: 'fortinet', + description: 'Received bytes delta ', + name: 'fortinet.firewall.rcvddelta', type: 'keyword', }, - 'rsa.misc.param_dst': { - category: 'rsa', - description: 'This key captures the command line/launch argument of the target process or file', - name: 'rsa.misc.param_dst', + 'fortinet.firewall.reason': { + category: 'fortinet', + description: 'Alert reason ', + name: 'fortinet.firewall.reason', type: 'keyword', }, - 'rsa.misc.param_src': { - category: 'rsa', - description: 'This key captures source parameter', - name: 'rsa.misc.param_src', + 'fortinet.firewall.received': { + category: 'fortinet', + description: 'Server key exchange received ', + name: 'fortinet.firewall.received', + type: 'integer', + }, + 'fortinet.firewall.receivedsignature': { + category: 'fortinet', + description: 'Server key exchange received signature ', + name: 'fortinet.firewall.receivedsignature', type: 'keyword', }, - 'rsa.misc.search_text': { - category: 'rsa', - description: 'This key captures the Search Text used', - name: 'rsa.misc.search_text', + 'fortinet.firewall.red': { + category: 'fortinet', + description: 'Memory information in red ', + name: 'fortinet.firewall.red', type: 'keyword', }, - 'rsa.misc.sig_name': { - category: 'rsa', - description: 'This key is used to capture the Signature Name only.', - name: 'rsa.misc.sig_name', + 'fortinet.firewall.referralurl': { + category: 'fortinet', + description: 'Web filter referralurl ', + name: 'fortinet.firewall.referralurl', type: 'keyword', }, - 'rsa.misc.snmp_value': { - category: 'rsa', - description: 'SNMP set request value', - name: 'rsa.misc.snmp_value', + 'fortinet.firewall.remote': { + category: 'fortinet', + description: 'Remote PPP IP address ', + name: 'fortinet.firewall.remote', + type: 'ip', + }, + 'fortinet.firewall.remotewtptime': { + category: 'fortinet', + description: 'Remote Wifi Radius authentication time ', + name: 'fortinet.firewall.remotewtptime', type: 'keyword', }, - 'rsa.misc.streams': { - category: 'rsa', - description: 'This key captures number of streams in session', - name: 'rsa.misc.streams', - type: 'long', + 'fortinet.firewall.reporttype': { + category: 'fortinet', + description: 'Report type ', + name: 'fortinet.firewall.reporttype', + type: 'keyword', }, - 'rsa.db.index': { - category: 'rsa', - description: 'This key captures IndexID of the index.', - name: 'rsa.db.index', + 'fortinet.firewall.reqtype': { + category: 'fortinet', + description: 'Request type ', + name: 'fortinet.firewall.reqtype', type: 'keyword', }, - 'rsa.db.instance': { - category: 'rsa', - description: 'This key is used to capture the database server instance name', - name: 'rsa.db.instance', + 'fortinet.firewall.request_name': { + category: 'fortinet', + description: 'VOIP request name ', + name: 'fortinet.firewall.request_name', type: 'keyword', }, - 'rsa.db.database': { - category: 'rsa', - description: - 'This key is used to capture the name of a database or an instance as seen in a session', - name: 'rsa.db.database', + 'fortinet.firewall.result': { + category: 'fortinet', + description: 'VPN phase result ', + name: 'fortinet.firewall.result', type: 'keyword', }, - 'rsa.db.transact_id': { - category: 'rsa', - description: 'This key captures the SQL transantion ID of the current session', - name: 'rsa.db.transact_id', + 'fortinet.firewall.role': { + category: 'fortinet', + description: 'VPN Phase 2 role ', + name: 'fortinet.firewall.role', type: 'keyword', }, - 'rsa.db.permissions': { - category: 'rsa', - description: 'This key captures permission or privilege level assigned to a resource.', - name: 'rsa.db.permissions', + 'fortinet.firewall.rssi': { + category: 'fortinet', + description: 'Received signal strength indicator ', + name: 'fortinet.firewall.rssi', + type: 'integer', + }, + 'fortinet.firewall.rsso_key': { + category: 'fortinet', + description: 'RADIUS SSO attribute value ', + name: 'fortinet.firewall.rsso_key', type: 'keyword', }, - 'rsa.db.table_name': { - category: 'rsa', - description: 'This key is used to capture the table name', - name: 'rsa.db.table_name', + 'fortinet.firewall.ruledata': { + category: 'fortinet', + description: 'Rule data ', + name: 'fortinet.firewall.ruledata', type: 'keyword', }, - 'rsa.db.db_id': { - category: 'rsa', - description: 'This key is used to capture the unique identifier for a database', - name: 'rsa.db.db_id', + 'fortinet.firewall.ruletype': { + category: 'fortinet', + description: 'Rule type ', + name: 'fortinet.firewall.ruletype', type: 'keyword', }, - 'rsa.db.db_pid': { - category: 'rsa', - description: 'This key captures the process id of a connection with database server', - name: 'rsa.db.db_pid', - type: 'long', + 'fortinet.firewall.scanned': { + category: 'fortinet', + description: 'Number of Scanned MMSs ', + name: 'fortinet.firewall.scanned', + type: 'integer', }, - 'rsa.db.lread': { - category: 'rsa', - description: 'This key is used for the number of logical reads', - name: 'rsa.db.lread', + 'fortinet.firewall.scantime': { + category: 'fortinet', + description: 'Scanned time ', + name: 'fortinet.firewall.scantime', type: 'long', }, - 'rsa.db.lwrite': { - category: 'rsa', - description: 'This key is used for the number of logical writes', - name: 'rsa.db.lwrite', - type: 'long', + 'fortinet.firewall.scope': { + category: 'fortinet', + description: 'FortiGuard Override Scope ', + name: 'fortinet.firewall.scope', + type: 'keyword', }, - 'rsa.db.pread': { - category: 'rsa', - description: 'This key is used for the number of physical writes', - name: 'rsa.db.pread', - type: 'long', + 'fortinet.firewall.security': { + category: 'fortinet', + description: 'Wireless rogue security ', + name: 'fortinet.firewall.security', + type: 'keyword', }, - 'rsa.network.alias_host': { - category: 'rsa', - description: - 'This key should be used when the source or destination context of a hostname is not clear.Also it captures the Device Hostname. Any Hostname that isnt ad.computer.', - name: 'rsa.network.alias_host', + 'fortinet.firewall.sensitivity': { + category: 'fortinet', + description: 'Sensitivity for document fingerprint ', + name: 'fortinet.firewall.sensitivity', type: 'keyword', }, - 'rsa.network.domain': { - category: 'rsa', - name: 'rsa.network.domain', + 'fortinet.firewall.sensor': { + category: 'fortinet', + description: 'NAC Sensor Name ', + name: 'fortinet.firewall.sensor', type: 'keyword', }, - 'rsa.network.host_dst': { - category: 'rsa', - description: 'This key should only be used when it’s a Destination Hostname', - name: 'rsa.network.host_dst', + 'fortinet.firewall.sentdelta': { + category: 'fortinet', + description: 'Sent bytes delta ', + name: 'fortinet.firewall.sentdelta', type: 'keyword', }, - 'rsa.network.network_service': { - category: 'rsa', - description: 'This is used to capture layer 7 protocols/service names', - name: 'rsa.network.network_service', + 'fortinet.firewall.seq': { + category: 'fortinet', + description: 'Sequence number ', + name: 'fortinet.firewall.seq', type: 'keyword', }, - 'rsa.network.interface': { - category: 'rsa', - description: - 'This key should be used when the source or destination context of an interface is not clear', - name: 'rsa.network.interface', + 'fortinet.firewall.serial': { + category: 'fortinet', + description: 'WAN optimisation serial ', + name: 'fortinet.firewall.serial', type: 'keyword', }, - 'rsa.network.network_port': { - category: 'rsa', - description: - 'Deprecated, use port. NOTE: There is a type discrepancy as currently used, TM: Int32, INDEX: UInt64 (why neither chose the correct UInt16?!)', - name: 'rsa.network.network_port', - type: 'long', + 'fortinet.firewall.serialno': { + category: 'fortinet', + description: 'Serial number ', + name: 'fortinet.firewall.serialno', + type: 'keyword', }, - 'rsa.network.eth_host': { - category: 'rsa', - description: 'Deprecated, use alias.mac', - name: 'rsa.network.eth_host', + 'fortinet.firewall.server': { + category: 'fortinet', + description: 'AD server FQDN or IP ', + name: 'fortinet.firewall.server', type: 'keyword', }, - 'rsa.network.sinterface': { - category: 'rsa', - description: 'This key should only be used when it’s a Source Interface', - name: 'rsa.network.sinterface', + 'fortinet.firewall.session_id': { + category: 'fortinet', + description: 'Session ID ', + name: 'fortinet.firewall.session_id', type: 'keyword', }, - 'rsa.network.dinterface': { - category: 'rsa', - description: 'This key should only be used when it’s a Destination Interface', - name: 'rsa.network.dinterface', + 'fortinet.firewall.sessionid': { + category: 'fortinet', + description: 'WAD Session ID ', + name: 'fortinet.firewall.sessionid', + type: 'integer', + }, + 'fortinet.firewall.setuprate': { + category: 'fortinet', + description: 'Session Setup Rate ', + name: 'fortinet.firewall.setuprate', + type: 'long', + }, + 'fortinet.firewall.severity': { + category: 'fortinet', + description: 'Severity ', + name: 'fortinet.firewall.severity', type: 'keyword', }, - 'rsa.network.vlan': { - category: 'rsa', - description: 'This key should only be used to capture the ID of the Virtual LAN', - name: 'rsa.network.vlan', - type: 'long', + 'fortinet.firewall.shaperdroprcvdbyte': { + category: 'fortinet', + description: 'Received bytes dropped by shaper ', + name: 'fortinet.firewall.shaperdroprcvdbyte', + type: 'integer', + }, + 'fortinet.firewall.shaperdropsentbyte': { + category: 'fortinet', + description: 'Sent bytes dropped by shaper ', + name: 'fortinet.firewall.shaperdropsentbyte', + type: 'integer', }, - 'rsa.network.zone_src': { - category: 'rsa', - description: 'This key should only be used when it’s a Source Zone.', - name: 'rsa.network.zone_src', - type: 'keyword', + 'fortinet.firewall.shaperperipdropbyte': { + category: 'fortinet', + description: 'Dropped bytes per IP by shaper ', + name: 'fortinet.firewall.shaperperipdropbyte', + type: 'integer', }, - 'rsa.network.zone': { - category: 'rsa', - description: - 'This key should be used when the source or destination context of a Zone is not clear', - name: 'rsa.network.zone', + 'fortinet.firewall.shaperperipname': { + category: 'fortinet', + description: 'Traffic shaper name (per IP) ', + name: 'fortinet.firewall.shaperperipname', type: 'keyword', }, - 'rsa.network.zone_dst': { - category: 'rsa', - description: 'This key should only be used when it’s a Destination Zone.', - name: 'rsa.network.zone_dst', + 'fortinet.firewall.shaperrcvdname': { + category: 'fortinet', + description: 'Traffic shaper name for received traffic ', + name: 'fortinet.firewall.shaperrcvdname', type: 'keyword', }, - 'rsa.network.gateway': { - category: 'rsa', - description: 'This key is used to capture the IP Address of the gateway', - name: 'rsa.network.gateway', + 'fortinet.firewall.shapersentname': { + category: 'fortinet', + description: 'Traffic shaper name for sent traffic ', + name: 'fortinet.firewall.shapersentname', type: 'keyword', }, - 'rsa.network.icmp_type': { - category: 'rsa', - description: 'This key is used to capture the ICMP type only', - name: 'rsa.network.icmp_type', - type: 'long', + 'fortinet.firewall.shapingpolicyid': { + category: 'fortinet', + description: 'Traffic shaper policy ID ', + name: 'fortinet.firewall.shapingpolicyid', + type: 'integer', }, - 'rsa.network.mask': { - category: 'rsa', - description: 'This key is used to capture the device network IPmask.', - name: 'rsa.network.mask', - type: 'keyword', + 'fortinet.firewall.signal': { + category: 'fortinet', + description: 'Wireless rogue API signal ', + name: 'fortinet.firewall.signal', + type: 'integer', }, - 'rsa.network.icmp_code': { - category: 'rsa', - description: 'This key is used to capture the ICMP code only', - name: 'rsa.network.icmp_code', + 'fortinet.firewall.size': { + category: 'fortinet', + description: 'Email size in bytes ', + name: 'fortinet.firewall.size', type: 'long', }, - 'rsa.network.protocol_detail': { - category: 'rsa', - description: 'This key should be used to capture additional protocol information', - name: 'rsa.network.protocol_detail', - type: 'keyword', + 'fortinet.firewall.slot': { + category: 'fortinet', + description: 'Slot number ', + name: 'fortinet.firewall.slot', + type: 'integer', }, - 'rsa.network.dmask': { - category: 'rsa', - description: 'This key is used for Destionation Device network mask', - name: 'rsa.network.dmask', + 'fortinet.firewall.sn': { + category: 'fortinet', + description: 'Security fabric serial number ', + name: 'fortinet.firewall.sn', type: 'keyword', }, - 'rsa.network.port': { - category: 'rsa', - description: - 'This key should only be used to capture a Network Port when the directionality is not clear', - name: 'rsa.network.port', - type: 'long', - }, - 'rsa.network.smask': { - category: 'rsa', - description: 'This key is used for capturing source Network Mask', - name: 'rsa.network.smask', + 'fortinet.firewall.snclosest': { + category: 'fortinet', + description: 'SN of the AP closest to the rogue AP ', + name: 'fortinet.firewall.snclosest', type: 'keyword', }, - 'rsa.network.netname': { - category: 'rsa', - description: - 'This key is used to capture the network name associated with an IP range. This is configured by the end user.', - name: 'rsa.network.netname', + 'fortinet.firewall.sndetected': { + category: 'fortinet', + description: 'SN of the AP which detected the rogue AP ', + name: 'fortinet.firewall.sndetected', type: 'keyword', }, - 'rsa.network.paddr': { - category: 'rsa', - description: 'Deprecated', - name: 'rsa.network.paddr', - type: 'ip', - }, - 'rsa.network.faddr': { - category: 'rsa', - name: 'rsa.network.faddr', + 'fortinet.firewall.snmeshparent': { + category: 'fortinet', + description: 'SN of the mesh parent ', + name: 'fortinet.firewall.snmeshparent', type: 'keyword', }, - 'rsa.network.lhost': { - category: 'rsa', - name: 'rsa.network.lhost', + 'fortinet.firewall.spi': { + category: 'fortinet', + description: 'IPSEC SPI ', + name: 'fortinet.firewall.spi', type: 'keyword', }, - 'rsa.network.origin': { - category: 'rsa', - name: 'rsa.network.origin', + 'fortinet.firewall.src_int': { + category: 'fortinet', + description: 'Source interface ', + name: 'fortinet.firewall.src_int', type: 'keyword', }, - 'rsa.network.remote_domain_id': { - category: 'rsa', - name: 'rsa.network.remote_domain_id', + 'fortinet.firewall.srcintfrole': { + category: 'fortinet', + description: 'Source interface role ', + name: 'fortinet.firewall.srcintfrole', type: 'keyword', }, - 'rsa.network.addr': { - category: 'rsa', - name: 'rsa.network.addr', + 'fortinet.firewall.srccountry': { + category: 'fortinet', + description: 'Source country ', + name: 'fortinet.firewall.srccountry', type: 'keyword', }, - 'rsa.network.dns_a_record': { - category: 'rsa', - name: 'rsa.network.dns_a_record', + 'fortinet.firewall.srcfamily': { + category: 'fortinet', + description: 'Source family ', + name: 'fortinet.firewall.srcfamily', type: 'keyword', }, - 'rsa.network.dns_ptr_record': { - category: 'rsa', - name: 'rsa.network.dns_ptr_record', + 'fortinet.firewall.srchwvendor': { + category: 'fortinet', + description: 'Source hardware vendor ', + name: 'fortinet.firewall.srchwvendor', type: 'keyword', }, - 'rsa.network.fhost': { - category: 'rsa', - name: 'rsa.network.fhost', + 'fortinet.firewall.srchwversion': { + category: 'fortinet', + description: 'Source hardware version ', + name: 'fortinet.firewall.srchwversion', type: 'keyword', }, - 'rsa.network.fport': { - category: 'rsa', - name: 'rsa.network.fport', + 'fortinet.firewall.srcinetsvc': { + category: 'fortinet', + description: 'Source interface service ', + name: 'fortinet.firewall.srcinetsvc', type: 'keyword', }, - 'rsa.network.laddr': { - category: 'rsa', - name: 'rsa.network.laddr', + 'fortinet.firewall.srcname': { + category: 'fortinet', + description: 'Source name ', + name: 'fortinet.firewall.srcname', type: 'keyword', }, - 'rsa.network.linterface': { - category: 'rsa', - name: 'rsa.network.linterface', - type: 'keyword', + 'fortinet.firewall.srcserver': { + category: 'fortinet', + description: 'Source server ', + name: 'fortinet.firewall.srcserver', + type: 'integer', }, - 'rsa.network.phost': { - category: 'rsa', - name: 'rsa.network.phost', + 'fortinet.firewall.srcssid': { + category: 'fortinet', + description: 'Source SSID ', + name: 'fortinet.firewall.srcssid', type: 'keyword', }, - 'rsa.network.ad_computer_dst': { - category: 'rsa', - description: 'Deprecated, use host.dst', - name: 'rsa.network.ad_computer_dst', + 'fortinet.firewall.srcswversion': { + category: 'fortinet', + description: 'Source software version ', + name: 'fortinet.firewall.srcswversion', type: 'keyword', }, - 'rsa.network.eth_type': { - category: 'rsa', - description: 'This key is used to capture Ethernet Type, Used for Layer 3 Protocols Only', - name: 'rsa.network.eth_type', - type: 'long', - }, - 'rsa.network.ip_proto': { - category: 'rsa', - description: - 'This key should be used to capture the Protocol number, all the protocol nubers are converted into string in UI', - name: 'rsa.network.ip_proto', - type: 'long', - }, - 'rsa.network.dns_cname_record': { - category: 'rsa', - name: 'rsa.network.dns_cname_record', + 'fortinet.firewall.srcuuid': { + category: 'fortinet', + description: 'Source UUID ', + name: 'fortinet.firewall.srcuuid', type: 'keyword', }, - 'rsa.network.dns_id': { - category: 'rsa', - name: 'rsa.network.dns_id', + 'fortinet.firewall.sscname': { + category: 'fortinet', + description: 'SSC name ', + name: 'fortinet.firewall.sscname', type: 'keyword', }, - 'rsa.network.dns_opcode': { - category: 'rsa', - name: 'rsa.network.dns_opcode', + 'fortinet.firewall.ssid': { + category: 'fortinet', + description: 'Base Service Set ID ', + name: 'fortinet.firewall.ssid', type: 'keyword', }, - 'rsa.network.dns_resp': { - category: 'rsa', - name: 'rsa.network.dns_resp', + 'fortinet.firewall.sslaction': { + category: 'fortinet', + description: 'SSL Action ', + name: 'fortinet.firewall.sslaction', type: 'keyword', }, - 'rsa.network.dns_type': { - category: 'rsa', - name: 'rsa.network.dns_type', + 'fortinet.firewall.ssllocal': { + category: 'fortinet', + description: 'WAD SSL local ', + name: 'fortinet.firewall.ssllocal', type: 'keyword', }, - 'rsa.network.domain1': { - category: 'rsa', - name: 'rsa.network.domain1', + 'fortinet.firewall.sslremote': { + category: 'fortinet', + description: 'WAD SSL remote ', + name: 'fortinet.firewall.sslremote', type: 'keyword', }, - 'rsa.network.host_type': { - category: 'rsa', - name: 'rsa.network.host_type', + 'fortinet.firewall.stacount': { + category: 'fortinet', + description: 'Number of stations/clients ', + name: 'fortinet.firewall.stacount', + type: 'integer', + }, + 'fortinet.firewall.stage': { + category: 'fortinet', + description: 'IPSEC stage ', + name: 'fortinet.firewall.stage', type: 'keyword', }, - 'rsa.network.packet_length': { - category: 'rsa', - name: 'rsa.network.packet_length', + 'fortinet.firewall.stamac': { + category: 'fortinet', + description: '802.1x station mac ', + name: 'fortinet.firewall.stamac', type: 'keyword', }, - 'rsa.network.host_orig': { - category: 'rsa', - description: - 'This is used to capture the original hostname in case of a Forwarding Agent or a Proxy in between.', - name: 'rsa.network.host_orig', + 'fortinet.firewall.state': { + category: 'fortinet', + description: 'Admin login state ', + name: 'fortinet.firewall.state', type: 'keyword', }, - 'rsa.network.rpayload': { - category: 'rsa', - description: - 'This key is used to capture the total number of payload bytes seen in the retransmitted packets.', - name: 'rsa.network.rpayload', + 'fortinet.firewall.status': { + category: 'fortinet', + description: 'Status ', + name: 'fortinet.firewall.status', type: 'keyword', }, - 'rsa.network.vlan_name': { - category: 'rsa', - description: 'This key should only be used to capture the name of the Virtual LAN', - name: 'rsa.network.vlan_name', + 'fortinet.firewall.stitch': { + category: 'fortinet', + description: 'Automation stitch triggered ', + name: 'fortinet.firewall.stitch', type: 'keyword', }, - 'rsa.investigations.ec_activity': { - category: 'rsa', - description: 'This key captures the particular event activity(Ex:Logoff)', - name: 'rsa.investigations.ec_activity', + 'fortinet.firewall.subject': { + category: 'fortinet', + description: 'Email subject ', + name: 'fortinet.firewall.subject', type: 'keyword', }, - 'rsa.investigations.ec_theme': { - category: 'rsa', - description: 'This key captures the Theme of a particular Event(Ex:Authentication)', - name: 'rsa.investigations.ec_theme', + 'fortinet.firewall.submodule': { + category: 'fortinet', + description: 'Configuration Sub-Module Name ', + name: 'fortinet.firewall.submodule', type: 'keyword', }, - 'rsa.investigations.ec_subject': { - category: 'rsa', - description: 'This key captures the Subject of a particular Event(Ex:User)', - name: 'rsa.investigations.ec_subject', + 'fortinet.firewall.subservice': { + category: 'fortinet', + description: 'AV subservice ', + name: 'fortinet.firewall.subservice', type: 'keyword', }, - 'rsa.investigations.ec_outcome': { - category: 'rsa', - description: 'This key captures the outcome of a particular Event(Ex:Success)', - name: 'rsa.investigations.ec_outcome', + 'fortinet.firewall.subtype': { + category: 'fortinet', + description: 'Log subtype ', + name: 'fortinet.firewall.subtype', type: 'keyword', }, - 'rsa.investigations.event_cat': { - category: 'rsa', - description: 'This key captures the Event category number', - name: 'rsa.investigations.event_cat', - type: 'long', + 'fortinet.firewall.suspicious': { + category: 'fortinet', + description: 'Number of Suspicious MMSs ', + name: 'fortinet.firewall.suspicious', + type: 'integer', }, - 'rsa.investigations.event_cat_name': { - category: 'rsa', - description: 'This key captures the event category name corresponding to the event cat code', - name: 'rsa.investigations.event_cat_name', + 'fortinet.firewall.switchproto': { + category: 'fortinet', + description: 'Protocol change information ', + name: 'fortinet.firewall.switchproto', type: 'keyword', }, - 'rsa.investigations.event_vcat': { - category: 'rsa', - description: - 'This is a vendor supplied category. This should be used in situations where the vendor has adopted their own event_category taxonomy.', - name: 'rsa.investigations.event_vcat', + 'fortinet.firewall.sync_status': { + category: 'fortinet', + description: 'The sync status with the master ', + name: 'fortinet.firewall.sync_status', type: 'keyword', }, - 'rsa.investigations.analysis_file': { - category: 'rsa', - description: - 'This is used to capture all indicators used in a File Analysis. This key should be used to capture an analysis of a file', - name: 'rsa.investigations.analysis_file', + 'fortinet.firewall.sync_type': { + category: 'fortinet', + description: 'The sync type with the master ', + name: 'fortinet.firewall.sync_type', type: 'keyword', }, - 'rsa.investigations.analysis_service': { - category: 'rsa', - description: - 'This is used to capture all indicators used in a Service Analysis. This key should be used to capture an analysis of a service', - name: 'rsa.investigations.analysis_service', + 'fortinet.firewall.sysuptime': { + category: 'fortinet', + description: 'System uptime ', + name: 'fortinet.firewall.sysuptime', type: 'keyword', }, - 'rsa.investigations.analysis_session': { - category: 'rsa', - description: - 'This is used to capture all indicators used for a Session Analysis. This key should be used to capture an analysis of a session', - name: 'rsa.investigations.analysis_session', + 'fortinet.firewall.tamac': { + category: 'fortinet', + description: 'the MAC address of Transmitter, if none, then Receiver ', + name: 'fortinet.firewall.tamac', type: 'keyword', }, - 'rsa.investigations.boc': { - category: 'rsa', - description: 'This is used to capture behaviour of compromise', - name: 'rsa.investigations.boc', + 'fortinet.firewall.threattype': { + category: 'fortinet', + description: 'WIDS threat type ', + name: 'fortinet.firewall.threattype', type: 'keyword', }, - 'rsa.investigations.eoc': { - category: 'rsa', - description: 'This is used to capture Enablers of Compromise', - name: 'rsa.investigations.eoc', + 'fortinet.firewall.time': { + category: 'fortinet', + description: 'Time of the event ', + name: 'fortinet.firewall.time', type: 'keyword', }, - 'rsa.investigations.inv_category': { - category: 'rsa', - description: 'This used to capture investigation category', - name: 'rsa.investigations.inv_category', + 'fortinet.firewall.to': { + category: 'fortinet', + description: 'Email to field ', + name: 'fortinet.firewall.to', type: 'keyword', }, - 'rsa.investigations.inv_context': { - category: 'rsa', - description: 'This used to capture investigation context', - name: 'rsa.investigations.inv_context', - type: 'keyword', + 'fortinet.firewall.to_vcluster': { + category: 'fortinet', + description: 'destination virtual cluster number ', + name: 'fortinet.firewall.to_vcluster', + type: 'integer', }, - 'rsa.investigations.ioc': { - category: 'rsa', - description: 'This is key capture indicator of compromise', - name: 'rsa.investigations.ioc', + 'fortinet.firewall.total': { + category: 'fortinet', + description: 'Total memory ', + name: 'fortinet.firewall.total', + type: 'integer', + }, + 'fortinet.firewall.totalsession': { + category: 'fortinet', + description: 'Total Number of Sessions ', + name: 'fortinet.firewall.totalsession', + type: 'integer', + }, + 'fortinet.firewall.trace_id': { + category: 'fortinet', + description: 'Session clash trace ID ', + name: 'fortinet.firewall.trace_id', type: 'keyword', }, - 'rsa.counters.dclass_c1': { - category: 'rsa', - description: - 'This is a generic counter key that should be used with the label dclass.c1.str only', - name: 'rsa.counters.dclass_c1', - type: 'long', + 'fortinet.firewall.trandisp': { + category: 'fortinet', + description: 'NAT translation type ', + name: 'fortinet.firewall.trandisp', + type: 'keyword', }, - 'rsa.counters.dclass_c2': { - category: 'rsa', - description: - 'This is a generic counter key that should be used with the label dclass.c2.str only', - name: 'rsa.counters.dclass_c2', - type: 'long', + 'fortinet.firewall.transid': { + category: 'fortinet', + description: 'HTTP transaction ID ', + name: 'fortinet.firewall.transid', + type: 'integer', }, - 'rsa.counters.event_counter': { - category: 'rsa', - description: 'This is used to capture the number of times an event repeated', - name: 'rsa.counters.event_counter', - type: 'long', + 'fortinet.firewall.translationid': { + category: 'fortinet', + description: 'DNS filter transaltion ID ', + name: 'fortinet.firewall.translationid', + type: 'keyword', }, - 'rsa.counters.dclass_r1': { - category: 'rsa', - description: - 'This is a generic ratio key that should be used with the label dclass.r1.str only', - name: 'rsa.counters.dclass_r1', + 'fortinet.firewall.trigger': { + category: 'fortinet', + description: 'Automation stitch trigger ', + name: 'fortinet.firewall.trigger', type: 'keyword', }, - 'rsa.counters.dclass_c3': { - category: 'rsa', - description: - 'This is a generic counter key that should be used with the label dclass.c3.str only', - name: 'rsa.counters.dclass_c3', - type: 'long', + 'fortinet.firewall.trueclntip': { + category: 'fortinet', + description: 'File filter true client IP ', + name: 'fortinet.firewall.trueclntip', + type: 'ip', + }, + 'fortinet.firewall.tunnelid': { + category: 'fortinet', + description: 'IPSEC tunnel ID ', + name: 'fortinet.firewall.tunnelid', + type: 'integer', }, - 'rsa.counters.dclass_c1_str': { - category: 'rsa', - description: - 'This is a generic counter string key that should be used with the label dclass.c1 only', - name: 'rsa.counters.dclass_c1_str', - type: 'keyword', + 'fortinet.firewall.tunnelip': { + category: 'fortinet', + description: 'IPSEC tunnel IP ', + name: 'fortinet.firewall.tunnelip', + type: 'ip', }, - 'rsa.counters.dclass_c2_str': { - category: 'rsa', - description: - 'This is a generic counter string key that should be used with the label dclass.c2 only', - name: 'rsa.counters.dclass_c2_str', + 'fortinet.firewall.tunneltype': { + category: 'fortinet', + description: 'IPSEC tunnel type ', + name: 'fortinet.firewall.tunneltype', type: 'keyword', }, - 'rsa.counters.dclass_r1_str': { - category: 'rsa', - description: - 'This is a generic ratio string key that should be used with the label dclass.r1 only', - name: 'rsa.counters.dclass_r1_str', + 'fortinet.firewall.type': { + category: 'fortinet', + description: 'Module type ', + name: 'fortinet.firewall.type', type: 'keyword', }, - 'rsa.counters.dclass_r2': { - category: 'rsa', - description: - 'This is a generic ratio key that should be used with the label dclass.r2.str only', - name: 'rsa.counters.dclass_r2', + 'fortinet.firewall.ui': { + category: 'fortinet', + description: 'Admin authentication UI type ', + name: 'fortinet.firewall.ui', type: 'keyword', }, - 'rsa.counters.dclass_c3_str': { - category: 'rsa', - description: - 'This is a generic counter string key that should be used with the label dclass.c3 only', - name: 'rsa.counters.dclass_c3_str', + 'fortinet.firewall.unauthusersource': { + category: 'fortinet', + description: 'Unauthenticated user source ', + name: 'fortinet.firewall.unauthusersource', type: 'keyword', }, - 'rsa.counters.dclass_r3': { - category: 'rsa', - description: - 'This is a generic ratio key that should be used with the label dclass.r3.str only', - name: 'rsa.counters.dclass_r3', - type: 'keyword', + 'fortinet.firewall.unit': { + category: 'fortinet', + description: 'Power supply unit ', + name: 'fortinet.firewall.unit', + type: 'integer', }, - 'rsa.counters.dclass_r2_str': { - category: 'rsa', - description: - 'This is a generic ratio string key that should be used with the label dclass.r2 only', - name: 'rsa.counters.dclass_r2_str', - type: 'keyword', + 'fortinet.firewall.urlfilteridx': { + category: 'fortinet', + description: 'URL filter ID ', + name: 'fortinet.firewall.urlfilteridx', + type: 'integer', }, - 'rsa.counters.dclass_r3_str': { - category: 'rsa', - description: - 'This is a generic ratio string key that should be used with the label dclass.r3 only', - name: 'rsa.counters.dclass_r3_str', + 'fortinet.firewall.urlfilterlist': { + category: 'fortinet', + description: 'URL filter list ', + name: 'fortinet.firewall.urlfilterlist', type: 'keyword', }, - 'rsa.identity.auth_method': { - category: 'rsa', - description: 'This key is used to capture authentication methods used only', - name: 'rsa.identity.auth_method', + 'fortinet.firewall.urlsource': { + category: 'fortinet', + description: 'URL filter source ', + name: 'fortinet.firewall.urlsource', type: 'keyword', }, - 'rsa.identity.user_role': { - category: 'rsa', - description: 'This key is used to capture the Role of a user only', - name: 'rsa.identity.user_role', + 'fortinet.firewall.urltype': { + category: 'fortinet', + description: 'URL filter type ', + name: 'fortinet.firewall.urltype', type: 'keyword', }, - 'rsa.identity.dn': { - category: 'rsa', - description: 'X.500 (LDAP) Distinguished Name', - name: 'rsa.identity.dn', - type: 'keyword', + 'fortinet.firewall.used': { + category: 'fortinet', + description: 'Number of Used IPs ', + name: 'fortinet.firewall.used', + type: 'integer', }, - 'rsa.identity.logon_type': { - category: 'rsa', - description: 'This key is used to capture the type of logon method used.', - name: 'rsa.identity.logon_type', - type: 'keyword', + 'fortinet.firewall.used_for_type': { + category: 'fortinet', + description: 'Connection for the type ', + name: 'fortinet.firewall.used_for_type', + type: 'integer', }, - 'rsa.identity.profile': { - category: 'rsa', - description: 'This key is used to capture the user profile', - name: 'rsa.identity.profile', + 'fortinet.firewall.utmaction': { + category: 'fortinet', + description: 'Security action performed by UTM ', + name: 'fortinet.firewall.utmaction', type: 'keyword', }, - 'rsa.identity.accesses': { - category: 'rsa', - description: 'This key is used to capture actual privileges used in accessing an object', - name: 'rsa.identity.accesses', + 'fortinet.firewall.utmref': { + category: 'fortinet', + description: 'Reference to UTM ', + name: 'fortinet.firewall.utmref', type: 'keyword', }, - 'rsa.identity.realm': { - category: 'rsa', - description: 'Radius realm or similar grouping of accounts', - name: 'rsa.identity.realm', + 'fortinet.firewall.vap': { + category: 'fortinet', + description: 'Virtual AP ', + name: 'fortinet.firewall.vap', type: 'keyword', }, - 'rsa.identity.user_sid_dst': { - category: 'rsa', - description: 'This key captures Destination User Session ID', - name: 'rsa.identity.user_sid_dst', + 'fortinet.firewall.vapmode': { + category: 'fortinet', + description: 'Virtual AP mode ', + name: 'fortinet.firewall.vapmode', type: 'keyword', }, - 'rsa.identity.dn_src': { - category: 'rsa', - description: - 'An X.500 (LDAP) Distinguished name that is used in a context that indicates a Source dn', - name: 'rsa.identity.dn_src', - type: 'keyword', + 'fortinet.firewall.vcluster': { + category: 'fortinet', + description: 'virtual cluster id ', + name: 'fortinet.firewall.vcluster', + type: 'integer', }, - 'rsa.identity.org': { - category: 'rsa', - description: 'This key captures the User organization', - name: 'rsa.identity.org', - type: 'keyword', + 'fortinet.firewall.vcluster_member': { + category: 'fortinet', + description: 'Virtual cluster member ', + name: 'fortinet.firewall.vcluster_member', + type: 'integer', }, - 'rsa.identity.dn_dst': { - category: 'rsa', - description: - 'An X.500 (LDAP) Distinguished name that used in a context that indicates a Destination dn', - name: 'rsa.identity.dn_dst', + 'fortinet.firewall.vcluster_state': { + category: 'fortinet', + description: 'Virtual cluster state ', + name: 'fortinet.firewall.vcluster_state', type: 'keyword', }, - 'rsa.identity.firstname': { - category: 'rsa', - description: - 'This key is for First Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.identity.firstname', + 'fortinet.firewall.vd': { + category: 'fortinet', + description: 'Virtual Domain Name ', + name: 'fortinet.firewall.vd', type: 'keyword', }, - 'rsa.identity.lastname': { - category: 'rsa', - description: - 'This key is for Last Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.identity.lastname', + 'fortinet.firewall.vdname': { + category: 'fortinet', + description: 'Virtual Domain Name ', + name: 'fortinet.firewall.vdname', type: 'keyword', }, - 'rsa.identity.user_dept': { - category: 'rsa', - description: "User's Department Names only", - name: 'rsa.identity.user_dept', + 'fortinet.firewall.vendorurl': { + category: 'fortinet', + description: 'Vulnerability scan vendor name ', + name: 'fortinet.firewall.vendorurl', type: 'keyword', }, - 'rsa.identity.user_sid_src': { - category: 'rsa', - description: 'This key captures Source User Session ID', - name: 'rsa.identity.user_sid_src', + 'fortinet.firewall.version': { + category: 'fortinet', + description: 'Version ', + name: 'fortinet.firewall.version', type: 'keyword', }, - 'rsa.identity.federated_sp': { - category: 'rsa', - description: - 'This key is the Federated Service Provider. This is the application requesting authentication.', - name: 'rsa.identity.federated_sp', + 'fortinet.firewall.vip': { + category: 'fortinet', + description: 'Virtual IP ', + name: 'fortinet.firewall.vip', type: 'keyword', }, - 'rsa.identity.federated_idp': { - category: 'rsa', - description: - 'This key is the federated Identity Provider. This is the server providing the authentication.', - name: 'rsa.identity.federated_idp', + 'fortinet.firewall.virus': { + category: 'fortinet', + description: 'Virus name ', + name: 'fortinet.firewall.virus', type: 'keyword', }, - 'rsa.identity.logon_type_desc': { - category: 'rsa', - description: - "This key is used to capture the textual description of an integer logon type as stored in the meta key 'logon.type'.", - name: 'rsa.identity.logon_type_desc', - type: 'keyword', + 'fortinet.firewall.virusid': { + category: 'fortinet', + description: 'Virus ID (unique virus identifier) ', + name: 'fortinet.firewall.virusid', + type: 'integer', }, - 'rsa.identity.middlename': { - category: 'rsa', - description: - 'This key is for Middle Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.identity.middlename', + 'fortinet.firewall.voip_proto': { + category: 'fortinet', + description: 'VOIP protocol ', + name: 'fortinet.firewall.voip_proto', type: 'keyword', }, - 'rsa.identity.password': { - category: 'rsa', - description: 'This key is for Passwords seen in any session, plain text or encrypted', - name: 'rsa.identity.password', + 'fortinet.firewall.vpn': { + category: 'fortinet', + description: 'VPN description ', + name: 'fortinet.firewall.vpn', type: 'keyword', }, - 'rsa.identity.host_role': { - category: 'rsa', - description: 'This key should only be used to capture the role of a Host Machine', - name: 'rsa.identity.host_role', + 'fortinet.firewall.vpntunnel': { + category: 'fortinet', + description: 'IPsec Vpn Tunnel Name ', + name: 'fortinet.firewall.vpntunnel', type: 'keyword', }, - 'rsa.identity.ldap': { - category: 'rsa', - description: - 'This key is for Uninterpreted LDAP values. Ldap Values that don’t have a clear query or response context', - name: 'rsa.identity.ldap', + 'fortinet.firewall.vpntype': { + category: 'fortinet', + description: 'The type of the VPN tunnel ', + name: 'fortinet.firewall.vpntype', type: 'keyword', }, - 'rsa.identity.ldap_query': { - category: 'rsa', - description: 'This key is the Search criteria from an LDAP search', - name: 'rsa.identity.ldap_query', - type: 'keyword', + 'fortinet.firewall.vrf': { + category: 'fortinet', + description: 'VRF number ', + name: 'fortinet.firewall.vrf', + type: 'integer', }, - 'rsa.identity.ldap_response': { - category: 'rsa', - description: 'This key is to capture Results from an LDAP search', - name: 'rsa.identity.ldap_response', + 'fortinet.firewall.vulncat': { + category: 'fortinet', + description: 'Vulnerability Category ', + name: 'fortinet.firewall.vulncat', type: 'keyword', }, - 'rsa.identity.owner': { - category: 'rsa', - description: - 'This is used to capture username the process or service is running as, the author of the task', - name: 'rsa.identity.owner', + 'fortinet.firewall.vulnid': { + category: 'fortinet', + description: 'Vulnerability ID ', + name: 'fortinet.firewall.vulnid', + type: 'integer', + }, + 'fortinet.firewall.vulnname': { + category: 'fortinet', + description: 'Vulnerability name ', + name: 'fortinet.firewall.vulnname', type: 'keyword', }, - 'rsa.identity.service_account': { - category: 'rsa', - description: - 'This key is a windows specific key, used for capturing name of the account a service (referenced in the event) is running under. Legacy Usage', - name: 'rsa.identity.service_account', + 'fortinet.firewall.vwlid': { + category: 'fortinet', + description: 'VWL ID ', + name: 'fortinet.firewall.vwlid', + type: 'integer', + }, + 'fortinet.firewall.vwlquality': { + category: 'fortinet', + description: 'VWL quality ', + name: 'fortinet.firewall.vwlquality', type: 'keyword', }, - 'rsa.email.email_dst': { - category: 'rsa', - description: - 'This key is used to capture the Destination email address only, when the destination context is not clear use email', - name: 'rsa.email.email_dst', + 'fortinet.firewall.vwlservice': { + category: 'fortinet', + description: 'VWL service ', + name: 'fortinet.firewall.vwlservice', type: 'keyword', }, - 'rsa.email.email_src': { - category: 'rsa', - description: - 'This key is used to capture the source email address only, when the source context is not clear use email', - name: 'rsa.email.email_src', + 'fortinet.firewall.vwpvlanid': { + category: 'fortinet', + description: 'VWP VLAN ID ', + name: 'fortinet.firewall.vwpvlanid', + type: 'integer', + }, + 'fortinet.firewall.wanin': { + category: 'fortinet', + description: 'WAN incoming traffic in bytes ', + name: 'fortinet.firewall.wanin', + type: 'long', + }, + 'fortinet.firewall.wanoptapptype': { + category: 'fortinet', + description: 'WAN Optimization Application type ', + name: 'fortinet.firewall.wanoptapptype', type: 'keyword', }, - 'rsa.email.subject': { - category: 'rsa', - description: 'This key is used to capture the subject string from an Email only.', - name: 'rsa.email.subject', + 'fortinet.firewall.wanout': { + category: 'fortinet', + description: 'WAN outgoing traffic in bytes ', + name: 'fortinet.firewall.wanout', + type: 'long', + }, + 'fortinet.firewall.weakwepiv': { + category: 'fortinet', + description: 'Weak Wep Initiation Vector ', + name: 'fortinet.firewall.weakwepiv', type: 'keyword', }, - 'rsa.email.email': { - category: 'rsa', - description: - 'This key is used to capture a generic email address where the source or destination context is not clear', - name: 'rsa.email.email', + 'fortinet.firewall.xauthgroup': { + category: 'fortinet', + description: 'XAuth Group Name ', + name: 'fortinet.firewall.xauthgroup', type: 'keyword', }, - 'rsa.email.trans_from': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.email.trans_from', + 'fortinet.firewall.xauthuser': { + category: 'fortinet', + description: 'XAuth User Name ', + name: 'fortinet.firewall.xauthuser', type: 'keyword', }, - 'rsa.email.trans_to': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.email.trans_to', + 'fortinet.firewall.xid': { + category: 'fortinet', + description: 'Wireless X ID ', + name: 'fortinet.firewall.xid', + type: 'integer', + }, + 'gcp.destination.instance.project_id': { + category: 'gcp', + description: 'ID of the project containing the VM. ', + name: 'gcp.destination.instance.project_id', type: 'keyword', }, - 'rsa.file.privilege': { - category: 'rsa', - description: 'Deprecated, use permissions', - name: 'rsa.file.privilege', + 'gcp.destination.instance.region': { + category: 'gcp', + description: 'Region of the VM. ', + name: 'gcp.destination.instance.region', type: 'keyword', }, - 'rsa.file.attachment': { - category: 'rsa', - description: 'This key captures the attachment file name', - name: 'rsa.file.attachment', + 'gcp.destination.instance.zone': { + category: 'gcp', + description: 'Zone of the VM. ', + name: 'gcp.destination.instance.zone', type: 'keyword', }, - 'rsa.file.filesystem': { - category: 'rsa', - name: 'rsa.file.filesystem', + 'gcp.destination.vpc.project_id': { + category: 'gcp', + description: 'ID of the project containing the VM. ', + name: 'gcp.destination.vpc.project_id', type: 'keyword', }, - 'rsa.file.binary': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.file.binary', + 'gcp.destination.vpc.vpc_name': { + category: 'gcp', + description: 'VPC on which the VM is operating. ', + name: 'gcp.destination.vpc.vpc_name', type: 'keyword', }, - 'rsa.file.filename_dst': { - category: 'rsa', - description: 'This is used to capture name of the file targeted by the action', - name: 'rsa.file.filename_dst', + 'gcp.destination.vpc.subnetwork_name': { + category: 'gcp', + description: 'Subnetwork on which the VM is operating. ', + name: 'gcp.destination.vpc.subnetwork_name', type: 'keyword', }, - 'rsa.file.filename_src': { - category: 'rsa', - description: - 'This is used to capture name of the parent filename, the file which performed the action', - name: 'rsa.file.filename_src', + 'gcp.source.instance.project_id': { + category: 'gcp', + description: 'ID of the project containing the VM. ', + name: 'gcp.source.instance.project_id', type: 'keyword', }, - 'rsa.file.filename_tmp': { - category: 'rsa', - name: 'rsa.file.filename_tmp', + 'gcp.source.instance.region': { + category: 'gcp', + description: 'Region of the VM. ', + name: 'gcp.source.instance.region', type: 'keyword', }, - 'rsa.file.directory_dst': { - category: 'rsa', - description: - 'This key is used to capture the directory of the target process or file', - name: 'rsa.file.directory_dst', + 'gcp.source.instance.zone': { + category: 'gcp', + description: 'Zone of the VM. ', + name: 'gcp.source.instance.zone', type: 'keyword', }, - 'rsa.file.directory_src': { - category: 'rsa', - description: 'This key is used to capture the directory of the source process or file', - name: 'rsa.file.directory_src', + 'gcp.source.vpc.project_id': { + category: 'gcp', + description: 'ID of the project containing the VM. ', + name: 'gcp.source.vpc.project_id', type: 'keyword', }, - 'rsa.file.file_entropy': { - category: 'rsa', - description: 'This is used to capture entropy vale of a file', - name: 'rsa.file.file_entropy', - type: 'double', + 'gcp.source.vpc.vpc_name': { + category: 'gcp', + description: 'VPC on which the VM is operating. ', + name: 'gcp.source.vpc.vpc_name', + type: 'keyword', }, - 'rsa.file.file_vendor': { - category: 'rsa', - description: 'This is used to capture Company name of file located in version_info', - name: 'rsa.file.file_vendor', + 'gcp.source.vpc.subnetwork_name': { + category: 'gcp', + description: 'Subnetwork on which the VM is operating. ', + name: 'gcp.source.vpc.subnetwork_name', type: 'keyword', }, - 'rsa.file.task_name': { - category: 'rsa', - description: 'This is used to capture name of the task', - name: 'rsa.file.task_name', + 'gcp.audit.type': { + category: 'gcp', + description: 'Type property. ', + name: 'gcp.audit.type', type: 'keyword', }, - 'rsa.web.fqdn': { - category: 'rsa', - description: 'Fully Qualified Domain Names', - name: 'rsa.web.fqdn', + 'gcp.audit.authentication_info.principal_email': { + category: 'gcp', + description: 'The email address of the authenticated user making the request. ', + name: 'gcp.audit.authentication_info.principal_email', type: 'keyword', }, - 'rsa.web.web_cookie': { - category: 'rsa', - description: 'This key is used to capture the Web cookies specifically.', - name: 'rsa.web.web_cookie', + 'gcp.audit.authentication_info.authority_selector': { + category: 'gcp', + description: + 'The authority selector specified by the requestor, if any. It is not guaranteed that the principal was allowed to use this authority. ', + name: 'gcp.audit.authentication_info.authority_selector', type: 'keyword', }, - 'rsa.web.alias_host': { - category: 'rsa', - name: 'rsa.web.alias_host', + 'gcp.audit.authorization_info.permission': { + category: 'gcp', + description: 'The required IAM permission. ', + name: 'gcp.audit.authorization_info.permission', type: 'keyword', }, - 'rsa.web.reputation_num': { - category: 'rsa', - description: 'Reputation Number of an entity. Typically used for Web Domains', - name: 'rsa.web.reputation_num', - type: 'double', + 'gcp.audit.authorization_info.granted': { + category: 'gcp', + description: 'Whether or not authorization for resource and permission was granted. ', + name: 'gcp.audit.authorization_info.granted', + type: 'boolean', }, - 'rsa.web.web_ref_domain': { - category: 'rsa', - description: "Web referer's domain", - name: 'rsa.web.web_ref_domain', + 'gcp.audit.authorization_info.resource_attributes.service': { + category: 'gcp', + description: 'The name of the service. ', + name: 'gcp.audit.authorization_info.resource_attributes.service', type: 'keyword', }, - 'rsa.web.web_ref_query': { - category: 'rsa', - description: "This key captures Web referer's query portion of the URL", - name: 'rsa.web.web_ref_query', + 'gcp.audit.authorization_info.resource_attributes.name': { + category: 'gcp', + description: 'The name of the resource. ', + name: 'gcp.audit.authorization_info.resource_attributes.name', type: 'keyword', }, - 'rsa.web.remote_domain': { - category: 'rsa', - name: 'rsa.web.remote_domain', + 'gcp.audit.authorization_info.resource_attributes.type': { + category: 'gcp', + description: 'The type of the resource. ', + name: 'gcp.audit.authorization_info.resource_attributes.type', type: 'keyword', }, - 'rsa.web.web_ref_page': { - category: 'rsa', - description: "This key captures Web referer's page information", - name: 'rsa.web.web_ref_page', + 'gcp.audit.method_name': { + category: 'gcp', + description: + "The name of the service method or operation. For API calls, this should be the name of the API method. For example, 'google.datastore.v1.Datastore.RunQuery'. ", + name: 'gcp.audit.method_name', type: 'keyword', }, - 'rsa.web.web_ref_root': { - category: 'rsa', - description: "Web referer's root URL path", - name: 'rsa.web.web_ref_root', - type: 'keyword', + 'gcp.audit.num_response_items': { + category: 'gcp', + description: 'The number of items returned from a List or Query API method, if applicable. ', + name: 'gcp.audit.num_response_items', + type: 'long', }, - 'rsa.web.cn_asn_dst': { - category: 'rsa', - name: 'rsa.web.cn_asn_dst', + 'gcp.audit.request.proto_name': { + category: 'gcp', + description: 'Type property of the request. ', + name: 'gcp.audit.request.proto_name', type: 'keyword', }, - 'rsa.web.cn_rpackets': { - category: 'rsa', - name: 'rsa.web.cn_rpackets', + 'gcp.audit.request.filter': { + category: 'gcp', + description: 'Filter of the request. ', + name: 'gcp.audit.request.filter', type: 'keyword', }, - 'rsa.web.urlpage': { - category: 'rsa', - name: 'rsa.web.urlpage', + 'gcp.audit.request.name': { + category: 'gcp', + description: 'Name of the request. ', + name: 'gcp.audit.request.name', type: 'keyword', }, - 'rsa.web.urlroot': { - category: 'rsa', - name: 'rsa.web.urlroot', + 'gcp.audit.request.resource_name': { + category: 'gcp', + description: 'Name of the request resource. ', + name: 'gcp.audit.request.resource_name', type: 'keyword', }, - 'rsa.web.p_url': { - category: 'rsa', - name: 'rsa.web.p_url', - type: 'keyword', + 'gcp.audit.request_metadata.caller_ip': { + category: 'gcp', + description: 'The IP address of the caller. ', + name: 'gcp.audit.request_metadata.caller_ip', + type: 'ip', }, - 'rsa.web.p_user_agent': { - category: 'rsa', - name: 'rsa.web.p_user_agent', + 'gcp.audit.request_metadata.caller_supplied_user_agent': { + category: 'gcp', + description: + 'The user agent of the caller. This information is not authenticated and should be treated accordingly. ', + name: 'gcp.audit.request_metadata.caller_supplied_user_agent', type: 'keyword', }, - 'rsa.web.p_web_cookie': { - category: 'rsa', - name: 'rsa.web.p_web_cookie', + 'gcp.audit.response.proto_name': { + category: 'gcp', + description: 'Type property of the response. ', + name: 'gcp.audit.response.proto_name', type: 'keyword', }, - 'rsa.web.p_web_method': { - category: 'rsa', - name: 'rsa.web.p_web_method', + 'gcp.audit.response.details.group': { + category: 'gcp', + description: 'The name of the group. ', + name: 'gcp.audit.response.details.group', type: 'keyword', }, - 'rsa.web.p_web_referer': { - category: 'rsa', - name: 'rsa.web.p_web_referer', + 'gcp.audit.response.details.kind': { + category: 'gcp', + description: 'The kind of the response details. ', + name: 'gcp.audit.response.details.kind', type: 'keyword', }, - 'rsa.web.web_extension_tmp': { - category: 'rsa', - name: 'rsa.web.web_extension_tmp', + 'gcp.audit.response.details.name': { + category: 'gcp', + description: 'The name of the response details. ', + name: 'gcp.audit.response.details.name', type: 'keyword', }, - 'rsa.web.web_page': { - category: 'rsa', - name: 'rsa.web.web_page', + 'gcp.audit.response.details.uid': { + category: 'gcp', + description: 'The uid of the response details. ', + name: 'gcp.audit.response.details.uid', type: 'keyword', }, - 'rsa.threat.threat_category': { - category: 'rsa', - description: 'This key captures Threat Name/Threat Category/Categorization of alert', - name: 'rsa.threat.threat_category', + 'gcp.audit.response.status': { + category: 'gcp', + description: 'Status of the response. ', + name: 'gcp.audit.response.status', type: 'keyword', }, - 'rsa.threat.threat_desc': { - category: 'rsa', + 'gcp.audit.resource_name': { + category: 'gcp', description: - 'This key is used to capture the threat description from the session directly or inferred', - name: 'rsa.threat.threat_desc', + "The resource or collection that is the target of the operation. The name is a scheme-less URI, not including the API service name. For example, 'shelves/SHELF_ID/books'. ", + name: 'gcp.audit.resource_name', type: 'keyword', }, - 'rsa.threat.alert': { - category: 'rsa', - description: 'This key is used to capture name of the alert', - name: 'rsa.threat.alert', + 'gcp.audit.resource_location.current_locations': { + category: 'gcp', + description: 'Current locations of the resource. ', + name: 'gcp.audit.resource_location.current_locations', type: 'keyword', }, - 'rsa.threat.threat_source': { - category: 'rsa', - description: 'This key is used to capture source of the threat', - name: 'rsa.threat.threat_source', + 'gcp.audit.service_name': { + category: 'gcp', + description: + 'The name of the API service performing the operation. For example, datastore.googleapis.com. ', + name: 'gcp.audit.service_name', type: 'keyword', }, - 'rsa.crypto.crypto': { - category: 'rsa', - description: 'This key is used to capture the Encryption Type or Encryption Key only', - name: 'rsa.crypto.crypto', - type: 'keyword', + 'gcp.audit.status.code': { + category: 'gcp', + description: 'The status code, which should be an enum value of google.rpc.Code. ', + name: 'gcp.audit.status.code', + type: 'integer', }, - 'rsa.crypto.cipher_src': { - category: 'rsa', - description: 'This key is for Source (Client) Cipher', - name: 'rsa.crypto.cipher_src', + 'gcp.audit.status.message': { + category: 'gcp', + description: + 'A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client. ', + name: 'gcp.audit.status.message', type: 'keyword', }, - 'rsa.crypto.cert_subject': { - category: 'rsa', - description: 'This key is used to capture the Certificate organization only', - name: 'rsa.crypto.cert_subject', - type: 'keyword', + 'gcp.firewall.rule_details.priority': { + category: 'gcp', + description: 'The priority for the firewall rule.', + name: 'gcp.firewall.rule_details.priority', + type: 'long', }, - 'rsa.crypto.peer': { - category: 'rsa', - description: "This key is for Encryption peer's IP Address", - name: 'rsa.crypto.peer', + 'gcp.firewall.rule_details.action': { + category: 'gcp', + description: 'Action that the rule performs on match.', + name: 'gcp.firewall.rule_details.action', type: 'keyword', }, - 'rsa.crypto.cipher_size_src': { - category: 'rsa', - description: 'This key captures Source (Client) Cipher Size', - name: 'rsa.crypto.cipher_size_src', - type: 'long', + 'gcp.firewall.rule_details.direction': { + category: 'gcp', + description: 'Direction of traffic that matches this rule.', + name: 'gcp.firewall.rule_details.direction', + type: 'keyword', }, - 'rsa.crypto.ike': { - category: 'rsa', - description: 'IKE negotiation phase.', - name: 'rsa.crypto.ike', + 'gcp.firewall.rule_details.reference': { + category: 'gcp', + description: 'Reference to the firewall rule.', + name: 'gcp.firewall.rule_details.reference', type: 'keyword', }, - 'rsa.crypto.scheme': { - category: 'rsa', - description: 'This key captures the Encryption scheme used', - name: 'rsa.crypto.scheme', + 'gcp.firewall.rule_details.source_range': { + category: 'gcp', + description: 'List of source ranges that the firewall rule applies to.', + name: 'gcp.firewall.rule_details.source_range', type: 'keyword', }, - 'rsa.crypto.peer_id': { - category: 'rsa', - description: 'This key is for Encryption peer’s identity', - name: 'rsa.crypto.peer_id', + 'gcp.firewall.rule_details.destination_range': { + category: 'gcp', + description: 'List of destination ranges that the firewall applies to.', + name: 'gcp.firewall.rule_details.destination_range', type: 'keyword', }, - 'rsa.crypto.sig_type': { - category: 'rsa', - description: 'This key captures the Signature Type', - name: 'rsa.crypto.sig_type', + 'gcp.firewall.rule_details.source_tag': { + category: 'gcp', + description: 'List of all the source tags that the firewall rule applies to. ', + name: 'gcp.firewall.rule_details.source_tag', type: 'keyword', }, - 'rsa.crypto.cert_issuer': { - category: 'rsa', - name: 'rsa.crypto.cert_issuer', + 'gcp.firewall.rule_details.target_tag': { + category: 'gcp', + description: 'List of all the target tags that the firewall rule applies to. ', + name: 'gcp.firewall.rule_details.target_tag', type: 'keyword', }, - 'rsa.crypto.cert_host_name': { - category: 'rsa', - description: 'Deprecated key defined only in table map.', - name: 'rsa.crypto.cert_host_name', + 'gcp.firewall.rule_details.ip_port_info': { + category: 'gcp', + description: 'List of ip protocols and applicable port ranges for rules. ', + name: 'gcp.firewall.rule_details.ip_port_info', + type: 'array', + }, + 'gcp.firewall.rule_details.source_service_account': { + category: 'gcp', + description: 'List of all the source service accounts that the firewall rule applies to. ', + name: 'gcp.firewall.rule_details.source_service_account', type: 'keyword', }, - 'rsa.crypto.cert_error': { - category: 'rsa', - description: 'This key captures the Certificate Error String', - name: 'rsa.crypto.cert_error', + 'gcp.firewall.rule_details.target_service_account': { + category: 'gcp', + description: 'List of all the target service accounts that the firewall rule applies to. ', + name: 'gcp.firewall.rule_details.target_service_account', type: 'keyword', }, - 'rsa.crypto.cipher_dst': { - category: 'rsa', - description: 'This key is for Destination (Server) Cipher', - name: 'rsa.crypto.cipher_dst', + 'gcp.vpcflow.reporter': { + category: 'gcp', + description: "The side which reported the flow. Can be either 'SRC' or 'DEST'. ", + name: 'gcp.vpcflow.reporter', type: 'keyword', }, - 'rsa.crypto.cipher_size_dst': { - category: 'rsa', - description: 'This key captures Destination (Server) Cipher Size', - name: 'rsa.crypto.cipher_size_dst', + 'gcp.vpcflow.rtt.ms': { + category: 'gcp', + description: + 'Latency as measured (for TCP flows only) during the time interval. This is the time elapsed between sending a SEQ and receiving a corresponding ACK and it contains the network RTT as well as the application related delay. ', + name: 'gcp.vpcflow.rtt.ms', type: 'long', }, - 'rsa.crypto.ssl_ver_src': { - category: 'rsa', - description: 'Deprecated, use version', - name: 'rsa.crypto.ssl_ver_src', + 'google_workspace.actor.type': { + category: 'google_workspace', + description: + 'The type of actor. Values can be: *USER*: Another user in the same domain. *EXTERNAL_USER*: A user outside the domain. *KEY*: A non-human actor. ', + name: 'google_workspace.actor.type', type: 'keyword', }, - 'rsa.crypto.d_certauth': { - category: 'rsa', - name: 'rsa.crypto.d_certauth', + 'google_workspace.actor.key': { + category: 'google_workspace', + description: + 'Only present when `actor.type` is `KEY`. Can be the `consumer_key` of the requestor for OAuth 2LO API requests or an identifier for robot accounts. ', + name: 'google_workspace.actor.key', type: 'keyword', }, - 'rsa.crypto.s_certauth': { - category: 'rsa', - name: 'rsa.crypto.s_certauth', + 'google_workspace.event.type': { + category: 'google_workspace', + description: + 'The type of Google Workspace event, mapped from `items[].events[].type` in the original payload. Each fileset can have a different set of values for it, more details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ', + example: 'audit#activity', + name: 'google_workspace.event.type', type: 'keyword', }, - 'rsa.crypto.ike_cookie1': { - category: 'rsa', - description: 'ID of the negotiation — sent for ISAKMP Phase One', - name: 'rsa.crypto.ike_cookie1', + 'google_workspace.kind': { + category: 'google_workspace', + description: + 'The type of API resource, mapped from `kind` in the original payload. More details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ', + example: 'audit#activity', + name: 'google_workspace.kind', type: 'keyword', }, - 'rsa.crypto.ike_cookie2': { - category: 'rsa', - description: 'ID of the negotiation — sent for ISAKMP Phase Two', - name: 'rsa.crypto.ike_cookie2', + 'google_workspace.organization.domain': { + category: 'google_workspace', + description: "The domain that is affected by the report's event. ", + name: 'google_workspace.organization.domain', type: 'keyword', }, - 'rsa.crypto.cert_checksum': { - category: 'rsa', - name: 'rsa.crypto.cert_checksum', + 'google_workspace.admin.application.edition': { + category: 'google_workspace', + description: 'The Google Workspace edition.', + name: 'google_workspace.admin.application.edition', type: 'keyword', }, - 'rsa.crypto.cert_host_cat': { - category: 'rsa', - description: 'This key is used for the hostname category value of a certificate', - name: 'rsa.crypto.cert_host_cat', + 'google_workspace.admin.application.name': { + category: 'google_workspace', + description: "The application's name.", + name: 'google_workspace.admin.application.name', type: 'keyword', }, - 'rsa.crypto.cert_serial': { - category: 'rsa', - description: 'This key is used to capture the Certificate serial number only', - name: 'rsa.crypto.cert_serial', + 'google_workspace.admin.application.enabled': { + category: 'google_workspace', + description: 'The enabled application.', + name: 'google_workspace.admin.application.enabled', type: 'keyword', }, - 'rsa.crypto.cert_status': { - category: 'rsa', - description: 'This key captures Certificate validation status', - name: 'rsa.crypto.cert_status', + 'google_workspace.admin.application.licences_order_number': { + category: 'google_workspace', + description: 'Order number used to redeem licenses.', + name: 'google_workspace.admin.application.licences_order_number', type: 'keyword', }, - 'rsa.crypto.ssl_ver_dst': { - category: 'rsa', - description: 'Deprecated, use version', - name: 'rsa.crypto.ssl_ver_dst', + 'google_workspace.admin.application.licences_purchased': { + category: 'google_workspace', + description: 'Number of licences purchased.', + name: 'google_workspace.admin.application.licences_purchased', type: 'keyword', }, - 'rsa.crypto.cert_keysize': { - category: 'rsa', - name: 'rsa.crypto.cert_keysize', + 'google_workspace.admin.application.id': { + category: 'google_workspace', + description: 'The application ID.', + name: 'google_workspace.admin.application.id', type: 'keyword', }, - 'rsa.crypto.cert_username': { - category: 'rsa', - name: 'rsa.crypto.cert_username', + 'google_workspace.admin.application.asp_id': { + category: 'google_workspace', + description: 'The application specific password ID.', + name: 'google_workspace.admin.application.asp_id', type: 'keyword', }, - 'rsa.crypto.https_insact': { - category: 'rsa', - name: 'rsa.crypto.https_insact', + 'google_workspace.admin.application.package_id': { + category: 'google_workspace', + description: 'The mobile application package ID.', + name: 'google_workspace.admin.application.package_id', type: 'keyword', }, - 'rsa.crypto.https_valid': { - category: 'rsa', - name: 'rsa.crypto.https_valid', + 'google_workspace.admin.group.email': { + category: 'google_workspace', + description: "The group's primary email address.", + name: 'google_workspace.admin.group.email', type: 'keyword', }, - 'rsa.crypto.cert_ca': { - category: 'rsa', - description: 'This key is used to capture the Certificate signing authority only', - name: 'rsa.crypto.cert_ca', + 'google_workspace.admin.new_value': { + category: 'google_workspace', + description: 'The new value for the setting.', + name: 'google_workspace.admin.new_value', type: 'keyword', }, - 'rsa.crypto.cert_common': { - category: 'rsa', - description: 'This key is used to capture the Certificate common name only', - name: 'rsa.crypto.cert_common', + 'google_workspace.admin.old_value': { + category: 'google_workspace', + description: 'The old value for the setting.', + name: 'google_workspace.admin.old_value', type: 'keyword', }, - 'rsa.wireless.wlan_ssid': { - category: 'rsa', - description: 'This key is used to capture the ssid of a Wireless Session', - name: 'rsa.wireless.wlan_ssid', + 'google_workspace.admin.org_unit.name': { + category: 'google_workspace', + description: 'The organizational unit name.', + name: 'google_workspace.admin.org_unit.name', type: 'keyword', }, - 'rsa.wireless.access_point': { - category: 'rsa', - description: 'This key is used to capture the access point name.', - name: 'rsa.wireless.access_point', + 'google_workspace.admin.org_unit.full': { + category: 'google_workspace', + description: 'The org unit full path including the root org unit name.', + name: 'google_workspace.admin.org_unit.full', type: 'keyword', }, - 'rsa.wireless.wlan_channel': { - category: 'rsa', - description: 'This is used to capture the channel names', - name: 'rsa.wireless.wlan_channel', - type: 'long', - }, - 'rsa.wireless.wlan_name': { - category: 'rsa', - description: 'This key captures either WLAN number/name', - name: 'rsa.wireless.wlan_name', + 'google_workspace.admin.setting.name': { + category: 'google_workspace', + description: 'The setting name.', + name: 'google_workspace.admin.setting.name', type: 'keyword', }, - 'rsa.storage.disk_volume': { - category: 'rsa', - description: 'A unique name assigned to logical units (volumes) within a physical disk', - name: 'rsa.storage.disk_volume', + 'google_workspace.admin.user_defined_setting.name': { + category: 'google_workspace', + description: 'The name of the user-defined setting.', + name: 'google_workspace.admin.user_defined_setting.name', type: 'keyword', }, - 'rsa.storage.lun': { - category: 'rsa', - description: 'Logical Unit Number.This key is a very useful concept in Storage.', - name: 'rsa.storage.lun', + 'google_workspace.admin.setting.description': { + category: 'google_workspace', + description: 'The setting name.', + name: 'google_workspace.admin.setting.description', type: 'keyword', }, - 'rsa.storage.pwwn': { - category: 'rsa', - description: 'This uniquely identifies a port on a HBA.', - name: 'rsa.storage.pwwn', + 'google_workspace.admin.group.priorities': { + category: 'google_workspace', + description: 'Group priorities.', + name: 'google_workspace.admin.group.priorities', type: 'keyword', }, - 'rsa.physical.org_dst': { - category: 'rsa', - description: - 'This is used to capture the destination organization based on the GEOPIP Maxmind database.', - name: 'rsa.physical.org_dst', + 'google_workspace.admin.domain.alias': { + category: 'google_workspace', + description: 'The domain alias.', + name: 'google_workspace.admin.domain.alias', type: 'keyword', }, - 'rsa.physical.org_src': { - category: 'rsa', - description: - 'This is used to capture the source organization based on the GEOPIP Maxmind database.', - name: 'rsa.physical.org_src', + 'google_workspace.admin.domain.name': { + category: 'google_workspace', + description: 'The primary domain name.', + name: 'google_workspace.admin.domain.name', type: 'keyword', }, - 'rsa.healthcare.patient_fname': { - category: 'rsa', - description: - 'This key is for First Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.healthcare.patient_fname', + 'google_workspace.admin.domain.secondary_name': { + category: 'google_workspace', + description: 'The secondary domain name.', + name: 'google_workspace.admin.domain.secondary_name', type: 'keyword', }, - 'rsa.healthcare.patient_id': { - category: 'rsa', - description: 'This key captures the unique ID for a patient', - name: 'rsa.healthcare.patient_id', + 'google_workspace.admin.managed_configuration': { + category: 'google_workspace', + description: 'The name of the managed configuration.', + name: 'google_workspace.admin.managed_configuration', type: 'keyword', }, - 'rsa.healthcare.patient_lname': { - category: 'rsa', + 'google_workspace.admin.non_featured_services_selection': { + category: 'google_workspace', description: - 'This key is for Last Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.healthcare.patient_lname', + 'Non-featured services selection. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-application-settings#FLASHLIGHT_EDU_NON_FEATURED_SERVICES_SELECTED ', + name: 'google_workspace.admin.non_featured_services_selection', type: 'keyword', }, - 'rsa.healthcare.patient_mname': { - category: 'rsa', - description: - 'This key is for Middle Names only, this is used for Healthcare predominantly to capture Patients information', - name: 'rsa.healthcare.patient_mname', + 'google_workspace.admin.field': { + category: 'google_workspace', + description: 'The name of the field.', + name: 'google_workspace.admin.field', type: 'keyword', }, - 'rsa.endpoint.host_state': { - category: 'rsa', - description: - 'This key is used to capture the current state of the machine, such as blacklisted, infected, firewall disabled and so on', - name: 'rsa.endpoint.host_state', + 'google_workspace.admin.resource.id': { + category: 'google_workspace', + description: 'The name of the resource identifier.', + name: 'google_workspace.admin.resource.id', type: 'keyword', }, - 'rsa.endpoint.registry_key': { - category: 'rsa', - description: 'This key captures the path to the registry key', - name: 'rsa.endpoint.registry_key', + 'google_workspace.admin.user.email': { + category: 'google_workspace', + description: "The user's primary email address.", + name: 'google_workspace.admin.user.email', type: 'keyword', }, - 'rsa.endpoint.registry_value': { - category: 'rsa', - description: 'This key captures values or decorators used within a registry entry', - name: 'rsa.endpoint.registry_value', + 'google_workspace.admin.user.nickname': { + category: 'google_workspace', + description: "The user's nickname.", + name: 'google_workspace.admin.user.nickname', type: 'keyword', }, - 'forcepoint.virus_id': { - category: 'forcepoint', - description: 'Virus ID ', - name: 'forcepoint.virus_id', - type: 'keyword', + 'google_workspace.admin.user.birthdate': { + category: 'google_workspace', + description: "The user's birth date.", + name: 'google_workspace.admin.user.birthdate', + type: 'date', }, - 'checkpoint.app_risk': { - category: 'checkpoint', - description: 'Application risk.', - name: 'checkpoint.app_risk', + 'google_workspace.admin.gateway.name': { + category: 'google_workspace', + description: 'Gateway name. Present on some chat settings.', + name: 'google_workspace.admin.gateway.name', type: 'keyword', }, - 'checkpoint.app_severity': { - category: 'checkpoint', - description: 'Application threat severity.', - name: 'checkpoint.app_severity', + 'google_workspace.admin.chrome_os.session_type': { + category: 'google_workspace', + description: 'Chrome OS session type.', + name: 'google_workspace.admin.chrome_os.session_type', type: 'keyword', }, - 'checkpoint.app_sig_id': { - category: 'checkpoint', - description: 'The signature ID which the application was detected by.', - name: 'checkpoint.app_sig_id', + 'google_workspace.admin.device.serial_number': { + category: 'google_workspace', + description: 'Device serial number.', + name: 'google_workspace.admin.device.serial_number', type: 'keyword', }, - 'checkpoint.auth_method': { - category: 'checkpoint', - description: 'Password authentication protocol used.', - name: 'checkpoint.auth_method', + 'google_workspace.admin.device.id': { + category: 'google_workspace', + name: 'google_workspace.admin.device.id', type: 'keyword', }, - 'checkpoint.category': { - category: 'checkpoint', - description: 'Category.', - name: 'checkpoint.category', + 'google_workspace.admin.device.type': { + category: 'google_workspace', + description: 'Device type.', + name: 'google_workspace.admin.device.type', type: 'keyword', }, - 'checkpoint.confidence_level': { - category: 'checkpoint', - description: 'Confidence level determined.', - name: 'checkpoint.confidence_level', - type: 'integer', - }, - 'checkpoint.connectivity_state': { - category: 'checkpoint', - description: 'Connectivity state.', - name: 'checkpoint.connectivity_state', + 'google_workspace.admin.print_server.name': { + category: 'google_workspace', + description: 'The name of the print server.', + name: 'google_workspace.admin.print_server.name', type: 'keyword', }, - 'checkpoint.cookie': { - category: 'checkpoint', - description: 'IKE cookie.', - name: 'checkpoint.cookie', + 'google_workspace.admin.printer.name': { + category: 'google_workspace', + description: 'The name of the printer.', + name: 'google_workspace.admin.printer.name', type: 'keyword', }, - 'checkpoint.dst_phone_number': { - category: 'checkpoint', - description: 'Destination IP-Phone.', - name: 'checkpoint.dst_phone_number', + 'google_workspace.admin.device.command_details': { + category: 'google_workspace', + description: 'Command details.', + name: 'google_workspace.admin.device.command_details', type: 'keyword', }, - 'checkpoint.email_control': { - category: 'checkpoint', - description: 'Engine name.', - name: 'checkpoint.email_control', + 'google_workspace.admin.role.id': { + category: 'google_workspace', + description: 'Unique identifier for this role privilege.', + name: 'google_workspace.admin.role.id', type: 'keyword', }, - 'checkpoint.email_id': { - category: 'checkpoint', - description: 'Internal email ID.', - name: 'checkpoint.email_id', + 'google_workspace.admin.role.name': { + category: 'google_workspace', + description: + 'The role name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-delegated-admin-settings ', + name: 'google_workspace.admin.role.name', type: 'keyword', }, - 'checkpoint.email_recipients_num': { - category: 'checkpoint', - description: 'Number of recipients.', - name: 'checkpoint.email_recipients_num', - type: 'long', - }, - 'checkpoint.email_session_id': { - category: 'checkpoint', - description: 'Internal email session ID.', - name: 'checkpoint.email_session_id', + 'google_workspace.admin.privilege.name': { + category: 'google_workspace', + description: 'Privilege name.', + name: 'google_workspace.admin.privilege.name', type: 'keyword', }, - 'checkpoint.email_spool_id': { - category: 'checkpoint', - description: 'Internal email spool ID.', - name: 'checkpoint.email_spool_id', + 'google_workspace.admin.service.name': { + category: 'google_workspace', + description: 'The service name.', + name: 'google_workspace.admin.service.name', type: 'keyword', }, - 'checkpoint.email_subject': { - category: 'checkpoint', - description: 'Email subject.', - name: 'checkpoint.email_subject', + 'google_workspace.admin.url.name': { + category: 'google_workspace', + description: 'The website name.', + name: 'google_workspace.admin.url.name', type: 'keyword', }, - 'checkpoint.event_count': { - category: 'checkpoint', - description: 'Number of events associated with the log.', - name: 'checkpoint.event_count', - type: 'long', + 'google_workspace.admin.product.name': { + category: 'google_workspace', + description: 'The product name.', + name: 'google_workspace.admin.product.name', + type: 'keyword', }, - 'checkpoint.frequency': { - category: 'checkpoint', - description: 'Scan frequency.', - name: 'checkpoint.frequency', + 'google_workspace.admin.product.sku': { + category: 'google_workspace', + description: 'The product SKU.', + name: 'google_workspace.admin.product.sku', type: 'keyword', }, - 'checkpoint.icmp_type': { - category: 'checkpoint', - description: 'ICMP type.', - name: 'checkpoint.icmp_type', + 'google_workspace.admin.bulk_upload.failed': { + category: 'google_workspace', + description: 'Number of failed records in bulk upload operation.', + name: 'google_workspace.admin.bulk_upload.failed', type: 'long', }, - 'checkpoint.icmp_code': { - category: 'checkpoint', - description: 'ICMP code.', - name: 'checkpoint.icmp_code', + 'google_workspace.admin.bulk_upload.total': { + category: 'google_workspace', + description: 'Number of total records in bulk upload operation.', + name: 'google_workspace.admin.bulk_upload.total', type: 'long', }, - 'checkpoint.identity_type': { - category: 'checkpoint', - description: 'Identity type.', - name: 'checkpoint.identity_type', - type: 'keyword', - }, - 'checkpoint.incident_extension': { - category: 'checkpoint', - description: 'Format of original data.', - name: 'checkpoint.incident_extension', + 'google_workspace.admin.group.allowed_list': { + category: 'google_workspace', + description: 'Names of allow-listed groups.', + name: 'google_workspace.admin.group.allowed_list', type: 'keyword', }, - 'checkpoint.integrity_av_invoke_type': { - category: 'checkpoint', - description: 'Scan invoke type.', - name: 'checkpoint.integrity_av_invoke_type', + 'google_workspace.admin.email.quarantine_name': { + category: 'google_workspace', + description: 'The name of the quarantine.', + name: 'google_workspace.admin.email.quarantine_name', type: 'keyword', }, - 'checkpoint.malware_family': { - category: 'checkpoint', - description: 'Malware family.', - name: 'checkpoint.malware_family', + 'google_workspace.admin.email.log_search_filter.message_id': { + category: 'google_workspace', + description: "The log search filter's email message ID.", + name: 'google_workspace.admin.email.log_search_filter.message_id', type: 'keyword', }, - 'checkpoint.peer_gateway': { - category: 'checkpoint', - description: 'Main IP of the peer Security Gateway.', - name: 'checkpoint.peer_gateway', - type: 'ip', + 'google_workspace.admin.email.log_search_filter.start_date': { + category: 'google_workspace', + description: "The log search filter's start date.", + name: 'google_workspace.admin.email.log_search_filter.start_date', + type: 'date', }, - 'checkpoint.performance_impact': { - category: 'checkpoint', - description: 'Protection performance impact.', - name: 'checkpoint.performance_impact', - type: 'integer', + 'google_workspace.admin.email.log_search_filter.end_date': { + category: 'google_workspace', + description: "The log search filter's ending date.", + name: 'google_workspace.admin.email.log_search_filter.end_date', + type: 'date', }, - 'checkpoint.protection_id': { - category: 'checkpoint', - description: 'Protection malware ID.', - name: 'checkpoint.protection_id', + 'google_workspace.admin.email.log_search_filter.recipient.value': { + category: 'google_workspace', + description: "The log search filter's email recipient.", + name: 'google_workspace.admin.email.log_search_filter.recipient.value', type: 'keyword', }, - 'checkpoint.protection_name': { - category: 'checkpoint', - description: 'Specific signature name of the attack.', - name: 'checkpoint.protection_name', + 'google_workspace.admin.email.log_search_filter.sender.value': { + category: 'google_workspace', + description: "The log search filter's email sender.", + name: 'google_workspace.admin.email.log_search_filter.sender.value', type: 'keyword', }, - 'checkpoint.protection_type': { - category: 'checkpoint', - description: 'Type of protection used to detect the attack.', - name: 'checkpoint.protection_type', + 'google_workspace.admin.email.log_search_filter.recipient.ip': { + category: 'google_workspace', + description: "The log search filter's email recipient's IP address.", + name: 'google_workspace.admin.email.log_search_filter.recipient.ip', + type: 'ip', + }, + 'google_workspace.admin.email.log_search_filter.sender.ip': { + category: 'google_workspace', + description: "The log search filter's email sender's IP address.", + name: 'google_workspace.admin.email.log_search_filter.sender.ip', + type: 'ip', + }, + 'google_workspace.admin.chrome_licenses.enabled': { + category: 'google_workspace', + description: + 'Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ', + name: 'google_workspace.admin.chrome_licenses.enabled', type: 'keyword', }, - 'checkpoint.scan_result': { - category: 'checkpoint', - description: 'Scan result.', - name: 'checkpoint.scan_result', + 'google_workspace.admin.chrome_licenses.allowed': { + category: 'google_workspace', + description: + 'Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ', + name: 'google_workspace.admin.chrome_licenses.allowed', type: 'keyword', }, - 'checkpoint.sensor_mode': { - category: 'checkpoint', - description: 'Sensor mode.', - name: 'checkpoint.sensor_mode', + 'google_workspace.admin.oauth2.service.name': { + category: 'google_workspace', + description: + 'OAuth2 service name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ', + name: 'google_workspace.admin.oauth2.service.name', type: 'keyword', }, - 'checkpoint.severity': { - category: 'checkpoint', - description: 'Threat severity.', - name: 'checkpoint.severity', + 'google_workspace.admin.oauth2.application.id': { + category: 'google_workspace', + description: 'OAuth2 application ID.', + name: 'google_workspace.admin.oauth2.application.id', type: 'keyword', }, - 'checkpoint.spyware_name': { - category: 'checkpoint', - description: 'Spyware name.', - name: 'checkpoint.spyware_name', + 'google_workspace.admin.oauth2.application.name': { + category: 'google_workspace', + description: 'OAuth2 application name.', + name: 'google_workspace.admin.oauth2.application.name', type: 'keyword', }, - 'checkpoint.spyware_status': { - category: 'checkpoint', - description: 'Spyware status.', - name: 'checkpoint.spyware_status', + 'google_workspace.admin.oauth2.application.type': { + category: 'google_workspace', + description: + 'OAuth2 application type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ', + name: 'google_workspace.admin.oauth2.application.type', type: 'keyword', }, - 'checkpoint.subs_exp': { - category: 'checkpoint', - description: 'The expiration date of the subscription.', - name: 'checkpoint.subs_exp', - type: 'date', + 'google_workspace.admin.verification_method': { + category: 'google_workspace', + description: + 'Related verification method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings and https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ', + name: 'google_workspace.admin.verification_method', + type: 'keyword', }, - 'checkpoint.tcp_flags': { - category: 'checkpoint', - description: 'TCP packet flags.', - name: 'checkpoint.tcp_flags', + 'google_workspace.admin.alert.name': { + category: 'google_workspace', + description: 'The alert name.', + name: 'google_workspace.admin.alert.name', type: 'keyword', }, - 'checkpoint.termination_reason': { - category: 'checkpoint', - description: 'Termination reason.', - name: 'checkpoint.termination_reason', + 'google_workspace.admin.rule.name': { + category: 'google_workspace', + description: 'The rule name.', + name: 'google_workspace.admin.rule.name', type: 'keyword', }, - 'checkpoint.update_status': { - category: 'checkpoint', - description: 'Update status.', - name: 'checkpoint.update_status', + 'google_workspace.admin.api.client.name': { + category: 'google_workspace', + description: 'The API client name.', + name: 'google_workspace.admin.api.client.name', type: 'keyword', }, - 'checkpoint.user_status': { - category: 'checkpoint', - description: 'User response.', - name: 'checkpoint.user_status', + 'google_workspace.admin.api.scopes': { + category: 'google_workspace', + description: 'The API scopes.', + name: 'google_workspace.admin.api.scopes', type: 'keyword', }, - 'checkpoint.uuid': { - category: 'checkpoint', - description: 'External ID.', - name: 'checkpoint.uuid', + 'google_workspace.admin.mdm.token': { + category: 'google_workspace', + description: 'The MDM vendor enrollment token.', + name: 'google_workspace.admin.mdm.token', type: 'keyword', }, - 'checkpoint.virus_name': { - category: 'checkpoint', - description: 'Virus name.', - name: 'checkpoint.virus_name', + 'google_workspace.admin.mdm.vendor': { + category: 'google_workspace', + description: "The MDM vendor's name.", + name: 'google_workspace.admin.mdm.vendor', type: 'keyword', }, - 'checkpoint.voip_log_type': { - category: 'checkpoint', - description: 'VoIP log types.', - name: 'checkpoint.voip_log_type', + 'google_workspace.admin.info_type': { + category: 'google_workspace', + description: + 'This will be used to state what kind of information was changed. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ', + name: 'google_workspace.admin.info_type', type: 'keyword', }, - 'cef.extensions.cp_app_risk': { - category: 'cef', - name: 'cef.extensions.cp_app_risk', + 'google_workspace.admin.email_monitor.dest_email': { + category: 'google_workspace', + description: 'The destination address of the email monitor.', + name: 'google_workspace.admin.email_monitor.dest_email', type: 'keyword', }, - 'cef.extensions.cp_severity': { - category: 'cef', - name: 'cef.extensions.cp_severity', + 'google_workspace.admin.email_monitor.level.chat': { + category: 'google_workspace', + description: 'The chat email monitor level.', + name: 'google_workspace.admin.email_monitor.level.chat', type: 'keyword', }, - 'cef.extensions.ifname': { - category: 'cef', - name: 'cef.extensions.ifname', + 'google_workspace.admin.email_monitor.level.draft': { + category: 'google_workspace', + description: 'The draft email monitor level.', + name: 'google_workspace.admin.email_monitor.level.draft', type: 'keyword', }, - 'cef.extensions.inzone': { - category: 'cef', - name: 'cef.extensions.inzone', + 'google_workspace.admin.email_monitor.level.incoming': { + category: 'google_workspace', + description: 'The incoming email monitor level.', + name: 'google_workspace.admin.email_monitor.level.incoming', type: 'keyword', }, - 'cef.extensions.layer_uuid': { - category: 'cef', - name: 'cef.extensions.layer_uuid', + 'google_workspace.admin.email_monitor.level.outgoing': { + category: 'google_workspace', + description: 'The outgoing email monitor level.', + name: 'google_workspace.admin.email_monitor.level.outgoing', type: 'keyword', }, - 'cef.extensions.layer_name': { - category: 'cef', - name: 'cef.extensions.layer_name', + 'google_workspace.admin.email_dump.include_deleted': { + category: 'google_workspace', + description: 'Indicates if deleted emails are included in the export.', + name: 'google_workspace.admin.email_dump.include_deleted', + type: 'boolean', + }, + 'google_workspace.admin.email_dump.package_content': { + category: 'google_workspace', + description: 'The contents of the mailbox package.', + name: 'google_workspace.admin.email_dump.package_content', type: 'keyword', }, - 'cef.extensions.logid': { - category: 'cef', - name: 'cef.extensions.logid', + 'google_workspace.admin.email_dump.query': { + category: 'google_workspace', + description: 'The search query used for the dump.', + name: 'google_workspace.admin.email_dump.query', type: 'keyword', }, - 'cef.extensions.loguid': { - category: 'cef', - name: 'cef.extensions.loguid', + 'google_workspace.admin.request.id': { + category: 'google_workspace', + description: 'The request ID.', + name: 'google_workspace.admin.request.id', type: 'keyword', }, - 'cef.extensions.match_id': { - category: 'cef', - name: 'cef.extensions.match_id', + 'google_workspace.admin.mobile.action.id': { + category: 'google_workspace', + description: "The mobile device action's ID.", + name: 'google_workspace.admin.mobile.action.id', type: 'keyword', }, - 'cef.extensions.nat_addtnl_rulenum': { - category: 'cef', - name: 'cef.extensions.nat_addtnl_rulenum', + 'google_workspace.admin.mobile.action.type': { + category: 'google_workspace', + description: + "The mobile device action's type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ", + name: 'google_workspace.admin.mobile.action.type', type: 'keyword', }, - 'cef.extensions.nat_rulenum': { - category: 'cef', - name: 'cef.extensions.nat_rulenum', + 'google_workspace.admin.mobile.certificate.name': { + category: 'google_workspace', + description: 'The mobile certificate common name.', + name: 'google_workspace.admin.mobile.certificate.name', type: 'keyword', }, - 'cef.extensions.origin': { - category: 'cef', - name: 'cef.extensions.origin', + 'google_workspace.admin.mobile.company_owned_devices': { + category: 'google_workspace', + description: 'The number of devices a company owns.', + name: 'google_workspace.admin.mobile.company_owned_devices', + type: 'long', + }, + 'google_workspace.admin.distribution.entity.name': { + category: 'google_workspace', + description: + 'The distribution entity value, which can be a group name or an org-unit name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ', + name: 'google_workspace.admin.distribution.entity.name', type: 'keyword', }, - 'cef.extensions.originsicname': { - category: 'cef', - name: 'cef.extensions.originsicname', + 'google_workspace.admin.distribution.entity.type': { + category: 'google_workspace', + description: + 'The distribution entity type, which can be a group or an org-unit. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ', + name: 'google_workspace.admin.distribution.entity.type', type: 'keyword', }, - 'cef.extensions.outzone': { - category: 'cef', - name: 'cef.extensions.outzone', + 'google_workspace.drive.billable': { + category: 'google_workspace', + description: 'Whether this activity is billable.', + name: 'google_workspace.drive.billable', + type: 'boolean', + }, + 'google_workspace.drive.source_folder_id': { + category: 'google_workspace', + name: 'google_workspace.drive.source_folder_id', type: 'keyword', }, - 'cef.extensions.parent_rule': { - category: 'cef', - name: 'cef.extensions.parent_rule', + 'google_workspace.drive.source_folder_title': { + category: 'google_workspace', + name: 'google_workspace.drive.source_folder_title', type: 'keyword', }, - 'cef.extensions.product': { - category: 'cef', - name: 'cef.extensions.product', + 'google_workspace.drive.destination_folder_id': { + category: 'google_workspace', + name: 'google_workspace.drive.destination_folder_id', type: 'keyword', }, - 'cef.extensions.rule_action': { - category: 'cef', - name: 'cef.extensions.rule_action', + 'google_workspace.drive.destination_folder_title': { + category: 'google_workspace', + name: 'google_workspace.drive.destination_folder_title', type: 'keyword', }, - 'cef.extensions.rule_uid': { - category: 'cef', - name: 'cef.extensions.rule_uid', + 'google_workspace.drive.file.id': { + category: 'google_workspace', + name: 'google_workspace.drive.file.id', type: 'keyword', }, - 'cef.extensions.sequencenum': { - category: 'cef', - name: 'cef.extensions.sequencenum', + 'google_workspace.drive.file.type': { + category: 'google_workspace', + description: + 'Document Drive type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', + name: 'google_workspace.drive.file.type', type: 'keyword', }, - 'cef.extensions.service_id': { - category: 'cef', - name: 'cef.extensions.service_id', + 'google_workspace.drive.originating_app_id': { + category: 'google_workspace', + description: 'The Google Cloud Project ID of the application that performed the action. ', + name: 'google_workspace.drive.originating_app_id', type: 'keyword', }, - 'cef.extensions.version': { - category: 'cef', - name: 'cef.extensions.version', + 'google_workspace.drive.file.owner.email': { + category: 'google_workspace', + name: 'google_workspace.drive.file.owner.email', type: 'keyword', }, - 'checkpoint.calc_desc': { - category: 'checkpoint', - description: 'Log description. ', - name: 'checkpoint.calc_desc', + 'google_workspace.drive.file.owner.is_shared_drive': { + category: 'google_workspace', + description: 'Boolean flag denoting whether owner is a shared drive. ', + name: 'google_workspace.drive.file.owner.is_shared_drive', + type: 'boolean', + }, + 'google_workspace.drive.primary_event': { + category: 'google_workspace', + description: + 'Whether this is a primary event. A single user action in Drive may generate several events. ', + name: 'google_workspace.drive.primary_event', + type: 'boolean', + }, + 'google_workspace.drive.shared_drive_id': { + category: 'google_workspace', + description: + 'The unique identifier of the Team Drive. Only populated for for events relating to a Team Drive or item contained inside a Team Drive. ', + name: 'google_workspace.drive.shared_drive_id', type: 'keyword', }, - 'checkpoint.dst_country': { - category: 'checkpoint', - description: 'Destination country. ', - name: 'checkpoint.dst_country', + 'google_workspace.drive.visibility': { + category: 'google_workspace', + description: + 'Visibility of target file. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', + name: 'google_workspace.drive.visibility', type: 'keyword', }, - 'checkpoint.dst_user_name': { - category: 'checkpoint', - description: 'Connected user name on the destination IP. ', - name: 'checkpoint.dst_user_name', + 'google_workspace.drive.new_value': { + category: 'google_workspace', + description: + 'When a setting or property of the file changes, the new value for it will appear here. ', + name: 'google_workspace.drive.new_value', type: 'keyword', }, - 'checkpoint.sys_message': { - category: 'checkpoint', - description: 'System messages ', - name: 'checkpoint.sys_message', + 'google_workspace.drive.old_value': { + category: 'google_workspace', + description: + 'When a setting or property of the file changes, the old value for it will appear here. ', + name: 'google_workspace.drive.old_value', type: 'keyword', }, - 'checkpoint.logid': { - category: 'checkpoint', - description: 'System messages ', - name: 'checkpoint.logid', + 'google_workspace.drive.sheets_import_range_recipient_doc': { + category: 'google_workspace', + description: 'Doc ID of the recipient of a sheets import range.', + name: 'google_workspace.drive.sheets_import_range_recipient_doc', type: 'keyword', }, - 'checkpoint.failure_impact': { - category: 'checkpoint', - description: 'The impact of update service failure. ', - name: 'checkpoint.failure_impact', + 'google_workspace.drive.old_visibility': { + category: 'google_workspace', + description: 'When visibility changes, this holds the old value. ', + name: 'google_workspace.drive.old_visibility', type: 'keyword', }, - 'checkpoint.id': { - category: 'checkpoint', - description: 'Override application ID. ', - name: 'checkpoint.id', - type: 'integer', + 'google_workspace.drive.visibility_change': { + category: 'google_workspace', + description: 'When visibility changes, this holds the new overall visibility of the file. ', + name: 'google_workspace.drive.visibility_change', + type: 'keyword', }, - 'checkpoint.information': { - category: 'checkpoint', - description: 'Policy installation status for a specific blade. ', - name: 'checkpoint.information', + 'google_workspace.drive.target_domain': { + category: 'google_workspace', + description: + 'The domain for which the acccess scope was changed. This can also be the alias all to indicate the access scope was changed for all domains that have visibility for this document. ', + name: 'google_workspace.drive.target_domain', type: 'keyword', }, - 'checkpoint.layer_name': { - category: 'checkpoint', - description: 'Layer name. ', - name: 'checkpoint.layer_name', + 'google_workspace.drive.added_role': { + category: 'google_workspace', + description: + 'Added membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', + name: 'google_workspace.drive.added_role', type: 'keyword', }, - 'checkpoint.layer_uuid': { - category: 'checkpoint', - description: 'Layer UUID. ', - name: 'checkpoint.layer_uuid', + 'google_workspace.drive.membership_change_type': { + category: 'google_workspace', + description: + 'Type of change in Team Drive membership of a user/group. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', + name: 'google_workspace.drive.membership_change_type', type: 'keyword', }, - 'checkpoint.log_id': { - category: 'checkpoint', - description: 'Unique identity for logs. ', - name: 'checkpoint.log_id', - type: 'integer', + 'google_workspace.drive.shared_drive_settings_change_type': { + category: 'google_workspace', + description: + 'Type of change in Team Drive settings. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', + name: 'google_workspace.drive.shared_drive_settings_change_type', + type: 'keyword', }, - 'checkpoint.origin_sic_name': { - category: 'checkpoint', - description: 'Machine SIC. ', - name: 'checkpoint.origin_sic_name', + 'google_workspace.drive.removed_role': { + category: 'google_workspace', + description: + 'Removed membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', + name: 'google_workspace.drive.removed_role', type: 'keyword', }, - 'checkpoint.policy_mgmt': { - category: 'checkpoint', - description: 'Name of the Management Server that manages this Security Gateway. ', - name: 'checkpoint.policy_mgmt', + 'google_workspace.drive.target': { + category: 'google_workspace', + description: 'Target user or group.', + name: 'google_workspace.drive.target', type: 'keyword', }, - 'checkpoint.policy_name': { - category: 'checkpoint', - description: 'Name of the last policy that this Security Gateway fetched. ', - name: 'checkpoint.policy_name', + 'google_workspace.groups.acl_permission': { + category: 'google_workspace', + description: + 'Group permission setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', + name: 'google_workspace.groups.acl_permission', type: 'keyword', }, - 'checkpoint.protocol': { - category: 'checkpoint', - description: 'Protocol detected on the connection. ', - name: 'checkpoint.protocol', + 'google_workspace.groups.email': { + category: 'google_workspace', + description: 'Group email. ', + name: 'google_workspace.groups.email', type: 'keyword', }, - 'checkpoint.proxy_src_ip': { - category: 'checkpoint', - description: 'Sender source IP (even when using proxy). ', - name: 'checkpoint.proxy_src_ip', - type: 'ip', + 'google_workspace.groups.member.email': { + category: 'google_workspace', + description: 'Member email. ', + name: 'google_workspace.groups.member.email', + type: 'keyword', }, - 'checkpoint.rule': { - category: 'checkpoint', - description: 'Matched rule number. ', - name: 'checkpoint.rule', - type: 'integer', + 'google_workspace.groups.member.role': { + category: 'google_workspace', + description: + 'Member role. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', + name: 'google_workspace.groups.member.role', + type: 'keyword', }, - 'checkpoint.rule_action': { - category: 'checkpoint', - description: 'Action of the matched rule in the access policy. ', - name: 'checkpoint.rule_action', + 'google_workspace.groups.setting': { + category: 'google_workspace', + description: + 'Group setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', + name: 'google_workspace.groups.setting', type: 'keyword', }, - 'checkpoint.scan_direction': { - category: 'checkpoint', - description: 'Scan direction. ', - name: 'checkpoint.scan_direction', + 'google_workspace.groups.new_value': { + category: 'google_workspace', + description: + 'New value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', + name: 'google_workspace.groups.new_value', type: 'keyword', }, - 'checkpoint.session_id': { - category: 'checkpoint', - description: 'Log uuid. ', - name: 'checkpoint.session_id', + 'google_workspace.groups.old_value': { + category: 'google_workspace', + description: + 'Old value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups', + name: 'google_workspace.groups.old_value', type: 'keyword', }, - 'checkpoint.source_os': { - category: 'checkpoint', - description: 'OS which generated the attack. ', - name: 'checkpoint.source_os', + 'google_workspace.groups.value': { + category: 'google_workspace', + description: + 'Value of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', + name: 'google_workspace.groups.value', type: 'keyword', }, - 'checkpoint.src_country': { - category: 'checkpoint', - description: 'Country name, derived from connection source IP address. ', - name: 'checkpoint.src_country', + 'google_workspace.groups.message.id': { + category: 'google_workspace', + description: 'SMTP message Id of an email message. Present for moderation events. ', + name: 'google_workspace.groups.message.id', type: 'keyword', }, - 'checkpoint.src_user_name': { - category: 'checkpoint', - description: 'User name connected to source IP ', - name: 'checkpoint.src_user_name', + 'google_workspace.groups.message.moderation_action': { + category: 'google_workspace', + description: 'Message moderation action. Possible values are `approved` and `rejected`. ', + name: 'google_workspace.groups.message.moderation_action', type: 'keyword', }, - 'checkpoint.ticket_id': { - category: 'checkpoint', - description: 'Unique ID per file. ', - name: 'checkpoint.ticket_id', + 'google_workspace.groups.status': { + category: 'google_workspace', + description: + 'A status describing the output of an operation. Possible values are `failed` and `succeeded`. ', + name: 'google_workspace.groups.status', type: 'keyword', }, - 'checkpoint.tls_server_host_name': { - category: 'checkpoint', - description: 'SNI/CN from encrypted TLS connection used by URLF for categorization. ', - name: 'checkpoint.tls_server_host_name', + 'google_workspace.login.affected_email_address': { + category: 'google_workspace', + name: 'google_workspace.login.affected_email_address', type: 'keyword', }, - 'checkpoint.verdict': { - category: 'checkpoint', - description: 'TE engine verdict Possible values: Malicious/Benign/Error. ', - name: 'checkpoint.verdict', + 'google_workspace.login.challenge_method': { + category: 'google_workspace', + description: + 'Login challenge method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', + name: 'google_workspace.login.challenge_method', type: 'keyword', }, - 'checkpoint.user': { - category: 'checkpoint', - description: 'Source user name. ', - name: 'checkpoint.user', + 'google_workspace.login.failure_type': { + category: 'google_workspace', + description: + 'Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', + name: 'google_workspace.login.failure_type', type: 'keyword', }, - 'checkpoint.vendor_list': { - category: 'checkpoint', - description: 'The vendor name that provided the verdict for a malicious URL. ', - name: 'checkpoint.vendor_list', + 'google_workspace.login.type': { + category: 'google_workspace', + description: + 'Login credentials type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', + name: 'google_workspace.login.type', type: 'keyword', }, - 'checkpoint.web_server_type': { - category: 'checkpoint', - description: 'Web server detected in the HTTP response. ', - name: 'checkpoint.web_server_type', + 'google_workspace.login.is_second_factor': { + category: 'google_workspace', + name: 'google_workspace.login.is_second_factor', + type: 'boolean', + }, + 'google_workspace.login.is_suspicious': { + category: 'google_workspace', + name: 'google_workspace.login.is_suspicious', + type: 'boolean', + }, + 'google_workspace.saml.application_name': { + category: 'google_workspace', + description: 'Saml SP application name. ', + name: 'google_workspace.saml.application_name', type: 'keyword', }, - 'checkpoint.client_name': { - category: 'checkpoint', - description: 'Client Application or Software Blade that detected the event. ', - name: 'checkpoint.client_name', + 'google_workspace.saml.failure_type': { + category: 'google_workspace', + description: + 'Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/saml. ', + name: 'google_workspace.saml.failure_type', type: 'keyword', }, - 'checkpoint.client_version': { - category: 'checkpoint', - description: 'Build version of SandBlast Agent client installed on the computer. ', - name: 'checkpoint.client_version', + 'google_workspace.saml.initiated_by': { + category: 'google_workspace', + description: 'Requester of SAML authentication. ', + name: 'google_workspace.saml.initiated_by', type: 'keyword', }, - 'checkpoint.extension_version': { - category: 'checkpoint', - description: 'Build version of the SandBlast Agent browser extension. ', - name: 'checkpoint.extension_version', + 'google_workspace.saml.orgunit_path': { + category: 'google_workspace', + description: 'User orgunit. ', + name: 'google_workspace.saml.orgunit_path', type: 'keyword', }, - 'checkpoint.host_time': { - category: 'checkpoint', - description: 'Local time on the endpoint computer. ', - name: 'checkpoint.host_time', + 'google_workspace.saml.status_code': { + category: 'google_workspace', + description: 'SAML status code. ', + name: 'google_workspace.saml.status_code', type: 'keyword', }, - 'checkpoint.installed_products': { - category: 'checkpoint', - description: 'List of installed Endpoint Software Blades. ', - name: 'checkpoint.installed_products', + 'google_workspace.saml.second_level_status_code': { + category: 'google_workspace', + description: 'SAML second level status code. ', + name: 'google_workspace.saml.second_level_status_code', type: 'keyword', }, - 'checkpoint.cc': { - category: 'checkpoint', - description: 'The Carbon Copy address of the email. ', - name: 'checkpoint.cc', + 'ibmmq.errorlog.installation': { + category: 'ibmmq', + description: + 'This is the installation name which can be given at installation time. Each installation of IBM MQ on UNIX, Linux, and Windows, has a unique identifier known as an installation name. The installation name is used to associate things such as queue managers and configuration files with an installation. ', + name: 'ibmmq.errorlog.installation', type: 'keyword', }, - 'checkpoint.parent_process_username': { - category: 'checkpoint', - description: 'Owner username of the parent process of the process that triggered the attack. ', - name: 'checkpoint.parent_process_username', + 'ibmmq.errorlog.qmgr': { + category: 'ibmmq', + description: + 'Name of the queue manager. Queue managers provide queuing services to applications, and manages the queues that belong to them. ', + name: 'ibmmq.errorlog.qmgr', type: 'keyword', }, - 'checkpoint.process_username': { - category: 'checkpoint', - description: 'Owner username of the process that triggered the attack. ', - name: 'checkpoint.process_username', + 'ibmmq.errorlog.arithinsert': { + category: 'ibmmq', + description: 'Changing content based on error.id', + name: 'ibmmq.errorlog.arithinsert', type: 'keyword', }, - 'checkpoint.audit_status': { - category: 'checkpoint', - description: 'Audit Status. Can be Success or Failure. ', - name: 'checkpoint.audit_status', + 'ibmmq.errorlog.commentinsert': { + category: 'ibmmq', + description: 'Changing content based on error.id', + name: 'ibmmq.errorlog.commentinsert', type: 'keyword', }, - 'checkpoint.objecttable': { - category: 'checkpoint', - description: 'Table of affected objects. ', - name: 'checkpoint.objecttable', + 'ibmmq.errorlog.errordescription': { + category: 'ibmmq', + description: 'Please add description', + example: 'Please add example', + name: 'ibmmq.errorlog.errordescription', + type: 'text', + }, + 'ibmmq.errorlog.explanation': { + category: 'ibmmq', + description: 'Explaines the error in more detail', + name: 'ibmmq.errorlog.explanation', type: 'keyword', }, - 'checkpoint.objecttype': { - category: 'checkpoint', - description: 'The type of the affected object. ', - name: 'checkpoint.objecttype', + 'ibmmq.errorlog.action': { + category: 'ibmmq', + description: 'Defines what to do when the error occurs', + name: 'ibmmq.errorlog.action', type: 'keyword', }, - 'checkpoint.operation_number': { - category: 'checkpoint', - description: 'The operation nuber. ', - name: 'checkpoint.operation_number', + 'ibmmq.errorlog.code': { + category: 'ibmmq', + description: 'Error code.', + name: 'ibmmq.errorlog.code', type: 'keyword', }, - 'checkpoint.suppressed_logs': { - category: 'checkpoint', - description: - 'Aggregated connections for five minutes on the same source, destination and port. ', - name: 'checkpoint.suppressed_logs', + 'iptables.ether_type': { + category: 'iptables', + description: 'Value of the ethernet type field identifying the network layer protocol. ', + name: 'iptables.ether_type', + type: 'long', + }, + 'iptables.flow_label': { + category: 'iptables', + description: 'IPv6 flow label. ', + name: 'iptables.flow_label', type: 'integer', }, - 'checkpoint.blade_name': { - category: 'checkpoint', - description: 'Blade name. ', - name: 'checkpoint.blade_name', + 'iptables.fragment_flags': { + category: 'iptables', + description: 'IP fragment flags. A combination of CE, DF and MF. ', + name: 'iptables.fragment_flags', type: 'keyword', }, - 'checkpoint.status': { - category: 'checkpoint', - description: 'Ok/Warning/Error. ', - name: 'checkpoint.status', - type: 'keyword', + 'iptables.fragment_offset': { + category: 'iptables', + description: 'Offset of the current IP fragment. ', + name: 'iptables.fragment_offset', + type: 'long', }, - 'checkpoint.short_desc': { - category: 'checkpoint', - description: 'Short description of the process that was executed. ', - name: 'checkpoint.short_desc', - type: 'keyword', + 'iptables.icmp.code': { + category: 'iptables', + description: 'ICMP code. ', + name: 'iptables.icmp.code', + type: 'long', }, - 'checkpoint.long_desc': { - category: 'checkpoint', - description: 'More information on the process (usually describing error reason in failure). ', - name: 'checkpoint.long_desc', + 'iptables.icmp.id': { + category: 'iptables', + description: 'ICMP ID. ', + name: 'iptables.icmp.id', + type: 'long', + }, + 'iptables.icmp.parameter': { + category: 'iptables', + description: 'ICMP parameter. ', + name: 'iptables.icmp.parameter', + type: 'long', + }, + 'iptables.icmp.redirect': { + category: 'iptables', + description: 'ICMP redirect address. ', + name: 'iptables.icmp.redirect', + type: 'ip', + }, + 'iptables.icmp.seq': { + category: 'iptables', + description: 'ICMP sequence number. ', + name: 'iptables.icmp.seq', + type: 'long', + }, + 'iptables.icmp.type': { + category: 'iptables', + description: 'ICMP type. ', + name: 'iptables.icmp.type', + type: 'long', + }, + 'iptables.id': { + category: 'iptables', + description: 'Packet identifier. ', + name: 'iptables.id', + type: 'long', + }, + 'iptables.incomplete_bytes': { + category: 'iptables', + description: 'Number of incomplete bytes. ', + name: 'iptables.incomplete_bytes', + type: 'long', + }, + 'iptables.input_device': { + category: 'iptables', + description: 'Device that received the packet. ', + name: 'iptables.input_device', type: 'keyword', }, - 'checkpoint.scan_hosts_hour': { - category: 'checkpoint', - description: 'Number of unique hosts during the last hour. ', - name: 'checkpoint.scan_hosts_hour', - type: 'integer', + 'iptables.precedence_bits': { + category: 'iptables', + description: 'IP precedence bits. ', + name: 'iptables.precedence_bits', + type: 'short', }, - 'checkpoint.scan_hosts_day': { - category: 'checkpoint', - description: 'Number of unique hosts during the last day. ', - name: 'checkpoint.scan_hosts_day', - type: 'integer', + 'iptables.tos': { + category: 'iptables', + description: 'IP Type of Service field. ', + name: 'iptables.tos', + type: 'long', + }, + 'iptables.length': { + category: 'iptables', + description: 'Packet length. ', + name: 'iptables.length', + type: 'long', + }, + 'iptables.output_device': { + category: 'iptables', + description: 'Device that output the packet. ', + name: 'iptables.output_device', + type: 'keyword', }, - 'checkpoint.scan_hosts_week': { - category: 'checkpoint', - description: 'Number of unique hosts during the last week. ', - name: 'checkpoint.scan_hosts_week', - type: 'integer', + 'iptables.tcp.flags': { + category: 'iptables', + description: 'TCP flags. ', + name: 'iptables.tcp.flags', + type: 'keyword', }, - 'checkpoint.unique_detected_hour': { - category: 'checkpoint', - description: 'Detected virus for a specific host during the last hour. ', - name: 'checkpoint.unique_detected_hour', - type: 'integer', + 'iptables.tcp.reserved_bits': { + category: 'iptables', + description: 'TCP reserved bits. ', + name: 'iptables.tcp.reserved_bits', + type: 'short', }, - 'checkpoint.unique_detected_day': { - category: 'checkpoint', - description: 'Detected virus for a specific host during the last day. ', - name: 'checkpoint.unique_detected_day', - type: 'integer', + 'iptables.tcp.seq': { + category: 'iptables', + description: 'TCP sequence number. ', + name: 'iptables.tcp.seq', + type: 'long', }, - 'checkpoint.unique_detected_week': { - category: 'checkpoint', - description: 'Detected virus for a specific host during the last week. ', - name: 'checkpoint.unique_detected_week', - type: 'integer', + 'iptables.tcp.ack': { + category: 'iptables', + description: 'TCP Acknowledgment number. ', + name: 'iptables.tcp.ack', + type: 'long', }, - 'checkpoint.scan_mail': { - category: 'checkpoint', - description: 'Number of emails that were scanned by "AB malicious activity" engine. ', - name: 'checkpoint.scan_mail', + 'iptables.tcp.window': { + category: 'iptables', + description: 'Advertised TCP window size. ', + name: 'iptables.tcp.window', + type: 'long', + }, + 'iptables.ttl': { + category: 'iptables', + description: 'Time To Live field. ', + name: 'iptables.ttl', type: 'integer', }, - 'checkpoint.additional_ip': { - category: 'checkpoint', - description: 'DNS host name. ', - name: 'checkpoint.additional_ip', - type: 'keyword', + 'iptables.udp.length': { + category: 'iptables', + description: 'Length of the UDP header and payload. ', + name: 'iptables.udp.length', + type: 'long', }, - 'checkpoint.description': { - category: 'checkpoint', - description: 'Additional explanation how the security gateway enforced the connection. ', - name: 'checkpoint.description', + 'iptables.ubiquiti.input_zone': { + category: 'iptables', + description: 'Input zone. ', + name: 'iptables.ubiquiti.input_zone', type: 'keyword', }, - 'checkpoint.email_spam_category': { - category: 'checkpoint', - description: 'Email categories. Possible values: spam/not spam/phishing. ', - name: 'checkpoint.email_spam_category', + 'iptables.ubiquiti.output_zone': { + category: 'iptables', + description: 'Output zone. ', + name: 'iptables.ubiquiti.output_zone', type: 'keyword', }, - 'checkpoint.email_control_analysis': { - category: 'checkpoint', - description: 'Message classification, received from spam vendor engine. ', - name: 'checkpoint.email_control_analysis', + 'iptables.ubiquiti.rule_number': { + category: 'iptables', + description: 'The rule number within the rule set.', + name: 'iptables.ubiquiti.rule_number', type: 'keyword', }, - 'checkpoint.scan_results': { - category: 'checkpoint', - description: '"Infected"/description of a failure. ', - name: 'checkpoint.scan_results', + 'iptables.ubiquiti.rule_set': { + category: 'iptables', + description: 'The rule set name.', + name: 'iptables.ubiquiti.rule_set', type: 'keyword', }, - 'checkpoint.original_queue_id': { - category: 'checkpoint', - description: 'Original postfix email queue id. ', - name: 'checkpoint.original_queue_id', + 'juniper.srx.reason': { + category: 'juniper', + description: 'reason ', + name: 'juniper.srx.reason', type: 'keyword', }, - 'checkpoint.risk': { - category: 'checkpoint', - description: 'Risk level we got from the engine. ', - name: 'checkpoint.risk', + 'juniper.srx.connection_tag': { + category: 'juniper', + description: 'connection tag ', + name: 'juniper.srx.connection_tag', type: 'keyword', }, - 'checkpoint.observable_name': { - category: 'checkpoint', - description: 'IOC observable signature name. ', - name: 'checkpoint.observable_name', + 'juniper.srx.service_name': { + category: 'juniper', + description: 'service name ', + name: 'juniper.srx.service_name', type: 'keyword', }, - 'checkpoint.observable_id': { - category: 'checkpoint', - description: 'IOC observable signature id. ', - name: 'checkpoint.observable_id', + 'juniper.srx.nat_connection_tag': { + category: 'juniper', + description: 'nat connection tag ', + name: 'juniper.srx.nat_connection_tag', type: 'keyword', }, - 'checkpoint.observable_comment': { - category: 'checkpoint', - description: 'IOC observable signature description. ', - name: 'checkpoint.observable_comment', + 'juniper.srx.src_nat_rule_type': { + category: 'juniper', + description: 'src nat rule type ', + name: 'juniper.srx.src_nat_rule_type', type: 'keyword', }, - 'checkpoint.indicator_name': { - category: 'checkpoint', - description: 'IOC indicator name. ', - name: 'checkpoint.indicator_name', + 'juniper.srx.src_nat_rule_name': { + category: 'juniper', + description: 'src nat rule name ', + name: 'juniper.srx.src_nat_rule_name', type: 'keyword', }, - 'checkpoint.indicator_description': { - category: 'checkpoint', - description: 'IOC indicator description. ', - name: 'checkpoint.indicator_description', + 'juniper.srx.dst_nat_rule_type': { + category: 'juniper', + description: 'dst nat rule type ', + name: 'juniper.srx.dst_nat_rule_type', type: 'keyword', }, - 'checkpoint.indicator_reference': { - category: 'checkpoint', - description: 'IOC indicator reference. ', - name: 'checkpoint.indicator_reference', + 'juniper.srx.dst_nat_rule_name': { + category: 'juniper', + description: 'dst nat rule name ', + name: 'juniper.srx.dst_nat_rule_name', type: 'keyword', }, - 'checkpoint.indicator_uuid': { - category: 'checkpoint', - description: 'IOC indicator uuid. ', - name: 'checkpoint.indicator_uuid', + 'juniper.srx.protocol_id': { + category: 'juniper', + description: 'protocol id ', + name: 'juniper.srx.protocol_id', type: 'keyword', }, - 'checkpoint.app_desc': { - category: 'checkpoint', - description: 'Application description. ', - name: 'checkpoint.app_desc', + 'juniper.srx.policy_name': { + category: 'juniper', + description: 'policy name ', + name: 'juniper.srx.policy_name', type: 'keyword', }, - 'checkpoint.app_id': { - category: 'checkpoint', - description: 'Application ID. ', - name: 'checkpoint.app_id', - type: 'integer', - }, - 'checkpoint.certificate_resource': { - category: 'checkpoint', - description: 'HTTPS resource Possible values: SNI or domain name (DN). ', - name: 'checkpoint.certificate_resource', + 'juniper.srx.session_id_32': { + category: 'juniper', + description: 'session id 32 ', + name: 'juniper.srx.session_id_32', type: 'keyword', }, - 'checkpoint.certificate_validation': { - category: 'checkpoint', - description: - 'Precise error, describing HTTPS certificate failure under "HTTPS categorize websites" feature. ', - name: 'checkpoint.certificate_validation', + 'juniper.srx.session_id': { + category: 'juniper', + description: 'session id ', + name: 'juniper.srx.session_id', type: 'keyword', }, - 'checkpoint.browse_time': { - category: 'checkpoint', - description: 'Application session browse time. ', - name: 'checkpoint.browse_time', - type: 'keyword', + 'juniper.srx.outbound_packets': { + category: 'juniper', + description: 'packets from client ', + name: 'juniper.srx.outbound_packets', + type: 'integer', }, - 'checkpoint.limit_requested': { - category: 'checkpoint', - description: 'Indicates whether data limit was requested for the session. ', - name: 'checkpoint.limit_requested', + 'juniper.srx.outbound_bytes': { + category: 'juniper', + description: 'bytes from client ', + name: 'juniper.srx.outbound_bytes', type: 'integer', }, - 'checkpoint.limit_applied': { - category: 'checkpoint', - description: 'Indicates whether the session was actually date limited. ', - name: 'checkpoint.limit_applied', + 'juniper.srx.inbound_packets': { + category: 'juniper', + description: 'packets from server ', + name: 'juniper.srx.inbound_packets', type: 'integer', }, - 'checkpoint.dropped_total': { - category: 'checkpoint', - description: 'Amount of dropped packets (both incoming and outgoing). ', - name: 'checkpoint.dropped_total', + 'juniper.srx.inbound_bytes': { + category: 'juniper', + description: 'bytes from server ', + name: 'juniper.srx.inbound_bytes', type: 'integer', }, - 'checkpoint.client_type_os': { - category: 'checkpoint', - description: 'Client OS detected in the HTTP request. ', - name: 'checkpoint.client_type_os', - type: 'keyword', + 'juniper.srx.elapsed_time': { + category: 'juniper', + description: 'elapsed time ', + name: 'juniper.srx.elapsed_time', + type: 'date', }, - 'checkpoint.name': { - category: 'checkpoint', - description: 'Application name. ', - name: 'checkpoint.name', + 'juniper.srx.application': { + category: 'juniper', + description: 'application ', + name: 'juniper.srx.application', type: 'keyword', }, - 'checkpoint.properties': { - category: 'checkpoint', - description: 'Application categories. ', - name: 'checkpoint.properties', + 'juniper.srx.nested_application': { + category: 'juniper', + description: 'nested application ', + name: 'juniper.srx.nested_application', type: 'keyword', }, - 'checkpoint.sig_id': { - category: 'checkpoint', - description: "Application's signature ID which how it was detected by. ", - name: 'checkpoint.sig_id', + 'juniper.srx.username': { + category: 'juniper', + description: 'username ', + name: 'juniper.srx.username', type: 'keyword', }, - 'checkpoint.desc': { - category: 'checkpoint', - description: 'Override application description. ', - name: 'checkpoint.desc', + 'juniper.srx.roles': { + category: 'juniper', + description: 'roles ', + name: 'juniper.srx.roles', type: 'keyword', }, - 'checkpoint.referrer_self_uid': { - category: 'checkpoint', - description: 'UUID of the current log. ', - name: 'checkpoint.referrer_self_uid', + 'juniper.srx.encrypted': { + category: 'juniper', + description: 'encrypted ', + name: 'juniper.srx.encrypted', type: 'keyword', }, - 'checkpoint.referrer_parent_uid': { - category: 'checkpoint', - description: 'Log UUID of the referring application. ', - name: 'checkpoint.referrer_parent_uid', + 'juniper.srx.application_category': { + category: 'juniper', + description: 'application category ', + name: 'juniper.srx.application_category', type: 'keyword', }, - 'checkpoint.needs_browse_time': { - category: 'checkpoint', - description: 'Browse time required for the connection. ', - name: 'checkpoint.needs_browse_time', - type: 'integer', - }, - 'checkpoint.cluster_info': { - category: 'checkpoint', - description: - 'Cluster information. Possible options: Failover reason/cluster state changes/CP cluster or 3rd party. ', - name: 'checkpoint.cluster_info', + 'juniper.srx.application_sub_category': { + category: 'juniper', + description: 'application sub category ', + name: 'juniper.srx.application_sub_category', type: 'keyword', }, - 'checkpoint.sync': { - category: 'checkpoint', - description: 'Sync status and the reason (stable, at risk). ', - name: 'checkpoint.sync', + 'juniper.srx.application_characteristics': { + category: 'juniper', + description: 'application characteristics ', + name: 'juniper.srx.application_characteristics', type: 'keyword', }, - 'checkpoint.file_direction': { - category: 'checkpoint', - description: 'File direction. Possible options: upload/download. ', - name: 'checkpoint.file_direction', + 'juniper.srx.secure_web_proxy_session_type': { + category: 'juniper', + description: 'secure web proxy session type ', + name: 'juniper.srx.secure_web_proxy_session_type', type: 'keyword', }, - 'checkpoint.invalid_file_size': { - category: 'checkpoint', - description: 'File_size field is valid only if this field is set to 0. ', - name: 'checkpoint.invalid_file_size', - type: 'integer', - }, - 'checkpoint.top_archive_file_name': { - category: 'checkpoint', - description: 'In case of archive file: the file that was sent/received. ', - name: 'checkpoint.top_archive_file_name', + 'juniper.srx.peer_session_id': { + category: 'juniper', + description: 'peer session id ', + name: 'juniper.srx.peer_session_id', type: 'keyword', }, - 'checkpoint.data_type_name': { - category: 'checkpoint', - description: 'Data type in rulebase that was matched. ', - name: 'checkpoint.data_type_name', - type: 'keyword', + 'juniper.srx.peer_source_address': { + category: 'juniper', + description: 'peer source address ', + name: 'juniper.srx.peer_source_address', + type: 'ip', }, - 'checkpoint.specific_data_type_name': { - category: 'checkpoint', - description: 'Compound/Group scenario, data type that was matched. ', - name: 'checkpoint.specific_data_type_name', - type: 'keyword', + 'juniper.srx.peer_source_port': { + category: 'juniper', + description: 'peer source port ', + name: 'juniper.srx.peer_source_port', + type: 'integer', }, - 'checkpoint.word_list': { - category: 'checkpoint', - description: 'Words matched by data type. ', - name: 'checkpoint.word_list', - type: 'keyword', + 'juniper.srx.peer_destination_address': { + category: 'juniper', + description: 'peer destination address ', + name: 'juniper.srx.peer_destination_address', + type: 'ip', }, - 'checkpoint.info': { - category: 'checkpoint', - description: 'Special log message. ', - name: 'checkpoint.info', - type: 'keyword', + 'juniper.srx.peer_destination_port': { + category: 'juniper', + description: 'peer destination port ', + name: 'juniper.srx.peer_destination_port', + type: 'integer', }, - 'checkpoint.outgoing_url': { - category: 'checkpoint', - description: 'URL related to this log (for HTTP). ', - name: 'checkpoint.outgoing_url', + 'juniper.srx.hostname': { + category: 'juniper', + description: 'hostname ', + name: 'juniper.srx.hostname', type: 'keyword', }, - 'checkpoint.dlp_rule_name': { - category: 'checkpoint', - description: 'Matched rule name. ', - name: 'checkpoint.dlp_rule_name', + 'juniper.srx.src_vrf_grp': { + category: 'juniper', + description: 'src_vrf_grp ', + name: 'juniper.srx.src_vrf_grp', type: 'keyword', }, - 'checkpoint.dlp_recipients': { - category: 'checkpoint', - description: 'Mail recipients. ', - name: 'checkpoint.dlp_recipients', + 'juniper.srx.dst_vrf_grp': { + category: 'juniper', + description: 'dst_vrf_grp ', + name: 'juniper.srx.dst_vrf_grp', type: 'keyword', }, - 'checkpoint.dlp_subject': { - category: 'checkpoint', - description: 'Mail subject. ', - name: 'checkpoint.dlp_subject', - type: 'keyword', + 'juniper.srx.icmp_type': { + category: 'juniper', + description: 'icmp type ', + name: 'juniper.srx.icmp_type', + type: 'integer', }, - 'checkpoint.dlp_word_list': { - category: 'checkpoint', - description: 'Phrases matched by data type. ', - name: 'checkpoint.dlp_word_list', + 'juniper.srx.process': { + category: 'juniper', + description: 'process that generated the message ', + name: 'juniper.srx.process', type: 'keyword', }, - 'checkpoint.dlp_template_score': { - category: 'checkpoint', - description: 'Template data type match score. ', - name: 'checkpoint.dlp_template_score', + 'juniper.srx.apbr_rule_type': { + category: 'juniper', + description: 'apbr rule type ', + name: 'juniper.srx.apbr_rule_type', type: 'keyword', }, - 'checkpoint.message_size': { - category: 'checkpoint', - description: 'Mail/post size. ', - name: 'checkpoint.message_size', + 'juniper.srx.dscp_value': { + category: 'juniper', + description: 'apbr rule type ', + name: 'juniper.srx.dscp_value', type: 'integer', }, - 'checkpoint.dlp_incident_uid': { - category: 'checkpoint', - description: 'Unique ID of the matched rule. ', - name: 'checkpoint.dlp_incident_uid', + 'juniper.srx.logical_system_name': { + category: 'juniper', + description: 'logical system name ', + name: 'juniper.srx.logical_system_name', type: 'keyword', }, - 'checkpoint.dlp_related_incident_uid': { - category: 'checkpoint', - description: 'Other ID related to this one. ', - name: 'checkpoint.dlp_related_incident_uid', + 'juniper.srx.profile_name': { + category: 'juniper', + description: 'profile name ', + name: 'juniper.srx.profile_name', type: 'keyword', }, - 'checkpoint.dlp_data_type_name': { - category: 'checkpoint', - description: 'Matched data type. ', - name: 'checkpoint.dlp_data_type_name', + 'juniper.srx.routing_instance': { + category: 'juniper', + description: 'routing instance ', + name: 'juniper.srx.routing_instance', type: 'keyword', }, - 'checkpoint.dlp_data_type_uid': { - category: 'checkpoint', - description: 'Unique ID of the matched data type. ', - name: 'checkpoint.dlp_data_type_uid', + 'juniper.srx.rule_name': { + category: 'juniper', + description: 'rule name ', + name: 'juniper.srx.rule_name', type: 'keyword', }, - 'checkpoint.dlp_violation_description': { - category: 'checkpoint', - description: 'Violation descriptions described in the rulebase. ', - name: 'checkpoint.dlp_violation_description', - type: 'keyword', + 'juniper.srx.uplink_tx_bytes': { + category: 'juniper', + description: 'uplink tx bytes ', + name: 'juniper.srx.uplink_tx_bytes', + type: 'integer', }, - 'checkpoint.dlp_relevant_data_types': { - category: 'checkpoint', - description: 'In case of Compound/Group: the inner data types that were matched. ', - name: 'checkpoint.dlp_relevant_data_types', + 'juniper.srx.uplink_rx_bytes': { + category: 'juniper', + description: 'uplink rx bytes ', + name: 'juniper.srx.uplink_rx_bytes', + type: 'integer', + }, + 'juniper.srx.obj': { + category: 'juniper', + description: 'url path ', + name: 'juniper.srx.obj', type: 'keyword', }, - 'checkpoint.dlp_action_reason': { - category: 'checkpoint', - description: 'Action chosen reason. ', - name: 'checkpoint.dlp_action_reason', + 'juniper.srx.url': { + category: 'juniper', + description: 'url domain ', + name: 'juniper.srx.url', type: 'keyword', }, - 'checkpoint.dlp_categories': { - category: 'checkpoint', - description: 'Data type category. ', - name: 'checkpoint.dlp_categories', + 'juniper.srx.profile': { + category: 'juniper', + description: 'filter profile ', + name: 'juniper.srx.profile', type: 'keyword', }, - 'checkpoint.dlp_transint': { - category: 'checkpoint', - description: 'HTTP/SMTP/FTP. ', - name: 'checkpoint.dlp_transint', + 'juniper.srx.category': { + category: 'juniper', + description: 'filter category ', + name: 'juniper.srx.category', type: 'keyword', }, - 'checkpoint.duplicate': { - category: 'checkpoint', - description: - 'Log marked as duplicated, when mail is split and the Security Gateway sees it twice. ', - name: 'checkpoint.duplicate', + 'juniper.srx.filename': { + category: 'juniper', + description: 'filename ', + name: 'juniper.srx.filename', type: 'keyword', }, - 'checkpoint.matched_file': { - category: 'checkpoint', - description: 'Unique ID of the matched data type. ', - name: 'checkpoint.matched_file', + 'juniper.srx.temporary_filename': { + category: 'juniper', + description: 'temporary_filename ', + name: 'juniper.srx.temporary_filename', type: 'keyword', }, - 'checkpoint.matched_file_text_segments': { - category: 'checkpoint', - description: 'Fingerprint: number of text segments matched by this traffic. ', - name: 'checkpoint.matched_file_text_segments', - type: 'integer', + 'juniper.srx.name': { + category: 'juniper', + description: 'name ', + name: 'juniper.srx.name', + type: 'keyword', }, - 'checkpoint.matched_file_percentage': { - category: 'checkpoint', - description: 'Fingerprint: match percentage of the traffic. ', - name: 'checkpoint.matched_file_percentage', - type: 'integer', + 'juniper.srx.error_message': { + category: 'juniper', + description: 'error_message ', + name: 'juniper.srx.error_message', + type: 'keyword', }, - 'checkpoint.dlp_additional_action': { - category: 'checkpoint', - description: 'Watermark/None. ', - name: 'checkpoint.dlp_additional_action', + 'juniper.srx.error_code': { + category: 'juniper', + description: 'error_code ', + name: 'juniper.srx.error_code', type: 'keyword', }, - 'checkpoint.dlp_watermark_profile': { - category: 'checkpoint', - description: 'Watermark which was applied. ', - name: 'checkpoint.dlp_watermark_profile', + 'juniper.srx.action': { + category: 'juniper', + description: 'action ', + name: 'juniper.srx.action', type: 'keyword', }, - 'checkpoint.dlp_repository_id': { - category: 'checkpoint', - description: 'ID of scanned repository. ', - name: 'checkpoint.dlp_repository_id', + 'juniper.srx.protocol': { + category: 'juniper', + description: 'protocol ', + name: 'juniper.srx.protocol', type: 'keyword', }, - 'checkpoint.dlp_repository_root_path': { - category: 'checkpoint', - description: 'Repository path. ', - name: 'checkpoint.dlp_repository_root_path', + 'juniper.srx.protocol_name': { + category: 'juniper', + description: 'protocol name ', + name: 'juniper.srx.protocol_name', type: 'keyword', }, - 'checkpoint.scan_id': { - category: 'checkpoint', - description: 'Sequential number of scan. ', - name: 'checkpoint.scan_id', + 'juniper.srx.type': { + category: 'juniper', + description: 'type ', + name: 'juniper.srx.type', type: 'keyword', }, - 'checkpoint.special_properties': { - category: 'checkpoint', - description: - "If this field is set to '1' the log will not be shown (in use for monitoring scan progress). ", - name: 'checkpoint.special_properties', + 'juniper.srx.repeat_count': { + category: 'juniper', + description: 'repeat count ', + name: 'juniper.srx.repeat_count', type: 'integer', }, - 'checkpoint.dlp_repository_total_size': { - category: 'checkpoint', - description: 'Repository size. ', - name: 'checkpoint.dlp_repository_total_size', - type: 'integer', + 'juniper.srx.alert': { + category: 'juniper', + description: 'repeat alert ', + name: 'juniper.srx.alert', + type: 'keyword', }, - 'checkpoint.dlp_repository_files_number': { - category: 'checkpoint', - description: 'Number of files in repository. ', - name: 'checkpoint.dlp_repository_files_number', - type: 'integer', + 'juniper.srx.message_type': { + category: 'juniper', + description: 'message type ', + name: 'juniper.srx.message_type', + type: 'keyword', }, - 'checkpoint.dlp_repository_scanned_files_number': { - category: 'checkpoint', - description: 'Number of scanned files in repository. ', - name: 'checkpoint.dlp_repository_scanned_files_number', - type: 'integer', + 'juniper.srx.threat_severity': { + category: 'juniper', + description: 'threat severity ', + name: 'juniper.srx.threat_severity', + type: 'keyword', }, - 'checkpoint.duration': { - category: 'checkpoint', - description: 'Scan duration. ', - name: 'checkpoint.duration', + 'juniper.srx.application_name': { + category: 'juniper', + description: 'application name ', + name: 'juniper.srx.application_name', type: 'keyword', }, - 'checkpoint.dlp_fingerprint_long_status': { - category: 'checkpoint', - description: 'Scan status - long format. ', - name: 'checkpoint.dlp_fingerprint_long_status', + 'juniper.srx.attack_name': { + category: 'juniper', + description: 'attack name ', + name: 'juniper.srx.attack_name', type: 'keyword', }, - 'checkpoint.dlp_fingerprint_short_status': { - category: 'checkpoint', - description: 'Scan status - short format. ', - name: 'checkpoint.dlp_fingerprint_short_status', + 'juniper.srx.index': { + category: 'juniper', + description: 'index ', + name: 'juniper.srx.index', type: 'keyword', }, - 'checkpoint.dlp_repository_directories_number': { - category: 'checkpoint', - description: 'Number of directories in repository. ', - name: 'checkpoint.dlp_repository_directories_number', - type: 'integer', + 'juniper.srx.message': { + category: 'juniper', + description: 'mesagge ', + name: 'juniper.srx.message', + type: 'keyword', }, - 'checkpoint.dlp_repository_unreachable_directories_number': { - category: 'checkpoint', - description: 'Number of directories the Security Gateway was unable to read. ', - name: 'checkpoint.dlp_repository_unreachable_directories_number', - type: 'integer', + 'juniper.srx.epoch_time': { + category: 'juniper', + description: 'epoch time ', + name: 'juniper.srx.epoch_time', + type: 'date', }, - 'checkpoint.dlp_fingerprint_files_number': { - category: 'checkpoint', - description: 'Number of successfully scanned files in repository. ', - name: 'checkpoint.dlp_fingerprint_files_number', + 'juniper.srx.packet_log_id': { + category: 'juniper', + description: 'packet log id ', + name: 'juniper.srx.packet_log_id', type: 'integer', }, - 'checkpoint.dlp_repository_skipped_files_number': { - category: 'checkpoint', - description: 'Skipped number of files because of configuration. ', - name: 'checkpoint.dlp_repository_skipped_files_number', + 'juniper.srx.export_id': { + category: 'juniper', + description: 'packet log id ', + name: 'juniper.srx.export_id', type: 'integer', }, - 'checkpoint.dlp_repository_scanned_directories_number': { - category: 'checkpoint', - description: 'Amount of directories scanned. ', - name: 'checkpoint.dlp_repository_scanned_directories_number', - type: 'integer', + 'juniper.srx.ddos_application_name': { + category: 'juniper', + description: 'ddos application name ', + name: 'juniper.srx.ddos_application_name', + type: 'keyword', }, - 'checkpoint.number_of_errors': { - category: 'checkpoint', - description: 'Number of files that were not scanned due to an error. ', - name: 'checkpoint.number_of_errors', + 'juniper.srx.connection_hit_rate': { + category: 'juniper', + description: 'connection hit rate ', + name: 'juniper.srx.connection_hit_rate', type: 'integer', }, - 'checkpoint.next_scheduled_scan_date': { - category: 'checkpoint', - description: 'Next scan scheduled time according to time object. ', - name: 'checkpoint.next_scheduled_scan_date', + 'juniper.srx.time_scope': { + category: 'juniper', + description: 'time scope ', + name: 'juniper.srx.time_scope', type: 'keyword', }, - 'checkpoint.dlp_repository_scanned_total_size': { - category: 'checkpoint', - description: 'Size scanned. ', - name: 'checkpoint.dlp_repository_scanned_total_size', - type: 'integer', - }, - 'checkpoint.dlp_repository_reached_directories_number': { - category: 'checkpoint', - description: 'Number of scanned directories in repository. ', - name: 'checkpoint.dlp_repository_reached_directories_number', + 'juniper.srx.context_hit_rate': { + category: 'juniper', + description: 'context hit rate ', + name: 'juniper.srx.context_hit_rate', type: 'integer', }, - 'checkpoint.dlp_repository_not_scanned_directories_percentage': { - category: 'checkpoint', - description: 'Percentage of directories the Security Gateway was unable to read. ', - name: 'checkpoint.dlp_repository_not_scanned_directories_percentage', + 'juniper.srx.context_value_hit_rate': { + category: 'juniper', + description: 'context value hit rate ', + name: 'juniper.srx.context_value_hit_rate', type: 'integer', }, - 'checkpoint.speed': { - category: 'checkpoint', - description: 'Current scan speed. ', - name: 'checkpoint.speed', + 'juniper.srx.time_count': { + category: 'juniper', + description: 'time count ', + name: 'juniper.srx.time_count', type: 'integer', }, - 'checkpoint.dlp_repository_scan_progress': { - category: 'checkpoint', - description: 'Scan percentage. ', - name: 'checkpoint.dlp_repository_scan_progress', + 'juniper.srx.time_period': { + category: 'juniper', + description: 'time period ', + name: 'juniper.srx.time_period', type: 'integer', }, - 'checkpoint.sub_policy_name': { - category: 'checkpoint', - description: 'Layer name. ', - name: 'checkpoint.sub_policy_name', - type: 'keyword', - }, - 'checkpoint.sub_policy_uid': { - category: 'checkpoint', - description: 'Layer uid. ', - name: 'checkpoint.sub_policy_uid', + 'juniper.srx.context_value': { + category: 'juniper', + description: 'context value ', + name: 'juniper.srx.context_value', type: 'keyword', }, - 'checkpoint.fw_message': { - category: 'checkpoint', - description: 'Used for various firewall errors. ', - name: 'checkpoint.fw_message', + 'juniper.srx.context_name': { + category: 'juniper', + description: 'context name ', + name: 'juniper.srx.context_name', type: 'keyword', }, - 'checkpoint.message': { - category: 'checkpoint', - description: 'ISP link has failed. ', - name: 'checkpoint.message', + 'juniper.srx.ruleebase_name': { + category: 'juniper', + description: 'ruleebase name ', + name: 'juniper.srx.ruleebase_name', type: 'keyword', }, - 'checkpoint.isp_link': { - category: 'checkpoint', - description: 'Name of ISP link. ', - name: 'checkpoint.isp_link', + 'juniper.srx.verdict_source': { + category: 'juniper', + description: 'verdict source ', + name: 'juniper.srx.verdict_source', type: 'keyword', }, - 'checkpoint.fw_subproduct': { - category: 'checkpoint', - description: 'Can be vpn/non vpn. ', - name: 'checkpoint.fw_subproduct', - type: 'keyword', + 'juniper.srx.verdict_number': { + category: 'juniper', + description: 'verdict number ', + name: 'juniper.srx.verdict_number', + type: 'integer', }, - 'checkpoint.sctp_error': { - category: 'checkpoint', - description: 'Error information, what caused sctp to fail on out_of_state. ', - name: 'checkpoint.sctp_error', + 'juniper.srx.file_category': { + category: 'juniper', + description: 'file category ', + name: 'juniper.srx.file_category', type: 'keyword', }, - 'checkpoint.chunk_type': { - category: 'checkpoint', - description: 'Chunck of the sctp stream. ', - name: 'checkpoint.chunk_type', + 'juniper.srx.sample_sha256': { + category: 'juniper', + description: 'sample sha256 ', + name: 'juniper.srx.sample_sha256', type: 'keyword', }, - 'checkpoint.sctp_association_state': { - category: 'checkpoint', - description: 'The bad state you were trying to update to. ', - name: 'checkpoint.sctp_association_state', + 'juniper.srx.malware_info': { + category: 'juniper', + description: 'malware info ', + name: 'juniper.srx.malware_info', type: 'keyword', }, - 'checkpoint.tcp_packet_out_of_state': { - category: 'checkpoint', - description: 'State violation. ', - name: 'checkpoint.tcp_packet_out_of_state', - type: 'keyword', + 'juniper.srx.client_ip': { + category: 'juniper', + description: 'client ip ', + name: 'juniper.srx.client_ip', + type: 'ip', }, - 'checkpoint.connectivity_level': { - category: 'checkpoint', - description: 'Log for a new connection in wire mode. ', - name: 'checkpoint.connectivity_level', + 'juniper.srx.tenant_id': { + category: 'juniper', + description: 'tenant id ', + name: 'juniper.srx.tenant_id', type: 'keyword', }, - 'checkpoint.ip_option': { - category: 'checkpoint', - description: 'IP option that was dropped. ', - name: 'checkpoint.ip_option', - type: 'integer', + 'juniper.srx.timestamp': { + category: 'juniper', + description: 'timestamp ', + name: 'juniper.srx.timestamp', + type: 'date', }, - 'checkpoint.tcp_state': { - category: 'checkpoint', - description: 'Log reinting a tcp state change. ', - name: 'checkpoint.tcp_state', + 'juniper.srx.th': { + category: 'juniper', + description: 'th ', + name: 'juniper.srx.th', type: 'keyword', }, - 'checkpoint.expire_time': { - category: 'checkpoint', - description: 'Connection closing time. ', - name: 'checkpoint.expire_time', + 'juniper.srx.status': { + category: 'juniper', + description: 'status ', + name: 'juniper.srx.status', type: 'keyword', }, - 'checkpoint.rpc_prog': { - category: 'checkpoint', - description: 'Log for new RPC state - prog values. ', - name: 'checkpoint.rpc_prog', - type: 'integer', + 'juniper.srx.state': { + category: 'juniper', + description: 'state ', + name: 'juniper.srx.state', + type: 'keyword', }, - 'checkpoint.dce-rpc_interface_uuid': { - category: 'checkpoint', - description: 'Log for new RPC state - UUID values ', - name: 'checkpoint.dce-rpc_interface_uuid', + 'juniper.srx.file_hash_lookup': { + category: 'juniper', + description: 'file hash lookup ', + name: 'juniper.srx.file_hash_lookup', type: 'keyword', }, - 'checkpoint.elapsed': { - category: 'checkpoint', - description: 'Time passed since start time. ', - name: 'checkpoint.elapsed', + 'juniper.srx.file_name': { + category: 'juniper', + description: 'file name ', + name: 'juniper.srx.file_name', type: 'keyword', }, - 'checkpoint.icmp': { - category: 'checkpoint', - description: 'Number of packets, received by the client. ', - name: 'checkpoint.icmp', + 'juniper.srx.action_detail': { + category: 'juniper', + description: 'action detail ', + name: 'juniper.srx.action_detail', type: 'keyword', }, - 'checkpoint.capture_uuid': { - category: 'checkpoint', - description: 'UUID generated for the capture. Used when enabling the capture when logging. ', - name: 'checkpoint.capture_uuid', + 'juniper.srx.sub_category': { + category: 'juniper', + description: 'sub category ', + name: 'juniper.srx.sub_category', type: 'keyword', }, - 'checkpoint.diameter_app_ID': { - category: 'checkpoint', - description: 'The ID of diameter application. ', - name: 'checkpoint.diameter_app_ID', - type: 'integer', + 'juniper.srx.feed_name': { + category: 'juniper', + description: 'feed name ', + name: 'juniper.srx.feed_name', + type: 'keyword', }, - 'checkpoint.diameter_cmd_code': { - category: 'checkpoint', - description: 'Diameter not allowed application command id. ', - name: 'checkpoint.diameter_cmd_code', + 'juniper.srx.occur_count': { + category: 'juniper', + description: 'occur count ', + name: 'juniper.srx.occur_count', type: 'integer', }, - 'checkpoint.diameter_msg_type': { - category: 'checkpoint', - description: 'Diameter message type. ', - name: 'checkpoint.diameter_msg_type', + 'juniper.srx.tag': { + category: 'juniper', + description: 'system log message tag, which uniquely identifies the message. ', + name: 'juniper.srx.tag', type: 'keyword', }, - 'checkpoint.cp_message': { - category: 'checkpoint', - description: 'Used to log a general message. ', - name: 'checkpoint.cp_message', - type: 'integer', + 'microsoft.defender_atp.lastUpdateTime': { + category: 'microsoft', + description: 'The date and time (in UTC) the alert was last updated. ', + name: 'microsoft.defender_atp.lastUpdateTime', + type: 'date', }, - 'checkpoint.log_delay': { - category: 'checkpoint', - description: 'Time left before deleting template. ', - name: 'checkpoint.log_delay', - type: 'integer', + 'microsoft.defender_atp.resolvedTime': { + category: 'microsoft', + description: "The date and time in which the status of the alert was changed to 'Resolved'. ", + name: 'microsoft.defender_atp.resolvedTime', + type: 'date', }, - 'checkpoint.attack_status': { - category: 'checkpoint', - description: 'In case of a malicious event on an endpoint computer, the status of the attack. ', - name: 'checkpoint.attack_status', + 'microsoft.defender_atp.incidentId': { + category: 'microsoft', + description: 'The Incident ID of the Alert. ', + name: 'microsoft.defender_atp.incidentId', type: 'keyword', }, - 'checkpoint.impacted_files': { - category: 'checkpoint', - description: - 'In case of an infection on an endpoint computer, the list of files that the malware impacted. ', - name: 'checkpoint.impacted_files', + 'microsoft.defender_atp.investigationId': { + category: 'microsoft', + description: 'The Investigation ID related to the Alert. ', + name: 'microsoft.defender_atp.investigationId', type: 'keyword', }, - 'checkpoint.remediated_files': { - category: 'checkpoint', - description: - 'In case of an infection and a successful cleaning of that infection, this is a list of remediated files on the computer. ', - name: 'checkpoint.remediated_files', + 'microsoft.defender_atp.investigationState': { + category: 'microsoft', + description: 'The current state of the Investigation. ', + name: 'microsoft.defender_atp.investigationState', type: 'keyword', }, - 'checkpoint.triggered_by': { - category: 'checkpoint', + 'microsoft.defender_atp.assignedTo': { + category: 'microsoft', + description: 'Owner of the alert. ', + name: 'microsoft.defender_atp.assignedTo', + type: 'keyword', + }, + 'microsoft.defender_atp.status': { + category: 'microsoft', description: - 'The name of the mechanism that triggered the Software Blade to enforce a protection. ', - name: 'checkpoint.triggered_by', + "Specifies the current status of the alert. Possible values are: 'Unknown', 'New', 'InProgress' and 'Resolved'. ", + name: 'microsoft.defender_atp.status', type: 'keyword', }, - 'checkpoint.https_inspection_rule_id': { - category: 'checkpoint', - description: 'ID of the matched rule. ', - name: 'checkpoint.https_inspection_rule_id', + 'microsoft.defender_atp.classification': { + category: 'microsoft', + description: + "Specification of the alert. Possible values are: 'Unknown', 'FalsePositive', 'TruePositive'. ", + name: 'microsoft.defender_atp.classification', type: 'keyword', }, - 'checkpoint.https_inspection_rule_name': { - category: 'checkpoint', - description: 'Name of the matched rule. ', - name: 'checkpoint.https_inspection_rule_name', + 'microsoft.defender_atp.determination': { + category: 'microsoft', + description: + "Specifies the determination of the alert. Possible values are: 'NotAvailable', 'Apt', 'Malware', 'SecurityPersonnel', 'SecurityTesting', 'UnwantedSoftware', 'Other'. ", + name: 'microsoft.defender_atp.determination', type: 'keyword', }, - 'checkpoint.app_properties': { - category: 'checkpoint', - description: 'List of all found categories. ', - name: 'checkpoint.app_properties', + 'microsoft.defender_atp.threatFamilyName': { + category: 'microsoft', + description: 'Threat family. ', + name: 'microsoft.defender_atp.threatFamilyName', type: 'keyword', }, - 'checkpoint.https_validation': { - category: 'checkpoint', - description: 'Precise error, describing HTTPS inspection failure. ', - name: 'checkpoint.https_validation', + 'microsoft.defender_atp.rbacGroupName': { + category: 'microsoft', + description: 'User group related to the alert ', + name: 'microsoft.defender_atp.rbacGroupName', type: 'keyword', }, - 'checkpoint.https_inspection_action': { - category: 'checkpoint', - description: 'HTTPS inspection action (Inspect/Bypass/Error). ', - name: 'checkpoint.https_inspection_action', + 'microsoft.defender_atp.evidence.domainName': { + category: 'microsoft', + description: 'Domain name related to the alert ', + name: 'microsoft.defender_atp.evidence.domainName', type: 'keyword', }, - 'checkpoint.icap_service_id': { - category: 'checkpoint', - description: 'Service ID, can work with multiple servers, treated as services. ', - name: 'checkpoint.icap_service_id', - type: 'integer', + 'microsoft.defender_atp.evidence.ipAddress': { + category: 'microsoft', + description: 'IP address involved in the alert ', + name: 'microsoft.defender_atp.evidence.ipAddress', + type: 'ip', }, - 'checkpoint.icap_server_name': { - category: 'checkpoint', - description: 'Server name. ', - name: 'checkpoint.icap_server_name', + 'microsoft.defender_atp.evidence.aadUserId': { + category: 'microsoft', + description: 'ID of the user involved in the alert ', + name: 'microsoft.defender_atp.evidence.aadUserId', type: 'keyword', }, - 'checkpoint.internal_error': { - category: 'checkpoint', - description: 'Internal error, for troubleshooting ', - name: 'checkpoint.internal_error', + 'microsoft.defender_atp.evidence.accountName': { + category: 'microsoft', + description: 'Username of the user involved in the alert ', + name: 'microsoft.defender_atp.evidence.accountName', type: 'keyword', }, - 'checkpoint.icap_more_info': { - category: 'checkpoint', - description: 'Free text for verdict. ', - name: 'checkpoint.icap_more_info', - type: 'integer', + 'microsoft.defender_atp.evidence.entityType': { + category: 'microsoft', + description: 'The type of evidence ', + name: 'microsoft.defender_atp.evidence.entityType', + type: 'keyword', }, - 'checkpoint.reply_status': { - category: 'checkpoint', - description: 'ICAP reply status code, e.g. 200 or 204. ', - name: 'checkpoint.reply_status', - type: 'integer', + 'microsoft.defender_atp.evidence.userPrincipalName': { + category: 'microsoft', + description: 'Principal name of the user involved in the alert ', + name: 'microsoft.defender_atp.evidence.userPrincipalName', + type: 'keyword', }, - 'checkpoint.icap_server_service': { - category: 'checkpoint', - description: 'Service name, as given in the ICAP URI ', - name: 'checkpoint.icap_server_service', + 'microsoft.m365_defender.incidentId': { + category: 'microsoft', + description: 'Unique identifier to represent the incident. ', + name: 'microsoft.m365_defender.incidentId', type: 'keyword', }, - 'checkpoint.mirror_and_decrypt_type': { - category: 'checkpoint', + 'microsoft.m365_defender.redirectIncidentId': { + category: 'microsoft', description: - 'Information about decrypt and forward. Possible values: Mirror only, Decrypt and mirror, Partial mirroring (HTTPS inspection Bypass). ', - name: 'checkpoint.mirror_and_decrypt_type', + 'Only populated in case an incident is being grouped together with another incident, as part of the incident processing logic. ', + name: 'microsoft.m365_defender.redirectIncidentId', type: 'keyword', }, - 'checkpoint.interface_name': { - category: 'checkpoint', - description: 'Designated interface for mirror And decrypt. ', - name: 'checkpoint.interface_name', + 'microsoft.m365_defender.incidentName': { + category: 'microsoft', + description: 'Name of the Incident. ', + name: 'microsoft.m365_defender.incidentName', type: 'keyword', }, - 'checkpoint.session_uid': { - category: 'checkpoint', - description: 'HTTP session-id. ', - name: 'checkpoint.session_uid', + 'microsoft.m365_defender.determination': { + category: 'microsoft', + description: + 'Specifies the determination of the incident. The property values are: NotAvailable, Apt, Malware, SecurityPersonnel, SecurityTesting, UnwantedSoftware, Other. ', + name: 'microsoft.m365_defender.determination', type: 'keyword', }, - 'checkpoint.broker_publisher': { - category: 'checkpoint', - description: 'IP address of the broker publisher who shared the session information. ', - name: 'checkpoint.broker_publisher', - type: 'ip', - }, - 'checkpoint.src_user_dn': { - category: 'checkpoint', - description: 'User distinguished name connected to source IP. ', - name: 'checkpoint.src_user_dn', + 'microsoft.m365_defender.investigationState': { + category: 'microsoft', + description: 'The current state of the Investigation. ', + name: 'microsoft.m365_defender.investigationState', type: 'keyword', }, - 'checkpoint.proxy_user_name': { - category: 'checkpoint', - description: 'User name connected to proxy IP. ', - name: 'checkpoint.proxy_user_name', + 'microsoft.m365_defender.assignedTo': { + category: 'microsoft', + description: 'Owner of the alert. ', + name: 'microsoft.m365_defender.assignedTo', type: 'keyword', }, - 'checkpoint.proxy_machine_name': { - category: 'checkpoint', - description: 'Machine name connected to proxy IP. ', - name: 'checkpoint.proxy_machine_name', - type: 'integer', - }, - 'checkpoint.proxy_user_dn': { - category: 'checkpoint', - description: 'User distinguished name connected to proxy IP. ', - name: 'checkpoint.proxy_user_dn', + 'microsoft.m365_defender.tags': { + category: 'microsoft', + description: + 'Array of custom tags associated with an incident, for example to flag a group of incidents with a common characteristic. ', + name: 'microsoft.m365_defender.tags', type: 'keyword', }, - 'checkpoint.query': { - category: 'checkpoint', - description: 'DNS query. ', - name: 'checkpoint.query', + 'microsoft.m365_defender.status': { + category: 'microsoft', + description: + "Specifies the current status of the alert. Possible values are: 'Unknown', 'New', 'InProgress' and 'Resolved'. ", + name: 'microsoft.m365_defender.status', type: 'keyword', }, - 'checkpoint.dns_query': { - category: 'checkpoint', - description: 'DNS query. ', - name: 'checkpoint.dns_query', + 'microsoft.m365_defender.classification': { + category: 'microsoft', + description: + "Specification of the alert. Possible values are: 'Unknown', 'FalsePositive', 'TruePositive'. ", + name: 'microsoft.m365_defender.classification', type: 'keyword', }, - 'checkpoint.inspection_item': { - category: 'checkpoint', - description: 'Blade element performed inspection. ', - name: 'checkpoint.inspection_item', + 'microsoft.m365_defender.alerts.incidentId': { + category: 'microsoft', + description: 'Unique identifier to represent the incident this alert is associated with. ', + name: 'microsoft.m365_defender.alerts.incidentId', type: 'keyword', }, - 'checkpoint.inspection_category': { - category: 'checkpoint', - description: 'Inspection category: protocol anomaly, signature etc. ', - name: 'checkpoint.inspection_category', + 'microsoft.m365_defender.alerts.resolvedTime': { + category: 'microsoft', + description: 'Time when alert was resolved. ', + name: 'microsoft.m365_defender.alerts.resolvedTime', + type: 'date', + }, + 'microsoft.m365_defender.alerts.status': { + category: 'microsoft', + description: 'Categorize alerts (as New, Active, or Resolved). ', + name: 'microsoft.m365_defender.alerts.status', type: 'keyword', }, - 'checkpoint.inspection_profile': { - category: 'checkpoint', - description: 'Profile which the activated protection belongs to. ', - name: 'checkpoint.inspection_profile', + 'microsoft.m365_defender.alerts.severity': { + category: 'microsoft', + description: 'The severity of the related alert. ', + name: 'microsoft.m365_defender.alerts.severity', type: 'keyword', }, - 'checkpoint.summary': { - category: 'checkpoint', - description: 'Summary message of a non-compliant DNS traffic drops or detects. ', - name: 'checkpoint.summary', + 'microsoft.m365_defender.alerts.creationTime': { + category: 'microsoft', + description: 'Time when alert was first created. ', + name: 'microsoft.m365_defender.alerts.creationTime', + type: 'date', + }, + 'microsoft.m365_defender.alerts.lastUpdatedTime': { + category: 'microsoft', + description: 'Time when alert was last updated. ', + name: 'microsoft.m365_defender.alerts.lastUpdatedTime', + type: 'date', + }, + 'microsoft.m365_defender.alerts.investigationId': { + category: 'microsoft', + description: 'The automated investigation id triggered by this alert. ', + name: 'microsoft.m365_defender.alerts.investigationId', type: 'keyword', }, - 'checkpoint.question_rdata': { - category: 'checkpoint', - description: 'List of question records domains. ', - name: 'checkpoint.question_rdata', + 'microsoft.m365_defender.alerts.userSid': { + category: 'microsoft', + description: 'The SID of the related user ', + name: 'microsoft.m365_defender.alerts.userSid', type: 'keyword', }, - 'checkpoint.answer_rdata': { - category: 'checkpoint', - description: 'List of answer resource records to the questioned domains. ', - name: 'checkpoint.answer_rdata', + 'microsoft.m365_defender.alerts.detectionSource': { + category: 'microsoft', + description: 'The service that initially detected the threat. ', + name: 'microsoft.m365_defender.alerts.detectionSource', type: 'keyword', }, - 'checkpoint.authority_rdata': { - category: 'checkpoint', - description: 'List of authoritative servers. ', - name: 'checkpoint.authority_rdata', + 'microsoft.m365_defender.alerts.classification': { + category: 'microsoft', + description: + 'The specification for the incident. The property values are: Unknown, FalsePositive, TruePositive or null. ', + name: 'microsoft.m365_defender.alerts.classification', type: 'keyword', }, - 'checkpoint.additional_rdata': { - category: 'checkpoint', - description: 'List of additional resource records. ', - name: 'checkpoint.additional_rdata', + 'microsoft.m365_defender.alerts.investigationState': { + category: 'microsoft', + description: "Information on the investigation's current status. ", + name: 'microsoft.m365_defender.alerts.investigationState', type: 'keyword', }, - 'checkpoint.files_names': { - category: 'checkpoint', - description: 'List of files requested by FTP. ', - name: 'checkpoint.files_names', + 'microsoft.m365_defender.alerts.determination': { + category: 'microsoft', + description: + 'Specifies the determination of the incident. The property values are: NotAvailable, Apt, Malware, SecurityPersonnel, SecurityTesting, UnwantedSoftware, Other or null ', + name: 'microsoft.m365_defender.alerts.determination', type: 'keyword', }, - 'checkpoint.ftp_user': { - category: 'checkpoint', - description: 'FTP username. ', - name: 'checkpoint.ftp_user', + 'microsoft.m365_defender.alerts.assignedTo': { + category: 'microsoft', + description: 'Owner of the incident, or null if no owner is assigned. ', + name: 'microsoft.m365_defender.alerts.assignedTo', type: 'keyword', }, - 'checkpoint.mime_from': { - category: 'checkpoint', - description: "Sender's address. ", - name: 'checkpoint.mime_from', + 'microsoft.m365_defender.alerts.actorName': { + category: 'microsoft', + description: 'The activity group, if any, the associated with this alert. ', + name: 'microsoft.m365_defender.alerts.actorName', type: 'keyword', }, - 'checkpoint.mime_to': { - category: 'checkpoint', - description: 'List of receiver address. ', - name: 'checkpoint.mime_to', + 'microsoft.m365_defender.alerts.threatFamilyName': { + category: 'microsoft', + description: 'Threat family associated with this alert. ', + name: 'microsoft.m365_defender.alerts.threatFamilyName', type: 'keyword', }, - 'checkpoint.bcc': { - category: 'checkpoint', - description: 'List of BCC addresses. ', - name: 'checkpoint.bcc', + 'microsoft.m365_defender.alerts.mitreTechniques': { + category: 'microsoft', + description: 'The attack techniques, as aligned with the MITRE ATT&CK™ framework. ', + name: 'microsoft.m365_defender.alerts.mitreTechniques', type: 'keyword', }, - 'checkpoint.content_type': { - category: 'checkpoint', + 'microsoft.m365_defender.alerts.entities.entityType': { + category: 'microsoft', description: - 'Mail content type. Possible values: application/msword, text/html, image/gif etc. ', - name: 'checkpoint.content_type', + 'Entities that have been identified to be part of, or related to, a given alert. The properties values are: User, Ip, Url, File, Process, MailBox, MailMessage, MailCluster, Registry. ', + name: 'microsoft.m365_defender.alerts.entities.entityType', type: 'keyword', }, - 'checkpoint.user_agent': { - category: 'checkpoint', - description: 'String identifying requesting software user agent. ', - name: 'checkpoint.user_agent', + 'microsoft.m365_defender.alerts.entities.accountName': { + category: 'microsoft', + description: 'Account name of the related user. ', + name: 'microsoft.m365_defender.alerts.entities.accountName', type: 'keyword', }, - 'checkpoint.referrer': { - category: 'checkpoint', - description: 'Referrer HTTP request header, previous web page address. ', - name: 'checkpoint.referrer', + 'microsoft.m365_defender.alerts.entities.mailboxDisplayName': { + category: 'microsoft', + description: 'The display name of the related mailbox. ', + name: 'microsoft.m365_defender.alerts.entities.mailboxDisplayName', type: 'keyword', }, - 'checkpoint.http_location': { - category: 'checkpoint', - description: 'Response header, indicates the URL to redirect a page to. ', - name: 'checkpoint.http_location', + 'microsoft.m365_defender.alerts.entities.mailboxAddress': { + category: 'microsoft', + description: 'The mail address of the related mailbox. ', + name: 'microsoft.m365_defender.alerts.entities.mailboxAddress', type: 'keyword', }, - 'checkpoint.content_disposition': { - category: 'checkpoint', - description: 'Indicates how the content is expected to be displayed inline in the browser. ', - name: 'checkpoint.content_disposition', + 'microsoft.m365_defender.alerts.entities.clusterBy': { + category: 'microsoft', + description: 'A list of metadata if the entityType is MailCluster. ', + name: 'microsoft.m365_defender.alerts.entities.clusterBy', type: 'keyword', }, - 'checkpoint.via': { - category: 'checkpoint', - description: - 'Via header is added by proxies for tracking purposes to avoid sending reqests in loop. ', - name: 'checkpoint.via', + 'microsoft.m365_defender.alerts.entities.sender': { + category: 'microsoft', + description: 'The sender for the related email message. ', + name: 'microsoft.m365_defender.alerts.entities.sender', type: 'keyword', }, - 'checkpoint.http_server': { - category: 'checkpoint', - description: - 'Server HTTP header value, contains information about the software used by the origin server, which handles the request. ', - name: 'checkpoint.http_server', + 'microsoft.m365_defender.alerts.entities.recipient': { + category: 'microsoft', + description: 'The recipient for the related email message. ', + name: 'microsoft.m365_defender.alerts.entities.recipient', type: 'keyword', }, - 'checkpoint.content_length': { - category: 'checkpoint', - description: 'Indicates the size of the entity-body of the HTTP header. ', - name: 'checkpoint.content_length', + 'microsoft.m365_defender.alerts.entities.subject': { + category: 'microsoft', + description: 'The subject for the related email message. ', + name: 'microsoft.m365_defender.alerts.entities.subject', type: 'keyword', }, - 'checkpoint.authorization': { - category: 'checkpoint', - description: 'Authorization HTTP header value. ', - name: 'checkpoint.authorization', + 'microsoft.m365_defender.alerts.entities.deliveryAction': { + category: 'microsoft', + description: 'The delivery status for the related email message. ', + name: 'microsoft.m365_defender.alerts.entities.deliveryAction', type: 'keyword', }, - 'checkpoint.http_host': { - category: 'checkpoint', - description: 'Domain name of the server that the HTTP request is sent to. ', - name: 'checkpoint.http_host', + 'microsoft.m365_defender.alerts.entities.securityGroupId': { + category: 'microsoft', + description: 'The Security Group ID for the user related to the email message. ', + name: 'microsoft.m365_defender.alerts.entities.securityGroupId', type: 'keyword', }, - 'checkpoint.inspection_settings_log': { - category: 'checkpoint', - description: 'Indicats that the log was released by inspection settings. ', - name: 'checkpoint.inspection_settings_log', + 'microsoft.m365_defender.alerts.entities.securityGroupName': { + category: 'microsoft', + description: 'The Security Group Name for the user related to the email message. ', + name: 'microsoft.m365_defender.alerts.entities.securityGroupName', type: 'keyword', }, - 'checkpoint.cvpn_resource': { - category: 'checkpoint', - description: 'Mobile Access application. ', - name: 'checkpoint.cvpn_resource', + 'microsoft.m365_defender.alerts.entities.registryHive': { + category: 'microsoft', + description: + 'Reference to which Hive in registry the event is related to, if eventType is registry. Example: HKEY_LOCAL_MACHINE. ', + name: 'microsoft.m365_defender.alerts.entities.registryHive', type: 'keyword', }, - 'checkpoint.cvpn_category': { - category: 'checkpoint', - description: 'Mobile Access application type. ', - name: 'checkpoint.cvpn_category', + 'microsoft.m365_defender.alerts.entities.registryKey': { + category: 'microsoft', + description: 'Reference to the related registry key to the event. ', + name: 'microsoft.m365_defender.alerts.entities.registryKey', type: 'keyword', }, - 'checkpoint.url': { - category: 'checkpoint', - description: 'Translated URL. ', - name: 'checkpoint.url', + 'microsoft.m365_defender.alerts.entities.registryValueType': { + category: 'microsoft', + description: 'Value type of the registry key/value pair related to the event. ', + name: 'microsoft.m365_defender.alerts.entities.registryValueType', type: 'keyword', }, - 'checkpoint.reject_id': { - category: 'checkpoint', - description: - 'A reject ID that corresponds to the one presented in the Mobile Access error page. ', - name: 'checkpoint.reject_id', + 'microsoft.m365_defender.alerts.entities.deviceId': { + category: 'microsoft', + description: 'The unique ID of the device related to the event. ', + name: 'microsoft.m365_defender.alerts.entities.deviceId', type: 'keyword', }, - 'checkpoint.fs-proto': { - category: 'checkpoint', - description: 'The file share protocol used in mobile acess file share application. ', - name: 'checkpoint.fs-proto', + 'microsoft.m365_defender.alerts.entities.ipAddress': { + category: 'microsoft', + description: 'The related IP address to the event. ', + name: 'microsoft.m365_defender.alerts.entities.ipAddress', type: 'keyword', }, - 'checkpoint.app_package': { - category: 'checkpoint', - description: 'Unique identifier of the application on the protected mobile device. ', - name: 'checkpoint.app_package', + 'microsoft.m365_defender.alerts.devices': { + category: 'microsoft', + description: 'The devices related to the investigation. ', + name: 'microsoft.m365_defender.alerts.devices', + type: 'flattened', + }, + 'misp.attack_pattern.id': { + category: 'misp', + description: 'Identifier of the threat indicator. ', + name: 'misp.attack_pattern.id', type: 'keyword', }, - 'checkpoint.appi_name': { - category: 'checkpoint', - description: 'Name of application downloaded on the protected mobile device. ', - name: 'checkpoint.appi_name', + 'misp.attack_pattern.name': { + category: 'misp', + description: 'Name of the attack pattern. ', + name: 'misp.attack_pattern.name', type: 'keyword', }, - 'checkpoint.app_repackaged': { - category: 'checkpoint', - description: - 'Indicates whether the original application was repackage not by the official developer. ', - name: 'checkpoint.app_repackaged', + 'misp.attack_pattern.description': { + category: 'misp', + description: 'Description of the attack pattern. ', + name: 'misp.attack_pattern.description', + type: 'text', + }, + 'misp.attack_pattern.kill_chain_phases': { + category: 'misp', + description: 'The kill chain phase(s) to which this attack pattern corresponds. ', + name: 'misp.attack_pattern.kill_chain_phases', type: 'keyword', }, - 'checkpoint.app_sid_id': { - category: 'checkpoint', - description: 'Unique SHA identifier of a mobile application. ', - name: 'checkpoint.app_sid_id', + 'misp.campaign.id': { + category: 'misp', + description: 'Identifier of the campaign. ', + name: 'misp.campaign.id', type: 'keyword', }, - 'checkpoint.app_version': { - category: 'checkpoint', - description: 'Version of the application downloaded on the protected mobile device. ', - name: 'checkpoint.app_version', + 'misp.campaign.name': { + category: 'misp', + description: 'Name of the campaign. ', + name: 'misp.campaign.name', type: 'keyword', }, - 'checkpoint.developer_certificate_name': { - category: 'checkpoint', + 'misp.campaign.description': { + category: 'misp', + description: 'Description of the campaign. ', + name: 'misp.campaign.description', + type: 'text', + }, + 'misp.campaign.aliases': { + category: 'misp', + description: 'Alternative names used to identify this campaign. ', + name: 'misp.campaign.aliases', + type: 'text', + }, + 'misp.campaign.first_seen': { + category: 'misp', + description: 'The time that this Campaign was first seen, in RFC3339 format. ', + name: 'misp.campaign.first_seen', + type: 'date', + }, + 'misp.campaign.last_seen': { + category: 'misp', + description: 'The time that this Campaign was last seen, in RFC3339 format. ', + name: 'misp.campaign.last_seen', + type: 'date', + }, + 'misp.campaign.objective': { + category: 'misp', description: - "Name of the developer's certificate that was used to sign the mobile application. ", - name: 'checkpoint.developer_certificate_name', + "This field defines the Campaign's primary goal, objective, desired outcome, or intended effect. ", + name: 'misp.campaign.objective', type: 'keyword', }, - 'checkpoint.email_message_id': { - category: 'checkpoint', - description: 'Email session id (uniqe ID of the mail). ', - name: 'checkpoint.email_message_id', + 'misp.course_of_action.id': { + category: 'misp', + description: 'Identifier of the Course of Action. ', + name: 'misp.course_of_action.id', type: 'keyword', }, - 'checkpoint.email_queue_id': { - category: 'checkpoint', - description: 'Postfix email queue id. ', - name: 'checkpoint.email_queue_id', + 'misp.course_of_action.name': { + category: 'misp', + description: 'The name used to identify the Course of Action. ', + name: 'misp.course_of_action.name', type: 'keyword', }, - 'checkpoint.email_queue_name': { - category: 'checkpoint', - description: 'Postfix email queue name. ', - name: 'checkpoint.email_queue_name', - type: 'keyword', + 'misp.course_of_action.description': { + category: 'misp', + description: 'Description of the Course of Action. ', + name: 'misp.course_of_action.description', + type: 'text', }, - 'checkpoint.file_name': { - category: 'checkpoint', - description: 'Malicious file name. ', - name: 'checkpoint.file_name', + 'misp.identity.id': { + category: 'misp', + description: 'Identifier of the Identity. ', + name: 'misp.identity.id', type: 'keyword', }, - 'checkpoint.failure_reason': { - category: 'checkpoint', - description: 'MTA failure description. ', - name: 'checkpoint.failure_reason', + 'misp.identity.name': { + category: 'misp', + description: 'The name used to identify the Identity. ', + name: 'misp.identity.name', type: 'keyword', }, - 'checkpoint.email_headers': { - category: 'checkpoint', - description: 'String containing all the email headers. ', - name: 'checkpoint.email_headers', + 'misp.identity.description': { + category: 'misp', + description: 'Description of the Identity. ', + name: 'misp.identity.description', + type: 'text', + }, + 'misp.identity.identity_class': { + category: 'misp', + description: + 'The type of entity that this Identity describes, e.g., an individual or organization. Open Vocab - identity-class-ov ', + name: 'misp.identity.identity_class', type: 'keyword', }, - 'checkpoint.arrival_time': { - category: 'checkpoint', - description: 'Email arrival timestamp. ', - name: 'checkpoint.arrival_time', + 'misp.identity.labels': { + category: 'misp', + description: 'The list of roles that this Identity performs. ', + example: 'CEO\n', + name: 'misp.identity.labels', type: 'keyword', }, - 'checkpoint.email_status': { - category: 'checkpoint', + 'misp.identity.sectors': { + category: 'misp', description: - "Describes the email's state. Possible options: delivered, deferred, skipped, bounced, hold, new, scan_started, scan_ended ", - name: 'checkpoint.email_status', + 'The list of sectors that this Identity belongs to. Open Vocab - industry-sector-ov ', + name: 'misp.identity.sectors', type: 'keyword', }, - 'checkpoint.status_update': { - category: 'checkpoint', - description: 'Last time log was updated. ', - name: 'checkpoint.status_update', + 'misp.identity.contact_information': { + category: 'misp', + description: 'The contact information (e-mail, phone number, etc.) for this Identity. ', + name: 'misp.identity.contact_information', + type: 'text', + }, + 'misp.intrusion_set.id': { + category: 'misp', + description: 'Identifier of the Intrusion Set. ', + name: 'misp.intrusion_set.id', type: 'keyword', }, - 'checkpoint.delivery_time': { - category: 'checkpoint', - description: 'Timestamp of when email was delivered (MTA finished handling the email. ', - name: 'checkpoint.delivery_time', + 'misp.intrusion_set.name': { + category: 'misp', + description: 'The name used to identify the Intrusion Set. ', + name: 'misp.intrusion_set.name', type: 'keyword', }, - 'checkpoint.links_num': { - category: 'checkpoint', - description: 'Number of links in the mail. ', - name: 'checkpoint.links_num', - type: 'integer', + 'misp.intrusion_set.description': { + category: 'misp', + description: 'Description of the Intrusion Set. ', + name: 'misp.intrusion_set.description', + type: 'text', }, - 'checkpoint.attachments_num': { - category: 'checkpoint', - description: 'Number of attachments in the mail. ', - name: 'checkpoint.attachments_num', - type: 'integer', + 'misp.intrusion_set.aliases': { + category: 'misp', + description: 'Alternative names used to identify the Intrusion Set. ', + name: 'misp.intrusion_set.aliases', + type: 'text', }, - 'checkpoint.email_content': { - category: 'checkpoint', + 'misp.intrusion_set.first_seen': { + category: 'misp', + description: 'The time that this Intrusion Set was first seen, in RFC3339 format. ', + name: 'misp.intrusion_set.first_seen', + type: 'date', + }, + 'misp.intrusion_set.last_seen': { + category: 'misp', + description: 'The time that this Intrusion Set was last seen, in RFC3339 format. ', + name: 'misp.intrusion_set.last_seen', + type: 'date', + }, + 'misp.intrusion_set.goals': { + category: 'misp', + description: 'The high level goals of this Intrusion Set, namely, what are they trying to do. ', + name: 'misp.intrusion_set.goals', + type: 'text', + }, + 'misp.intrusion_set.resource_level': { + category: 'misp', description: - 'Mail contents. Possible options: attachments/links & attachments/links/text only. ', - name: 'checkpoint.email_content', - type: 'keyword', + 'This defines the organizational level at which this Intrusion Set typically works. Open Vocab - attack-resource-level-ov ', + name: 'misp.intrusion_set.resource_level', + type: 'text', }, - 'checkpoint.allocated_ports': { - category: 'checkpoint', - description: 'Amount of allocated ports. ', - name: 'checkpoint.allocated_ports', - type: 'integer', + 'misp.intrusion_set.primary_motivation': { + category: 'misp', + description: + 'The primary reason, motivation, or purpose behind this Intrusion Set. Open Vocab - attack-motivation-ov ', + name: 'misp.intrusion_set.primary_motivation', + type: 'text', }, - 'checkpoint.capacity': { - category: 'checkpoint', - description: 'Capacity of the ports. ', - name: 'checkpoint.capacity', - type: 'integer', + 'misp.intrusion_set.secondary_motivations': { + category: 'misp', + description: + 'The secondary reasons, motivations, or purposes behind this Intrusion Set. Open Vocab - attack-motivation-ov ', + name: 'misp.intrusion_set.secondary_motivations', + type: 'text', }, - 'checkpoint.ports_usage': { - category: 'checkpoint', - description: 'Percentage of allocated ports. ', - name: 'checkpoint.ports_usage', - type: 'integer', + 'misp.malware.id': { + category: 'misp', + description: 'Identifier of the Malware. ', + name: 'misp.malware.id', + type: 'keyword', }, - 'checkpoint.nat_exhausted_pool': { - category: 'checkpoint', - description: '4-tuple of an exhausted pool. ', - name: 'checkpoint.nat_exhausted_pool', + 'misp.malware.name': { + category: 'misp', + description: 'The name used to identify the Malware. ', + name: 'misp.malware.name', type: 'keyword', }, - 'checkpoint.nat_rulenum': { - category: 'checkpoint', - description: 'NAT rulebase first matched rule. ', - name: 'checkpoint.nat_rulenum', - type: 'integer', + 'misp.malware.description': { + category: 'misp', + description: 'Description of the Malware. ', + name: 'misp.malware.description', + type: 'text', }, - 'checkpoint.nat_addtnl_rulenum': { - category: 'checkpoint', + 'misp.malware.labels': { + category: 'misp', description: - 'When matching 2 automatic rules , second rule match will be shown otherwise field will be 0. ', - name: 'checkpoint.nat_addtnl_rulenum', - type: 'integer', - }, - 'checkpoint.message_info': { - category: 'checkpoint', - description: 'Used for information messages, for example:NAT connection has ended. ', - name: 'checkpoint.message_info', + 'The type of malware being described. Open Vocab - malware-label-ov. adware,backdoor,bot,ddos,dropper,exploit-kit,keylogger,ransomware, remote-access-trojan,resource-exploitation,rogue-security-software,rootkit, screen-capture,spyware,trojan,virus,worm ', + name: 'misp.malware.labels', type: 'keyword', }, - 'checkpoint.nat46': { - category: 'checkpoint', - description: 'NAT 46 status, in most cases "enabled". ', - name: 'checkpoint.nat46', + 'misp.malware.kill_chain_phases': { + category: 'misp', + description: 'The list of kill chain phases for which this Malware instance can be used. ', + name: 'misp.malware.kill_chain_phases', type: 'keyword', + format: 'string', }, - 'checkpoint.end_time': { - category: 'checkpoint', - description: 'TCP connection end time. ', - name: 'checkpoint.end_time', + 'misp.note.id': { + category: 'misp', + description: 'Identifier of the Note. ', + name: 'misp.note.id', type: 'keyword', }, - 'checkpoint.tcp_end_reason': { - category: 'checkpoint', - description: 'Reason for TCP connection closure. ', - name: 'checkpoint.tcp_end_reason', + 'misp.note.summary': { + category: 'misp', + description: 'A brief description used as a summary of the Note. ', + name: 'misp.note.summary', type: 'keyword', }, - 'checkpoint.cgnet': { - category: 'checkpoint', - description: 'Describes NAT allocation for specific subscriber. ', - name: 'checkpoint.cgnet', - type: 'keyword', + 'misp.note.description': { + category: 'misp', + description: 'The content of the Note. ', + name: 'misp.note.description', + type: 'text', }, - 'checkpoint.subscriber': { - category: 'checkpoint', - description: 'Source IP before CGNAT. ', - name: 'checkpoint.subscriber', - type: 'ip', + 'misp.note.authors': { + category: 'misp', + description: 'The name of the author(s) of this Note. ', + name: 'misp.note.authors', + type: 'keyword', }, - 'checkpoint.hide_ip': { - category: 'checkpoint', - description: 'Source IP which will be used after CGNAT. ', - name: 'checkpoint.hide_ip', - type: 'ip', + 'misp.note.object_refs': { + category: 'misp', + description: 'The STIX Objects (SDOs and SROs) that the note is being applied to. ', + name: 'misp.note.object_refs', + type: 'keyword', }, - 'checkpoint.int_start': { - category: 'checkpoint', - description: 'Subscriber start int which will be used for NAT. ', - name: 'checkpoint.int_start', - type: 'integer', + 'misp.threat_indicator.labels': { + category: 'misp', + description: 'list of type open-vocab that specifies the type of indicator. ', + example: 'Domain Watchlist\n', + name: 'misp.threat_indicator.labels', + type: 'keyword', }, - 'checkpoint.int_end': { - category: 'checkpoint', - description: 'Subscriber end int which will be used for NAT. ', - name: 'checkpoint.int_end', - type: 'integer', + 'misp.threat_indicator.id': { + category: 'misp', + description: 'Identifier of the threat indicator. ', + name: 'misp.threat_indicator.id', + type: 'keyword', }, - 'checkpoint.packet_amount': { - category: 'checkpoint', - description: 'Amount of packets dropped. ', - name: 'checkpoint.packet_amount', - type: 'integer', + 'misp.threat_indicator.version': { + category: 'misp', + description: 'Version of the threat indicator. ', + name: 'misp.threat_indicator.version', + type: 'keyword', }, - 'checkpoint.monitor_reason': { - category: 'checkpoint', - description: 'Aggregated logs of monitored packets. ', - name: 'checkpoint.monitor_reason', + 'misp.threat_indicator.type': { + category: 'misp', + description: 'Type of the threat indicator. ', + name: 'misp.threat_indicator.type', type: 'keyword', }, - 'checkpoint.drops_amount': { - category: 'checkpoint', - description: 'Amount of multicast packets dropped. ', - name: 'checkpoint.drops_amount', - type: 'integer', + 'misp.threat_indicator.description': { + category: 'misp', + description: 'Description of the threat indicator. ', + name: 'misp.threat_indicator.description', + type: 'text', }, - 'checkpoint.securexl_message': { - category: 'checkpoint', + 'misp.threat_indicator.feed': { + category: 'misp', + description: 'Name of the threat feed. ', + name: 'misp.threat_indicator.feed', + type: 'text', + }, + 'misp.threat_indicator.valid_from': { + category: 'misp', description: - 'Two options for a SecureXL message: 1. Missed accounting records after heavy load on logging system. 2. FW log message regarding a packet drop. ', - name: 'checkpoint.securexl_message', - type: 'keyword', + 'The time from which this Indicator should be considered valuable intelligence, in RFC3339 format. ', + name: 'misp.threat_indicator.valid_from', + type: 'date', }, - 'checkpoint.conns_amount': { - category: 'checkpoint', - description: 'Connections amount of aggregated log info. ', - name: 'checkpoint.conns_amount', - type: 'integer', + 'misp.threat_indicator.valid_until': { + category: 'misp', + description: + 'The time at which this Indicator should no longer be considered valuable intelligence. If the valid_until property is omitted, then there is no constraint on the latest time for which the indicator should be used, in RFC3339 format. ', + name: 'misp.threat_indicator.valid_until', + type: 'date', }, - 'checkpoint.scope': { - category: 'checkpoint', - description: 'IP related to the attack. ', - name: 'checkpoint.scope', + 'misp.threat_indicator.severity': { + category: 'misp', + description: 'Threat severity to which this indicator corresponds. ', + example: 'high', + name: 'misp.threat_indicator.severity', type: 'keyword', + format: 'string', }, - 'checkpoint.analyzed_on': { - category: 'checkpoint', - description: 'Check Point ThreatCloud / emulator name. ', - name: 'checkpoint.analyzed_on', + 'misp.threat_indicator.confidence': { + category: 'misp', + description: 'Confidence level to which this indicator corresponds. ', + example: 'high', + name: 'misp.threat_indicator.confidence', type: 'keyword', }, - 'checkpoint.detected_on': { - category: 'checkpoint', - description: 'System and applications version the file was emulated on. ', - name: 'checkpoint.detected_on', + 'misp.threat_indicator.kill_chain_phases': { + category: 'misp', + description: 'The kill chain phase(s) to which this indicator corresponds. ', + name: 'misp.threat_indicator.kill_chain_phases', type: 'keyword', + format: 'string', }, - 'checkpoint.dropped_file_name': { - category: 'checkpoint', - description: 'List of names dropped from the original file. ', - name: 'checkpoint.dropped_file_name', + 'misp.threat_indicator.mitre_tactic': { + category: 'misp', + description: 'MITRE tactics to which this indicator corresponds. ', + example: 'Initial Access', + name: 'misp.threat_indicator.mitre_tactic', type: 'keyword', + format: 'string', }, - 'checkpoint.dropped_file_type': { - category: 'checkpoint', - description: 'List of file types dropped from the original file. ', - name: 'checkpoint.dropped_file_type', + 'misp.threat_indicator.mitre_technique': { + category: 'misp', + description: 'MITRE techniques to which this indicator corresponds. ', + example: 'Drive-by Compromise', + name: 'misp.threat_indicator.mitre_technique', type: 'keyword', + format: 'string', }, - 'checkpoint.dropped_file_hash': { - category: 'checkpoint', - description: 'List of file hashes dropped from the original file. ', - name: 'checkpoint.dropped_file_hash', + 'misp.threat_indicator.attack_pattern': { + category: 'misp', + description: + 'The attack_pattern for this indicator is a STIX Pattern as specified in STIX Version 2.0 Part 5 - STIX Patterning. ', + example: "[destination:ip = '91.219.29.188/32']\n", + name: 'misp.threat_indicator.attack_pattern', type: 'keyword', }, - 'checkpoint.dropped_file_verdict': { - category: 'checkpoint', - description: 'List of file verdics dropped from the original file. ', - name: 'checkpoint.dropped_file_verdict', + 'misp.threat_indicator.attack_pattern_kql': { + category: 'misp', + description: + 'The attack_pattern for this indicator is KQL query that matches the attack_pattern specified in the STIX Pattern format. ', + example: 'destination.ip: "91.219.29.188/32"\n', + name: 'misp.threat_indicator.attack_pattern_kql', type: 'keyword', }, - 'checkpoint.emulated_on': { - category: 'checkpoint', - description: 'Images the files were emulated on. ', - name: 'checkpoint.emulated_on', + 'misp.threat_indicator.negate': { + category: 'misp', + description: 'When set to true, it specifies the absence of the attack_pattern. ', + name: 'misp.threat_indicator.negate', + type: 'boolean', + }, + 'misp.threat_indicator.intrusion_set': { + category: 'misp', + description: 'Name of the intrusion set if known. ', + name: 'misp.threat_indicator.intrusion_set', type: 'keyword', }, - 'checkpoint.extracted_file_type': { - category: 'checkpoint', - description: 'Types of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_type', + 'misp.threat_indicator.campaign': { + category: 'misp', + description: 'Name of the attack campaign if known. ', + name: 'misp.threat_indicator.campaign', type: 'keyword', }, - 'checkpoint.extracted_file_names': { - category: 'checkpoint', - description: 'Names of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_names', + 'misp.threat_indicator.threat_actor': { + category: 'misp', + description: 'Name of the threat actor if known. ', + name: 'misp.threat_indicator.threat_actor', type: 'keyword', }, - 'checkpoint.extracted_file_hash': { - category: 'checkpoint', - description: 'Archive hash in case of extracted files. ', - name: 'checkpoint.extracted_file_hash', + 'misp.observed_data.id': { + category: 'misp', + description: 'Identifier of the Observed Data. ', + name: 'misp.observed_data.id', type: 'keyword', }, - 'checkpoint.extracted_file_verdict': { - category: 'checkpoint', - description: 'Verdict of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_verdict', + 'misp.observed_data.first_observed': { + category: 'misp', + description: 'The beginning of the time window that the data was observed, in RFC3339 format. ', + name: 'misp.observed_data.first_observed', + type: 'date', + }, + 'misp.observed_data.last_observed': { + category: 'misp', + description: 'The end of the time window that the data was observed, in RFC3339 format. ', + name: 'misp.observed_data.last_observed', + type: 'date', + }, + 'misp.observed_data.number_observed': { + category: 'misp', + description: + 'The number of times the data represented in the objects property was observed. This MUST be an integer between 1 and 999,999,999 inclusive. ', + name: 'misp.observed_data.number_observed', + type: 'integer', + }, + 'misp.observed_data.objects': { + category: 'misp', + description: + 'A dictionary of Cyber Observable Objects that describes the single fact that was observed. ', + name: 'misp.observed_data.objects', type: 'keyword', }, - 'checkpoint.extracted_file_uid': { - category: 'checkpoint', - description: 'UID of extracted files in case of an archive. ', - name: 'checkpoint.extracted_file_uid', + 'misp.report.id': { + category: 'misp', + description: 'Identifier of the Report. ', + name: 'misp.report.id', type: 'keyword', }, - 'checkpoint.mitre_initial_access': { - category: 'checkpoint', - description: 'The adversary is trying to break into your network. ', - name: 'checkpoint.mitre_initial_access', + 'misp.report.labels': { + category: 'misp', + description: + 'This field is an Open Vocabulary that specifies the primary subject of this report. Open Vocab - report-label-ov. threat-report,attack-pattern,campaign,identity,indicator,malware,observed-data,threat-actor,tool,vulnerability ', + name: 'misp.report.labels', type: 'keyword', }, - 'checkpoint.mitre_execution': { - category: 'checkpoint', - description: 'The adversary is trying to run malicious code. ', - name: 'checkpoint.mitre_execution', + 'misp.report.name': { + category: 'misp', + description: 'The name used to identify the Report. ', + name: 'misp.report.name', type: 'keyword', }, - 'checkpoint.mitre_persistence': { - category: 'checkpoint', - description: 'The adversary is trying to maintain his foothold. ', - name: 'checkpoint.mitre_persistence', + 'misp.report.description': { + category: 'misp', + description: 'A description that provides more details and context about Report. ', + name: 'misp.report.description', + type: 'text', + }, + 'misp.report.published': { + category: 'misp', + description: + 'The date that this report object was officially published by the creator of this report, in RFC3339 format. ', + name: 'misp.report.published', + type: 'date', + }, + 'misp.report.object_refs': { + category: 'misp', + description: 'Specifies the STIX Objects that are referred to by this Report. ', + name: 'misp.report.object_refs', + type: 'text', + }, + 'misp.threat_actor.id': { + category: 'misp', + description: 'Identifier of the Threat Actor. ', + name: 'misp.threat_actor.id', type: 'keyword', }, - 'checkpoint.mitre_privilege_escalation': { - category: 'checkpoint', - description: 'The adversary is trying to gain higher-level permissions. ', - name: 'checkpoint.mitre_privilege_escalation', + 'misp.threat_actor.labels': { + category: 'misp', + description: + 'This field specifies the type of threat actor. Open Vocab - threat-actor-label-ov. activist,competitor,crime-syndicate,criminal,hacker,insider-accidental,insider-disgruntled,nation-state,sensationalist,spy,terrorist ', + name: 'misp.threat_actor.labels', type: 'keyword', }, - 'checkpoint.mitre_defense_evasion': { - category: 'checkpoint', - description: 'The adversary is trying to avoid being detected. ', - name: 'checkpoint.mitre_defense_evasion', + 'misp.threat_actor.name': { + category: 'misp', + description: 'The name used to identify this Threat Actor or Threat Actor group. ', + name: 'misp.threat_actor.name', type: 'keyword', }, - 'checkpoint.mitre_credential_access': { - category: 'checkpoint', - description: 'The adversary is trying to steal account names and passwords. ', - name: 'checkpoint.mitre_credential_access', - type: 'keyword', + 'misp.threat_actor.description': { + category: 'misp', + description: 'A description that provides more details and context about the Threat Actor. ', + name: 'misp.threat_actor.description', + type: 'text', }, - 'checkpoint.mitre_discovery': { - category: 'checkpoint', - description: 'The adversary is trying to expose information about your environment. ', - name: 'checkpoint.mitre_discovery', - type: 'keyword', + 'misp.threat_actor.aliases': { + category: 'misp', + description: 'A list of other names that this Threat Actor is believed to use. ', + name: 'misp.threat_actor.aliases', + type: 'text', }, - 'checkpoint.mitre_lateral_movement': { - category: 'checkpoint', - description: 'The adversary is trying to explore your environment. ', - name: 'checkpoint.mitre_lateral_movement', - type: 'keyword', + 'misp.threat_actor.roles': { + category: 'misp', + description: + 'This is a list of roles the Threat Actor plays. Open Vocab - threat-actor-role-ov. agent,director,independent,sponsor,infrastructure-operator,infrastructure-architect,malware-author ', + name: 'misp.threat_actor.roles', + type: 'text', }, - 'checkpoint.mitre_collection': { - category: 'checkpoint', - description: 'The adversary is trying to collect data of interest to achieve his goal. ', - name: 'checkpoint.mitre_collection', - type: 'keyword', + 'misp.threat_actor.goals': { + category: 'misp', + description: 'The high level goals of this Threat Actor, namely, what are they trying to do. ', + name: 'misp.threat_actor.goals', + type: 'text', }, - 'checkpoint.mitre_command_and_control': { - category: 'checkpoint', + 'misp.threat_actor.sophistication': { + category: 'misp', description: - 'The adversary is trying to communicate with compromised systems in order to control them. ', - name: 'checkpoint.mitre_command_and_control', - type: 'keyword', + 'The skill, specific knowledge, special training, or expertise a Threat Actor must have to perform the attack. Open Vocab - threat-actor-sophistication-ov. none,minimal,intermediate,advanced,strategic,expert,innovator ', + name: 'misp.threat_actor.sophistication', + type: 'text', }, - 'checkpoint.mitre_exfiltration': { - category: 'checkpoint', - description: 'The adversary is trying to steal data. ', - name: 'checkpoint.mitre_exfiltration', - type: 'keyword', + 'misp.threat_actor.resource_level': { + category: 'misp', + description: + 'This defines the organizational level at which this Threat Actor typically works. Open Vocab - attack-resource-level-ov. individual,club,contest,team,organization,government ', + name: 'misp.threat_actor.resource_level', + type: 'text', }, - 'checkpoint.mitre_impact': { - category: 'checkpoint', + 'misp.threat_actor.primary_motivation': { + category: 'misp', description: - 'The adversary is trying to manipulate, interrupt, or destroy your systems and data. ', - name: 'checkpoint.mitre_impact', - type: 'keyword', + 'The primary reason, motivation, or purpose behind this Threat Actor. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', + name: 'misp.threat_actor.primary_motivation', + type: 'text', }, - 'checkpoint.parent_file_hash': { - category: 'checkpoint', - description: "Archive's hash in case of extracted files. ", - name: 'checkpoint.parent_file_hash', - type: 'keyword', + 'misp.threat_actor.secondary_motivations': { + category: 'misp', + description: + 'The secondary reasons, motivations, or purposes behind this Threat Actor. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', + name: 'misp.threat_actor.secondary_motivations', + type: 'text', }, - 'checkpoint.parent_file_name': { - category: 'checkpoint', - description: "Archive's name in case of extracted files. ", - name: 'checkpoint.parent_file_name', - type: 'keyword', + 'misp.threat_actor.personal_motivations': { + category: 'misp', + description: + 'The personal reasons, motivations, or purposes of the Threat Actor regardless of organizational goals. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', + name: 'misp.threat_actor.personal_motivations', + type: 'text', }, - 'checkpoint.parent_file_uid': { - category: 'checkpoint', - description: "Archive's UID in case of extracted files. ", - name: 'checkpoint.parent_file_uid', + 'misp.tool.id': { + category: 'misp', + description: 'Identifier of the Tool. ', + name: 'misp.tool.id', type: 'keyword', }, - 'checkpoint.similiar_iocs': { - category: 'checkpoint', - description: 'Other IoCs similar to the ones found, related to the malicious file. ', - name: 'checkpoint.similiar_iocs', + 'misp.tool.labels': { + category: 'misp', + description: + 'The kind(s) of tool(s) being described. Open Vocab - tool-label-ov. denial-of-service,exploitation,information-gathering,network-capture,credential-exploitation,remote-access,vulnerability-scanning ', + name: 'misp.tool.labels', type: 'keyword', }, - 'checkpoint.similar_hashes': { - category: 'checkpoint', - description: 'Hashes found similar to the malicious file. ', - name: 'checkpoint.similar_hashes', + 'misp.tool.name': { + category: 'misp', + description: 'The name used to identify the Tool. ', + name: 'misp.tool.name', type: 'keyword', }, - 'checkpoint.similar_strings': { - category: 'checkpoint', - description: 'Strings found similar to the malicious file. ', - name: 'checkpoint.similar_strings', - type: 'keyword', + 'misp.tool.description': { + category: 'misp', + description: 'A description that provides more details and context about the Tool. ', + name: 'misp.tool.description', + type: 'text', }, - 'checkpoint.similar_communication': { - category: 'checkpoint', - description: 'Network action found similar to the malicious file. ', - name: 'checkpoint.similar_communication', + 'misp.tool.tool_version': { + category: 'misp', + description: 'The version identifier associated with the Tool. ', + name: 'misp.tool.tool_version', type: 'keyword', }, - 'checkpoint.te_verdict_determined_by': { - category: 'checkpoint', - description: 'Emulators determined file verdict. ', - name: 'checkpoint.te_verdict_determined_by', - type: 'keyword', + 'misp.tool.kill_chain_phases': { + category: 'misp', + description: 'The list of kill chain phases for which this Tool instance can be used. ', + name: 'misp.tool.kill_chain_phases', + type: 'text', }, - 'checkpoint.packet_capture_unique_id': { - category: 'checkpoint', - description: 'Identifier of the packet capture files. ', - name: 'checkpoint.packet_capture_unique_id', + 'misp.vulnerability.id': { + category: 'misp', + description: 'Identifier of the Vulnerability. ', + name: 'misp.vulnerability.id', type: 'keyword', }, - 'checkpoint.total_attachments': { - category: 'checkpoint', - description: 'The number of attachments in an email. ', - name: 'checkpoint.total_attachments', - type: 'integer', - }, - 'checkpoint.additional_info': { - category: 'checkpoint', - description: 'ID of original file/mail which are sent by admin. ', - name: 'checkpoint.additional_info', + 'misp.vulnerability.name': { + category: 'misp', + description: 'The name used to identify the Vulnerability. ', + name: 'misp.vulnerability.name', type: 'keyword', }, - 'checkpoint.content_risk': { - category: 'checkpoint', - description: 'File risk. ', - name: 'checkpoint.content_risk', - type: 'integer', + 'misp.vulnerability.description': { + category: 'misp', + description: 'A description that provides more details and context about the Vulnerability. ', + name: 'misp.vulnerability.description', + type: 'text', }, - 'checkpoint.operation': { - category: 'checkpoint', - description: 'Operation made by Threat Extraction. ', - name: 'checkpoint.operation', + 'mssql.log.origin': { + category: 'mssql', + description: 'Origin of the message, usually the server but it can also be a recovery process', + name: 'mssql.log.origin', type: 'keyword', }, - 'checkpoint.scrubbed_content': { - category: 'checkpoint', - description: 'Active content that was found. ', - name: 'checkpoint.scrubbed_content', + 'mysqlenterprise.audit.class': { + category: 'mysqlenterprise', + description: + 'A string representing the event class. The class defines the type of event, when taken together with the event item that specifies the event subclass. ', + name: 'mysqlenterprise.audit.class', type: 'keyword', }, - 'checkpoint.scrub_time': { - category: 'checkpoint', - description: 'Extraction process duration. ', - name: 'checkpoint.scrub_time', + 'mysqlenterprise.audit.connection_id': { + category: 'mysqlenterprise', + description: + 'An integer representing the client connection identifier. This is the same as the value returned by the CONNECTION_ID() function within the session. ', + name: 'mysqlenterprise.audit.connection_id', type: 'keyword', }, - 'checkpoint.scrub_download_time': { - category: 'checkpoint', - description: 'File download time from resource. ', - name: 'checkpoint.scrub_download_time', + 'mysqlenterprise.audit.id': { + category: 'mysqlenterprise', + description: 'An unsigned integer representing an event ID. ', + name: 'mysqlenterprise.audit.id', type: 'keyword', }, - 'checkpoint.scrub_total_time': { - category: 'checkpoint', - description: 'Threat extraction total file handling time. ', - name: 'checkpoint.scrub_total_time', + 'mysqlenterprise.audit.connection_data.connection_type': { + category: 'mysqlenterprise', + description: + 'The security state of the connection to the server. Permitted values are tcp/ip (TCP/IP connection established without encryption), ssl (TCP/IP connection established with encryption), socket (Unix socket file connection), named_pipe (Windows named pipe connection), and shared_memory (Windows shared memory connection). ', + name: 'mysqlenterprise.audit.connection_data.connection_type', type: 'keyword', }, - 'checkpoint.scrub_activity': { - category: 'checkpoint', - description: 'The result of the extraction ', - name: 'checkpoint.scrub_activity', - type: 'keyword', + 'mysqlenterprise.audit.connection_data.status': { + category: 'mysqlenterprise', + description: + 'An integer representing the command status: 0 for success, nonzero if an error occurred. ', + name: 'mysqlenterprise.audit.connection_data.status', + type: 'long', }, - 'checkpoint.watermark': { - category: 'checkpoint', - description: 'Reports whether watermark is added to the cleaned file. ', - name: 'checkpoint.watermark', + 'mysqlenterprise.audit.connection_data.db': { + category: 'mysqlenterprise', + description: + 'A string representing a database name. For connection_data, it is the default database. For table_access_data, it is the table database. ', + name: 'mysqlenterprise.audit.connection_data.db', type: 'keyword', }, - 'checkpoint.source_object': { - category: 'checkpoint', - description: 'Matched object name on source column. ', - name: 'checkpoint.source_object', - type: 'integer', + 'mysqlenterprise.audit.connection_data.connection_attributes': { + category: 'mysqlenterprise', + description: 'Connection attributes that might be passed by different MySQL Clients. ', + name: 'mysqlenterprise.audit.connection_data.connection_attributes', + type: 'flattened', }, - 'checkpoint.destination_object': { - category: 'checkpoint', - description: 'Matched object name on destination column. ', - name: 'checkpoint.destination_object', + 'mysqlenterprise.audit.general_data.command': { + category: 'mysqlenterprise', + description: + 'A string representing the type of instruction that generated the audit event, such as a command that the server received from a client. ', + name: 'mysqlenterprise.audit.general_data.command', type: 'keyword', }, - 'checkpoint.drop_reason': { - category: 'checkpoint', - description: 'Drop reason description. ', - name: 'checkpoint.drop_reason', + 'mysqlenterprise.audit.general_data.sql_command': { + category: 'mysqlenterprise', + description: 'A string that indicates the SQL statement type. ', + name: 'mysqlenterprise.audit.general_data.sql_command', type: 'keyword', }, - 'checkpoint.hit': { - category: 'checkpoint', - description: 'Number of hits on a rule. ', - name: 'checkpoint.hit', - type: 'integer', - }, - 'checkpoint.rulebase_id': { - category: 'checkpoint', - description: 'Layer number. ', - name: 'checkpoint.rulebase_id', - type: 'integer', - }, - 'checkpoint.first_hit_time': { - category: 'checkpoint', - description: 'First hit time in current interval. ', - name: 'checkpoint.first_hit_time', - type: 'integer', + 'mysqlenterprise.audit.general_data.query': { + category: 'mysqlenterprise', + description: + 'A string representing the text of an SQL statement. The value can be empty. Long values may be truncated. The string, like the audit log file itself, is written using UTF-8 (up to 4 bytes per character), so the value may be the result of conversion. ', + name: 'mysqlenterprise.audit.general_data.query', + type: 'keyword', }, - 'checkpoint.last_hit_time': { - category: 'checkpoint', - description: 'Last hit time in current interval. ', - name: 'checkpoint.last_hit_time', - type: 'integer', + 'mysqlenterprise.audit.general_data.status': { + category: 'mysqlenterprise', + description: + 'An integer representing the command status: 0 for success, nonzero if an error occurred. This is the same as the value of the mysql_errno() C API function. ', + name: 'mysqlenterprise.audit.general_data.status', + type: 'long', }, - 'checkpoint.rematch_info': { - category: 'checkpoint', + 'mysqlenterprise.audit.login.user': { + category: 'mysqlenterprise', description: - 'Information sent when old connections cannot be matched during policy installation. ', - name: 'checkpoint.rematch_info', + 'A string representing the information indicating how a client connected to the server. ', + name: 'mysqlenterprise.audit.login.user', type: 'keyword', }, - 'checkpoint.last_rematch_time': { - category: 'checkpoint', - description: 'Connection rematched time. ', - name: 'checkpoint.last_rematch_time', + 'mysqlenterprise.audit.login.proxy': { + category: 'mysqlenterprise', + description: + 'A string representing the proxy user. The value is empty if user proxying is not in effect. ', + name: 'mysqlenterprise.audit.login.proxy', type: 'keyword', }, - 'checkpoint.action_reason': { - category: 'checkpoint', - description: 'Connection drop reason. ', - name: 'checkpoint.action_reason', - type: 'integer', - }, - 'checkpoint.c_bytes': { - category: 'checkpoint', - description: 'Boolean value indicates whether bytes sent from the client side are used. ', - name: 'checkpoint.c_bytes', - type: 'integer', - }, - 'checkpoint.context_num': { - category: 'checkpoint', - description: 'Serial number of the log for a specific connection. ', - name: 'checkpoint.context_num', - type: 'integer', - }, - 'checkpoint.match_id': { - category: 'checkpoint', - description: 'Private key of the rule ', - name: 'checkpoint.match_id', - type: 'integer', - }, - 'checkpoint.alert': { - category: 'checkpoint', - description: 'Alert level of matched rule (for connection logs). ', - name: 'checkpoint.alert', + 'mysqlenterprise.audit.shutdown_data.server_id': { + category: 'mysqlenterprise', + description: + 'An integer representing the server ID. This is the same as the value of the server_id system variable. ', + name: 'mysqlenterprise.audit.shutdown_data.server_id', type: 'keyword', }, - 'checkpoint.parent_rule': { - category: 'checkpoint', - description: 'Parent rule number, in case of inline layer. ', - name: 'checkpoint.parent_rule', - type: 'integer', - }, - 'checkpoint.match_fk': { - category: 'checkpoint', - description: 'Rule number. ', - name: 'checkpoint.match_fk', - type: 'integer', - }, - 'checkpoint.dropped_outgoing': { - category: 'checkpoint', - description: 'Number of outgoing bytes dropped when using UP-limit feature. ', - name: 'checkpoint.dropped_outgoing', - type: 'integer', - }, - 'checkpoint.dropped_incoming': { - category: 'checkpoint', - description: 'Number of incoming bytes dropped when using UP-limit feature. ', - name: 'checkpoint.dropped_incoming', - type: 'integer', - }, - 'checkpoint.media_type': { - category: 'checkpoint', - description: 'Media used (audio, video, etc.) ', - name: 'checkpoint.media_type', + 'mysqlenterprise.audit.startup_data.server_id': { + category: 'mysqlenterprise', + description: + 'An integer representing the server ID. This is the same as the value of the server_id system variable. ', + name: 'mysqlenterprise.audit.startup_data.server_id', type: 'keyword', }, - 'checkpoint.sip_reason': { - category: 'checkpoint', - description: "Explains why 'source_ip' isn't allowed to redirect (handover). ", - name: 'checkpoint.sip_reason', + 'mysqlenterprise.audit.startup_data.mysql_version': { + category: 'mysqlenterprise', + description: + 'An integer representing the server ID. This is the same as the value of the server_id system variable. ', + name: 'mysqlenterprise.audit.startup_data.mysql_version', type: 'keyword', }, - 'checkpoint.voip_method': { - category: 'checkpoint', - description: 'Registration request. ', - name: 'checkpoint.voip_method', + 'mysqlenterprise.audit.table_access_data.db': { + category: 'mysqlenterprise', + description: + 'A string representing a database name. For connection_data, it is the default database. For table_access_data, it is the table database. ', + name: 'mysqlenterprise.audit.table_access_data.db', type: 'keyword', }, - 'checkpoint.registered_ip-phones': { - category: 'checkpoint', - description: 'Registered IP-Phones. ', - name: 'checkpoint.registered_ip-phones', + 'mysqlenterprise.audit.table_access_data.table': { + category: 'mysqlenterprise', + description: 'A string representing a table name. ', + name: 'mysqlenterprise.audit.table_access_data.table', type: 'keyword', }, - 'checkpoint.voip_reg_user_type': { - category: 'checkpoint', - description: 'Registered IP-Phone type. ', - name: 'checkpoint.voip_reg_user_type', + 'mysqlenterprise.audit.table_access_data.query': { + category: 'mysqlenterprise', + description: + 'A string representing the text of an SQL statement. The value can be empty. Long values may be truncated. The string, like the audit log file itself, is written using UTF-8 (up to 4 bytes per character), so the value may be the result of conversion. ', + name: 'mysqlenterprise.audit.table_access_data.query', type: 'keyword', }, - 'checkpoint.voip_call_id': { - category: 'checkpoint', - description: 'Call-ID. ', - name: 'checkpoint.voip_call_id', + 'mysqlenterprise.audit.table_access_data.sql_command': { + category: 'mysqlenterprise', + description: 'A string that indicates the SQL statement type. ', + name: 'mysqlenterprise.audit.table_access_data.sql_command', type: 'keyword', }, - 'checkpoint.voip_reg_int': { - category: 'checkpoint', - description: 'Registration port. ', - name: 'checkpoint.voip_reg_int', - type: 'integer', - }, - 'checkpoint.voip_reg_ipp': { - category: 'checkpoint', - description: 'Registration IP protocol. ', - name: 'checkpoint.voip_reg_ipp', - type: 'integer', - }, - 'checkpoint.voip_reg_period': { - category: 'checkpoint', - description: 'Registration period. ', - name: 'checkpoint.voip_reg_period', - type: 'integer', - }, - 'checkpoint.src_phone_number': { - category: 'checkpoint', - description: 'Source IP-Phone. ', - name: 'checkpoint.src_phone_number', + 'mysqlenterprise.audit.account.user': { + category: 'mysqlenterprise', + description: + 'A string representing the user that the server authenticated the client as. This is the user name that the server uses for privilege checking. ', + name: 'mysqlenterprise.audit.account.user', type: 'keyword', }, - 'checkpoint.voip_from_user_type': { - category: 'checkpoint', - description: 'Source IP-Phone type. ', - name: 'checkpoint.voip_from_user_type', + 'mysqlenterprise.audit.account.host': { + category: 'mysqlenterprise', + description: 'A string representing the client host name. ', + name: 'mysqlenterprise.audit.account.host', type: 'keyword', }, - 'checkpoint.voip_to_user_type': { - category: 'checkpoint', - description: 'Destination IP-Phone type. ', - name: 'checkpoint.voip_to_user_type', + 'mysqlenterprise.audit.login.os': { + category: 'mysqlenterprise', + description: + 'A string representing the external user name used during the authentication process, as set by the plugin used to authenticate the client. ', + name: 'mysqlenterprise.audit.login.os', type: 'keyword', }, - 'checkpoint.voip_call_dir': { - category: 'checkpoint', - description: 'Call direction: in/out. ', - name: 'checkpoint.voip_call_dir', + 'o365.audit.AADGroupId': { + category: 'o365', + name: 'o365.audit.AADGroupId', type: 'keyword', }, - 'checkpoint.voip_call_state': { - category: 'checkpoint', - description: 'Call state. Possible values: in/out. ', - name: 'checkpoint.voip_call_state', + 'o365.audit.Actor.ID': { + category: 'o365', + name: 'o365.audit.Actor.ID', type: 'keyword', }, - 'checkpoint.voip_call_term_time': { - category: 'checkpoint', - description: 'Call termination time stamp. ', - name: 'checkpoint.voip_call_term_time', + 'o365.audit.Actor.Type': { + category: 'o365', + name: 'o365.audit.Actor.Type', type: 'keyword', }, - 'checkpoint.voip_duration': { - category: 'checkpoint', - description: 'Call duration (seconds). ', - name: 'checkpoint.voip_duration', + 'o365.audit.ActorContextId': { + category: 'o365', + name: 'o365.audit.ActorContextId', type: 'keyword', }, - 'checkpoint.voip_media_port': { - category: 'checkpoint', - description: 'Media int. ', - name: 'checkpoint.voip_media_port', + 'o365.audit.ActorIpAddress': { + category: 'o365', + name: 'o365.audit.ActorIpAddress', type: 'keyword', }, - 'checkpoint.voip_media_ipp': { - category: 'checkpoint', - description: 'Media IP protocol. ', - name: 'checkpoint.voip_media_ipp', + 'o365.audit.ActorUserId': { + category: 'o365', + name: 'o365.audit.ActorUserId', type: 'keyword', }, - 'checkpoint.voip_est_codec': { - category: 'checkpoint', - description: 'Estimated codec. ', - name: 'checkpoint.voip_est_codec', + 'o365.audit.ActorYammerUserId': { + category: 'o365', + name: 'o365.audit.ActorYammerUserId', type: 'keyword', }, - 'checkpoint.voip_exp': { - category: 'checkpoint', - description: 'Expiration. ', - name: 'checkpoint.voip_exp', - type: 'integer', - }, - 'checkpoint.voip_attach_sz': { - category: 'checkpoint', - description: 'Attachment size. ', - name: 'checkpoint.voip_attach_sz', - type: 'integer', - }, - 'checkpoint.voip_attach_action_info': { - category: 'checkpoint', - description: 'Attachment action Info. ', - name: 'checkpoint.voip_attach_action_info', + 'o365.audit.AlertEntityId': { + category: 'o365', + name: 'o365.audit.AlertEntityId', type: 'keyword', }, - 'checkpoint.voip_media_codec': { - category: 'checkpoint', - description: 'Estimated codec. ', - name: 'checkpoint.voip_media_codec', + 'o365.audit.AlertId': { + category: 'o365', + name: 'o365.audit.AlertId', type: 'keyword', }, - 'checkpoint.voip_reject_reason': { - category: 'checkpoint', - description: 'Reject reason. ', - name: 'checkpoint.voip_reject_reason', + 'o365.audit.AlertLinks': { + category: 'o365', + name: 'o365.audit.AlertLinks', + type: 'array', + }, + 'o365.audit.AlertType': { + category: 'o365', + name: 'o365.audit.AlertType', type: 'keyword', }, - 'checkpoint.voip_reason_info': { - category: 'checkpoint', - description: 'Information. ', - name: 'checkpoint.voip_reason_info', + 'o365.audit.AppId': { + category: 'o365', + name: 'o365.audit.AppId', type: 'keyword', }, - 'checkpoint.voip_config': { - category: 'checkpoint', - description: 'Configuration. ', - name: 'checkpoint.voip_config', + 'o365.audit.ApplicationDisplayName': { + category: 'o365', + name: 'o365.audit.ApplicationDisplayName', type: 'keyword', }, - 'checkpoint.voip_reg_server': { - category: 'checkpoint', - description: 'Registrar server IP address. ', - name: 'checkpoint.voip_reg_server', - type: 'ip', + 'o365.audit.ApplicationId': { + category: 'o365', + name: 'o365.audit.ApplicationId', + type: 'keyword', }, - 'checkpoint.scv_user': { - category: 'checkpoint', - description: 'Username whose packets are dropped on SCV. ', - name: 'checkpoint.scv_user', + 'o365.audit.AzureActiveDirectoryEventType': { + category: 'o365', + name: 'o365.audit.AzureActiveDirectoryEventType', type: 'keyword', }, - 'checkpoint.scv_message_info': { - category: 'checkpoint', - description: 'Drop reason. ', - name: 'checkpoint.scv_message_info', - type: 'keyword', + 'o365.audit.ExchangeMetaData.*': { + category: 'o365', + name: 'o365.audit.ExchangeMetaData.*', + type: 'object', }, - 'checkpoint.ppp': { - category: 'checkpoint', - description: 'Authentication status. ', - name: 'checkpoint.ppp', + 'o365.audit.Category': { + category: 'o365', + name: 'o365.audit.Category', type: 'keyword', }, - 'checkpoint.scheme': { - category: 'checkpoint', - description: 'Describes the scheme used for the log. ', - name: 'checkpoint.scheme', + 'o365.audit.ClientAppId': { + category: 'o365', + name: 'o365.audit.ClientAppId', type: 'keyword', }, - 'checkpoint.machine': { - category: 'checkpoint', - description: 'L2TP machine which triggered the log and the log refers to it. ', - name: 'checkpoint.machine', + 'o365.audit.ClientInfoString': { + category: 'o365', + name: 'o365.audit.ClientInfoString', type: 'keyword', }, - 'checkpoint.vpn_feature_name': { - category: 'checkpoint', - description: 'L2TP /IKE / Link Selection. ', - name: 'checkpoint.vpn_feature_name', + 'o365.audit.ClientIP': { + category: 'o365', + name: 'o365.audit.ClientIP', type: 'keyword', }, - 'checkpoint.reject_category': { - category: 'checkpoint', - description: 'Authentication failure reason. ', - name: 'checkpoint.reject_category', + 'o365.audit.ClientIPAddress': { + category: 'o365', + name: 'o365.audit.ClientIPAddress', type: 'keyword', }, - 'checkpoint.peer_ip_probing_status_update': { - category: 'checkpoint', - description: 'IP address response status. ', - name: 'checkpoint.peer_ip_probing_status_update', + 'o365.audit.Comments': { + category: 'o365', + name: 'o365.audit.Comments', + type: 'text', + }, + 'o365.audit.CommunicationType': { + category: 'o365', + name: 'o365.audit.CommunicationType', type: 'keyword', }, - 'checkpoint.peer_ip': { - category: 'checkpoint', - description: 'IP address which the client connects to. ', - name: 'checkpoint.peer_ip', + 'o365.audit.CorrelationId': { + category: 'o365', + name: 'o365.audit.CorrelationId', type: 'keyword', }, - 'checkpoint.link_probing_status_update': { - category: 'checkpoint', - description: 'IP address response status. ', - name: 'checkpoint.link_probing_status_update', + 'o365.audit.CreationTime': { + category: 'o365', + name: 'o365.audit.CreationTime', type: 'keyword', }, - 'checkpoint.source_interface': { - category: 'checkpoint', - description: 'External Interface name for source interface or Null if not found. ', - name: 'checkpoint.source_interface', + 'o365.audit.CustomUniqueId': { + category: 'o365', + name: 'o365.audit.CustomUniqueId', type: 'keyword', }, - 'checkpoint.next_hop_ip': { - category: 'checkpoint', - description: 'Next hop IP address. ', - name: 'checkpoint.next_hop_ip', + 'o365.audit.Data': { + category: 'o365', + name: 'o365.audit.Data', type: 'keyword', }, - 'checkpoint.srckeyid': { - category: 'checkpoint', - description: 'Initiator Spi ID. ', - name: 'checkpoint.srckeyid', + 'o365.audit.DataType': { + category: 'o365', + name: 'o365.audit.DataType', type: 'keyword', }, - 'checkpoint.dstkeyid': { - category: 'checkpoint', - description: 'Responder Spi ID. ', - name: 'checkpoint.dstkeyid', + 'o365.audit.DoNotDistributeEvent': { + category: 'o365', + name: 'o365.audit.DoNotDistributeEvent', + type: 'boolean', + }, + 'o365.audit.EntityType': { + category: 'o365', + name: 'o365.audit.EntityType', type: 'keyword', }, - 'checkpoint.encryption_failure': { - category: 'checkpoint', - description: 'Message indicating why the encryption failed. ', - name: 'checkpoint.encryption_failure', + 'o365.audit.ErrorNumber': { + category: 'o365', + name: 'o365.audit.ErrorNumber', type: 'keyword', }, - 'checkpoint.ike_ids': { - category: 'checkpoint', - description: 'All QM ids. ', - name: 'checkpoint.ike_ids', + 'o365.audit.EventData': { + category: 'o365', + name: 'o365.audit.EventData', type: 'keyword', }, - 'checkpoint.community': { - category: 'checkpoint', - description: 'Community name for the IPSec key and the use of the IKEv. ', - name: 'checkpoint.community', + 'o365.audit.EventSource': { + category: 'o365', + name: 'o365.audit.EventSource', type: 'keyword', }, - 'checkpoint.ike': { - category: 'checkpoint', - description: 'IKEMode (PHASE1, PHASE2, etc..). ', - name: 'checkpoint.ike', + 'o365.audit.ExceptionInfo.*': { + category: 'o365', + name: 'o365.audit.ExceptionInfo.*', + type: 'object', + }, + 'o365.audit.ExtendedProperties.*': { + category: 'o365', + name: 'o365.audit.ExtendedProperties.*', + type: 'object', + }, + 'o365.audit.ExternalAccess': { + category: 'o365', + name: 'o365.audit.ExternalAccess', type: 'keyword', }, - 'checkpoint.cookieI': { - category: 'checkpoint', - description: 'Initiator cookie. ', - name: 'checkpoint.cookieI', + 'o365.audit.FromApp': { + category: 'o365', + name: 'o365.audit.FromApp', + type: 'boolean', + }, + 'o365.audit.GroupName': { + category: 'o365', + name: 'o365.audit.GroupName', type: 'keyword', }, - 'checkpoint.cookieR': { - category: 'checkpoint', - description: 'Responder cookie. ', - name: 'checkpoint.cookieR', + 'o365.audit.Id': { + category: 'o365', + name: 'o365.audit.Id', type: 'keyword', }, - 'checkpoint.msgid': { - category: 'checkpoint', - description: 'Message ID. ', - name: 'checkpoint.msgid', + 'o365.audit.ImplicitShare': { + category: 'o365', + name: 'o365.audit.ImplicitShare', type: 'keyword', }, - 'checkpoint.methods': { - category: 'checkpoint', - description: 'IPSEc methods. ', - name: 'checkpoint.methods', + 'o365.audit.IncidentId': { + category: 'o365', + name: 'o365.audit.IncidentId', type: 'keyword', }, - 'checkpoint.connection_uid': { - category: 'checkpoint', - description: 'Calculation of md5 of the IP and user name as UID. ', - name: 'checkpoint.connection_uid', + 'o365.audit.InternalLogonType': { + category: 'o365', + name: 'o365.audit.InternalLogonType', type: 'keyword', }, - 'checkpoint.site_name': { - category: 'checkpoint', - description: 'Site name. ', - name: 'checkpoint.site_name', + 'o365.audit.InterSystemsId': { + category: 'o365', + name: 'o365.audit.InterSystemsId', type: 'keyword', }, - 'checkpoint.esod_rule_name': { - category: 'checkpoint', - description: 'Unknown rule name. ', - name: 'checkpoint.esod_rule_name', + 'o365.audit.IntraSystemId': { + category: 'o365', + name: 'o365.audit.IntraSystemId', type: 'keyword', }, - 'checkpoint.esod_rule_action': { - category: 'checkpoint', - description: 'Unknown rule action. ', - name: 'checkpoint.esod_rule_action', + 'o365.audit.IsDocLib': { + category: 'o365', + name: 'o365.audit.IsDocLib', + type: 'boolean', + }, + 'o365.audit.Item.*': { + category: 'o365', + name: 'o365.audit.Item.*', + type: 'object', + }, + 'o365.audit.Item.*.*': { + category: 'o365', + name: 'o365.audit.Item.*.*', + type: 'object', + }, + 'o365.audit.ItemCount': { + category: 'o365', + name: 'o365.audit.ItemCount', + type: 'long', + }, + 'o365.audit.ItemName': { + category: 'o365', + name: 'o365.audit.ItemName', type: 'keyword', }, - 'checkpoint.esod_rule_type': { - category: 'checkpoint', - description: 'Unknown rule type. ', - name: 'checkpoint.esod_rule_type', + 'o365.audit.ItemType': { + category: 'o365', + name: 'o365.audit.ItemType', type: 'keyword', }, - 'checkpoint.esod_noncompliance_reason': { - category: 'checkpoint', - description: 'Non-compliance reason. ', - name: 'checkpoint.esod_noncompliance_reason', + 'o365.audit.ListBaseTemplateType': { + category: 'o365', + name: 'o365.audit.ListBaseTemplateType', type: 'keyword', }, - 'checkpoint.esod_associated_policies': { - category: 'checkpoint', - description: 'Associated policies. ', - name: 'checkpoint.esod_associated_policies', + 'o365.audit.ListBaseType': { + category: 'o365', + name: 'o365.audit.ListBaseType', type: 'keyword', }, - 'checkpoint.spyware_type': { - category: 'checkpoint', - description: 'Spyware type. ', - name: 'checkpoint.spyware_type', + 'o365.audit.ListColor': { + category: 'o365', + name: 'o365.audit.ListColor', type: 'keyword', }, - 'checkpoint.anti_virus_type': { - category: 'checkpoint', - description: 'Anti virus type. ', - name: 'checkpoint.anti_virus_type', + 'o365.audit.ListIcon': { + category: 'o365', + name: 'o365.audit.ListIcon', type: 'keyword', }, - 'checkpoint.end_user_firewall_type': { - category: 'checkpoint', - description: 'End user firewall type. ', - name: 'checkpoint.end_user_firewall_type', + 'o365.audit.ListId': { + category: 'o365', + name: 'o365.audit.ListId', type: 'keyword', }, - 'checkpoint.esod_scan_status': { - category: 'checkpoint', - description: 'Scan failed. ', - name: 'checkpoint.esod_scan_status', + 'o365.audit.ListTitle': { + category: 'o365', + name: 'o365.audit.ListTitle', type: 'keyword', }, - 'checkpoint.esod_access_status': { - category: 'checkpoint', - description: 'Access denied. ', - name: 'checkpoint.esod_access_status', + 'o365.audit.ListItemUniqueId': { + category: 'o365', + name: 'o365.audit.ListItemUniqueId', type: 'keyword', }, - 'checkpoint.client_type': { - category: 'checkpoint', - description: 'Endpoint Connect. ', - name: 'checkpoint.client_type', + 'o365.audit.LogonError': { + category: 'o365', + name: 'o365.audit.LogonError', type: 'keyword', }, - 'checkpoint.precise_error': { - category: 'checkpoint', - description: 'HTTP parser error. ', - name: 'checkpoint.precise_error', + 'o365.audit.LogonType': { + category: 'o365', + name: 'o365.audit.LogonType', type: 'keyword', }, - 'checkpoint.method': { - category: 'checkpoint', - description: 'HTTP method. ', - name: 'checkpoint.method', + 'o365.audit.LogonUserSid': { + category: 'o365', + name: 'o365.audit.LogonUserSid', type: 'keyword', }, - 'checkpoint.trusted_domain': { - category: 'checkpoint', - description: 'In case of phishing event, the domain, which the attacker was impersonating. ', - name: 'checkpoint.trusted_domain', + 'o365.audit.MailboxGuid': { + category: 'o365', + name: 'o365.audit.MailboxGuid', type: 'keyword', }, - 'cisco.asa.message_id': { - category: 'cisco', - description: 'The Cisco ASA message identifier. ', - name: 'cisco.asa.message_id', + 'o365.audit.MailboxOwnerMasterAccountSid': { + category: 'o365', + name: 'o365.audit.MailboxOwnerMasterAccountSid', type: 'keyword', }, - 'cisco.asa.suffix': { - category: 'cisco', - description: 'Optional suffix after %ASA identifier. ', - example: 'session', - name: 'cisco.asa.suffix', + 'o365.audit.MailboxOwnerSid': { + category: 'o365', + name: 'o365.audit.MailboxOwnerSid', type: 'keyword', }, - 'cisco.asa.source_interface': { - category: 'cisco', - description: 'Source interface for the flow or event. ', - name: 'cisco.asa.source_interface', + 'o365.audit.MailboxOwnerUPN': { + category: 'o365', + name: 'o365.audit.MailboxOwnerUPN', type: 'keyword', }, - 'cisco.asa.destination_interface': { - category: 'cisco', - description: 'Destination interface for the flow or event. ', - name: 'cisco.asa.destination_interface', + 'o365.audit.Members': { + category: 'o365', + name: 'o365.audit.Members', + type: 'array', + }, + 'o365.audit.Members.*': { + category: 'o365', + name: 'o365.audit.Members.*', + type: 'object', + }, + 'o365.audit.ModifiedProperties.*.*': { + category: 'o365', + name: 'o365.audit.ModifiedProperties.*.*', + type: 'object', + }, + 'o365.audit.Name': { + category: 'o365', + name: 'o365.audit.Name', type: 'keyword', }, - 'cisco.asa.rule_name': { - category: 'cisco', - description: 'Name of the Access Control List rule that matched this event. ', - name: 'cisco.asa.rule_name', + 'o365.audit.ObjectId': { + category: 'o365', + name: 'o365.audit.ObjectId', type: 'keyword', }, - 'cisco.asa.source_username': { - category: 'cisco', - description: 'Name of the user that is the source for this event. ', - name: 'cisco.asa.source_username', + 'o365.audit.Operation': { + category: 'o365', + name: 'o365.audit.Operation', type: 'keyword', }, - 'cisco.asa.destination_username': { - category: 'cisco', - description: 'Name of the user that is the destination for this event. ', - name: 'cisco.asa.destination_username', + 'o365.audit.OrganizationId': { + category: 'o365', + name: 'o365.audit.OrganizationId', type: 'keyword', }, - 'cisco.asa.mapped_source_ip': { - category: 'cisco', - description: 'The translated source IP address. ', - name: 'cisco.asa.mapped_source_ip', - type: 'ip', + 'o365.audit.OrganizationName': { + category: 'o365', + name: 'o365.audit.OrganizationName', + type: 'keyword', }, - 'cisco.asa.mapped_source_host': { - category: 'cisco', - description: 'The translated source host. ', - name: 'cisco.asa.mapped_source_host', + 'o365.audit.OriginatingServer': { + category: 'o365', + name: 'o365.audit.OriginatingServer', type: 'keyword', }, - 'cisco.asa.mapped_source_port': { - category: 'cisco', - description: 'The translated source port. ', - name: 'cisco.asa.mapped_source_port', - type: 'long', + 'o365.audit.Parameters.*': { + category: 'o365', + name: 'o365.audit.Parameters.*', + type: 'object', }, - 'cisco.asa.mapped_destination_ip': { - category: 'cisco', - description: 'The translated destination IP address. ', - name: 'cisco.asa.mapped_destination_ip', - type: 'ip', + 'o365.audit.PolicyDetails': { + category: 'o365', + name: 'o365.audit.PolicyDetails', + type: 'array', }, - 'cisco.asa.mapped_destination_host': { - category: 'cisco', - description: 'The translated destination host. ', - name: 'cisco.asa.mapped_destination_host', + 'o365.audit.PolicyId': { + category: 'o365', + name: 'o365.audit.PolicyId', type: 'keyword', }, - 'cisco.asa.mapped_destination_port': { - category: 'cisco', - description: 'The translated destination port. ', - name: 'cisco.asa.mapped_destination_port', - type: 'long', - }, - 'cisco.asa.threat_level': { - category: 'cisco', - description: - 'Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. ', - name: 'cisco.asa.threat_level', + 'o365.audit.RecordType': { + category: 'o365', + name: 'o365.audit.RecordType', type: 'keyword', }, - 'cisco.asa.threat_category': { - category: 'cisco', - description: - 'Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. ', - name: 'cisco.asa.threat_category', + 'o365.audit.ResultStatus': { + category: 'o365', + name: 'o365.audit.ResultStatus', type: 'keyword', }, - 'cisco.asa.connection_id': { - category: 'cisco', - description: 'Unique identifier for a flow. ', - name: 'cisco.asa.connection_id', + 'o365.audit.SensitiveInfoDetectionIsIncluded': { + category: 'o365', + name: 'o365.audit.SensitiveInfoDetectionIsIncluded', type: 'keyword', }, - 'cisco.asa.icmp_type': { - category: 'cisco', - description: 'ICMP type. ', - name: 'cisco.asa.icmp_type', - type: 'short', - }, - 'cisco.asa.icmp_code': { - category: 'cisco', - description: 'ICMP code. ', - name: 'cisco.asa.icmp_code', - type: 'short', + 'o365.audit.SharePointMetaData.*': { + category: 'o365', + name: 'o365.audit.SharePointMetaData.*', + type: 'object', }, - 'cisco.asa.connection_type': { - category: 'cisco', - description: 'The VPN connection type ', - name: 'cisco.asa.connection_type', + 'o365.audit.SessionId': { + category: 'o365', + name: 'o365.audit.SessionId', type: 'keyword', }, - 'cisco.asa.dap_records': { - category: 'cisco', - description: 'The assigned DAP records ', - name: 'cisco.asa.dap_records', + 'o365.audit.Severity': { + category: 'o365', + name: 'o365.audit.Severity', type: 'keyword', }, - 'cisco.ftd.message_id': { - category: 'cisco', - description: 'The Cisco FTD message identifier. ', - name: 'cisco.ftd.message_id', + 'o365.audit.Site': { + category: 'o365', + name: 'o365.audit.Site', type: 'keyword', }, - 'cisco.ftd.suffix': { - category: 'cisco', - description: 'Optional suffix after %FTD identifier. ', - example: 'session', - name: 'cisco.ftd.suffix', + 'o365.audit.SiteUrl': { + category: 'o365', + name: 'o365.audit.SiteUrl', type: 'keyword', }, - 'cisco.ftd.source_interface': { - category: 'cisco', - description: 'Source interface for the flow or event. ', - name: 'cisco.ftd.source_interface', + 'o365.audit.Source': { + category: 'o365', + name: 'o365.audit.Source', type: 'keyword', }, - 'cisco.ftd.destination_interface': { - category: 'cisco', - description: 'Destination interface for the flow or event. ', - name: 'cisco.ftd.destination_interface', + 'o365.audit.SourceFileExtension': { + category: 'o365', + name: 'o365.audit.SourceFileExtension', type: 'keyword', }, - 'cisco.ftd.rule_name': { - category: 'cisco', - description: 'Name of the Access Control List rule that matched this event. ', - name: 'cisco.ftd.rule_name', + 'o365.audit.SourceFileName': { + category: 'o365', + name: 'o365.audit.SourceFileName', type: 'keyword', }, - 'cisco.ftd.source_username': { - category: 'cisco', - description: 'Name of the user that is the source for this event. ', - name: 'cisco.ftd.source_username', + 'o365.audit.SourceRelativeUrl': { + category: 'o365', + name: 'o365.audit.SourceRelativeUrl', type: 'keyword', }, - 'cisco.ftd.destination_username': { - category: 'cisco', - description: 'Name of the user that is the destination for this event. ', - name: 'cisco.ftd.destination_username', + 'o365.audit.Status': { + category: 'o365', + name: 'o365.audit.Status', type: 'keyword', }, - 'cisco.ftd.mapped_source_ip': { - category: 'cisco', - description: 'The translated source IP address. Use ECS source.nat.ip. ', - name: 'cisco.ftd.mapped_source_ip', - type: 'ip', - }, - 'cisco.ftd.mapped_source_host': { - category: 'cisco', - description: 'The translated source host. ', - name: 'cisco.ftd.mapped_source_host', + 'o365.audit.SupportTicketId': { + category: 'o365', + name: 'o365.audit.SupportTicketId', type: 'keyword', }, - 'cisco.ftd.mapped_source_port': { - category: 'cisco', - description: 'The translated source port. Use ECS source.nat.port. ', - name: 'cisco.ftd.mapped_source_port', - type: 'long', + 'o365.audit.Target.ID': { + category: 'o365', + name: 'o365.audit.Target.ID', + type: 'keyword', }, - 'cisco.ftd.mapped_destination_ip': { - category: 'cisco', - description: 'The translated destination IP address. Use ECS destination.nat.ip. ', - name: 'cisco.ftd.mapped_destination_ip', - type: 'ip', + 'o365.audit.Target.Type': { + category: 'o365', + name: 'o365.audit.Target.Type', + type: 'keyword', }, - 'cisco.ftd.mapped_destination_host': { - category: 'cisco', - description: 'The translated destination host. ', - name: 'cisco.ftd.mapped_destination_host', + 'o365.audit.TargetContextId': { + category: 'o365', + name: 'o365.audit.TargetContextId', type: 'keyword', }, - 'cisco.ftd.mapped_destination_port': { - category: 'cisco', - description: 'The translated destination port. Use ECS destination.nat.port. ', - name: 'cisco.ftd.mapped_destination_port', - type: 'long', + 'o365.audit.TargetUserOrGroupName': { + category: 'o365', + name: 'o365.audit.TargetUserOrGroupName', + type: 'keyword', }, - 'cisco.ftd.threat_level': { - category: 'cisco', - description: - 'Threat level for malware / botnet traffic. One of very-low, low, moderate, high or very-high. ', - name: 'cisco.ftd.threat_level', + 'o365.audit.TargetUserOrGroupType': { + category: 'o365', + name: 'o365.audit.TargetUserOrGroupType', type: 'keyword', }, - 'cisco.ftd.threat_category': { - category: 'cisco', - description: - 'Category for the malware / botnet traffic. For example: virus, botnet, trojan, etc. ', - name: 'cisco.ftd.threat_category', + 'o365.audit.TeamName': { + category: 'o365', + name: 'o365.audit.TeamName', type: 'keyword', }, - 'cisco.ftd.connection_id': { - category: 'cisco', - description: 'Unique identifier for a flow. ', - name: 'cisco.ftd.connection_id', + 'o365.audit.TeamGuid': { + category: 'o365', + name: 'o365.audit.TeamGuid', type: 'keyword', }, - 'cisco.ftd.icmp_type': { - category: 'cisco', - description: 'ICMP type. ', - name: 'cisco.ftd.icmp_type', - type: 'short', + 'o365.audit.TemplateTypeId': { + category: 'o365', + name: 'o365.audit.TemplateTypeId', + type: 'keyword', }, - 'cisco.ftd.icmp_code': { - category: 'cisco', - description: 'ICMP code. ', - name: 'cisco.ftd.icmp_code', - type: 'short', + 'o365.audit.UniqueSharingId': { + category: 'o365', + name: 'o365.audit.UniqueSharingId', + type: 'keyword', }, - 'cisco.ftd.security': { - category: 'cisco', - description: 'Raw fields for Security Events.', - name: 'cisco.ftd.security', - type: 'object', + 'o365.audit.UserAgent': { + category: 'o365', + name: 'o365.audit.UserAgent', + type: 'keyword', }, - 'cisco.ftd.connection_type': { - category: 'cisco', - description: 'The VPN connection type ', - name: 'cisco.ftd.connection_type', + 'o365.audit.UserId': { + category: 'o365', + name: 'o365.audit.UserId', type: 'keyword', }, - 'cisco.ftd.dap_records': { - category: 'cisco', - description: 'The assigned DAP records ', - name: 'cisco.ftd.dap_records', + 'o365.audit.UserKey': { + category: 'o365', + name: 'o365.audit.UserKey', type: 'keyword', }, - 'cisco.ios.access_list': { - category: 'cisco', - description: 'Name of the IP access list. ', - name: 'cisco.ios.access_list', + 'o365.audit.UserType': { + category: 'o365', + name: 'o365.audit.UserType', type: 'keyword', }, - 'cisco.ios.facility': { - category: 'cisco', - description: - 'The facility to which the message refers (for example, SNMP, SYS, and so forth). A facility can be a hardware device, a protocol, or a module of the system software. It denotes the source or the cause of the system message. ', - example: 'SEC', - name: 'cisco.ios.facility', + 'o365.audit.Version': { + category: 'o365', + name: 'o365.audit.Version', type: 'keyword', }, - 'coredns.id': { - category: 'coredns', - description: 'id of the DNS transaction ', - name: 'coredns.id', + 'o365.audit.WebId': { + category: 'o365', + name: 'o365.audit.WebId', type: 'keyword', }, - 'coredns.query.size': { - category: 'coredns', - description: 'size of the DNS query ', - name: 'coredns.query.size', - type: 'integer', - format: 'bytes', + 'o365.audit.Workload': { + category: 'o365', + name: 'o365.audit.Workload', + type: 'keyword', }, - 'coredns.query.class': { - category: 'coredns', - description: 'DNS query class ', - name: 'coredns.query.class', + 'o365.audit.YammerNetworkId': { + category: 'o365', + name: 'o365.audit.YammerNetworkId', type: 'keyword', }, - 'coredns.query.name': { - category: 'coredns', - description: 'DNS query name ', - name: 'coredns.query.name', + 'okta.uuid': { + category: 'okta', + description: 'The unique identifier of the Okta LogEvent. ', + name: 'okta.uuid', type: 'keyword', }, - 'coredns.query.type': { - category: 'coredns', - description: 'DNS query type ', - name: 'coredns.query.type', + 'okta.event_type': { + category: 'okta', + description: 'The type of the LogEvent. ', + name: 'okta.event_type', type: 'keyword', }, - 'coredns.response.code': { - category: 'coredns', - description: 'DNS response code ', - name: 'coredns.response.code', + 'okta.version': { + category: 'okta', + description: 'The version of the LogEvent. ', + name: 'okta.version', type: 'keyword', }, - 'coredns.response.flags': { - category: 'coredns', - description: 'DNS response flags ', - name: 'coredns.response.flags', + 'okta.severity': { + category: 'okta', + description: 'The severity of the LogEvent. Must be one of DEBUG, INFO, WARN, or ERROR. ', + name: 'okta.severity', type: 'keyword', }, - 'coredns.response.size': { - category: 'coredns', - description: 'size of the DNS response ', - name: 'coredns.response.size', - type: 'integer', - format: 'bytes', + 'okta.display_message': { + category: 'okta', + description: 'The display message of the LogEvent. ', + name: 'okta.display_message', + type: 'keyword', }, - 'coredns.dnssec_ok': { - category: 'coredns', - description: 'dnssec flag ', - name: 'coredns.dnssec_ok', - type: 'boolean', + 'okta.actor.id': { + category: 'okta', + description: 'Identifier of the actor. ', + name: 'okta.actor.id', + type: 'keyword', }, - 'crowdstrike.metadata.eventType': { - category: 'crowdstrike', - description: - 'DetectionSummaryEvent, FirewallMatchEvent, IncidentSummaryEvent, RemoteResponseSessionStartEvent, RemoteResponseSessionEndEvent, AuthActivityAuditEvent, or UserActivityAuditEvent ', - name: 'crowdstrike.metadata.eventType', + 'okta.actor.type': { + category: 'okta', + description: 'Type of the actor. ', + name: 'okta.actor.type', type: 'keyword', }, - 'crowdstrike.metadata.eventCreationTime': { - category: 'crowdstrike', - description: 'The time this event occurred on the endpoint in UTC UNIX_MS format. ', - name: 'crowdstrike.metadata.eventCreationTime', - type: 'date', + 'okta.actor.alternate_id': { + category: 'okta', + description: 'Alternate identifier of the actor. ', + name: 'okta.actor.alternate_id', + type: 'keyword', }, - 'crowdstrike.metadata.offset': { - category: 'crowdstrike', - description: - 'Offset number that tracks the location of the event in stream. This is used to identify unique detection events. ', - name: 'crowdstrike.metadata.offset', - type: 'integer', + 'okta.actor.display_name': { + category: 'okta', + description: 'Display name of the actor. ', + name: 'okta.actor.display_name', + type: 'keyword', }, - 'crowdstrike.metadata.customerIDString': { - category: 'crowdstrike', - description: 'Customer identifier ', - name: 'crowdstrike.metadata.customerIDString', + 'okta.client.ip': { + category: 'okta', + description: 'The IP address of the client. ', + name: 'okta.client.ip', + type: 'ip', + }, + 'okta.client.user_agent.raw_user_agent': { + category: 'okta', + description: 'The raw informaton of the user agent. ', + name: 'okta.client.user_agent.raw_user_agent', type: 'keyword', }, - 'crowdstrike.metadata.version': { - category: 'crowdstrike', - description: 'Schema version ', - name: 'crowdstrike.metadata.version', + 'okta.client.user_agent.os': { + category: 'okta', + description: 'The OS informaton. ', + name: 'okta.client.user_agent.os', type: 'keyword', }, - 'crowdstrike.event.ProcessStartTime': { - category: 'crowdstrike', - description: 'The process start time in UTC UNIX_MS format. ', - name: 'crowdstrike.event.ProcessStartTime', - type: 'date', + 'okta.client.user_agent.browser': { + category: 'okta', + description: 'The browser informaton of the client. ', + name: 'okta.client.user_agent.browser', + type: 'keyword', }, - 'crowdstrike.event.ProcessEndTime': { - category: 'crowdstrike', - description: 'The process termination time in UTC UNIX_MS format. ', - name: 'crowdstrike.event.ProcessEndTime', - type: 'date', + 'okta.client.zone': { + category: 'okta', + description: 'The zone information of the client. ', + name: 'okta.client.zone', + type: 'keyword', }, - 'crowdstrike.event.ProcessId': { - category: 'crowdstrike', - description: 'Process ID related to the detection. ', - name: 'crowdstrike.event.ProcessId', - type: 'integer', + 'okta.client.device': { + category: 'okta', + description: 'The information of the client device. ', + name: 'okta.client.device', + type: 'keyword', }, - 'crowdstrike.event.ParentProcessId': { - category: 'crowdstrike', - description: 'Parent process ID related to the detection. ', - name: 'crowdstrike.event.ParentProcessId', - type: 'integer', + 'okta.client.id': { + category: 'okta', + description: 'The identifier of the client. ', + name: 'okta.client.id', + type: 'keyword', }, - 'crowdstrike.event.ComputerName': { - category: 'crowdstrike', - description: 'Name of the computer where the detection occurred. ', - name: 'crowdstrike.event.ComputerName', + 'okta.outcome.reason': { + category: 'okta', + description: 'The reason of the outcome. ', + name: 'okta.outcome.reason', type: 'keyword', }, - 'crowdstrike.event.UserName': { - category: 'crowdstrike', - description: 'User name associated with the detection. ', - name: 'crowdstrike.event.UserName', + 'okta.outcome.result': { + category: 'okta', + description: + 'The result of the outcome. Must be one of: SUCCESS, FAILURE, SKIPPED, ALLOW, DENY, CHALLENGE, UNKNOWN. ', + name: 'okta.outcome.result', type: 'keyword', }, - 'crowdstrike.event.DetectName': { - category: 'crowdstrike', - description: 'Name of the detection. ', - name: 'crowdstrike.event.DetectName', + 'okta.target.id': { + category: 'okta', + description: 'Identifier of the actor. ', + name: 'okta.target.id', type: 'keyword', }, - 'crowdstrike.event.DetectDescription': { - category: 'crowdstrike', - description: 'Description of the detection. ', - name: 'crowdstrike.event.DetectDescription', + 'okta.target.type': { + category: 'okta', + description: 'Type of the actor. ', + name: 'okta.target.type', type: 'keyword', }, - 'crowdstrike.event.Severity': { - category: 'crowdstrike', - description: 'Severity score of the detection. ', - name: 'crowdstrike.event.Severity', - type: 'integer', + 'okta.target.alternate_id': { + category: 'okta', + description: 'Alternate identifier of the actor. ', + name: 'okta.target.alternate_id', + type: 'keyword', }, - 'crowdstrike.event.SeverityName': { - category: 'crowdstrike', - description: 'Severity score text. ', - name: 'crowdstrike.event.SeverityName', + 'okta.target.display_name': { + category: 'okta', + description: 'Display name of the actor. ', + name: 'okta.target.display_name', type: 'keyword', }, - 'crowdstrike.event.FileName': { - category: 'crowdstrike', - description: 'File name of the associated process for the detection. ', - name: 'crowdstrike.event.FileName', + 'okta.transaction.id': { + category: 'okta', + description: 'Identifier of the transaction. ', + name: 'okta.transaction.id', type: 'keyword', }, - 'crowdstrike.event.FilePath': { - category: 'crowdstrike', - description: 'Path of the executable associated with the detection. ', - name: 'crowdstrike.event.FilePath', + 'okta.transaction.type': { + category: 'okta', + description: 'The type of transaction. Must be one of "WEB", "JOB". ', + name: 'okta.transaction.type', type: 'keyword', }, - 'crowdstrike.event.CommandLine': { - category: 'crowdstrike', - description: 'Executable path with command line arguments. ', - name: 'crowdstrike.event.CommandLine', + 'okta.debug_context.debug_data.device_fingerprint': { + category: 'okta', + description: 'The fingerprint of the device. ', + name: 'okta.debug_context.debug_data.device_fingerprint', type: 'keyword', }, - 'crowdstrike.event.SHA1String': { - category: 'crowdstrike', - description: 'SHA1 sum of the executable associated with the detection. ', - name: 'crowdstrike.event.SHA1String', + 'okta.debug_context.debug_data.request_id': { + category: 'okta', + description: 'The identifier of the request. ', + name: 'okta.debug_context.debug_data.request_id', type: 'keyword', }, - 'crowdstrike.event.SHA256String': { - category: 'crowdstrike', - description: 'SHA256 sum of the executable associated with the detection. ', - name: 'crowdstrike.event.SHA256String', + 'okta.debug_context.debug_data.request_uri': { + category: 'okta', + description: 'The request URI. ', + name: 'okta.debug_context.debug_data.request_uri', type: 'keyword', }, - 'crowdstrike.event.MD5String': { - category: 'crowdstrike', - description: 'MD5 sum of the executable associated with the detection. ', - name: 'crowdstrike.event.MD5String', + 'okta.debug_context.debug_data.threat_suspected': { + category: 'okta', + description: 'Threat suspected. ', + name: 'okta.debug_context.debug_data.threat_suspected', type: 'keyword', }, - 'crowdstrike.event.MachineDomain': { - category: 'crowdstrike', - description: 'Domain for the machine associated with the detection. ', - name: 'crowdstrike.event.MachineDomain', + 'okta.debug_context.debug_data.url': { + category: 'okta', + description: 'The URL. ', + name: 'okta.debug_context.debug_data.url', type: 'keyword', }, - 'crowdstrike.event.FalconHostLink': { - category: 'crowdstrike', - description: 'URL to view the detection in Falcon. ', - name: 'crowdstrike.event.FalconHostLink', + 'okta.debug_context.debug_data.suspicious_activity.browser': { + category: 'okta', + description: 'The browser used. ', + name: 'okta.debug_context.debug_data.suspicious_activity.browser', type: 'keyword', }, - 'crowdstrike.event.SensorId': { - category: 'crowdstrike', - description: 'Unique ID associated with the Falcon sensor. ', - name: 'crowdstrike.event.SensorId', + 'okta.debug_context.debug_data.suspicious_activity.event_city': { + category: 'okta', + description: 'The city where the suspicious activity took place. ', + name: 'okta.debug_context.debug_data.suspicious_activity.event_city', type: 'keyword', }, - 'crowdstrike.event.DetectId': { - category: 'crowdstrike', - description: 'Unique ID associated with the detection. ', - name: 'crowdstrike.event.DetectId', + 'okta.debug_context.debug_data.suspicious_activity.event_country': { + category: 'okta', + description: 'The country where the suspicious activity took place. ', + name: 'okta.debug_context.debug_data.suspicious_activity.event_country', type: 'keyword', }, - 'crowdstrike.event.LocalIP': { - category: 'crowdstrike', - description: 'IP address of the host associated with the detection. ', - name: 'crowdstrike.event.LocalIP', + 'okta.debug_context.debug_data.suspicious_activity.event_id': { + category: 'okta', + description: 'The event ID. ', + name: 'okta.debug_context.debug_data.suspicious_activity.event_id', type: 'keyword', }, - 'crowdstrike.event.MACAddress': { - category: 'crowdstrike', - description: 'MAC address of the host associated with the detection. ', - name: 'crowdstrike.event.MACAddress', + 'okta.debug_context.debug_data.suspicious_activity.event_ip': { + category: 'okta', + description: 'The IP of the suspicious event. ', + name: 'okta.debug_context.debug_data.suspicious_activity.event_ip', + type: 'ip', + }, + 'okta.debug_context.debug_data.suspicious_activity.event_latitude': { + category: 'okta', + description: 'The latitude where the suspicious activity took place. ', + name: 'okta.debug_context.debug_data.suspicious_activity.event_latitude', + type: 'float', + }, + 'okta.debug_context.debug_data.suspicious_activity.event_longitude': { + category: 'okta', + description: 'The longitude where the suspicious activity took place. ', + name: 'okta.debug_context.debug_data.suspicious_activity.event_longitude', + type: 'float', + }, + 'okta.debug_context.debug_data.suspicious_activity.event_state': { + category: 'okta', + description: 'The state where the suspicious activity took place. ', + name: 'okta.debug_context.debug_data.suspicious_activity.event_state', type: 'keyword', }, - 'crowdstrike.event.Tactic': { - category: 'crowdstrike', - description: 'MITRE tactic category of the detection. ', - name: 'crowdstrike.event.Tactic', + 'okta.debug_context.debug_data.suspicious_activity.event_transaction_id': { + category: 'okta', + description: 'The event transaction ID. ', + name: 'okta.debug_context.debug_data.suspicious_activity.event_transaction_id', type: 'keyword', }, - 'crowdstrike.event.Technique': { - category: 'crowdstrike', - description: 'MITRE technique category of the detection. ', - name: 'crowdstrike.event.Technique', + 'okta.debug_context.debug_data.suspicious_activity.event_type': { + category: 'okta', + description: 'The event type. ', + name: 'okta.debug_context.debug_data.suspicious_activity.event_type', type: 'keyword', }, - 'crowdstrike.event.Objective': { - category: 'crowdstrike', - description: 'Method of detection. ', - name: 'crowdstrike.event.Objective', + 'okta.debug_context.debug_data.suspicious_activity.os': { + category: 'okta', + description: 'The OS of the system from where the suspicious activity occured. ', + name: 'okta.debug_context.debug_data.suspicious_activity.os', type: 'keyword', }, - 'crowdstrike.event.PatternDispositionDescription': { - category: 'crowdstrike', - description: 'Action taken by Falcon. ', - name: 'crowdstrike.event.PatternDispositionDescription', + 'okta.debug_context.debug_data.suspicious_activity.timestamp': { + category: 'okta', + description: 'The timestamp of when the activity occurred. ', + name: 'okta.debug_context.debug_data.suspicious_activity.timestamp', + type: 'date', + }, + 'okta.authentication_context.authentication_provider': { + category: 'okta', + description: + 'The information about the authentication provider. Must be one of OKTA_AUTHENTICATION_PROVIDER, ACTIVE_DIRECTORY, LDAP, FEDERATION, SOCIAL, FACTOR_PROVIDER. ', + name: 'okta.authentication_context.authentication_provider', type: 'keyword', }, - 'crowdstrike.event.PatternDispositionValue': { - category: 'crowdstrike', - description: 'Unique ID associated with action taken. ', - name: 'crowdstrike.event.PatternDispositionValue', + 'okta.authentication_context.authentication_step': { + category: 'okta', + description: 'The authentication step. ', + name: 'okta.authentication_context.authentication_step', type: 'integer', }, - 'crowdstrike.event.PatternDispositionFlags': { - category: 'crowdstrike', - description: 'Flags indicating actions taken. ', - name: 'crowdstrike.event.PatternDispositionFlags', - type: 'object', + 'okta.authentication_context.credential_provider': { + category: 'okta', + description: + 'The information about credential provider. Must be one of OKTA_CREDENTIAL_PROVIDER, RSA, SYMANTEC, GOOGLE, DUO, YUBIKEY. ', + name: 'okta.authentication_context.credential_provider', + type: 'keyword', }, - 'crowdstrike.event.State': { - category: 'crowdstrike', - description: 'Whether the incident summary is open and ongoing or closed. ', - name: 'crowdstrike.event.State', + 'okta.authentication_context.credential_type': { + category: 'okta', + description: + 'The information about credential type. Must be one of OTP, SMS, PASSWORD, ASSERTION, IWA, EMAIL, OAUTH2, JWT, CERTIFICATE, PRE_SHARED_SYMMETRIC_KEY, OKTA_CLIENT_SESSION, DEVICE_UDID. ', + name: 'okta.authentication_context.credential_type', type: 'keyword', }, - 'crowdstrike.event.IncidentStartTime': { - category: 'crowdstrike', - description: 'Start time for the incident in UTC UNIX format. ', - name: 'crowdstrike.event.IncidentStartTime', - type: 'date', + 'okta.authentication_context.issuer.id': { + category: 'okta', + description: 'The identifier of the issuer. ', + name: 'okta.authentication_context.issuer.id', + type: 'keyword', }, - 'crowdstrike.event.IncidentEndTime': { - category: 'crowdstrike', - description: 'End time for the incident in UTC UNIX format. ', - name: 'crowdstrike.event.IncidentEndTime', - type: 'date', + 'okta.authentication_context.issuer.type': { + category: 'okta', + description: 'The type of the issuer. ', + name: 'okta.authentication_context.issuer.type', + type: 'keyword', }, - 'crowdstrike.event.FineScore': { - category: 'crowdstrike', - description: 'Score for incident. ', - name: 'crowdstrike.event.FineScore', - type: 'float', + 'okta.authentication_context.external_session_id': { + category: 'okta', + description: 'The session identifer of the external session if any. ', + name: 'okta.authentication_context.external_session_id', + type: 'keyword', }, - 'crowdstrike.event.UserId': { - category: 'crowdstrike', - description: 'Email address or user ID associated with the event. ', - name: 'crowdstrike.event.UserId', + 'okta.authentication_context.interface': { + category: 'okta', + description: 'The interface used. e.g., Outlook, Office365, wsTrust ', + name: 'okta.authentication_context.interface', type: 'keyword', }, - 'crowdstrike.event.UserIp': { - category: 'crowdstrike', - description: 'IP address associated with the user. ', - name: 'crowdstrike.event.UserIp', + 'okta.security_context.as.number': { + category: 'okta', + description: 'The AS number. ', + name: 'okta.security_context.as.number', + type: 'integer', + }, + 'okta.security_context.as.organization.name': { + category: 'okta', + description: 'The organization name. ', + name: 'okta.security_context.as.organization.name', type: 'keyword', }, - 'crowdstrike.event.OperationName': { - category: 'crowdstrike', - description: 'Event subtype. ', - name: 'crowdstrike.event.OperationName', + 'okta.security_context.isp': { + category: 'okta', + description: 'The Internet Service Provider. ', + name: 'okta.security_context.isp', type: 'keyword', }, - 'crowdstrike.event.ServiceName': { - category: 'crowdstrike', - description: 'Service associated with this event. ', - name: 'crowdstrike.event.ServiceName', + 'okta.security_context.domain': { + category: 'okta', + description: 'The domain name. ', + name: 'okta.security_context.domain', type: 'keyword', }, - 'crowdstrike.event.Success': { - category: 'crowdstrike', - description: 'Indicator of whether or not this event was successful. ', - name: 'crowdstrike.event.Success', + 'okta.security_context.is_proxy': { + category: 'okta', + description: 'Whether it is a proxy or not. ', + name: 'okta.security_context.is_proxy', type: 'boolean', }, - 'crowdstrike.event.UTCTimestamp': { - category: 'crowdstrike', - description: 'Timestamp associated with this event in UTC UNIX format. ', - name: 'crowdstrike.event.UTCTimestamp', - type: 'date', + 'okta.request.ip_chain.ip': { + category: 'okta', + description: 'IP address. ', + name: 'okta.request.ip_chain.ip', + type: 'ip', }, - 'crowdstrike.event.AuditKeyValues': { - category: 'crowdstrike', - description: 'Fields that were changed in this event. ', - name: 'crowdstrike.event.AuditKeyValues', - type: 'nested', + 'okta.request.ip_chain.version': { + category: 'okta', + description: 'IP version. Must be one of V4, V6. ', + name: 'okta.request.ip_chain.version', + type: 'keyword', }, - 'crowdstrike.event.ExecutablesWritten': { - category: 'crowdstrike', - description: 'Detected executables written to disk by a process. ', - name: 'crowdstrike.event.ExecutablesWritten', - type: 'nested', + 'okta.request.ip_chain.source': { + category: 'okta', + description: 'Source information. ', + name: 'okta.request.ip_chain.source', + type: 'keyword', }, - 'crowdstrike.event.SessionId': { - category: 'crowdstrike', - description: 'Session ID of the remote response session. ', - name: 'crowdstrike.event.SessionId', + 'okta.request.ip_chain.geographical_context.city': { + category: 'okta', + description: 'The city.', + name: 'okta.request.ip_chain.geographical_context.city', type: 'keyword', }, - 'crowdstrike.event.HostnameField': { - category: 'crowdstrike', - description: 'Host name of the machine for the remote session. ', - name: 'crowdstrike.event.HostnameField', + 'okta.request.ip_chain.geographical_context.state': { + category: 'okta', + description: 'The state.', + name: 'okta.request.ip_chain.geographical_context.state', type: 'keyword', }, - 'crowdstrike.event.StartTimestamp': { - category: 'crowdstrike', - description: 'Start time for the remote session in UTC UNIX format. ', - name: 'crowdstrike.event.StartTimestamp', - type: 'date', + 'okta.request.ip_chain.geographical_context.postal_code': { + category: 'okta', + description: 'The postal code.', + name: 'okta.request.ip_chain.geographical_context.postal_code', + type: 'keyword', }, - 'crowdstrike.event.EndTimestamp': { - category: 'crowdstrike', - description: 'End time for the remote session in UTC UNIX format. ', - name: 'crowdstrike.event.EndTimestamp', - type: 'date', + 'okta.request.ip_chain.geographical_context.country': { + category: 'okta', + description: 'The country.', + name: 'okta.request.ip_chain.geographical_context.country', + type: 'keyword', }, - 'crowdstrike.event.LateralMovement': { - category: 'crowdstrike', - description: 'Lateral movement field for incident. ', - name: 'crowdstrike.event.LateralMovement', - type: 'long', + 'okta.request.ip_chain.geographical_context.geolocation': { + category: 'okta', + description: 'Geolocation information. ', + name: 'okta.request.ip_chain.geographical_context.geolocation', + type: 'geo_point', }, - 'crowdstrike.event.ParentImageFileName': { - category: 'crowdstrike', - description: 'Path to the parent process. ', - name: 'crowdstrike.event.ParentImageFileName', + 'oracle.database_audit.status': { + category: 'oracle', + description: 'Database Audit Status. ', + name: 'oracle.database_audit.status', type: 'keyword', }, - 'crowdstrike.event.ParentCommandLine': { - category: 'crowdstrike', - description: 'Parent process command line arguments. ', - name: 'crowdstrike.event.ParentCommandLine', + 'oracle.database_audit.session_id': { + category: 'oracle', + description: 'Indicates the audit session ID number. ', + name: 'oracle.database_audit.session_id', type: 'keyword', }, - 'crowdstrike.event.GrandparentImageFileName': { - category: 'crowdstrike', - description: 'Path to the grandparent process. ', - name: 'crowdstrike.event.GrandparentImageFileName', + 'oracle.database_audit.client.terminal': { + category: 'oracle', + description: 'If available, the client terminal type, for example "pty". ', + name: 'oracle.database_audit.client.terminal', type: 'keyword', }, - 'crowdstrike.event.GrandparentCommandLine': { - category: 'crowdstrike', - description: 'Grandparent process command line arguments. ', - name: 'crowdstrike.event.GrandparentCommandLine', + 'oracle.database_audit.client.address': { + category: 'oracle', + description: 'The IP Address or Domain used by the client. ', + name: 'oracle.database_audit.client.address', type: 'keyword', }, - 'crowdstrike.event.IOCType': { - category: 'crowdstrike', - description: 'CrowdStrike type for indicator of compromise. ', - name: 'crowdstrike.event.IOCType', + 'oracle.database_audit.client.user': { + category: 'oracle', + description: 'The user running the client or connection to the database. ', + name: 'oracle.database_audit.client.user', type: 'keyword', }, - 'crowdstrike.event.IOCValue': { - category: 'crowdstrike', - description: 'CrowdStrike value for indicator of compromise. ', - name: 'crowdstrike.event.IOCValue', + 'oracle.database_audit.database.user': { + category: 'oracle', + description: 'The database user used to authenticate. ', + name: 'oracle.database_audit.database.user', type: 'keyword', }, - 'crowdstrike.event.CustomerId': { - category: 'crowdstrike', - description: 'Customer identifier. ', - name: 'crowdstrike.event.CustomerId', + 'oracle.database_audit.privilege': { + category: 'oracle', + description: 'The privilege group related to the database user. ', + name: 'oracle.database_audit.privilege', type: 'keyword', }, - 'crowdstrike.event.DeviceId': { - category: 'crowdstrike', - description: 'Device on which the event occurred. ', - name: 'crowdstrike.event.DeviceId', + 'oracle.database_audit.entry.id': { + category: 'oracle', + description: + 'Indicates the current audit entry number, assigned to each audit trail record. The audit entry.id sequence number is shared between fine-grained audit records and regular audit records. ', + name: 'oracle.database_audit.entry.id', type: 'keyword', }, - 'crowdstrike.event.Ipv': { - category: 'crowdstrike', - description: 'Protocol for network request. ', - name: 'crowdstrike.event.Ipv', + 'oracle.database_audit.database.host': { + category: 'oracle', + description: 'Client host machine name. ', + name: 'oracle.database_audit.database.host', type: 'keyword', }, - 'crowdstrike.event.ConnectionDirection': { - category: 'crowdstrike', - description: 'Direction for network connection. ', - name: 'crowdstrike.event.ConnectionDirection', + 'oracle.database_audit.action': { + category: 'oracle', + description: + 'The action performed during the audit event. This could for example be the raw query. ', + name: 'oracle.database_audit.action', type: 'keyword', }, - 'crowdstrike.event.EventType': { - category: 'crowdstrike', - description: 'CrowdStrike provided event type. ', - name: 'crowdstrike.event.EventType', + 'oracle.database_audit.action_number': { + category: 'oracle', + description: + 'Action is a numeric value representing the action the user performed. The corresponding name of the action type is in the AUDIT_ACTIONS table. For example, action 100 refers to LOGON. ', + name: 'oracle.database_audit.action_number', type: 'keyword', }, - 'crowdstrike.event.HostName': { - category: 'crowdstrike', - description: 'Host name of the local machine. ', - name: 'crowdstrike.event.HostName', + 'oracle.database_audit.database.id': { + category: 'oracle', + description: + 'Database identifier calculated when the database is created. It corresponds to the DBID column of the V$DATABASE data dictionary view. ', + name: 'oracle.database_audit.database.id', type: 'keyword', }, - 'crowdstrike.event.ICMPCode': { - category: 'crowdstrike', - description: 'RFC2780 ICMP Code field. ', - name: 'crowdstrike.event.ICMPCode', - type: 'keyword', + 'oracle.database_audit.length': { + category: 'oracle', + description: + 'Refers to the total number of bytes used in this audit record. This number includes the trailing newline bytes (\\n), if any, at the end of the audit record. ', + name: 'oracle.database_audit.length', + type: 'long', }, - 'crowdstrike.event.ICMPType': { - category: 'crowdstrike', - description: 'RFC2780 ICMP Type field. ', - name: 'crowdstrike.event.ICMPType', + 'panw.panos.ruleset': { + category: 'panw', + description: 'Name of the rule that matched this session. ', + name: 'panw.panos.ruleset', type: 'keyword', }, - 'crowdstrike.event.ImageFileName': { - category: 'crowdstrike', - description: 'File name of the associated process for the detection. ', - name: 'crowdstrike.event.ImageFileName', + 'panw.panos.source.zone': { + category: 'panw', + description: 'Source zone for this session. ', + name: 'panw.panos.source.zone', type: 'keyword', }, - 'crowdstrike.event.PID': { - category: 'crowdstrike', - description: 'Associated process id for the detection. ', - name: 'crowdstrike.event.PID', - type: 'long', + 'panw.panos.source.interface': { + category: 'panw', + description: 'Source interface for this session. ', + name: 'panw.panos.source.interface', + type: 'keyword', }, - 'crowdstrike.event.LocalAddress': { - category: 'crowdstrike', - description: 'IP address of local machine. ', - name: 'crowdstrike.event.LocalAddress', + 'panw.panos.source.nat.ip': { + category: 'panw', + description: 'Post-NAT source IP. ', + name: 'panw.panos.source.nat.ip', type: 'ip', }, - 'crowdstrike.event.LocalPort': { - category: 'crowdstrike', - description: 'Port of local machine. ', - name: 'crowdstrike.event.LocalPort', + 'panw.panos.source.nat.port': { + category: 'panw', + description: 'Post-NAT source port. ', + name: 'panw.panos.source.nat.port', type: 'long', }, - 'crowdstrike.event.RemoteAddress': { - category: 'crowdstrike', - description: 'IP address of remote machine. ', - name: 'crowdstrike.event.RemoteAddress', + 'panw.panos.destination.zone': { + category: 'panw', + description: 'Destination zone for this session. ', + name: 'panw.panos.destination.zone', + type: 'keyword', + }, + 'panw.panos.destination.interface': { + category: 'panw', + description: 'Destination interface for this session. ', + name: 'panw.panos.destination.interface', + type: 'keyword', + }, + 'panw.panos.destination.nat.ip': { + category: 'panw', + description: 'Post-NAT destination IP. ', + name: 'panw.panos.destination.nat.ip', type: 'ip', }, - 'crowdstrike.event.RemotePort': { - category: 'crowdstrike', - description: 'Port of remote machine. ', - name: 'crowdstrike.event.RemotePort', + 'panw.panos.destination.nat.port': { + category: 'panw', + description: 'Post-NAT destination port. ', + name: 'panw.panos.destination.nat.port', type: 'long', }, - 'crowdstrike.event.RuleAction': { - category: 'crowdstrike', - description: 'Firewall rule action. ', - name: 'crowdstrike.event.RuleAction', + 'panw.panos.endreason': { + category: 'panw', + description: 'The reason a session terminated. ', + name: 'panw.panos.endreason', type: 'keyword', }, - 'crowdstrike.event.RuleDescription': { - category: 'crowdstrike', - description: 'Firewall rule description. ', - name: 'crowdstrike.event.RuleDescription', + 'panw.panos.network.pcap_id': { + category: 'panw', + description: 'Packet capture ID for a threat. ', + name: 'panw.panos.network.pcap_id', type: 'keyword', }, - 'crowdstrike.event.RuleFamilyID': { - category: 'crowdstrike', - description: 'Firewall rule family id. ', - name: 'crowdstrike.event.RuleFamilyID', + 'panw.panos.network.nat.community_id': { + category: 'panw', + description: 'Community ID flow-hash for the NAT 5-tuple. ', + name: 'panw.panos.network.nat.community_id', type: 'keyword', }, - 'crowdstrike.event.RuleGroupName': { - category: 'crowdstrike', - description: 'Firewall rule group name. ', - name: 'crowdstrike.event.RuleGroupName', + 'panw.panos.file.hash': { + category: 'panw', + description: 'Binary hash for a threat file sent to be analyzed by the WildFire service. ', + name: 'panw.panos.file.hash', type: 'keyword', }, - 'crowdstrike.event.RuleName': { - category: 'crowdstrike', - description: 'Firewall rule name. ', - name: 'crowdstrike.event.RuleName', + 'panw.panos.url.category': { + category: 'panw', + description: + "For threat URLs, it's the URL category. For WildFire, the verdict on the file and is either 'malicious', 'grayware', or 'benign'. ", + name: 'panw.panos.url.category', type: 'keyword', }, - 'crowdstrike.event.RuleId': { - category: 'crowdstrike', - description: 'Firewall rule id. ', - name: 'crowdstrike.event.RuleId', + 'panw.panos.flow_id': { + category: 'panw', + description: 'Internal numeric identifier for each session. ', + name: 'panw.panos.flow_id', type: 'keyword', }, - 'crowdstrike.event.MatchCount': { - category: 'crowdstrike', - description: 'Number of firewall rule matches. ', - name: 'crowdstrike.event.MatchCount', + 'panw.panos.sequence_number': { + category: 'panw', + description: + 'Log entry identifier that is incremented sequentially. Unique for each log type. ', + name: 'panw.panos.sequence_number', type: 'long', }, - 'crowdstrike.event.MatchCountSinceLastReport': { - category: 'crowdstrike', - description: 'Number of firewall rule matches since the last report. ', - name: 'crowdstrike.event.MatchCountSinceLastReport', - type: 'long', + 'panw.panos.threat.resource': { + category: 'panw', + description: 'URL or file name for a threat. ', + name: 'panw.panos.threat.resource', + type: 'keyword', }, - 'crowdstrike.event.Timestamp': { - category: 'crowdstrike', - description: 'Firewall rule triggered timestamp. ', - name: 'crowdstrike.event.Timestamp', - type: 'date', + 'panw.panos.threat.id': { + category: 'panw', + description: 'Palo Alto Networks identifier for the threat. ', + name: 'panw.panos.threat.id', + type: 'keyword', }, - 'crowdstrike.event.Flags.Audit': { - category: 'crowdstrike', - description: 'CrowdStrike audit flag. ', - name: 'crowdstrike.event.Flags.Audit', - type: 'boolean', + 'panw.panos.threat.name': { + category: 'panw', + description: 'Palo Alto Networks name for the threat. ', + name: 'panw.panos.threat.name', + type: 'keyword', }, - 'crowdstrike.event.Flags.Log': { - category: 'crowdstrike', - description: 'CrowdStrike log flag. ', - name: 'crowdstrike.event.Flags.Log', - type: 'boolean', + 'panw.panos.action': { + category: 'panw', + description: 'Action taken for the session.', + name: 'panw.panos.action', + type: 'keyword', }, - 'crowdstrike.event.Flags.Monitor': { - category: 'crowdstrike', - description: 'CrowdStrike monitor flag. ', - name: 'crowdstrike.event.Flags.Monitor', - type: 'boolean', + 'panw.panos.type': { + category: 'panw', + description: 'Specifies the type of the log', + name: 'panw.panos.type', }, - 'crowdstrike.event.Protocol': { - category: 'crowdstrike', - description: 'CrowdStrike provided protocol. ', - name: 'crowdstrike.event.Protocol', - type: 'keyword', + 'panw.panos.sub_type': { + category: 'panw', + description: 'Specifies the sub type of the log', + name: 'panw.panos.sub_type', }, - 'crowdstrike.event.NetworkProfile': { - category: 'crowdstrike', - description: 'CrowdStrike network profile. ', - name: 'crowdstrike.event.NetworkProfile', + 'panw.panos.virtual_sys': { + category: 'panw', + description: 'Virtual system instance ', + name: 'panw.panos.virtual_sys', type: 'keyword', }, - 'crowdstrike.event.PolicyName': { - category: 'crowdstrike', - description: 'CrowdStrike policy name. ', - name: 'crowdstrike.event.PolicyName', + 'panw.panos.client_os_ver': { + category: 'panw', + description: 'The client device’s OS version. ', + name: 'panw.panos.client_os_ver', type: 'keyword', }, - 'crowdstrike.event.PolicyID': { - category: 'crowdstrike', - description: 'CrowdStrike policy id. ', - name: 'crowdstrike.event.PolicyID', + 'panw.panos.client_os': { + category: 'panw', + description: 'The client device’s OS version. ', + name: 'panw.panos.client_os', type: 'keyword', }, - 'crowdstrike.event.Status': { - category: 'crowdstrike', - description: 'CrowdStrike status. ', - name: 'crowdstrike.event.Status', + 'panw.panos.client_ver': { + category: 'panw', + description: 'The client’s GlobalProtect app version. ', + name: 'panw.panos.client_ver', type: 'keyword', }, - 'crowdstrike.event.TreeID': { - category: 'crowdstrike', - description: 'CrowdStrike tree id. ', - name: 'crowdstrike.event.TreeID', + 'panw.panos.stage': { + category: 'panw', + description: 'A string showing the stage of the connection ', + example: 'before-login', + name: 'panw.panos.stage', type: 'keyword', }, - 'crowdstrike.event.Commands': { - category: 'crowdstrike', - description: 'Commands run in a remote session. ', - name: 'crowdstrike.event.Commands', + 'panw.panos.actionflags': { + category: 'panw', + description: 'A bit field indicating if the log was forwarded to Panorama. ', + name: 'panw.panos.actionflags', type: 'keyword', }, - 'envoyproxy.log_type': { - category: 'envoyproxy', - description: 'Envoy log type, normally ACCESS ', - name: 'envoyproxy.log_type', + 'panw.panos.error': { + category: 'panw', + description: 'A string showing that error that has occurred in any event. ', + name: 'panw.panos.error', type: 'keyword', }, - 'envoyproxy.response_flags': { - category: 'envoyproxy', - description: 'Response flags ', - name: 'envoyproxy.response_flags', + 'panw.panos.error_code': { + category: 'panw', + description: 'An integer associated with any errors that occurred. ', + name: 'panw.panos.error_code', + type: 'integer', + }, + 'panw.panos.repeatcnt': { + category: 'panw', + description: + 'The number of sessions with the same source IP address, destination IP address, application, and subtype that GlobalProtect has detected within the last five seconds.An integer associated with any errors that occurred. ', + name: 'panw.panos.repeatcnt', + type: 'integer', + }, + 'panw.panos.serial_number': { + category: 'panw', + description: 'The serial number of the user’s machine or device. ', + name: 'panw.panos.serial_number', type: 'keyword', }, - 'envoyproxy.upstream_service_time': { - category: 'envoyproxy', - description: 'Upstream service time in nanoseconds ', - name: 'envoyproxy.upstream_service_time', - type: 'long', - format: 'duration', + 'panw.panos.auth_method': { + category: 'panw', + description: 'A string showing the authentication type ', + example: 'LDAP', + name: 'panw.panos.auth_method', + type: 'keyword', }, - 'envoyproxy.request_id': { - category: 'envoyproxy', - description: 'ID of the request ', - name: 'envoyproxy.request_id', + 'panw.panos.datasource': { + category: 'panw', + description: 'Source from which mapping information is collected. ', + name: 'panw.panos.datasource', type: 'keyword', }, - 'envoyproxy.authority': { - category: 'envoyproxy', - description: 'Envoy proxy authority field ', - name: 'envoyproxy.authority', + 'panw.panos.datasourcetype': { + category: 'panw', + description: 'Mechanism used to identify the IP/User mappings within a data source. ', + name: 'panw.panos.datasourcetype', type: 'keyword', }, - 'envoyproxy.proxy_type': { - category: 'envoyproxy', - description: 'Envoy proxy type, tcp or http ', - name: 'envoyproxy.proxy_type', + 'panw.panos.datasourcename': { + category: 'panw', + description: 'User-ID source that sends the IP (Port)-User Mapping. ', + name: 'panw.panos.datasourcename', type: 'keyword', }, - 'fortinet.file.hash.crc32': { - category: 'fortinet', - description: 'CRC32 Hash of file ', - name: 'fortinet.file.hash.crc32', + 'panw.panos.factorno': { + category: 'panw', + description: 'Indicates the use of primary authentication (1) or additional factors (2, 3). ', + name: 'panw.panos.factorno', + type: 'integer', + }, + 'panw.panos.factortype': { + category: 'panw', + description: 'Vendor used to authenticate a user when Multi Factor authentication is present. ', + name: 'panw.panos.factortype', type: 'keyword', }, - 'fortinet.firewall.acct_stat': { - category: 'fortinet', - description: 'Accounting state (RADIUS) ', - name: 'fortinet.firewall.acct_stat', + 'panw.panos.factorcompletiontime': { + category: 'panw', + description: 'Time the authentication was completed. ', + name: 'panw.panos.factorcompletiontime', + type: 'date', + }, + 'panw.panos.ugflags': { + category: 'panw', + description: + 'Displays whether the user group that was found during user group mapping. Supported values are: User Group Found—Indicates whether the user could be mapped to a group. Duplicate User—Indicates whether duplicate users were found in a user group. Displays N/A if no user group is found. ', + name: 'panw.panos.ugflags', type: 'keyword', }, - 'fortinet.firewall.acktime': { - category: 'fortinet', - description: 'Alarm Acknowledge Time ', - name: 'fortinet.firewall.acktime', + 'panw.panos.device_group_hierarchy.level_1': { + category: 'panw', + description: + 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', + name: 'panw.panos.device_group_hierarchy.level_1', type: 'keyword', }, - 'fortinet.firewall.act': { - category: 'fortinet', - description: 'Action ', - name: 'fortinet.firewall.act', + 'panw.panos.device_group_hierarchy.level_2': { + category: 'panw', + description: + 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', + name: 'panw.panos.device_group_hierarchy.level_2', type: 'keyword', }, - 'fortinet.firewall.action': { - category: 'fortinet', - description: 'Status of the session ', - name: 'fortinet.firewall.action', + 'panw.panos.device_group_hierarchy.level_3': { + category: 'panw', + description: + 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', + name: 'panw.panos.device_group_hierarchy.level_3', type: 'keyword', }, - 'fortinet.firewall.activity': { - category: 'fortinet', - description: 'HA activity message ', - name: 'fortinet.firewall.activity', + 'panw.panos.device_group_hierarchy.level_4': { + category: 'panw', + description: + 'A sequence of identification numbers that indicate the device group’s location within a device group hierarchy. The firewall (or virtual system) generating the log includes the identification number of each ancestor in its device group hierarchy. The shared device group (level 0) is not included in this structure. If the log values are 12, 34, 45, 0, it means that the log was generated by a firewall (or virtual system) that belongs to device group 45, and its ancestors are 34, and 12. ', + name: 'panw.panos.device_group_hierarchy.level_4', type: 'keyword', }, - 'fortinet.firewall.addr': { - category: 'fortinet', - description: 'IP Address ', - name: 'fortinet.firewall.addr', - type: 'ip', + 'panw.panos.timeout': { + category: 'panw', + description: 'Timeout after which the IP/User Mappings are cleared. ', + name: 'panw.panos.timeout', + type: 'integer', }, - 'fortinet.firewall.addr_type': { - category: 'fortinet', - description: 'Address Type ', - name: 'fortinet.firewall.addr_type', + 'panw.panos.vsys_id': { + category: 'panw', + description: 'A unique identifier for a virtual system on a Palo Alto Networks firewall. ', + name: 'panw.panos.vsys_id', type: 'keyword', }, - 'fortinet.firewall.addrgrp': { - category: 'fortinet', - description: 'Address Group ', - name: 'fortinet.firewall.addrgrp', + 'panw.panos.vsys_name': { + category: 'panw', + description: + 'The name of the virtual system associated with the session; only valid on firewalls enabled for multiple virtual systems. ', + name: 'panw.panos.vsys_name', type: 'keyword', }, - 'fortinet.firewall.adgroup': { - category: 'fortinet', - description: 'AD Group Name ', - name: 'fortinet.firewall.adgroup', + 'panw.panos.description': { + category: 'panw', + description: 'Additional information for any event that has occurred. ', + name: 'panw.panos.description', type: 'keyword', }, - 'fortinet.firewall.admin': { - category: 'fortinet', - description: 'Admin User ', - name: 'fortinet.firewall.admin', + 'panw.panos.tunnel_type': { + category: 'panw', + description: 'The type of tunnel (either SSLVPN or IPSec). ', + name: 'panw.panos.tunnel_type', type: 'keyword', }, - 'fortinet.firewall.age': { - category: 'fortinet', - description: 'Time in seconds - time passed since last seen ', - name: 'fortinet.firewall.age', - type: 'integer', + 'panw.panos.connect_method': { + category: 'panw', + description: 'A string showing the how the GlobalProtect app connects to Gateway ', + name: 'panw.panos.connect_method', + type: 'keyword', }, - 'fortinet.firewall.agent': { - category: 'fortinet', - description: 'User agent - eg. agent="Mozilla/5.0" ', - name: 'fortinet.firewall.agent', + 'panw.panos.matchname': { + category: 'panw', + description: 'Name of the HIP object or profile. ', + name: 'panw.panos.matchname', type: 'keyword', }, - 'fortinet.firewall.alarmid': { - category: 'fortinet', - description: 'Alarm ID ', - name: 'fortinet.firewall.alarmid', - type: 'integer', + 'panw.panos.matchtype': { + category: 'panw', + description: 'Whether the hip field represents a HIP object or a HIP profile. ', + name: 'panw.panos.matchtype', + type: 'keyword', }, - 'fortinet.firewall.alert': { - category: 'fortinet', - description: 'Alert ', - name: 'fortinet.firewall.alert', + 'panw.panos.priority': { + category: 'panw', + description: + 'The priority order of the gateway that is based on highest (1), high (2), medium (3), low (4), or lowest (5) to which the GlobalProtect app can connect. ', + name: 'panw.panos.priority', type: 'keyword', }, - 'fortinet.firewall.analyticscksum': { - category: 'fortinet', - description: 'The checksum of the file submitted for analytics ', - name: 'fortinet.firewall.analyticscksum', + 'panw.panos.response_time': { + category: 'panw', + description: + 'The SSL response time of the selected gateway that is measured in milliseconds on the endpoint during tunnel setup. ', + name: 'panw.panos.response_time', type: 'keyword', }, - 'fortinet.firewall.analyticssubmit': { - category: 'fortinet', - description: 'The flag for analytics submission ', - name: 'fortinet.firewall.analyticssubmit', + 'panw.panos.attempted_gateways': { + category: 'panw', + description: + 'The fields that are collected for each gateway connection attempt with the gateway name, SSL response time, and priority ', + name: 'panw.panos.attempted_gateways', type: 'keyword', }, - 'fortinet.firewall.ap': { - category: 'fortinet', - description: 'Access Point ', - name: 'fortinet.firewall.ap', + 'panw.panos.gateway': { + category: 'panw', + description: 'The name of the gateway that is specified on the portal configuration. ', + name: 'panw.panos.gateway', type: 'keyword', }, - 'fortinet.firewall.app-type': { - category: 'fortinet', - description: 'Address Type ', - name: 'fortinet.firewall.app-type', + 'panw.panos.selection_type': { + category: 'panw', + description: 'The connection method that is selected to connect to the gateway. ', + name: 'panw.panos.selection_type', type: 'keyword', }, - 'fortinet.firewall.appact': { - category: 'fortinet', - description: 'The security action from app control ', - name: 'fortinet.firewall.appact', + 'rabbitmq.log.pid': { + category: 'rabbitmq', + description: 'The Erlang process id', + example: '<0.222.0>', + name: 'rabbitmq.log.pid', type: 'keyword', }, - 'fortinet.firewall.appid': { - category: 'fortinet', - description: 'Application ID ', - name: 'fortinet.firewall.appid', - type: 'integer', + 'snyk.projects': { + category: 'snyk', + description: 'Array with all related projects objects. ', + name: 'snyk.projects', + type: 'flattened', }, - 'fortinet.firewall.applist': { - category: 'fortinet', - description: 'Application Control profile ', - name: 'fortinet.firewall.applist', + 'snyk.related.projects': { + category: 'snyk', + description: "Array of all the related project ID's. ", + name: 'snyk.related.projects', type: 'keyword', }, - 'fortinet.firewall.apprisk': { - category: 'fortinet', - description: 'Application Risk Level ', - name: 'fortinet.firewall.apprisk', + 'snyk.audit.org_id': { + category: 'snyk', + description: 'ID of the related Organization related to the event. ', + name: 'snyk.audit.org_id', type: 'keyword', }, - 'fortinet.firewall.apscan': { - category: 'fortinet', - description: 'The name of the AP, which scanned and detected the rogue AP ', - name: 'fortinet.firewall.apscan', + 'snyk.audit.project_id': { + category: 'snyk', + description: 'ID of the project related to the event. ', + name: 'snyk.audit.project_id', type: 'keyword', }, - 'fortinet.firewall.apsn': { - category: 'fortinet', - description: 'Access Point ', - name: 'fortinet.firewall.apsn', + 'snyk.audit.content': { + category: 'snyk', + description: 'Overview of the content that was changed, both old and new values. ', + name: 'snyk.audit.content', + type: 'flattened', + }, + 'snyk.vulnerabilities.cvss3': { + category: 'snyk', + description: 'CSSv3 scores. ', + name: 'snyk.vulnerabilities.cvss3', type: 'keyword', }, - 'fortinet.firewall.apstatus': { - category: 'fortinet', - description: 'Access Point status ', - name: 'fortinet.firewall.apstatus', + 'snyk.vulnerabilities.disclosure_time': { + category: 'snyk', + description: + 'The time this vulnerability was originally disclosed to the package maintainers. ', + name: 'snyk.vulnerabilities.disclosure_time', + type: 'date', + }, + 'snyk.vulnerabilities.exploit_maturity': { + category: 'snyk', + description: 'The Snyk exploit maturity level. ', + name: 'snyk.vulnerabilities.exploit_maturity', type: 'keyword', }, - 'fortinet.firewall.aptype': { - category: 'fortinet', - description: 'Access Point type ', - name: 'fortinet.firewall.aptype', + 'snyk.vulnerabilities.id': { + category: 'snyk', + description: 'The vulnerability reference ID. ', + name: 'snyk.vulnerabilities.id', type: 'keyword', }, - 'fortinet.firewall.assigned': { - category: 'fortinet', - description: 'Assigned IP Address ', - name: 'fortinet.firewall.assigned', - type: 'ip', + 'snyk.vulnerabilities.is_ignored': { + category: 'snyk', + description: 'If the vulnerability report has been ignored. ', + name: 'snyk.vulnerabilities.is_ignored', + type: 'boolean', }, - 'fortinet.firewall.assignip': { - category: 'fortinet', - description: 'Assigned IP Address ', - name: 'fortinet.firewall.assignip', - type: 'ip', + 'snyk.vulnerabilities.is_patchable': { + category: 'snyk', + description: 'If vulnerability is fixable by using a Snyk supplied patch. ', + name: 'snyk.vulnerabilities.is_patchable', + type: 'boolean', }, - 'fortinet.firewall.attachment': { - category: 'fortinet', - description: 'The flag for email attachement ', - name: 'fortinet.firewall.attachment', - type: 'keyword', + 'snyk.vulnerabilities.is_patched': { + category: 'snyk', + description: 'If the vulnerability has been patched. ', + name: 'snyk.vulnerabilities.is_patched', + type: 'boolean', }, - 'fortinet.firewall.attack': { - category: 'fortinet', - description: 'Attack Name ', - name: 'fortinet.firewall.attack', + 'snyk.vulnerabilities.is_pinnable': { + category: 'snyk', + description: 'If the vulnerability is fixable by pinning a transitive dependency. ', + name: 'snyk.vulnerabilities.is_pinnable', + type: 'boolean', + }, + 'snyk.vulnerabilities.is_upgradable': { + category: 'snyk', + description: 'If the vulnerability fixable by upgrading a dependency. ', + name: 'snyk.vulnerabilities.is_upgradable', + type: 'boolean', + }, + 'snyk.vulnerabilities.language': { + category: 'snyk', + description: "The package's programming language. ", + name: 'snyk.vulnerabilities.language', type: 'keyword', }, - 'fortinet.firewall.attackcontext': { - category: 'fortinet', - description: 'The trigger patterns and the packetdata with base64 encoding ', - name: 'fortinet.firewall.attackcontext', + 'snyk.vulnerabilities.package': { + category: 'snyk', + description: 'The package identifier according to its package manager. ', + name: 'snyk.vulnerabilities.package', type: 'keyword', }, - 'fortinet.firewall.attackcontextid': { - category: 'fortinet', - description: 'Attack context id / total ', - name: 'fortinet.firewall.attackcontextid', + 'snyk.vulnerabilities.package_manager': { + category: 'snyk', + description: 'The package manager. ', + name: 'snyk.vulnerabilities.package_manager', type: 'keyword', }, - 'fortinet.firewall.attackid': { - category: 'fortinet', - description: 'Attack ID ', - name: 'fortinet.firewall.attackid', - type: 'integer', + 'snyk.vulnerabilities.patches': { + category: 'snyk', + description: 'Patches required to resolve the issue created by Snyk. ', + name: 'snyk.vulnerabilities.patches', + type: 'flattened', }, - 'fortinet.firewall.auditid': { - category: 'fortinet', - description: 'Audit ID ', - name: 'fortinet.firewall.auditid', + 'snyk.vulnerabilities.priority_score': { + category: 'snyk', + description: 'The CVS priority score. ', + name: 'snyk.vulnerabilities.priority_score', type: 'long', }, - 'fortinet.firewall.auditscore': { - category: 'fortinet', - description: 'The Audit Score ', - name: 'fortinet.firewall.auditscore', + 'snyk.vulnerabilities.publication_time': { + category: 'snyk', + description: 'The vulnerability publication time. ', + name: 'snyk.vulnerabilities.publication_time', + type: 'date', + }, + 'snyk.vulnerabilities.jira_issue_url': { + category: 'snyk', + description: 'Link to the related Jira issue. ', + name: 'snyk.vulnerabilities.jira_issue_url', type: 'keyword', }, - 'fortinet.firewall.audittime': { - category: 'fortinet', - description: 'The time of the audit ', - name: 'fortinet.firewall.audittime', + 'snyk.vulnerabilities.original_severity': { + category: 'snyk', + description: 'The original severity of the vulnerability. ', + name: 'snyk.vulnerabilities.original_severity', type: 'long', }, - 'fortinet.firewall.authgrp': { - category: 'fortinet', - description: 'Authorization Group ', - name: 'fortinet.firewall.authgrp', + 'snyk.vulnerabilities.reachability': { + category: 'snyk', + description: + 'If the vulnerable function from the library is used in the code scanned. Can either be No Info, Potentially reachable and Reachable. ', + name: 'snyk.vulnerabilities.reachability', type: 'keyword', }, - 'fortinet.firewall.authid': { - category: 'fortinet', - description: 'Authentication ID ', - name: 'fortinet.firewall.authid', + 'snyk.vulnerabilities.title': { + category: 'snyk', + description: 'The issue title. ', + name: 'snyk.vulnerabilities.title', type: 'keyword', }, - 'fortinet.firewall.authproto': { - category: 'fortinet', - description: 'The protocol that initiated the authentication ', - name: 'fortinet.firewall.authproto', + 'snyk.vulnerabilities.type': { + category: 'snyk', + description: 'The issue type. Can be either "license" or "vulnerability". ', + name: 'snyk.vulnerabilities.type', type: 'keyword', }, - 'fortinet.firewall.authserver': { - category: 'fortinet', - description: 'Authentication server ', - name: 'fortinet.firewall.authserver', + 'snyk.vulnerabilities.unique_severities_list': { + category: 'snyk', + description: 'A list of related unique severities. ', + name: 'snyk.vulnerabilities.unique_severities_list', type: 'keyword', }, - 'fortinet.firewall.bandwidth': { - category: 'fortinet', - description: 'Bandwidth ', - name: 'fortinet.firewall.bandwidth', + 'snyk.vulnerabilities.version': { + category: 'snyk', + description: 'The package version this issue is applicable to. ', + name: 'snyk.vulnerabilities.version', type: 'keyword', }, - 'fortinet.firewall.banned_rule': { - category: 'fortinet', - description: 'NAC quarantine Banned Rule Name ', - name: 'fortinet.firewall.banned_rule', + 'snyk.vulnerabilities.introduced_date': { + category: 'snyk', + description: 'The date the vulnerability was initially found. ', + name: 'snyk.vulnerabilities.introduced_date', + type: 'date', + }, + 'snyk.vulnerabilities.is_fixed': { + category: 'snyk', + description: 'If the related vulnerability has been resolved. ', + name: 'snyk.vulnerabilities.is_fixed', + type: 'boolean', + }, + 'snyk.vulnerabilities.credit': { + category: 'snyk', + description: 'Reference to the person that original found the vulnerability. ', + name: 'snyk.vulnerabilities.credit', type: 'keyword', }, - 'fortinet.firewall.banned_src': { - category: 'fortinet', - description: 'NAC quarantine Banned Source IP ', - name: 'fortinet.firewall.banned_src', + 'snyk.vulnerabilities.semver': { + category: 'snyk', + description: + 'One or more semver ranges this issue is applicable to. The format varies according to package manager. ', + name: 'snyk.vulnerabilities.semver', + type: 'flattened', + }, + 'snyk.vulnerabilities.identifiers.alternative': { + category: 'snyk', + description: 'Additional vulnerability identifiers. ', + name: 'snyk.vulnerabilities.identifiers.alternative', type: 'keyword', }, - 'fortinet.firewall.banword': { - category: 'fortinet', - description: 'Banned word ', - name: 'fortinet.firewall.banword', + 'snyk.vulnerabilities.identifiers.cwe': { + category: 'snyk', + description: 'CWE vulnerability identifiers. ', + name: 'snyk.vulnerabilities.identifiers.cwe', type: 'keyword', }, - 'fortinet.firewall.botnetdomain': { - category: 'fortinet', - description: 'Botnet Domain Name ', - name: 'fortinet.firewall.botnetdomain', + 'sophos.xg.device': { + category: 'sophos', + description: 'device ', + name: 'sophos.xg.device', type: 'keyword', }, - 'fortinet.firewall.botnetip': { - category: 'fortinet', - description: 'Botnet IP Address ', - name: 'fortinet.firewall.botnetip', - type: 'ip', + 'sophos.xg.date': { + category: 'sophos', + description: 'Date (yyyy-mm-dd) when the event occurred ', + name: 'sophos.xg.date', + type: 'date', }, - 'fortinet.firewall.bssid': { - category: 'fortinet', - description: 'Service Set ID ', - name: 'fortinet.firewall.bssid', + 'sophos.xg.timezone': { + category: 'sophos', + description: 'Time (hh:mm:ss) when the event occurred ', + name: 'sophos.xg.timezone', type: 'keyword', }, - 'fortinet.firewall.call_id': { - category: 'fortinet', - description: 'Caller ID ', - name: 'fortinet.firewall.call_id', + 'sophos.xg.device_name': { + category: 'sophos', + description: 'Model number of the device ', + name: 'sophos.xg.device_name', type: 'keyword', }, - 'fortinet.firewall.carrier_ep': { - category: 'fortinet', - description: 'The FortiOS Carrier end-point identification ', - name: 'fortinet.firewall.carrier_ep', + 'sophos.xg.device_id': { + category: 'sophos', + description: 'Serial number of the device ', + name: 'sophos.xg.device_id', type: 'keyword', }, - 'fortinet.firewall.cat': { - category: 'fortinet', - description: 'DNS category ID ', - name: 'fortinet.firewall.cat', - type: 'integer', - }, - 'fortinet.firewall.category': { - category: 'fortinet', - description: 'Authentication category ', - name: 'fortinet.firewall.category', + 'sophos.xg.log_id': { + category: 'sophos', + description: 'Unique 12 characters code (0101011) ', + name: 'sophos.xg.log_id', type: 'keyword', }, - 'fortinet.firewall.cc': { - category: 'fortinet', - description: 'CC Email Address ', - name: 'fortinet.firewall.cc', + 'sophos.xg.log_type': { + category: 'sophos', + description: 'Type of event e.g. firewall event ', + name: 'sophos.xg.log_type', type: 'keyword', }, - 'fortinet.firewall.cdrcontent': { - category: 'fortinet', - description: 'Cdrcontent ', - name: 'fortinet.firewall.cdrcontent', + 'sophos.xg.log_component': { + category: 'sophos', + description: 'Component responsible for logging e.g. Firewall rule ', + name: 'sophos.xg.log_component', type: 'keyword', }, - 'fortinet.firewall.centralnatid': { - category: 'fortinet', - description: 'Central NAT ID ', - name: 'fortinet.firewall.centralnatid', - type: 'integer', - }, - 'fortinet.firewall.cert': { - category: 'fortinet', - description: 'Certificate ', - name: 'fortinet.firewall.cert', + 'sophos.xg.log_subtype': { + category: 'sophos', + description: 'Sub type of event ', + name: 'sophos.xg.log_subtype', type: 'keyword', }, - 'fortinet.firewall.cert-type': { - category: 'fortinet', - description: 'Certificate type ', - name: 'fortinet.firewall.cert-type', + 'sophos.xg.hb_health': { + category: 'sophos', + description: 'Heartbeat status ', + name: 'sophos.xg.hb_health', type: 'keyword', }, - 'fortinet.firewall.certhash': { - category: 'fortinet', - description: 'Certificate hash ', - name: 'fortinet.firewall.certhash', + 'sophos.xg.priority': { + category: 'sophos', + description: 'Severity level of traffic ', + name: 'sophos.xg.priority', type: 'keyword', }, - 'fortinet.firewall.cfgattr': { - category: 'fortinet', - description: 'Configuration attribute ', - name: 'fortinet.firewall.cfgattr', + 'sophos.xg.status': { + category: 'sophos', + description: 'Ultimate status of traffic – Allowed or Denied ', + name: 'sophos.xg.status', type: 'keyword', }, - 'fortinet.firewall.cfgobj': { - category: 'fortinet', - description: 'Configuration object ', - name: 'fortinet.firewall.cfgobj', - type: 'keyword', + 'sophos.xg.duration': { + category: 'sophos', + description: 'Durability of traffic (seconds) ', + name: 'sophos.xg.duration', + type: 'long', }, - 'fortinet.firewall.cfgpath': { - category: 'fortinet', - description: 'Configuration path ', - name: 'fortinet.firewall.cfgpath', + 'sophos.xg.fw_rule_id': { + category: 'sophos', + description: 'Firewall Rule ID which is applied on the traffic ', + name: 'sophos.xg.fw_rule_id', + type: 'integer', + }, + 'sophos.xg.user_name': { + category: 'sophos', + description: 'user_name ', + name: 'sophos.xg.user_name', type: 'keyword', }, - 'fortinet.firewall.cfgtid': { - category: 'fortinet', - description: 'Configuration transaction ID ', - name: 'fortinet.firewall.cfgtid', + 'sophos.xg.user_group': { + category: 'sophos', + description: 'Group name to which the user belongs ', + name: 'sophos.xg.user_group', type: 'keyword', }, - 'fortinet.firewall.cfgtxpower': { - category: 'fortinet', - description: 'Configuration TX power ', - name: 'fortinet.firewall.cfgtxpower', - type: 'integer', + 'sophos.xg.iap': { + category: 'sophos', + description: 'Internet Access policy ID applied on the traffic ', + name: 'sophos.xg.iap', + type: 'keyword', }, - 'fortinet.firewall.channel': { - category: 'fortinet', - description: 'Wireless Channel ', - name: 'fortinet.firewall.channel', + 'sophos.xg.ips_policy_id': { + category: 'sophos', + description: 'IPS policy ID applied on the traffic ', + name: 'sophos.xg.ips_policy_id', type: 'integer', }, - 'fortinet.firewall.channeltype': { - category: 'fortinet', - description: 'SSH channel type ', - name: 'fortinet.firewall.channeltype', + 'sophos.xg.policy_type': { + category: 'sophos', + description: 'Policy type applied to the traffic ', + name: 'sophos.xg.policy_type', type: 'keyword', }, - 'fortinet.firewall.chassisid': { - category: 'fortinet', - description: 'Chassis ID ', - name: 'fortinet.firewall.chassisid', + 'sophos.xg.appfilter_policy_id': { + category: 'sophos', + description: 'Application Filter policy applied on the traffic ', + name: 'sophos.xg.appfilter_policy_id', type: 'integer', }, - 'fortinet.firewall.checksum': { - category: 'fortinet', - description: 'The checksum of the scanned file ', - name: 'fortinet.firewall.checksum', - type: 'keyword', + 'sophos.xg.application_filter_policy': { + category: 'sophos', + description: 'Application Filter policy applied on the traffic ', + name: 'sophos.xg.application_filter_policy', + type: 'integer', }, - 'fortinet.firewall.chgheaders': { - category: 'fortinet', - description: 'HTTP Headers ', - name: 'fortinet.firewall.chgheaders', + 'sophos.xg.application': { + category: 'sophos', + description: 'Application name ', + name: 'sophos.xg.application', type: 'keyword', }, - 'fortinet.firewall.cldobjid': { - category: 'fortinet', - description: 'Connector object ID ', - name: 'fortinet.firewall.cldobjid', + 'sophos.xg.application_name': { + category: 'sophos', + description: 'Application name ', + name: 'sophos.xg.application_name', type: 'keyword', }, - 'fortinet.firewall.client_addr': { - category: 'fortinet', - description: 'Wifi client address ', - name: 'fortinet.firewall.client_addr', + 'sophos.xg.application_risk': { + category: 'sophos', + description: 'Risk level assigned to the application ', + name: 'sophos.xg.application_risk', type: 'keyword', }, - 'fortinet.firewall.cloudaction': { - category: 'fortinet', - description: 'Cloud Action ', - name: 'fortinet.firewall.cloudaction', + 'sophos.xg.application_technology': { + category: 'sophos', + description: 'Technology of the application ', + name: 'sophos.xg.application_technology', type: 'keyword', }, - 'fortinet.firewall.clouduser': { - category: 'fortinet', - description: 'Cloud User ', - name: 'fortinet.firewall.clouduser', + 'sophos.xg.application_category': { + category: 'sophos', + description: 'Application is resolved by signature or synchronized application ', + name: 'sophos.xg.application_category', type: 'keyword', }, - 'fortinet.firewall.column': { - category: 'fortinet', - description: 'VOIP Column ', - name: 'fortinet.firewall.column', - type: 'integer', + 'sophos.xg.appresolvedby': { + category: 'sophos', + description: 'Technology of the application ', + name: 'sophos.xg.appresolvedby', + type: 'keyword', }, - 'fortinet.firewall.command': { - category: 'fortinet', - description: 'CLI Command ', - name: 'fortinet.firewall.command', + 'sophos.xg.app_is_cloud': { + category: 'sophos', + description: 'Application is Cloud ', + name: 'sophos.xg.app_is_cloud', type: 'keyword', }, - 'fortinet.firewall.community': { - category: 'fortinet', - description: 'SNMP Community ', - name: 'fortinet.firewall.community', + 'sophos.xg.in_interface': { + category: 'sophos', + description: 'Interface for incoming traffic, e.g., Port A ', + name: 'sophos.xg.in_interface', type: 'keyword', }, - 'fortinet.firewall.configcountry': { - category: 'fortinet', - description: 'Configuration country ', - name: 'fortinet.firewall.configcountry', + 'sophos.xg.out_interface': { + category: 'sophos', + description: 'Interface for outgoing traffic, e.g., Port B ', + name: 'sophos.xg.out_interface', type: 'keyword', }, - 'fortinet.firewall.connection_type': { - category: 'fortinet', - description: 'FortiClient Connection Type ', - name: 'fortinet.firewall.connection_type', + 'sophos.xg.src_ip': { + category: 'sophos', + description: 'Original source IP address of traffic ', + name: 'sophos.xg.src_ip', + type: 'ip', + }, + 'sophos.xg.src_mac': { + category: 'sophos', + description: 'Original source MAC address of traffic ', + name: 'sophos.xg.src_mac', type: 'keyword', }, - 'fortinet.firewall.conserve': { - category: 'fortinet', - description: 'Flag for conserve mode ', - name: 'fortinet.firewall.conserve', + 'sophos.xg.src_country_code': { + category: 'sophos', + description: 'Code of the country to which the source IP belongs ', + name: 'sophos.xg.src_country_code', type: 'keyword', }, - 'fortinet.firewall.constraint': { - category: 'fortinet', - description: 'WAF http protocol restrictions ', - name: 'fortinet.firewall.constraint', + 'sophos.xg.dst_ip': { + category: 'sophos', + description: 'Original destination IP address of traffic ', + name: 'sophos.xg.dst_ip', + type: 'ip', + }, + 'sophos.xg.dst_country_code': { + category: 'sophos', + description: 'Code of the country to which the destination IP belongs ', + name: 'sophos.xg.dst_country_code', type: 'keyword', }, - 'fortinet.firewall.contentdisarmed': { - category: 'fortinet', - description: 'Email scanned content ', - name: 'fortinet.firewall.contentdisarmed', + 'sophos.xg.protocol': { + category: 'sophos', + description: 'Protocol number of traffic ', + name: 'sophos.xg.protocol', type: 'keyword', }, - 'fortinet.firewall.contenttype': { - category: 'fortinet', - description: 'Content Type from HTTP header ', - name: 'fortinet.firewall.contenttype', + 'sophos.xg.src_port': { + category: 'sophos', + description: 'Original source port of TCP and UDP traffic ', + name: 'sophos.xg.src_port', + type: 'integer', + }, + 'sophos.xg.dst_port': { + category: 'sophos', + description: 'Original destination port of TCP and UDP traffic ', + name: 'sophos.xg.dst_port', + type: 'integer', + }, + 'sophos.xg.icmp_type': { + category: 'sophos', + description: 'ICMP type of ICMP traffic ', + name: 'sophos.xg.icmp_type', type: 'keyword', }, - 'fortinet.firewall.cookies': { - category: 'fortinet', - description: 'VPN Cookie ', - name: 'fortinet.firewall.cookies', + 'sophos.xg.icmp_code': { + category: 'sophos', + description: 'ICMP code of ICMP traffic ', + name: 'sophos.xg.icmp_code', type: 'keyword', }, - 'fortinet.firewall.count': { - category: 'fortinet', - description: 'Counts of action type ', - name: 'fortinet.firewall.count', + 'sophos.xg.sent_pkts': { + category: 'sophos', + description: 'Total number of packets sent ', + name: 'sophos.xg.sent_pkts', + type: 'long', + }, + 'sophos.xg.received_pkts': { + category: 'sophos', + description: 'Total number of packets received ', + name: 'sophos.xg.received_pkts', + type: 'long', + }, + 'sophos.xg.sent_bytes': { + category: 'sophos', + description: 'Total number of bytes sent ', + name: 'sophos.xg.sent_bytes', + type: 'long', + }, + 'sophos.xg.recv_bytes': { + category: 'sophos', + description: 'Total number of bytes received ', + name: 'sophos.xg.recv_bytes', + type: 'long', + }, + 'sophos.xg.trans_src_ip': { + category: 'sophos', + description: 'Translated source IP address for outgoing traffic ', + name: 'sophos.xg.trans_src_ip', + type: 'ip', + }, + 'sophos.xg.trans_src_port': { + category: 'sophos', + description: 'Translated source port for outgoing traffic ', + name: 'sophos.xg.trans_src_port', type: 'integer', }, - 'fortinet.firewall.countapp': { - category: 'fortinet', - description: 'Number of App Ctrl logs associated with the session ', - name: 'fortinet.firewall.countapp', - type: 'integer', + 'sophos.xg.trans_dst_ip': { + category: 'sophos', + description: 'Translated destination IP address for outgoing traffic ', + name: 'sophos.xg.trans_dst_ip', + type: 'ip', }, - 'fortinet.firewall.countav': { - category: 'fortinet', - description: 'Number of AV logs associated with the session ', - name: 'fortinet.firewall.countav', + 'sophos.xg.trans_dst_port': { + category: 'sophos', + description: 'Translated destination port for outgoing traffic ', + name: 'sophos.xg.trans_dst_port', type: 'integer', }, - 'fortinet.firewall.countcifs': { - category: 'fortinet', - description: 'Number of CIFS logs associated with the session ', - name: 'fortinet.firewall.countcifs', - type: 'integer', + 'sophos.xg.srczonetype': { + category: 'sophos', + description: 'Type of source zone, e.g., LAN ', + name: 'sophos.xg.srczonetype', + type: 'keyword', }, - 'fortinet.firewall.countdlp': { - category: 'fortinet', - description: 'Number of DLP logs associated with the session ', - name: 'fortinet.firewall.countdlp', - type: 'integer', + 'sophos.xg.srczone': { + category: 'sophos', + description: 'Name of source zone ', + name: 'sophos.xg.srczone', + type: 'keyword', }, - 'fortinet.firewall.countdns': { - category: 'fortinet', - description: 'Number of DNS logs associated with the session ', - name: 'fortinet.firewall.countdns', - type: 'integer', + 'sophos.xg.dstzonetype': { + category: 'sophos', + description: 'Type of destination zone, e.g., WAN ', + name: 'sophos.xg.dstzonetype', + type: 'keyword', }, - 'fortinet.firewall.countemail': { - category: 'fortinet', - description: 'Number of email logs associated with the session ', - name: 'fortinet.firewall.countemail', - type: 'integer', + 'sophos.xg.dstzone': { + category: 'sophos', + description: 'Name of destination zone ', + name: 'sophos.xg.dstzone', + type: 'keyword', }, - 'fortinet.firewall.countff': { - category: 'fortinet', - description: 'Number of ff logs associated with the session ', - name: 'fortinet.firewall.countff', - type: 'integer', + 'sophos.xg.dir_disp': { + category: 'sophos', + description: 'TPacket direction. Possible values:“org”, “reply”, “” ', + name: 'sophos.xg.dir_disp', + type: 'keyword', }, - 'fortinet.firewall.countips': { - category: 'fortinet', - description: 'Number of IPS logs associated with the session ', - name: 'fortinet.firewall.countips', - type: 'integer', + 'sophos.xg.connevent': { + category: 'sophos', + description: 'Event on which this log is generated ', + name: 'sophos.xg.connevent', + type: 'keyword', }, - 'fortinet.firewall.countssh': { - category: 'fortinet', - description: 'Number of SSH logs associated with the session ', - name: 'fortinet.firewall.countssh', + 'sophos.xg.conn_id': { + category: 'sophos', + description: 'Unique identifier of connection ', + name: 'sophos.xg.conn_id', type: 'integer', }, - 'fortinet.firewall.countssl': { - category: 'fortinet', - description: 'Number of SSL logs associated with the session ', - name: 'fortinet.firewall.countssl', + 'sophos.xg.vconn_id': { + category: 'sophos', + description: 'Connection ID of the master connection ', + name: 'sophos.xg.vconn_id', type: 'integer', }, - 'fortinet.firewall.countwaf': { - category: 'fortinet', - description: 'Number of WAF logs associated with the session ', - name: 'fortinet.firewall.countwaf', + 'sophos.xg.idp_policy_id': { + category: 'sophos', + description: 'IPS policy ID which is applied on the traffic ', + name: 'sophos.xg.idp_policy_id', type: 'integer', }, - 'fortinet.firewall.countweb': { - category: 'fortinet', - description: 'Number of Web filter logs associated with the session ', - name: 'fortinet.firewall.countweb', - type: 'integer', + 'sophos.xg.idp_policy_name': { + category: 'sophos', + description: 'IPS policy name i.e. IPS policy name which is applied on the traffic ', + name: 'sophos.xg.idp_policy_name', + type: 'keyword', }, - 'fortinet.firewall.cpu': { - category: 'fortinet', - description: 'CPU Usage ', - name: 'fortinet.firewall.cpu', - type: 'integer', + 'sophos.xg.signature_id': { + category: 'sophos', + description: 'Signature ID ', + name: 'sophos.xg.signature_id', + type: 'keyword', }, - 'fortinet.firewall.craction': { - category: 'fortinet', - description: 'Client Reputation Action ', - name: 'fortinet.firewall.craction', - type: 'integer', + 'sophos.xg.signature_msg': { + category: 'sophos', + description: 'Signature messsage ', + name: 'sophos.xg.signature_msg', + type: 'keyword', }, - 'fortinet.firewall.criticalcount': { - category: 'fortinet', - description: 'Number of critical ratings ', - name: 'fortinet.firewall.criticalcount', - type: 'integer', + 'sophos.xg.classification': { + category: 'sophos', + description: 'Signature classification ', + name: 'sophos.xg.classification', + type: 'keyword', }, - 'fortinet.firewall.crl': { - category: 'fortinet', - description: 'Client Reputation Level ', - name: 'fortinet.firewall.crl', + 'sophos.xg.rule_priority': { + category: 'sophos', + description: 'Priority of IPS policy ', + name: 'sophos.xg.rule_priority', type: 'keyword', }, - 'fortinet.firewall.crlevel': { - category: 'fortinet', - description: 'Client Reputation Level ', - name: 'fortinet.firewall.crlevel', + 'sophos.xg.platform': { + category: 'sophos', + description: 'Platform of the traffic. ', + name: 'sophos.xg.platform', type: 'keyword', }, - 'fortinet.firewall.crscore': { - category: 'fortinet', - description: 'Some description ', - name: 'fortinet.firewall.crscore', - type: 'integer', + 'sophos.xg.category': { + category: 'sophos', + description: 'IPS signature category. ', + name: 'sophos.xg.category', + type: 'keyword', }, - 'fortinet.firewall.cveid': { - category: 'fortinet', - description: 'CVE ID ', - name: 'fortinet.firewall.cveid', + 'sophos.xg.target': { + category: 'sophos', + description: 'Platform of the traffic. ', + name: 'sophos.xg.target', type: 'keyword', }, - 'fortinet.firewall.daemon': { - category: 'fortinet', - description: 'Daemon name ', - name: 'fortinet.firewall.daemon', + 'sophos.xg.eventid': { + category: 'sophos', + description: 'ATP Evenet ID ', + name: 'sophos.xg.eventid', type: 'keyword', }, - 'fortinet.firewall.datarange': { - category: 'fortinet', - description: 'Data range for reports ', - name: 'fortinet.firewall.datarange', + 'sophos.xg.ep_uuid': { + category: 'sophos', + description: 'Endpoint UUID ', + name: 'sophos.xg.ep_uuid', type: 'keyword', }, - 'fortinet.firewall.date': { - category: 'fortinet', - description: 'Date ', - name: 'fortinet.firewall.date', + 'sophos.xg.threatname': { + category: 'sophos', + description: 'ATP threatname ', + name: 'sophos.xg.threatname', type: 'keyword', }, - 'fortinet.firewall.ddnsserver': { - category: 'fortinet', - description: 'DDNS server ', - name: 'fortinet.firewall.ddnsserver', + 'sophos.xg.sourceip': { + category: 'sophos', + description: 'Original source IP address of traffic ', + name: 'sophos.xg.sourceip', type: 'ip', }, - 'fortinet.firewall.desc': { - category: 'fortinet', - description: 'Description ', - name: 'fortinet.firewall.desc', - type: 'keyword', + 'sophos.xg.destinationip': { + category: 'sophos', + description: 'Original destination IP address of traffic ', + name: 'sophos.xg.destinationip', + type: 'ip', }, - 'fortinet.firewall.detectionmethod': { - category: 'fortinet', - description: 'Detection method ', - name: 'fortinet.firewall.detectionmethod', + 'sophos.xg.login_user': { + category: 'sophos', + description: 'ATP login user ', + name: 'sophos.xg.login_user', type: 'keyword', }, - 'fortinet.firewall.devcategory': { - category: 'fortinet', - description: 'Device category ', - name: 'fortinet.firewall.devcategory', + 'sophos.xg.eventtype': { + category: 'sophos', + description: 'ATP event type ', + name: 'sophos.xg.eventtype', type: 'keyword', }, - 'fortinet.firewall.devintfname': { - category: 'fortinet', - description: 'HA device Interface Name ', - name: 'fortinet.firewall.devintfname', + 'sophos.xg.execution_path': { + category: 'sophos', + description: 'ATP execution path ', + name: 'sophos.xg.execution_path', type: 'keyword', }, - 'fortinet.firewall.devtype': { - category: 'fortinet', - description: 'Device type ', - name: 'fortinet.firewall.devtype', + 'sophos.xg.av_policy_name': { + category: 'sophos', + description: 'Malware scanning policy name which is applied on the traffic ', + name: 'sophos.xg.av_policy_name', type: 'keyword', }, - 'fortinet.firewall.dhcp_msg': { - category: 'fortinet', - description: 'DHCP Message ', - name: 'fortinet.firewall.dhcp_msg', + 'sophos.xg.from_email_address': { + category: 'sophos', + description: 'Sender email address ', + name: 'sophos.xg.from_email_address', type: 'keyword', }, - 'fortinet.firewall.dintf': { - category: 'fortinet', - description: 'Destination interface ', - name: 'fortinet.firewall.dintf', + 'sophos.xg.to_email_address': { + category: 'sophos', + description: 'Receipeint email address ', + name: 'sophos.xg.to_email_address', type: 'keyword', }, - 'fortinet.firewall.disk': { - category: 'fortinet', - description: 'Assosciated disk ', - name: 'fortinet.firewall.disk', + 'sophos.xg.subject': { + category: 'sophos', + description: 'Email subject ', + name: 'sophos.xg.subject', type: 'keyword', }, - 'fortinet.firewall.disklograte': { - category: 'fortinet', - description: 'Disk logging rate ', - name: 'fortinet.firewall.disklograte', - type: 'long', + 'sophos.xg.mailsize': { + category: 'sophos', + description: 'mailsize ', + name: 'sophos.xg.mailsize', + type: 'integer', }, - 'fortinet.firewall.dlpextra': { - category: 'fortinet', - description: 'DLP extra information ', - name: 'fortinet.firewall.dlpextra', + 'sophos.xg.virus': { + category: 'sophos', + description: 'virus name ', + name: 'sophos.xg.virus', type: 'keyword', }, - 'fortinet.firewall.docsource': { - category: 'fortinet', - description: 'DLP fingerprint document source ', - name: 'fortinet.firewall.docsource', + 'sophos.xg.ftp_url': { + category: 'sophos', + description: 'FTP URL from which virus was downloaded ', + name: 'sophos.xg.ftp_url', type: 'keyword', }, - 'fortinet.firewall.domainctrlauthstate': { - category: 'fortinet', - description: 'CIFS domain auth state ', - name: 'fortinet.firewall.domainctrlauthstate', - type: 'integer', + 'sophos.xg.ftp_direction': { + category: 'sophos', + description: 'Direction of FTP transfer: Upload or Download ', + name: 'sophos.xg.ftp_direction', + type: 'keyword', }, - 'fortinet.firewall.domainctrlauthtype': { - category: 'fortinet', - description: 'CIFS domain auth type ', - name: 'fortinet.firewall.domainctrlauthtype', + 'sophos.xg.filesize': { + category: 'sophos', + description: 'Size of the file that contained virus ', + name: 'sophos.xg.filesize', type: 'integer', }, - 'fortinet.firewall.domainctrldomain': { - category: 'fortinet', - description: 'CIFS domain auth domain ', - name: 'fortinet.firewall.domainctrldomain', + 'sophos.xg.filepath': { + category: 'sophos', + description: 'Path of the file containing virus ', + name: 'sophos.xg.filepath', type: 'keyword', }, - 'fortinet.firewall.domainctrlip': { - category: 'fortinet', - description: 'CIFS Domain IP ', - name: 'fortinet.firewall.domainctrlip', - type: 'ip', + 'sophos.xg.filename': { + category: 'sophos', + description: 'File name associated with the event ', + name: 'sophos.xg.filename', + type: 'keyword', }, - 'fortinet.firewall.domainctrlname': { - category: 'fortinet', - description: 'CIFS Domain name ', - name: 'fortinet.firewall.domainctrlname', + 'sophos.xg.ftpcommand': { + category: 'sophos', + description: 'FTP command used when virus was found ', + name: 'sophos.xg.ftpcommand', type: 'keyword', }, - 'fortinet.firewall.domainctrlprotocoltype': { - category: 'fortinet', - description: 'CIFS Domain connection protocol ', - name: 'fortinet.firewall.domainctrlprotocoltype', - type: 'integer', + 'sophos.xg.url': { + category: 'sophos', + description: 'URL from which virus was downloaded ', + name: 'sophos.xg.url', + type: 'keyword', }, - 'fortinet.firewall.domainctrlusername': { - category: 'fortinet', - description: 'CIFS Domain username ', - name: 'fortinet.firewall.domainctrlusername', + 'sophos.xg.domainname': { + category: 'sophos', + description: 'Domain from which virus was downloaded ', + name: 'sophos.xg.domainname', type: 'keyword', }, - 'fortinet.firewall.domainfilteridx': { - category: 'fortinet', - description: 'Domain filter ID ', - name: 'fortinet.firewall.domainfilteridx', - type: 'integer', + 'sophos.xg.quarantine': { + category: 'sophos', + description: 'Path and filename of the file quarantined ', + name: 'sophos.xg.quarantine', + type: 'keyword', }, - 'fortinet.firewall.domainfilterlist': { - category: 'fortinet', - description: 'Domain filter name ', - name: 'fortinet.firewall.domainfilterlist', + 'sophos.xg.src_domainname': { + category: 'sophos', + description: 'Sender domain name ', + name: 'sophos.xg.src_domainname', type: 'keyword', }, - 'fortinet.firewall.ds': { - category: 'fortinet', - description: 'Direction with distribution system ', - name: 'fortinet.firewall.ds', + 'sophos.xg.dst_domainname': { + category: 'sophos', + description: 'Receiver domain name ', + name: 'sophos.xg.dst_domainname', type: 'keyword', }, - 'fortinet.firewall.dst_int': { - category: 'fortinet', - description: 'Destination interface ', - name: 'fortinet.firewall.dst_int', + 'sophos.xg.reason': { + category: 'sophos', + description: 'Reason why the record was detected as spam/malicious ', + name: 'sophos.xg.reason', type: 'keyword', }, - 'fortinet.firewall.dstintfrole': { - category: 'fortinet', - description: 'Destination interface role ', - name: 'fortinet.firewall.dstintfrole', + 'sophos.xg.referer': { + category: 'sophos', + description: 'Referer ', + name: 'sophos.xg.referer', type: 'keyword', }, - 'fortinet.firewall.dstcountry': { - category: 'fortinet', - description: 'Destination country ', - name: 'fortinet.firewall.dstcountry', + 'sophos.xg.spamaction': { + category: 'sophos', + description: 'Spam Action ', + name: 'sophos.xg.spamaction', type: 'keyword', }, - 'fortinet.firewall.dstdevcategory': { - category: 'fortinet', - description: 'Destination device category ', - name: 'fortinet.firewall.dstdevcategory', + 'sophos.xg.mailid': { + category: 'sophos', + description: 'mailid ', + name: 'sophos.xg.mailid', type: 'keyword', }, - 'fortinet.firewall.dstdevtype': { - category: 'fortinet', - description: 'Destination device type ', - name: 'fortinet.firewall.dstdevtype', + 'sophos.xg.quarantine_reason': { + category: 'sophos', + description: 'Quarantine reason ', + name: 'sophos.xg.quarantine_reason', type: 'keyword', }, - 'fortinet.firewall.dstfamily': { - category: 'fortinet', - description: 'Destination OS family ', - name: 'fortinet.firewall.dstfamily', + 'sophos.xg.status_code': { + category: 'sophos', + description: 'Status code ', + name: 'sophos.xg.status_code', type: 'keyword', }, - 'fortinet.firewall.dsthwvendor': { - category: 'fortinet', - description: 'Destination HW vendor ', - name: 'fortinet.firewall.dsthwvendor', + 'sophos.xg.override_token': { + category: 'sophos', + description: 'Override token ', + name: 'sophos.xg.override_token', type: 'keyword', }, - 'fortinet.firewall.dsthwversion': { - category: 'fortinet', - description: 'Destination HW version ', - name: 'fortinet.firewall.dsthwversion', + 'sophos.xg.con_id': { + category: 'sophos', + description: 'Unique identifier of connection ', + name: 'sophos.xg.con_id', + type: 'integer', + }, + 'sophos.xg.override_authorizer': { + category: 'sophos', + description: 'Override authorizer ', + name: 'sophos.xg.override_authorizer', type: 'keyword', }, - 'fortinet.firewall.dstinetsvc': { - category: 'fortinet', - description: 'Destination interface service ', - name: 'fortinet.firewall.dstinetsvc', + 'sophos.xg.transactionid': { + category: 'sophos', + description: 'Transaction ID of the AV scan. ', + name: 'sophos.xg.transactionid', type: 'keyword', }, - 'fortinet.firewall.dstosname': { - category: 'fortinet', - description: 'Destination OS name ', - name: 'fortinet.firewall.dstosname', + 'sophos.xg.upload_file_type': { + category: 'sophos', + description: 'Upload file type ', + name: 'sophos.xg.upload_file_type', type: 'keyword', }, - 'fortinet.firewall.dstosversion': { - category: 'fortinet', - description: 'Destination OS version ', - name: 'fortinet.firewall.dstosversion', + 'sophos.xg.upload_file_name': { + category: 'sophos', + description: 'Upload file name ', + name: 'sophos.xg.upload_file_name', + type: 'keyword', + }, + 'sophos.xg.httpresponsecode': { + category: 'sophos', + description: 'code of HTTP response ', + name: 'sophos.xg.httpresponsecode', + type: 'long', + }, + 'sophos.xg.user_gp': { + category: 'sophos', + description: 'Group name to which the user belongs. ', + name: 'sophos.xg.user_gp', + type: 'keyword', + }, + 'sophos.xg.category_type': { + category: 'sophos', + description: 'Type of category under which website falls ', + name: 'sophos.xg.category_type', + type: 'keyword', + }, + 'sophos.xg.download_file_type': { + category: 'sophos', + description: 'Download file type ', + name: 'sophos.xg.download_file_type', + type: 'keyword', + }, + 'sophos.xg.exceptions': { + category: 'sophos', + description: 'List of the checks excluded by web exceptions. ', + name: 'sophos.xg.exceptions', + type: 'keyword', + }, + 'sophos.xg.contenttype': { + category: 'sophos', + description: 'Type of the content ', + name: 'sophos.xg.contenttype', type: 'keyword', }, - 'fortinet.firewall.dstserver': { - category: 'fortinet', - description: 'Destination server ', - name: 'fortinet.firewall.dstserver', - type: 'integer', + 'sophos.xg.override_name': { + category: 'sophos', + description: 'Override name ', + name: 'sophos.xg.override_name', + type: 'keyword', }, - 'fortinet.firewall.dstssid': { - category: 'fortinet', - description: 'Destination SSID ', - name: 'fortinet.firewall.dstssid', + 'sophos.xg.activityname': { + category: 'sophos', + description: 'Web policy activity that matched and caused the policy result. ', + name: 'sophos.xg.activityname', type: 'keyword', }, - 'fortinet.firewall.dstswversion': { - category: 'fortinet', - description: 'Destination software version ', - name: 'fortinet.firewall.dstswversion', + 'sophos.xg.download_file_name': { + category: 'sophos', + description: 'Download file name ', + name: 'sophos.xg.download_file_name', type: 'keyword', }, - 'fortinet.firewall.dstunauthusersource': { - category: 'fortinet', - description: 'Destination unauthenticated source ', - name: 'fortinet.firewall.dstunauthusersource', + 'sophos.xg.sha1sum': { + category: 'sophos', + description: 'SHA1 checksum of the item being analyzed ', + name: 'sophos.xg.sha1sum', type: 'keyword', }, - 'fortinet.firewall.dstuuid': { - category: 'fortinet', - description: 'UUID of the Destination IP address ', - name: 'fortinet.firewall.dstuuid', + 'sophos.xg.message_id': { + category: 'sophos', + description: 'Message ID ', + name: 'sophos.xg.message_id', type: 'keyword', }, - 'fortinet.firewall.duid': { - category: 'fortinet', - description: 'DHCP UID ', - name: 'fortinet.firewall.duid', + 'sophos.xg.connid': { + category: 'sophos', + description: 'Connection ID ', + name: 'sophos.xg.connid', type: 'keyword', }, - 'fortinet.firewall.eapolcnt': { - category: 'fortinet', - description: 'EAPOL packet count ', - name: 'fortinet.firewall.eapolcnt', - type: 'integer', + 'sophos.xg.message': { + category: 'sophos', + description: 'Message ', + name: 'sophos.xg.message', + type: 'keyword', }, - 'fortinet.firewall.eapoltype': { - category: 'fortinet', - description: 'EAPOL packet type ', - name: 'fortinet.firewall.eapoltype', + 'sophos.xg.email_subject': { + category: 'sophos', + description: 'Email Subject ', + name: 'sophos.xg.email_subject', type: 'keyword', }, - 'fortinet.firewall.encrypt': { - category: 'fortinet', - description: 'Whether the packet is encrypted or not ', - name: 'fortinet.firewall.encrypt', - type: 'integer', + 'sophos.xg.file_path': { + category: 'sophos', + description: 'File path ', + name: 'sophos.xg.file_path', + type: 'keyword', }, - 'fortinet.firewall.encryption': { - category: 'fortinet', - description: 'Encryption method ', - name: 'fortinet.firewall.encryption', + 'sophos.xg.dstdomain': { + category: 'sophos', + description: 'Destination Domain ', + name: 'sophos.xg.dstdomain', type: 'keyword', }, - 'fortinet.firewall.epoch': { - category: 'fortinet', - description: 'Epoch used for locating file ', - name: 'fortinet.firewall.epoch', + 'sophos.xg.file_size': { + category: 'sophos', + description: 'File Size ', + name: 'sophos.xg.file_size', type: 'integer', }, - 'fortinet.firewall.espauth': { - category: 'fortinet', - description: 'ESP Authentication ', - name: 'fortinet.firewall.espauth', + 'sophos.xg.transaction_id': { + category: 'sophos', + description: 'Transaction ID ', + name: 'sophos.xg.transaction_id', type: 'keyword', }, - 'fortinet.firewall.esptransform': { - category: 'fortinet', - description: 'ESP Transform ', - name: 'fortinet.firewall.esptransform', + 'sophos.xg.website': { + category: 'sophos', + description: 'Website ', + name: 'sophos.xg.website', type: 'keyword', }, - 'fortinet.firewall.exch': { - category: 'fortinet', - description: 'Mail Exchanges from DNS response answer section ', - name: 'fortinet.firewall.exch', + 'sophos.xg.file_name': { + category: 'sophos', + description: 'Filename ', + name: 'sophos.xg.file_name', type: 'keyword', }, - 'fortinet.firewall.exchange': { - category: 'fortinet', - description: 'Mail Exchanges from DNS response answer section ', - name: 'fortinet.firewall.exchange', + 'sophos.xg.context_prefix': { + category: 'sophos', + description: 'Content Prefix ', + name: 'sophos.xg.context_prefix', type: 'keyword', }, - 'fortinet.firewall.expectedsignature': { - category: 'fortinet', - description: 'Expected SSL signature ', - name: 'fortinet.firewall.expectedsignature', + 'sophos.xg.site_category': { + category: 'sophos', + description: 'Site Category ', + name: 'sophos.xg.site_category', type: 'keyword', }, - 'fortinet.firewall.expiry': { - category: 'fortinet', - description: 'FortiGuard override expiry timestamp ', - name: 'fortinet.firewall.expiry', + 'sophos.xg.context_suffix': { + category: 'sophos', + description: 'Context Suffix ', + name: 'sophos.xg.context_suffix', type: 'keyword', }, - 'fortinet.firewall.fams_pause': { - category: 'fortinet', - description: 'Fortinet Analysis and Management Service Pause ', - name: 'fortinet.firewall.fams_pause', - type: 'integer', - }, - 'fortinet.firewall.fazlograte': { - category: 'fortinet', - description: 'FortiAnalyzer Logging Rate ', - name: 'fortinet.firewall.fazlograte', - type: 'long', - }, - 'fortinet.firewall.fctemssn': { - category: 'fortinet', - description: 'FortiClient Endpoint SSN ', - name: 'fortinet.firewall.fctemssn', + 'sophos.xg.dictionary_name': { + category: 'sophos', + description: 'Dictionary Name ', + name: 'sophos.xg.dictionary_name', type: 'keyword', }, - 'fortinet.firewall.fctuid': { - category: 'fortinet', - description: 'FortiClient UID ', - name: 'fortinet.firewall.fctuid', + 'sophos.xg.action': { + category: 'sophos', + description: 'Event Action ', + name: 'sophos.xg.action', type: 'keyword', }, - 'fortinet.firewall.field': { - category: 'fortinet', - description: 'NTP status field ', - name: 'fortinet.firewall.field', + 'sophos.xg.user': { + category: 'sophos', + description: 'User ', + name: 'sophos.xg.user', type: 'keyword', }, - 'fortinet.firewall.filefilter': { - category: 'fortinet', - description: 'The filter used to identify the affected file ', - name: 'fortinet.firewall.filefilter', + 'sophos.xg.context_match': { + category: 'sophos', + description: 'Context Match ', + name: 'sophos.xg.context_match', type: 'keyword', }, - 'fortinet.firewall.filehashsrc': { - category: 'fortinet', - description: 'Filehash source ', - name: 'fortinet.firewall.filehashsrc', + 'sophos.xg.direction': { + category: 'sophos', + description: 'Direction ', + name: 'sophos.xg.direction', type: 'keyword', }, - 'fortinet.firewall.filtercat': { - category: 'fortinet', - description: 'DLP filter category ', - name: 'fortinet.firewall.filtercat', + 'sophos.xg.auth_client': { + category: 'sophos', + description: 'Auth Client ', + name: 'sophos.xg.auth_client', type: 'keyword', }, - 'fortinet.firewall.filteridx': { - category: 'fortinet', - description: 'DLP filter ID ', - name: 'fortinet.firewall.filteridx', - type: 'integer', + 'sophos.xg.auth_mechanism': { + category: 'sophos', + description: 'Auth mechanism ', + name: 'sophos.xg.auth_mechanism', + type: 'keyword', }, - 'fortinet.firewall.filtername': { - category: 'fortinet', - description: 'DLP rule name ', - name: 'fortinet.firewall.filtername', + 'sophos.xg.connectionname': { + category: 'sophos', + description: 'Connectionname ', + name: 'sophos.xg.connectionname', type: 'keyword', }, - 'fortinet.firewall.filtertype': { - category: 'fortinet', - description: 'DLP filter type ', - name: 'fortinet.firewall.filtertype', + 'sophos.xg.remotenetwork': { + category: 'sophos', + description: 'remotenetwork ', + name: 'sophos.xg.remotenetwork', type: 'keyword', }, - 'fortinet.firewall.fortiguardresp': { - category: 'fortinet', - description: 'Antispam ESP value ', - name: 'fortinet.firewall.fortiguardresp', + 'sophos.xg.localgateway': { + category: 'sophos', + description: 'Localgateway ', + name: 'sophos.xg.localgateway', type: 'keyword', }, - 'fortinet.firewall.forwardedfor': { - category: 'fortinet', - description: 'Email address forwarded ', - name: 'fortinet.firewall.forwardedfor', + 'sophos.xg.localnetwork': { + category: 'sophos', + description: 'Localnetwork ', + name: 'sophos.xg.localnetwork', type: 'keyword', }, - 'fortinet.firewall.fqdn': { - category: 'fortinet', - description: 'FQDN ', - name: 'fortinet.firewall.fqdn', + 'sophos.xg.connectiontype': { + category: 'sophos', + description: 'Connectiontype ', + name: 'sophos.xg.connectiontype', type: 'keyword', }, - 'fortinet.firewall.frametype': { - category: 'fortinet', - description: 'Wireless frametype ', - name: 'fortinet.firewall.frametype', + 'sophos.xg.oldversion': { + category: 'sophos', + description: 'Oldversion ', + name: 'sophos.xg.oldversion', type: 'keyword', }, - 'fortinet.firewall.freediskstorage': { - category: 'fortinet', - description: 'Free disk integer ', - name: 'fortinet.firewall.freediskstorage', - type: 'integer', + 'sophos.xg.newversion': { + category: 'sophos', + description: 'Newversion ', + name: 'sophos.xg.newversion', + type: 'keyword', }, - 'fortinet.firewall.from': { - category: 'fortinet', - description: 'From email address ', - name: 'fortinet.firewall.from', + 'sophos.xg.ipaddress': { + category: 'sophos', + description: 'Ipaddress ', + name: 'sophos.xg.ipaddress', type: 'keyword', }, - 'fortinet.firewall.from_vcluster': { - category: 'fortinet', - description: 'Source virtual cluster number ', - name: 'fortinet.firewall.from_vcluster', - type: 'integer', + 'sophos.xg.client_physical_address': { + category: 'sophos', + description: 'Client physical address ', + name: 'sophos.xg.client_physical_address', + type: 'keyword', }, - 'fortinet.firewall.fsaverdict': { - category: 'fortinet', - description: 'FSA verdict ', - name: 'fortinet.firewall.fsaverdict', + 'sophos.xg.client_host_name': { + category: 'sophos', + description: 'Client host name ', + name: 'sophos.xg.client_host_name', type: 'keyword', }, - 'fortinet.firewall.fwserver_name': { - category: 'fortinet', - description: 'Web proxy server name ', - name: 'fortinet.firewall.fwserver_name', + 'sophos.xg.raw_data': { + category: 'sophos', + description: 'Raw data ', + name: 'sophos.xg.raw_data', type: 'keyword', }, - 'fortinet.firewall.gateway': { - category: 'fortinet', - description: 'Gateway ip address for PPPoE status report ', - name: 'fortinet.firewall.gateway', - type: 'ip', + 'sophos.xg.Mode': { + category: 'sophos', + description: 'Mode ', + name: 'sophos.xg.Mode', + type: 'keyword', }, - 'fortinet.firewall.green': { - category: 'fortinet', - description: 'Memory status ', - name: 'fortinet.firewall.green', + 'sophos.xg.sessionid': { + category: 'sophos', + description: 'Sessionid ', + name: 'sophos.xg.sessionid', type: 'keyword', }, - 'fortinet.firewall.groupid': { - category: 'fortinet', - description: 'User Group ID ', - name: 'fortinet.firewall.groupid', - type: 'integer', + 'sophos.xg.starttime': { + category: 'sophos', + description: 'Starttime ', + name: 'sophos.xg.starttime', + type: 'date', }, - 'fortinet.firewall.ha-prio': { - category: 'fortinet', - description: 'HA Priority ', - name: 'fortinet.firewall.ha-prio', - type: 'integer', + 'sophos.xg.remote_ip': { + category: 'sophos', + description: 'Remote IP ', + name: 'sophos.xg.remote_ip', + type: 'ip', }, - 'fortinet.firewall.ha_group': { - category: 'fortinet', - description: 'HA Group ', - name: 'fortinet.firewall.ha_group', - type: 'keyword', + 'sophos.xg.timestamp': { + category: 'sophos', + description: 'timestamp ', + name: 'sophos.xg.timestamp', + type: 'date', }, - 'fortinet.firewall.ha_role': { - category: 'fortinet', - description: 'HA Role ', - name: 'fortinet.firewall.ha_role', + 'sophos.xg.SysLog_SERVER_NAME': { + category: 'sophos', + description: 'SysLog SERVER NAME ', + name: 'sophos.xg.SysLog_SERVER_NAME', type: 'keyword', }, - 'fortinet.firewall.handshake': { - category: 'fortinet', - description: 'SSL Handshake ', - name: 'fortinet.firewall.handshake', + 'sophos.xg.backup_mode': { + category: 'sophos', + description: 'Backup mode ', + name: 'sophos.xg.backup_mode', type: 'keyword', }, - 'fortinet.firewall.hash': { - category: 'fortinet', - description: 'Hash value of downloaded file ', - name: 'fortinet.firewall.hash', + 'sophos.xg.source': { + category: 'sophos', + description: 'Source ', + name: 'sophos.xg.source', type: 'keyword', }, - 'fortinet.firewall.hbdn_reason': { - category: 'fortinet', - description: 'Heartbeat down reason ', - name: 'fortinet.firewall.hbdn_reason', + 'sophos.xg.server': { + category: 'sophos', + description: 'Server ', + name: 'sophos.xg.server', type: 'keyword', }, - 'fortinet.firewall.highcount': { - category: 'fortinet', - description: 'Highcount fabric summary ', - name: 'fortinet.firewall.highcount', - type: 'integer', - }, - 'fortinet.firewall.host': { - category: 'fortinet', - description: 'Hostname ', - name: 'fortinet.firewall.host', + 'sophos.xg.host': { + category: 'sophos', + description: 'Host ', + name: 'sophos.xg.host', type: 'keyword', }, - 'fortinet.firewall.iaid': { - category: 'fortinet', - description: 'DHCPv6 id ', - name: 'fortinet.firewall.iaid', - type: 'keyword', + 'sophos.xg.responsetime': { + category: 'sophos', + description: 'Responsetime ', + name: 'sophos.xg.responsetime', + type: 'long', }, - 'fortinet.firewall.icmpcode': { - category: 'fortinet', - description: 'Destination Port of the ICMP message ', - name: 'fortinet.firewall.icmpcode', + 'sophos.xg.cookie': { + category: 'sophos', + description: 'cookie ', + name: 'sophos.xg.cookie', type: 'keyword', }, - 'fortinet.firewall.icmpid': { - category: 'fortinet', - description: 'Source port of the ICMP message ', - name: 'fortinet.firewall.icmpid', + 'sophos.xg.querystring': { + category: 'sophos', + description: 'querystring ', + name: 'sophos.xg.querystring', type: 'keyword', }, - 'fortinet.firewall.icmptype': { - category: 'fortinet', - description: 'The type of ICMP message ', - name: 'fortinet.firewall.icmptype', + 'sophos.xg.extra': { + category: 'sophos', + description: 'extra ', + name: 'sophos.xg.extra', type: 'keyword', }, - 'fortinet.firewall.identifier': { - category: 'fortinet', - description: 'Network traffic identifier ', - name: 'fortinet.firewall.identifier', - type: 'integer', - }, - 'fortinet.firewall.in_spi': { - category: 'fortinet', - description: 'IPSEC inbound SPI ', - name: 'fortinet.firewall.in_spi', + 'sophos.xg.PHPSESSID': { + category: 'sophos', + description: 'PHPSESSID ', + name: 'sophos.xg.PHPSESSID', type: 'keyword', }, - 'fortinet.firewall.incidentserialno': { - category: 'fortinet', - description: 'Incident serial number ', - name: 'fortinet.firewall.incidentserialno', - type: 'integer', - }, - 'fortinet.firewall.infected': { - category: 'fortinet', - description: 'Infected MMS ', - name: 'fortinet.firewall.infected', - type: 'integer', + 'sophos.xg.start_time': { + category: 'sophos', + description: 'Start time ', + name: 'sophos.xg.start_time', + type: 'date', }, - 'fortinet.firewall.infectedfilelevel': { - category: 'fortinet', - description: 'DLP infected file level ', - name: 'fortinet.firewall.infectedfilelevel', - type: 'integer', + 'sophos.xg.eventtime': { + category: 'sophos', + description: 'Event time ', + name: 'sophos.xg.eventtime', + type: 'date', }, - 'fortinet.firewall.informationsource': { - category: 'fortinet', - description: 'Information source ', - name: 'fortinet.firewall.informationsource', + 'sophos.xg.red_id': { + category: 'sophos', + description: 'RED ID ', + name: 'sophos.xg.red_id', type: 'keyword', }, - 'fortinet.firewall.init': { - category: 'fortinet', - description: 'IPSEC init stage ', - name: 'fortinet.firewall.init', + 'sophos.xg.branch_name': { + category: 'sophos', + description: 'Branch Name ', + name: 'sophos.xg.branch_name', type: 'keyword', }, - 'fortinet.firewall.initiator': { - category: 'fortinet', - description: 'Original login user name for Fortiguard override ', - name: 'fortinet.firewall.initiator', - type: 'keyword', + 'sophos.xg.updatedip': { + category: 'sophos', + description: 'updatedip ', + name: 'sophos.xg.updatedip', + type: 'ip', + }, + 'sophos.xg.idle_cpu': { + category: 'sophos', + description: 'idle ## ', + name: 'sophos.xg.idle_cpu', + type: 'float', + }, + 'sophos.xg.system_cpu': { + category: 'sophos', + description: 'system ', + name: 'sophos.xg.system_cpu', + type: 'float', }, - 'fortinet.firewall.interface': { - category: 'fortinet', - description: 'Related interface ', - name: 'fortinet.firewall.interface', - type: 'keyword', + 'sophos.xg.user_cpu': { + category: 'sophos', + description: 'system ', + name: 'sophos.xg.user_cpu', + type: 'float', }, - 'fortinet.firewall.intf': { - category: 'fortinet', - description: 'Related interface ', - name: 'fortinet.firewall.intf', - type: 'keyword', + 'sophos.xg.used': { + category: 'sophos', + description: 'used ', + name: 'sophos.xg.used', + type: 'integer', }, - 'fortinet.firewall.invalidmac': { - category: 'fortinet', - description: 'The MAC address with invalid OUI ', - name: 'fortinet.firewall.invalidmac', + 'sophos.xg.unit': { + category: 'sophos', + description: 'unit ', + name: 'sophos.xg.unit', type: 'keyword', }, - 'fortinet.firewall.ip': { - category: 'fortinet', - description: 'Related IP ', - name: 'fortinet.firewall.ip', - type: 'ip', + 'sophos.xg.total_memory': { + category: 'sophos', + description: 'Total Memory ', + name: 'sophos.xg.total_memory', + type: 'integer', }, - 'fortinet.firewall.iptype': { - category: 'fortinet', - description: 'Related IP type ', - name: 'fortinet.firewall.iptype', - type: 'keyword', + 'sophos.xg.free': { + category: 'sophos', + description: 'free ', + name: 'sophos.xg.free', + type: 'integer', }, - 'fortinet.firewall.keyword': { - category: 'fortinet', - description: 'Keyword used for search ', - name: 'fortinet.firewall.keyword', + 'sophos.xg.transmittederrors': { + category: 'sophos', + description: 'transmitted errors ', + name: 'sophos.xg.transmittederrors', type: 'keyword', }, - 'fortinet.firewall.kind': { - category: 'fortinet', - description: 'VOIP kind ', - name: 'fortinet.firewall.kind', + 'sophos.xg.receivederrors': { + category: 'sophos', + description: 'received errors ', + name: 'sophos.xg.receivederrors', type: 'keyword', }, - 'fortinet.firewall.lanin': { - category: 'fortinet', - description: 'LAN incoming traffic in bytes ', - name: 'fortinet.firewall.lanin', + 'sophos.xg.receivedkbits': { + category: 'sophos', + description: 'received kbits ', + name: 'sophos.xg.receivedkbits', type: 'long', }, - 'fortinet.firewall.lanout': { - category: 'fortinet', - description: 'LAN outbound traffic in bytes ', - name: 'fortinet.firewall.lanout', + 'sophos.xg.transmittedkbits': { + category: 'sophos', + description: 'transmitted kbits ', + name: 'sophos.xg.transmittedkbits', type: 'long', }, - 'fortinet.firewall.lease': { - category: 'fortinet', - description: 'DHCP lease ', - name: 'fortinet.firewall.lease', - type: 'integer', + 'sophos.xg.transmitteddrops': { + category: 'sophos', + description: 'transmitted drops ', + name: 'sophos.xg.transmitteddrops', + type: 'long', }, - 'fortinet.firewall.license_limit': { - category: 'fortinet', - description: 'Maximum Number of FortiClients for the License ', - name: 'fortinet.firewall.license_limit', - type: 'keyword', + 'sophos.xg.receiveddrops': { + category: 'sophos', + description: 'received drops ', + name: 'sophos.xg.receiveddrops', + type: 'long', }, - 'fortinet.firewall.limit': { - category: 'fortinet', - description: 'Virtual Domain Resource Limit ', - name: 'fortinet.firewall.limit', - type: 'integer', + 'sophos.xg.collisions': { + category: 'sophos', + description: 'collisions ', + name: 'sophos.xg.collisions', + type: 'long', }, - 'fortinet.firewall.line': { - category: 'fortinet', - description: 'VOIP line ', - name: 'fortinet.firewall.line', + 'sophos.xg.interface': { + category: 'sophos', + description: 'interface ', + name: 'sophos.xg.interface', type: 'keyword', }, - 'fortinet.firewall.live': { - category: 'fortinet', - description: 'Time in seconds ', - name: 'fortinet.firewall.live', - type: 'integer', - }, - 'fortinet.firewall.local': { - category: 'fortinet', - description: 'Local IP for a PPPD Connection ', - name: 'fortinet.firewall.local', - type: 'ip', + 'sophos.xg.Configuration': { + category: 'sophos', + description: 'Configuration ', + name: 'sophos.xg.Configuration', + type: 'float', }, - 'fortinet.firewall.log': { - category: 'fortinet', - description: 'Log message ', - name: 'fortinet.firewall.log', - type: 'keyword', + 'sophos.xg.Reports': { + category: 'sophos', + description: 'Reports ', + name: 'sophos.xg.Reports', + type: 'float', }, - 'fortinet.firewall.login': { - category: 'fortinet', - description: 'SSH login ', - name: 'fortinet.firewall.login', - type: 'keyword', + 'sophos.xg.Signature': { + category: 'sophos', + description: 'Signature ', + name: 'sophos.xg.Signature', + type: 'float', }, - 'fortinet.firewall.lowcount': { - category: 'fortinet', - description: 'Fabric lowcount ', - name: 'fortinet.firewall.lowcount', - type: 'integer', + 'sophos.xg.Temp': { + category: 'sophos', + description: 'Temp ', + name: 'sophos.xg.Temp', + type: 'float', }, - 'fortinet.firewall.mac': { - category: 'fortinet', - description: 'DHCP mac address ', - name: 'fortinet.firewall.mac', + 'sophos.xg.users': { + category: 'sophos', + description: 'users ', + name: 'sophos.xg.users', type: 'keyword', }, - 'fortinet.firewall.malform_data': { - category: 'fortinet', - description: 'VOIP malformed data ', - name: 'fortinet.firewall.malform_data', - type: 'integer', - }, - 'fortinet.firewall.malform_desc': { - category: 'fortinet', - description: 'VOIP malformed data description ', - name: 'fortinet.firewall.malform_desc', + 'sophos.xg.ssid': { + category: 'sophos', + description: 'ssid ', + name: 'sophos.xg.ssid', type: 'keyword', }, - 'fortinet.firewall.manuf': { - category: 'fortinet', - description: 'Manufacturer name ', - name: 'fortinet.firewall.manuf', + 'sophos.xg.ap': { + category: 'sophos', + description: 'ap ', + name: 'sophos.xg.ap', type: 'keyword', }, - 'fortinet.firewall.masterdstmac': { - category: 'fortinet', - description: 'Master mac address for a host with multiple network interfaces ', - name: 'fortinet.firewall.masterdstmac', + 'sophos.xg.clients_conn_ssid': { + category: 'sophos', + description: 'clients connection ssid ', + name: 'sophos.xg.clients_conn_ssid', type: 'keyword', }, - 'fortinet.firewall.mastersrcmac': { - category: 'fortinet', - description: 'The master MAC address for a host that has multiple network interfaces ', - name: 'fortinet.firewall.mastersrcmac', + 'sophos.xg.sqli': { + category: 'sophos', + description: 'The related SQLI caught by the WAF ', + name: 'sophos.xg.sqli', type: 'keyword', }, - 'fortinet.firewall.mediumcount': { - category: 'fortinet', - description: 'Fabric medium count ', - name: 'fortinet.firewall.mediumcount', - type: 'integer', + 'sophos.xg.xss': { + category: 'sophos', + description: 'The related XSS caught by the WAF ', + name: 'sophos.xg.xss', + type: 'keyword', }, - 'fortinet.firewall.mem': { - category: 'fortinet', - description: 'Memory usage system statistics ', - name: 'fortinet.firewall.mem', + 'sophos.xg.ether_type': { + category: 'sophos', + description: 'The ethernet frame type ', + name: 'sophos.xg.ether_type', type: 'keyword', }, - 'fortinet.firewall.meshmode': { - category: 'fortinet', - description: 'Wireless mesh mode ', - name: 'fortinet.firewall.meshmode', + 'suricata.eve.event_type': { + category: 'suricata', + name: 'suricata.eve.event_type', type: 'keyword', }, - 'fortinet.firewall.message_type': { - category: 'fortinet', - description: 'VOIP message type ', - name: 'fortinet.firewall.message_type', + 'suricata.eve.app_proto_orig': { + category: 'suricata', + name: 'suricata.eve.app_proto_orig', type: 'keyword', }, - 'fortinet.firewall.method': { - category: 'fortinet', - description: 'HTTP method ', - name: 'fortinet.firewall.method', + 'suricata.eve.tcp.tcp_flags': { + category: 'suricata', + name: 'suricata.eve.tcp.tcp_flags', type: 'keyword', }, - 'fortinet.firewall.mgmtcnt': { - category: 'fortinet', - description: 'The number of unauthorized client flooding managemet frames ', - name: 'fortinet.firewall.mgmtcnt', - type: 'integer', + 'suricata.eve.tcp.psh': { + category: 'suricata', + name: 'suricata.eve.tcp.psh', + type: 'boolean', }, - 'fortinet.firewall.mode': { - category: 'fortinet', - description: 'IPSEC mode ', - name: 'fortinet.firewall.mode', + 'suricata.eve.tcp.tcp_flags_tc': { + category: 'suricata', + name: 'suricata.eve.tcp.tcp_flags_tc', type: 'keyword', }, - 'fortinet.firewall.module': { - category: 'fortinet', - description: 'PCI-DSS module ', - name: 'fortinet.firewall.module', - type: 'keyword', + 'suricata.eve.tcp.ack': { + category: 'suricata', + name: 'suricata.eve.tcp.ack', + type: 'boolean', }, - 'fortinet.firewall.monitor-name': { - category: 'fortinet', - description: 'Health Monitor Name ', - name: 'fortinet.firewall.monitor-name', - type: 'keyword', + 'suricata.eve.tcp.syn': { + category: 'suricata', + name: 'suricata.eve.tcp.syn', + type: 'boolean', }, - 'fortinet.firewall.monitor-type': { - category: 'fortinet', - description: 'Health Monitor Type ', - name: 'fortinet.firewall.monitor-type', + 'suricata.eve.tcp.state': { + category: 'suricata', + name: 'suricata.eve.tcp.state', type: 'keyword', }, - 'fortinet.firewall.mpsk': { - category: 'fortinet', - description: 'Wireless MPSK ', - name: 'fortinet.firewall.mpsk', + 'suricata.eve.tcp.tcp_flags_ts': { + category: 'suricata', + name: 'suricata.eve.tcp.tcp_flags_ts', type: 'keyword', }, - 'fortinet.firewall.msgproto': { - category: 'fortinet', - description: 'Message Protocol Number ', - name: 'fortinet.firewall.msgproto', + 'suricata.eve.tcp.rst': { + category: 'suricata', + name: 'suricata.eve.tcp.rst', + type: 'boolean', + }, + 'suricata.eve.tcp.fin': { + category: 'suricata', + name: 'suricata.eve.tcp.fin', + type: 'boolean', + }, + 'suricata.eve.fileinfo.sha1': { + category: 'suricata', + name: 'suricata.eve.fileinfo.sha1', type: 'keyword', }, - 'fortinet.firewall.mtu': { - category: 'fortinet', - description: 'Max Transmission Unit Value ', - name: 'fortinet.firewall.mtu', - type: 'integer', + 'suricata.eve.fileinfo.tx_id': { + category: 'suricata', + name: 'suricata.eve.fileinfo.tx_id', + type: 'long', }, - 'fortinet.firewall.name': { - category: 'fortinet', - description: 'Name ', - name: 'fortinet.firewall.name', + 'suricata.eve.fileinfo.state': { + category: 'suricata', + name: 'suricata.eve.fileinfo.state', type: 'keyword', }, - 'fortinet.firewall.nat': { - category: 'fortinet', - description: 'NAT IP Address ', - name: 'fortinet.firewall.nat', + 'suricata.eve.fileinfo.stored': { + category: 'suricata', + name: 'suricata.eve.fileinfo.stored', + type: 'boolean', + }, + 'suricata.eve.fileinfo.gaps': { + category: 'suricata', + name: 'suricata.eve.fileinfo.gaps', + type: 'boolean', + }, + 'suricata.eve.fileinfo.sha256': { + category: 'suricata', + name: 'suricata.eve.fileinfo.sha256', type: 'keyword', }, - 'fortinet.firewall.netid': { - category: 'fortinet', - description: 'Connector NetID ', - name: 'fortinet.firewall.netid', + 'suricata.eve.fileinfo.md5': { + category: 'suricata', + name: 'suricata.eve.fileinfo.md5', type: 'keyword', }, - 'fortinet.firewall.new_status': { - category: 'fortinet', - description: 'New status on user change ', - name: 'fortinet.firewall.new_status', + 'suricata.eve.icmp_type': { + category: 'suricata', + name: 'suricata.eve.icmp_type', + type: 'long', + }, + 'suricata.eve.pcap_cnt': { + category: 'suricata', + name: 'suricata.eve.pcap_cnt', + type: 'long', + }, + 'suricata.eve.dns.type': { + category: 'suricata', + name: 'suricata.eve.dns.type', type: 'keyword', }, - 'fortinet.firewall.new_value': { - category: 'fortinet', - description: 'New Virtual Domain Name ', - name: 'fortinet.firewall.new_value', + 'suricata.eve.dns.rrtype': { + category: 'suricata', + name: 'suricata.eve.dns.rrtype', type: 'keyword', }, - 'fortinet.firewall.newchannel': { - category: 'fortinet', - description: 'New Channel Number ', - name: 'fortinet.firewall.newchannel', - type: 'integer', + 'suricata.eve.dns.rrname': { + category: 'suricata', + name: 'suricata.eve.dns.rrname', + type: 'keyword', }, - 'fortinet.firewall.newchassisid': { - category: 'fortinet', - description: 'New Chassis ID ', - name: 'fortinet.firewall.newchassisid', - type: 'integer', + 'suricata.eve.dns.rdata': { + category: 'suricata', + name: 'suricata.eve.dns.rdata', + type: 'keyword', }, - 'fortinet.firewall.newslot': { - category: 'fortinet', - description: 'New Slot Number ', - name: 'fortinet.firewall.newslot', - type: 'integer', + 'suricata.eve.dns.tx_id': { + category: 'suricata', + name: 'suricata.eve.dns.tx_id', + type: 'long', }, - 'fortinet.firewall.nextstat': { - category: 'fortinet', - description: 'Time interval in seconds for the next statistics. ', - name: 'fortinet.firewall.nextstat', - type: 'integer', + 'suricata.eve.dns.ttl': { + category: 'suricata', + name: 'suricata.eve.dns.ttl', + type: 'long', }, - 'fortinet.firewall.nf_type': { - category: 'fortinet', - description: 'Notification Type ', - name: 'fortinet.firewall.nf_type', + 'suricata.eve.dns.rcode': { + category: 'suricata', + name: 'suricata.eve.dns.rcode', type: 'keyword', }, - 'fortinet.firewall.noise': { - category: 'fortinet', - description: 'Wifi Noise ', - name: 'fortinet.firewall.noise', - type: 'integer', + 'suricata.eve.dns.id': { + category: 'suricata', + name: 'suricata.eve.dns.id', + type: 'long', }, - 'fortinet.firewall.old_status': { - category: 'fortinet', - description: 'Original Status ', - name: 'fortinet.firewall.old_status', + 'suricata.eve.flow_id': { + category: 'suricata', + name: 'suricata.eve.flow_id', type: 'keyword', }, - 'fortinet.firewall.old_value': { - category: 'fortinet', - description: 'Original Virtual Domain name ', - name: 'fortinet.firewall.old_value', + 'suricata.eve.email.status': { + category: 'suricata', + name: 'suricata.eve.email.status', type: 'keyword', }, - 'fortinet.firewall.oldchannel': { - category: 'fortinet', - description: 'Original channel ', - name: 'fortinet.firewall.oldchannel', - type: 'integer', + 'suricata.eve.icmp_code': { + category: 'suricata', + name: 'suricata.eve.icmp_code', + type: 'long', }, - 'fortinet.firewall.oldchassisid': { - category: 'fortinet', - description: 'Original Chassis Number ', - name: 'fortinet.firewall.oldchassisid', - type: 'integer', + 'suricata.eve.http.redirect': { + category: 'suricata', + name: 'suricata.eve.http.redirect', + type: 'keyword', }, - 'fortinet.firewall.oldslot': { - category: 'fortinet', - description: 'Original Slot Number ', - name: 'fortinet.firewall.oldslot', - type: 'integer', + 'suricata.eve.http.protocol': { + category: 'suricata', + name: 'suricata.eve.http.protocol', + type: 'keyword', }, - 'fortinet.firewall.oldsn': { - category: 'fortinet', - description: 'Old Serial number ', - name: 'fortinet.firewall.oldsn', + 'suricata.eve.http.http_content_type': { + category: 'suricata', + name: 'suricata.eve.http.http_content_type', type: 'keyword', }, - 'fortinet.firewall.oldwprof': { - category: 'fortinet', - description: 'Old Web Filter Profile ', - name: 'fortinet.firewall.oldwprof', + 'suricata.eve.in_iface': { + category: 'suricata', + name: 'suricata.eve.in_iface', type: 'keyword', }, - 'fortinet.firewall.onwire': { - category: 'fortinet', - description: 'A flag to indicate if the AP is onwire or not ', - name: 'fortinet.firewall.onwire', + 'suricata.eve.alert.metadata': { + category: 'suricata', + description: 'Metadata about the alert.', + name: 'suricata.eve.alert.metadata', + type: 'flattened', + }, + 'suricata.eve.alert.category': { + category: 'suricata', + name: 'suricata.eve.alert.category', type: 'keyword', }, - 'fortinet.firewall.opercountry': { - category: 'fortinet', - description: 'Operating Country ', - name: 'fortinet.firewall.opercountry', + 'suricata.eve.alert.rev': { + category: 'suricata', + name: 'suricata.eve.alert.rev', + type: 'long', + }, + 'suricata.eve.alert.gid': { + category: 'suricata', + name: 'suricata.eve.alert.gid', + type: 'long', + }, + 'suricata.eve.alert.signature': { + category: 'suricata', + name: 'suricata.eve.alert.signature', type: 'keyword', }, - 'fortinet.firewall.opertxpower': { - category: 'fortinet', - description: 'Operating TX power ', - name: 'fortinet.firewall.opertxpower', - type: 'integer', + 'suricata.eve.alert.signature_id': { + category: 'suricata', + name: 'suricata.eve.alert.signature_id', + type: 'long', }, - 'fortinet.firewall.osname': { - category: 'fortinet', - description: 'Operating System name ', - name: 'fortinet.firewall.osname', + 'suricata.eve.alert.protocols': { + category: 'suricata', + name: 'suricata.eve.alert.protocols', type: 'keyword', }, - 'fortinet.firewall.osversion': { - category: 'fortinet', - description: 'Operating System version ', - name: 'fortinet.firewall.osversion', + 'suricata.eve.alert.attack_target': { + category: 'suricata', + name: 'suricata.eve.alert.attack_target', type: 'keyword', }, - 'fortinet.firewall.out_spi': { - category: 'fortinet', - description: 'Out SPI ', - name: 'fortinet.firewall.out_spi', + 'suricata.eve.alert.capec_id': { + category: 'suricata', + name: 'suricata.eve.alert.capec_id', type: 'keyword', }, - 'fortinet.firewall.outintf': { - category: 'fortinet', - description: 'Out interface ', - name: 'fortinet.firewall.outintf', + 'suricata.eve.alert.cwe_id': { + category: 'suricata', + name: 'suricata.eve.alert.cwe_id', type: 'keyword', }, - 'fortinet.firewall.passedcount': { - category: 'fortinet', - description: 'Fabric passed count ', - name: 'fortinet.firewall.passedcount', - type: 'integer', + 'suricata.eve.alert.malware': { + category: 'suricata', + name: 'suricata.eve.alert.malware', + type: 'keyword', }, - 'fortinet.firewall.passwd': { - category: 'fortinet', - description: 'Changed user password information ', - name: 'fortinet.firewall.passwd', + 'suricata.eve.alert.cve': { + category: 'suricata', + name: 'suricata.eve.alert.cve', type: 'keyword', }, - 'fortinet.firewall.path': { - category: 'fortinet', - description: 'Path of looped configuration for security fabric ', - name: 'fortinet.firewall.path', + 'suricata.eve.alert.cvss_v2_base': { + category: 'suricata', + name: 'suricata.eve.alert.cvss_v2_base', type: 'keyword', }, - 'fortinet.firewall.peer': { - category: 'fortinet', - description: 'WAN optimization peer ', - name: 'fortinet.firewall.peer', + 'suricata.eve.alert.cvss_v2_temporal': { + category: 'suricata', + name: 'suricata.eve.alert.cvss_v2_temporal', type: 'keyword', }, - 'fortinet.firewall.peer_notif': { - category: 'fortinet', - description: 'VPN peer notification ', - name: 'fortinet.firewall.peer_notif', + 'suricata.eve.alert.cvss_v3_base': { + category: 'suricata', + name: 'suricata.eve.alert.cvss_v3_base', type: 'keyword', }, - 'fortinet.firewall.phase2_name': { - category: 'fortinet', - description: 'VPN phase2 name ', - name: 'fortinet.firewall.phase2_name', + 'suricata.eve.alert.cvss_v3_temporal': { + category: 'suricata', + name: 'suricata.eve.alert.cvss_v3_temporal', type: 'keyword', }, - 'fortinet.firewall.phone': { - category: 'fortinet', - description: 'VOIP Phone ', - name: 'fortinet.firewall.phone', + 'suricata.eve.alert.priority': { + category: 'suricata', + name: 'suricata.eve.alert.priority', type: 'keyword', }, - 'fortinet.firewall.pid': { - category: 'fortinet', - description: 'Process ID ', - name: 'fortinet.firewall.pid', - type: 'integer', + 'suricata.eve.alert.hostile': { + category: 'suricata', + name: 'suricata.eve.alert.hostile', + type: 'keyword', }, - 'fortinet.firewall.policytype': { - category: 'fortinet', - description: 'Policy Type ', - name: 'fortinet.firewall.policytype', + 'suricata.eve.alert.infected': { + category: 'suricata', + name: 'suricata.eve.alert.infected', type: 'keyword', }, - 'fortinet.firewall.poolname': { - category: 'fortinet', - description: 'IP Pool name ', - name: 'fortinet.firewall.poolname', + 'suricata.eve.alert.created_at': { + category: 'suricata', + name: 'suricata.eve.alert.created_at', + type: 'date', + }, + 'suricata.eve.alert.updated_at': { + category: 'suricata', + name: 'suricata.eve.alert.updated_at', + type: 'date', + }, + 'suricata.eve.alert.classtype': { + category: 'suricata', + name: 'suricata.eve.alert.classtype', type: 'keyword', }, - 'fortinet.firewall.port': { - category: 'fortinet', - description: 'Log upload error port ', - name: 'fortinet.firewall.port', - type: 'integer', + 'suricata.eve.alert.rule_source': { + category: 'suricata', + name: 'suricata.eve.alert.rule_source', + type: 'keyword', }, - 'fortinet.firewall.portbegin': { - category: 'fortinet', - description: 'IP Pool port number to begin ', - name: 'fortinet.firewall.portbegin', - type: 'integer', + 'suricata.eve.alert.sid': { + category: 'suricata', + name: 'suricata.eve.alert.sid', + type: 'keyword', }, - 'fortinet.firewall.portend': { - category: 'fortinet', - description: 'IP Pool port number to end ', - name: 'fortinet.firewall.portend', - type: 'integer', + 'suricata.eve.alert.affected_product': { + category: 'suricata', + name: 'suricata.eve.alert.affected_product', + type: 'keyword', }, - 'fortinet.firewall.probeproto': { - category: 'fortinet', - description: 'Link Monitor Probe Protocol ', - name: 'fortinet.firewall.probeproto', + 'suricata.eve.alert.deployment': { + category: 'suricata', + name: 'suricata.eve.alert.deployment', type: 'keyword', }, - 'fortinet.firewall.process': { - category: 'fortinet', - description: 'URL Filter process ', - name: 'fortinet.firewall.process', + 'suricata.eve.alert.former_category': { + category: 'suricata', + name: 'suricata.eve.alert.former_category', type: 'keyword', }, - 'fortinet.firewall.processtime': { - category: 'fortinet', - description: 'Process time for reports ', - name: 'fortinet.firewall.processtime', - type: 'integer', + 'suricata.eve.alert.mitre_tool_id': { + category: 'suricata', + name: 'suricata.eve.alert.mitre_tool_id', + type: 'keyword', }, - 'fortinet.firewall.profile': { - category: 'fortinet', - description: 'Profile Name ', - name: 'fortinet.firewall.profile', + 'suricata.eve.alert.performance_impact': { + category: 'suricata', + name: 'suricata.eve.alert.performance_impact', type: 'keyword', }, - 'fortinet.firewall.profile_vd': { - category: 'fortinet', - description: 'Virtual Domain Name ', - name: 'fortinet.firewall.profile_vd', + 'suricata.eve.alert.signature_severity': { + category: 'suricata', + name: 'suricata.eve.alert.signature_severity', type: 'keyword', }, - 'fortinet.firewall.profilegroup': { - category: 'fortinet', - description: 'Profile Group Name ', - name: 'fortinet.firewall.profilegroup', + 'suricata.eve.alert.tag': { + category: 'suricata', + name: 'suricata.eve.alert.tag', type: 'keyword', }, - 'fortinet.firewall.profiletype': { - category: 'fortinet', - description: 'Profile Type ', - name: 'fortinet.firewall.profiletype', + 'suricata.eve.ssh.client.proto_version': { + category: 'suricata', + name: 'suricata.eve.ssh.client.proto_version', type: 'keyword', }, - 'fortinet.firewall.qtypeval': { - category: 'fortinet', - description: 'DNS question type value ', - name: 'fortinet.firewall.qtypeval', - type: 'integer', + 'suricata.eve.ssh.client.software_version': { + category: 'suricata', + name: 'suricata.eve.ssh.client.software_version', + type: 'keyword', }, - 'fortinet.firewall.quarskip': { - category: 'fortinet', - description: 'Quarantine skip explanation ', - name: 'fortinet.firewall.quarskip', + 'suricata.eve.ssh.server.proto_version': { + category: 'suricata', + name: 'suricata.eve.ssh.server.proto_version', type: 'keyword', }, - 'fortinet.firewall.quotaexceeded': { - category: 'fortinet', - description: 'If quota has been exceeded ', - name: 'fortinet.firewall.quotaexceeded', + 'suricata.eve.ssh.server.software_version': { + category: 'suricata', + name: 'suricata.eve.ssh.server.software_version', type: 'keyword', }, - 'fortinet.firewall.quotamax': { - category: 'fortinet', - description: 'Maximum quota allowed - in seconds if time-based - in bytes if traffic-based ', - name: 'fortinet.firewall.quotamax', + 'suricata.eve.stats.capture.kernel_packets': { + category: 'suricata', + name: 'suricata.eve.stats.capture.kernel_packets', type: 'long', }, - 'fortinet.firewall.quotatype': { - category: 'fortinet', - description: 'Quota type ', - name: 'fortinet.firewall.quotatype', - type: 'keyword', + 'suricata.eve.stats.capture.kernel_drops': { + category: 'suricata', + name: 'suricata.eve.stats.capture.kernel_drops', + type: 'long', }, - 'fortinet.firewall.quotaused': { - category: 'fortinet', - description: 'Quota used - in seconds if time-based - in bytes if trafficbased) ', - name: 'fortinet.firewall.quotaused', + 'suricata.eve.stats.capture.kernel_ifdrops': { + category: 'suricata', + name: 'suricata.eve.stats.capture.kernel_ifdrops', type: 'long', }, - 'fortinet.firewall.radioband': { - category: 'fortinet', - description: 'Radio band ', - name: 'fortinet.firewall.radioband', - type: 'keyword', + 'suricata.eve.stats.uptime': { + category: 'suricata', + name: 'suricata.eve.stats.uptime', + type: 'long', }, - 'fortinet.firewall.radioid': { - category: 'fortinet', - description: 'Radio ID ', - name: 'fortinet.firewall.radioid', - type: 'integer', + 'suricata.eve.stats.detect.alert': { + category: 'suricata', + name: 'suricata.eve.stats.detect.alert', + type: 'long', }, - 'fortinet.firewall.radioidclosest': { - category: 'fortinet', - description: 'Radio ID on the AP closest the rogue AP ', - name: 'fortinet.firewall.radioidclosest', - type: 'integer', + 'suricata.eve.stats.http.memcap': { + category: 'suricata', + name: 'suricata.eve.stats.http.memcap', + type: 'long', }, - 'fortinet.firewall.radioiddetected': { - category: 'fortinet', - description: 'Radio ID on the AP which detected the rogue AP ', - name: 'fortinet.firewall.radioiddetected', - type: 'integer', + 'suricata.eve.stats.http.memuse': { + category: 'suricata', + name: 'suricata.eve.stats.http.memuse', + type: 'long', }, - 'fortinet.firewall.rate': { - category: 'fortinet', - description: 'Wireless rogue rate value ', - name: 'fortinet.firewall.rate', - type: 'keyword', + 'suricata.eve.stats.file_store.open_files': { + category: 'suricata', + name: 'suricata.eve.stats.file_store.open_files', + type: 'long', }, - 'fortinet.firewall.rawdata': { - category: 'fortinet', - description: 'Raw data value ', - name: 'fortinet.firewall.rawdata', - type: 'keyword', + 'suricata.eve.stats.defrag.max_frag_hits': { + category: 'suricata', + name: 'suricata.eve.stats.defrag.max_frag_hits', + type: 'long', }, - 'fortinet.firewall.rawdataid': { - category: 'fortinet', - description: 'Raw data ID ', - name: 'fortinet.firewall.rawdataid', - type: 'keyword', + 'suricata.eve.stats.defrag.ipv4.timeouts': { + category: 'suricata', + name: 'suricata.eve.stats.defrag.ipv4.timeouts', + type: 'long', }, - 'fortinet.firewall.rcvddelta': { - category: 'fortinet', - description: 'Received bytes delta ', - name: 'fortinet.firewall.rcvddelta', - type: 'keyword', + 'suricata.eve.stats.defrag.ipv4.fragments': { + category: 'suricata', + name: 'suricata.eve.stats.defrag.ipv4.fragments', + type: 'long', }, - 'fortinet.firewall.reason': { - category: 'fortinet', - description: 'Alert reason ', - name: 'fortinet.firewall.reason', - type: 'keyword', + 'suricata.eve.stats.defrag.ipv4.reassembled': { + category: 'suricata', + name: 'suricata.eve.stats.defrag.ipv4.reassembled', + type: 'long', + }, + 'suricata.eve.stats.defrag.ipv6.timeouts': { + category: 'suricata', + name: 'suricata.eve.stats.defrag.ipv6.timeouts', + type: 'long', + }, + 'suricata.eve.stats.defrag.ipv6.fragments': { + category: 'suricata', + name: 'suricata.eve.stats.defrag.ipv6.fragments', + type: 'long', + }, + 'suricata.eve.stats.defrag.ipv6.reassembled': { + category: 'suricata', + name: 'suricata.eve.stats.defrag.ipv6.reassembled', + type: 'long', + }, + 'suricata.eve.stats.flow.tcp_reuse': { + category: 'suricata', + name: 'suricata.eve.stats.flow.tcp_reuse', + type: 'long', + }, + 'suricata.eve.stats.flow.udp': { + category: 'suricata', + name: 'suricata.eve.stats.flow.udp', + type: 'long', + }, + 'suricata.eve.stats.flow.memcap': { + category: 'suricata', + name: 'suricata.eve.stats.flow.memcap', + type: 'long', + }, + 'suricata.eve.stats.flow.emerg_mode_entered': { + category: 'suricata', + name: 'suricata.eve.stats.flow.emerg_mode_entered', + type: 'long', + }, + 'suricata.eve.stats.flow.emerg_mode_over': { + category: 'suricata', + name: 'suricata.eve.stats.flow.emerg_mode_over', + type: 'long', + }, + 'suricata.eve.stats.flow.tcp': { + category: 'suricata', + name: 'suricata.eve.stats.flow.tcp', + type: 'long', + }, + 'suricata.eve.stats.flow.icmpv6': { + category: 'suricata', + name: 'suricata.eve.stats.flow.icmpv6', + type: 'long', + }, + 'suricata.eve.stats.flow.icmpv4': { + category: 'suricata', + name: 'suricata.eve.stats.flow.icmpv4', + type: 'long', + }, + 'suricata.eve.stats.flow.spare': { + category: 'suricata', + name: 'suricata.eve.stats.flow.spare', + type: 'long', + }, + 'suricata.eve.stats.flow.memuse': { + category: 'suricata', + name: 'suricata.eve.stats.flow.memuse', + type: 'long', + }, + 'suricata.eve.stats.tcp.pseudo_failed': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.pseudo_failed', + type: 'long', + }, + 'suricata.eve.stats.tcp.ssn_memcap_drop': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.ssn_memcap_drop', + type: 'long', + }, + 'suricata.eve.stats.tcp.insert_data_overlap_fail': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.insert_data_overlap_fail', + type: 'long', + }, + 'suricata.eve.stats.tcp.sessions': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.sessions', + type: 'long', + }, + 'suricata.eve.stats.tcp.pseudo': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.pseudo', + type: 'long', + }, + 'suricata.eve.stats.tcp.synack': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.synack', + type: 'long', + }, + 'suricata.eve.stats.tcp.insert_data_normal_fail': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.insert_data_normal_fail', + type: 'long', + }, + 'suricata.eve.stats.tcp.syn': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.syn', + type: 'long', + }, + 'suricata.eve.stats.tcp.memuse': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.memuse', + type: 'long', + }, + 'suricata.eve.stats.tcp.invalid_checksum': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.invalid_checksum', + type: 'long', + }, + 'suricata.eve.stats.tcp.segment_memcap_drop': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.segment_memcap_drop', + type: 'long', + }, + 'suricata.eve.stats.tcp.overlap': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.overlap', + type: 'long', + }, + 'suricata.eve.stats.tcp.insert_list_fail': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.insert_list_fail', + type: 'long', + }, + 'suricata.eve.stats.tcp.rst': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.rst', + type: 'long', + }, + 'suricata.eve.stats.tcp.stream_depth_reached': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.stream_depth_reached', + type: 'long', + }, + 'suricata.eve.stats.tcp.reassembly_memuse': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.reassembly_memuse', + type: 'long', + }, + 'suricata.eve.stats.tcp.reassembly_gap': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.reassembly_gap', + type: 'long', + }, + 'suricata.eve.stats.tcp.overlap_diff_data': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.overlap_diff_data', + type: 'long', + }, + 'suricata.eve.stats.tcp.no_flow': { + category: 'suricata', + name: 'suricata.eve.stats.tcp.no_flow', + type: 'long', + }, + 'suricata.eve.stats.decoder.avg_pkt_size': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.avg_pkt_size', + type: 'long', + }, + 'suricata.eve.stats.decoder.bytes': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.bytes', + type: 'long', + }, + 'suricata.eve.stats.decoder.tcp': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.tcp', + type: 'long', + }, + 'suricata.eve.stats.decoder.raw': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.raw', + type: 'long', + }, + 'suricata.eve.stats.decoder.ppp': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.ppp', + type: 'long', + }, + 'suricata.eve.stats.decoder.vlan_qinq': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.vlan_qinq', + type: 'long', + }, + 'suricata.eve.stats.decoder.null': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.null', + type: 'long', + }, + 'suricata.eve.stats.decoder.ltnull.unsupported_type': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.ltnull.unsupported_type', + type: 'long', + }, + 'suricata.eve.stats.decoder.ltnull.pkt_too_small': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.ltnull.pkt_too_small', + type: 'long', + }, + 'suricata.eve.stats.decoder.invalid': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.invalid', + type: 'long', + }, + 'suricata.eve.stats.decoder.gre': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.gre', + type: 'long', + }, + 'suricata.eve.stats.decoder.ipv4': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.ipv4', + type: 'long', + }, + 'suricata.eve.stats.decoder.ipv6': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.ipv6', + type: 'long', + }, + 'suricata.eve.stats.decoder.pkts': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.pkts', + type: 'long', + }, + 'suricata.eve.stats.decoder.ipv6_in_ipv6': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.ipv6_in_ipv6', + type: 'long', + }, + 'suricata.eve.stats.decoder.ipraw.invalid_ip_version': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.ipraw.invalid_ip_version', + type: 'long', + }, + 'suricata.eve.stats.decoder.pppoe': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.pppoe', + type: 'long', }, - 'fortinet.firewall.received': { - category: 'fortinet', - description: 'Server key exchange received ', - name: 'fortinet.firewall.received', - type: 'integer', + 'suricata.eve.stats.decoder.udp': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.udp', + type: 'long', }, - 'fortinet.firewall.receivedsignature': { - category: 'fortinet', - description: 'Server key exchange received signature ', - name: 'fortinet.firewall.receivedsignature', - type: 'keyword', + 'suricata.eve.stats.decoder.dce.pkt_too_small': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.dce.pkt_too_small', + type: 'long', }, - 'fortinet.firewall.red': { - category: 'fortinet', - description: 'Memory information in red ', - name: 'fortinet.firewall.red', - type: 'keyword', + 'suricata.eve.stats.decoder.vlan': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.vlan', + type: 'long', }, - 'fortinet.firewall.referralurl': { - category: 'fortinet', - description: 'Web filter referralurl ', - name: 'fortinet.firewall.referralurl', - type: 'keyword', + 'suricata.eve.stats.decoder.sctp': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.sctp', + type: 'long', }, - 'fortinet.firewall.remote': { - category: 'fortinet', - description: 'Remote PPP IP address ', - name: 'fortinet.firewall.remote', - type: 'ip', + 'suricata.eve.stats.decoder.max_pkt_size': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.max_pkt_size', + type: 'long', }, - 'fortinet.firewall.remotewtptime': { - category: 'fortinet', - description: 'Remote Wifi Radius authentication time ', - name: 'fortinet.firewall.remotewtptime', - type: 'keyword', + 'suricata.eve.stats.decoder.teredo': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.teredo', + type: 'long', }, - 'fortinet.firewall.reporttype': { - category: 'fortinet', - description: 'Report type ', - name: 'fortinet.firewall.reporttype', - type: 'keyword', + 'suricata.eve.stats.decoder.mpls': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.mpls', + type: 'long', }, - 'fortinet.firewall.reqtype': { - category: 'fortinet', - description: 'Request type ', - name: 'fortinet.firewall.reqtype', - type: 'keyword', + 'suricata.eve.stats.decoder.sll': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.sll', + type: 'long', }, - 'fortinet.firewall.request_name': { - category: 'fortinet', - description: 'VOIP request name ', - name: 'fortinet.firewall.request_name', - type: 'keyword', + 'suricata.eve.stats.decoder.icmpv6': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.icmpv6', + type: 'long', }, - 'fortinet.firewall.result': { - category: 'fortinet', - description: 'VPN phase result ', - name: 'fortinet.firewall.result', - type: 'keyword', + 'suricata.eve.stats.decoder.icmpv4': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.icmpv4', + type: 'long', }, - 'fortinet.firewall.role': { - category: 'fortinet', - description: 'VPN Phase 2 role ', - name: 'fortinet.firewall.role', - type: 'keyword', + 'suricata.eve.stats.decoder.erspan': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.erspan', + type: 'long', }, - 'fortinet.firewall.rssi': { - category: 'fortinet', - description: 'Received signal strength indicator ', - name: 'fortinet.firewall.rssi', - type: 'integer', + 'suricata.eve.stats.decoder.ethernet': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.ethernet', + type: 'long', }, - 'fortinet.firewall.rsso_key': { - category: 'fortinet', - description: 'RADIUS SSO attribute value ', - name: 'fortinet.firewall.rsso_key', - type: 'keyword', + 'suricata.eve.stats.decoder.ipv4_in_ipv6': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.ipv4_in_ipv6', + type: 'long', }, - 'fortinet.firewall.ruledata': { - category: 'fortinet', - description: 'Rule data ', - name: 'fortinet.firewall.ruledata', - type: 'keyword', + 'suricata.eve.stats.decoder.ieee8021ah': { + category: 'suricata', + name: 'suricata.eve.stats.decoder.ieee8021ah', + type: 'long', }, - 'fortinet.firewall.ruletype': { - category: 'fortinet', - description: 'Rule type ', - name: 'fortinet.firewall.ruletype', - type: 'keyword', + 'suricata.eve.stats.dns.memcap_global': { + category: 'suricata', + name: 'suricata.eve.stats.dns.memcap_global', + type: 'long', }, - 'fortinet.firewall.scanned': { - category: 'fortinet', - description: 'Number of Scanned MMSs ', - name: 'fortinet.firewall.scanned', - type: 'integer', + 'suricata.eve.stats.dns.memcap_state': { + category: 'suricata', + name: 'suricata.eve.stats.dns.memcap_state', + type: 'long', }, - 'fortinet.firewall.scantime': { - category: 'fortinet', - description: 'Scanned time ', - name: 'fortinet.firewall.scantime', + 'suricata.eve.stats.dns.memuse': { + category: 'suricata', + name: 'suricata.eve.stats.dns.memuse', type: 'long', }, - 'fortinet.firewall.scope': { - category: 'fortinet', - description: 'FortiGuard Override Scope ', - name: 'fortinet.firewall.scope', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.rows_busy': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.rows_busy', + type: 'long', }, - 'fortinet.firewall.security': { - category: 'fortinet', - description: 'Wireless rogue security ', - name: 'fortinet.firewall.security', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.flows_timeout': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.flows_timeout', + type: 'long', }, - 'fortinet.firewall.sensitivity': { - category: 'fortinet', - description: 'Sensitivity for document fingerprint ', - name: 'fortinet.firewall.sensitivity', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.flows_notimeout': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.flows_notimeout', + type: 'long', }, - 'fortinet.firewall.sensor': { - category: 'fortinet', - description: 'NAC Sensor Name ', - name: 'fortinet.firewall.sensor', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.rows_skipped': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.rows_skipped', + type: 'long', }, - 'fortinet.firewall.sentdelta': { - category: 'fortinet', - description: 'Sent bytes delta ', - name: 'fortinet.firewall.sentdelta', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.closed_pruned': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.closed_pruned', + type: 'long', }, - 'fortinet.firewall.seq': { - category: 'fortinet', - description: 'Sequence number ', - name: 'fortinet.firewall.seq', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.new_pruned': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.new_pruned', + type: 'long', }, - 'fortinet.firewall.serial': { - category: 'fortinet', - description: 'WAN optimisation serial ', - name: 'fortinet.firewall.serial', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.flows_removed': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.flows_removed', + type: 'long', }, - 'fortinet.firewall.serialno': { - category: 'fortinet', - description: 'Serial number ', - name: 'fortinet.firewall.serialno', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.bypassed_pruned': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.bypassed_pruned', + type: 'long', }, - 'fortinet.firewall.server': { - category: 'fortinet', - description: 'AD server FQDN or IP ', - name: 'fortinet.firewall.server', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.est_pruned': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.est_pruned', + type: 'long', }, - 'fortinet.firewall.session_id': { - category: 'fortinet', - description: 'Session ID ', - name: 'fortinet.firewall.session_id', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.flows_timeout_inuse': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.flows_timeout_inuse', + type: 'long', }, - 'fortinet.firewall.sessionid': { - category: 'fortinet', - description: 'WAD Session ID ', - name: 'fortinet.firewall.sessionid', - type: 'integer', + 'suricata.eve.stats.flow_mgr.flows_checked': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.flows_checked', + type: 'long', }, - 'fortinet.firewall.setuprate': { - category: 'fortinet', - description: 'Session Setup Rate ', - name: 'fortinet.firewall.setuprate', + 'suricata.eve.stats.flow_mgr.rows_maxlen': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.rows_maxlen', type: 'long', }, - 'fortinet.firewall.severity': { - category: 'fortinet', - description: 'Severity ', - name: 'fortinet.firewall.severity', - type: 'keyword', + 'suricata.eve.stats.flow_mgr.rows_checked': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.rows_checked', + type: 'long', }, - 'fortinet.firewall.shaperdroprcvdbyte': { - category: 'fortinet', - description: 'Received bytes dropped by shaper ', - name: 'fortinet.firewall.shaperdroprcvdbyte', - type: 'integer', + 'suricata.eve.stats.flow_mgr.rows_empty': { + category: 'suricata', + name: 'suricata.eve.stats.flow_mgr.rows_empty', + type: 'long', }, - 'fortinet.firewall.shaperdropsentbyte': { - category: 'fortinet', - description: 'Sent bytes dropped by shaper ', - name: 'fortinet.firewall.shaperdropsentbyte', - type: 'integer', + 'suricata.eve.stats.app_layer.flow.tls': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.tls', + type: 'long', }, - 'fortinet.firewall.shaperperipdropbyte': { - category: 'fortinet', - description: 'Dropped bytes per IP by shaper ', - name: 'fortinet.firewall.shaperperipdropbyte', - type: 'integer', + 'suricata.eve.stats.app_layer.flow.ftp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.ftp', + type: 'long', }, - 'fortinet.firewall.shaperperipname': { - category: 'fortinet', - description: 'Traffic shaper name (per IP) ', - name: 'fortinet.firewall.shaperperipname', - type: 'keyword', + 'suricata.eve.stats.app_layer.flow.http': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.http', + type: 'long', }, - 'fortinet.firewall.shaperrcvdname': { - category: 'fortinet', - description: 'Traffic shaper name for received traffic ', - name: 'fortinet.firewall.shaperrcvdname', - type: 'keyword', + 'suricata.eve.stats.app_layer.flow.failed_udp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.failed_udp', + type: 'long', }, - 'fortinet.firewall.shapersentname': { - category: 'fortinet', - description: 'Traffic shaper name for sent traffic ', - name: 'fortinet.firewall.shapersentname', - type: 'keyword', + 'suricata.eve.stats.app_layer.flow.dns_udp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.dns_udp', + type: 'long', }, - 'fortinet.firewall.shapingpolicyid': { - category: 'fortinet', - description: 'Traffic shaper policy ID ', - name: 'fortinet.firewall.shapingpolicyid', - type: 'integer', + 'suricata.eve.stats.app_layer.flow.dns_tcp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.dns_tcp', + type: 'long', }, - 'fortinet.firewall.signal': { - category: 'fortinet', - description: 'Wireless rogue API signal ', - name: 'fortinet.firewall.signal', - type: 'integer', + 'suricata.eve.stats.app_layer.flow.smtp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.smtp', + type: 'long', }, - 'fortinet.firewall.size': { - category: 'fortinet', - description: 'Email size in bytes ', - name: 'fortinet.firewall.size', + 'suricata.eve.stats.app_layer.flow.failed_tcp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.failed_tcp', type: 'long', }, - 'fortinet.firewall.slot': { - category: 'fortinet', - description: 'Slot number ', - name: 'fortinet.firewall.slot', - type: 'integer', + 'suricata.eve.stats.app_layer.flow.msn': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.msn', + type: 'long', }, - 'fortinet.firewall.sn': { - category: 'fortinet', - description: 'Security fabric serial number ', - name: 'fortinet.firewall.sn', - type: 'keyword', + 'suricata.eve.stats.app_layer.flow.ssh': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.ssh', + type: 'long', }, - 'fortinet.firewall.snclosest': { - category: 'fortinet', - description: 'SN of the AP closest to the rogue AP ', - name: 'fortinet.firewall.snclosest', - type: 'keyword', + 'suricata.eve.stats.app_layer.flow.imap': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.imap', + type: 'long', }, - 'fortinet.firewall.sndetected': { - category: 'fortinet', - description: 'SN of the AP which detected the rogue AP ', - name: 'fortinet.firewall.sndetected', - type: 'keyword', + 'suricata.eve.stats.app_layer.flow.dcerpc_udp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.dcerpc_udp', + type: 'long', }, - 'fortinet.firewall.snmeshparent': { - category: 'fortinet', - description: 'SN of the mesh parent ', - name: 'fortinet.firewall.snmeshparent', - type: 'keyword', + 'suricata.eve.stats.app_layer.flow.dcerpc_tcp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.dcerpc_tcp', + type: 'long', }, - 'fortinet.firewall.spi': { - category: 'fortinet', - description: 'IPSEC SPI ', - name: 'fortinet.firewall.spi', - type: 'keyword', + 'suricata.eve.stats.app_layer.flow.smb': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.flow.smb', + type: 'long', }, - 'fortinet.firewall.src_int': { - category: 'fortinet', - description: 'Source interface ', - name: 'fortinet.firewall.src_int', - type: 'keyword', + 'suricata.eve.stats.app_layer.tx.tls': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.tx.tls', + type: 'long', }, - 'fortinet.firewall.srcintfrole': { - category: 'fortinet', - description: 'Source interface role ', - name: 'fortinet.firewall.srcintfrole', - type: 'keyword', + 'suricata.eve.stats.app_layer.tx.ftp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.tx.ftp', + type: 'long', }, - 'fortinet.firewall.srccountry': { - category: 'fortinet', - description: 'Source country ', - name: 'fortinet.firewall.srccountry', - type: 'keyword', + 'suricata.eve.stats.app_layer.tx.http': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.tx.http', + type: 'long', }, - 'fortinet.firewall.srcfamily': { - category: 'fortinet', - description: 'Source family ', - name: 'fortinet.firewall.srcfamily', - type: 'keyword', + 'suricata.eve.stats.app_layer.tx.dns_udp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.tx.dns_udp', + type: 'long', }, - 'fortinet.firewall.srchwvendor': { - category: 'fortinet', - description: 'Source hardware vendor ', - name: 'fortinet.firewall.srchwvendor', - type: 'keyword', + 'suricata.eve.stats.app_layer.tx.dns_tcp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.tx.dns_tcp', + type: 'long', }, - 'fortinet.firewall.srchwversion': { - category: 'fortinet', - description: 'Source hardware version ', - name: 'fortinet.firewall.srchwversion', - type: 'keyword', + 'suricata.eve.stats.app_layer.tx.smtp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.tx.smtp', + type: 'long', }, - 'fortinet.firewall.srcinetsvc': { - category: 'fortinet', - description: 'Source interface service ', - name: 'fortinet.firewall.srcinetsvc', - type: 'keyword', + 'suricata.eve.stats.app_layer.tx.ssh': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.tx.ssh', + type: 'long', }, - 'fortinet.firewall.srcname': { - category: 'fortinet', - description: 'Source name ', - name: 'fortinet.firewall.srcname', - type: 'keyword', + 'suricata.eve.stats.app_layer.tx.dcerpc_udp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.tx.dcerpc_udp', + type: 'long', }, - 'fortinet.firewall.srcserver': { - category: 'fortinet', - description: 'Source server ', - name: 'fortinet.firewall.srcserver', - type: 'integer', + 'suricata.eve.stats.app_layer.tx.dcerpc_tcp': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.tx.dcerpc_tcp', + type: 'long', }, - 'fortinet.firewall.srcssid': { - category: 'fortinet', - description: 'Source SSID ', - name: 'fortinet.firewall.srcssid', - type: 'keyword', + 'suricata.eve.stats.app_layer.tx.smb': { + category: 'suricata', + name: 'suricata.eve.stats.app_layer.tx.smb', + type: 'long', }, - 'fortinet.firewall.srcswversion': { - category: 'fortinet', - description: 'Source software version ', - name: 'fortinet.firewall.srcswversion', - type: 'keyword', + 'suricata.eve.tls.notbefore': { + category: 'suricata', + name: 'suricata.eve.tls.notbefore', + type: 'date', }, - 'fortinet.firewall.srcuuid': { - category: 'fortinet', - description: 'Source UUID ', - name: 'fortinet.firewall.srcuuid', + 'suricata.eve.tls.issuerdn': { + category: 'suricata', + name: 'suricata.eve.tls.issuerdn', type: 'keyword', }, - 'fortinet.firewall.sscname': { - category: 'fortinet', - description: 'SSC name ', - name: 'fortinet.firewall.sscname', + 'suricata.eve.tls.sni': { + category: 'suricata', + name: 'suricata.eve.tls.sni', type: 'keyword', }, - 'fortinet.firewall.ssid': { - category: 'fortinet', - description: 'Base Service Set ID ', - name: 'fortinet.firewall.ssid', + 'suricata.eve.tls.version': { + category: 'suricata', + name: 'suricata.eve.tls.version', type: 'keyword', }, - 'fortinet.firewall.sslaction': { - category: 'fortinet', - description: 'SSL Action ', - name: 'fortinet.firewall.sslaction', - type: 'keyword', + 'suricata.eve.tls.session_resumed': { + category: 'suricata', + name: 'suricata.eve.tls.session_resumed', + type: 'boolean', }, - 'fortinet.firewall.ssllocal': { - category: 'fortinet', - description: 'WAD SSL local ', - name: 'fortinet.firewall.ssllocal', + 'suricata.eve.tls.fingerprint': { + category: 'suricata', + name: 'suricata.eve.tls.fingerprint', type: 'keyword', }, - 'fortinet.firewall.sslremote': { - category: 'fortinet', - description: 'WAD SSL remote ', - name: 'fortinet.firewall.sslremote', + 'suricata.eve.tls.serial': { + category: 'suricata', + name: 'suricata.eve.tls.serial', type: 'keyword', }, - 'fortinet.firewall.stacount': { - category: 'fortinet', - description: 'Number of stations/clients ', - name: 'fortinet.firewall.stacount', - type: 'integer', + 'suricata.eve.tls.notafter': { + category: 'suricata', + name: 'suricata.eve.tls.notafter', + type: 'date', }, - 'fortinet.firewall.stage': { - category: 'fortinet', - description: 'IPSEC stage ', - name: 'fortinet.firewall.stage', + 'suricata.eve.tls.subject': { + category: 'suricata', + name: 'suricata.eve.tls.subject', type: 'keyword', }, - 'fortinet.firewall.stamac': { - category: 'fortinet', - description: '802.1x station mac ', - name: 'fortinet.firewall.stamac', + 'suricata.eve.tls.ja3s.string': { + category: 'suricata', + name: 'suricata.eve.tls.ja3s.string', type: 'keyword', }, - 'fortinet.firewall.state': { - category: 'fortinet', - description: 'Admin login state ', - name: 'fortinet.firewall.state', + 'suricata.eve.tls.ja3s.hash': { + category: 'suricata', + name: 'suricata.eve.tls.ja3s.hash', type: 'keyword', }, - 'fortinet.firewall.status': { - category: 'fortinet', - description: 'Status ', - name: 'fortinet.firewall.status', + 'suricata.eve.tls.ja3.string': { + category: 'suricata', + name: 'suricata.eve.tls.ja3.string', type: 'keyword', }, - 'fortinet.firewall.stitch': { - category: 'fortinet', - description: 'Automation stitch triggered ', - name: 'fortinet.firewall.stitch', + 'suricata.eve.tls.ja3.hash': { + category: 'suricata', + name: 'suricata.eve.tls.ja3.hash', type: 'keyword', }, - 'fortinet.firewall.subject': { - category: 'fortinet', - description: 'Email subject ', - name: 'fortinet.firewall.subject', + 'suricata.eve.app_proto_ts': { + category: 'suricata', + name: 'suricata.eve.app_proto_ts', type: 'keyword', }, - 'fortinet.firewall.submodule': { - category: 'fortinet', - description: 'Configuration Sub-Module Name ', - name: 'fortinet.firewall.submodule', - type: 'keyword', + 'suricata.eve.flow.age': { + category: 'suricata', + name: 'suricata.eve.flow.age', + type: 'long', }, - 'fortinet.firewall.subservice': { - category: 'fortinet', - description: 'AV subservice ', - name: 'fortinet.firewall.subservice', + 'suricata.eve.flow.state': { + category: 'suricata', + name: 'suricata.eve.flow.state', type: 'keyword', }, - 'fortinet.firewall.subtype': { - category: 'fortinet', - description: 'Log subtype ', - name: 'fortinet.firewall.subtype', + 'suricata.eve.flow.reason': { + category: 'suricata', + name: 'suricata.eve.flow.reason', type: 'keyword', }, - 'fortinet.firewall.suspicious': { - category: 'fortinet', - description: 'Number of Suspicious MMSs ', - name: 'fortinet.firewall.suspicious', - type: 'integer', + 'suricata.eve.flow.alerted': { + category: 'suricata', + name: 'suricata.eve.flow.alerted', + type: 'boolean', }, - 'fortinet.firewall.switchproto': { - category: 'fortinet', - description: 'Protocol change information ', - name: 'fortinet.firewall.switchproto', - type: 'keyword', + 'suricata.eve.tx_id': { + category: 'suricata', + name: 'suricata.eve.tx_id', + type: 'long', }, - 'fortinet.firewall.sync_status': { - category: 'fortinet', - description: 'The sync status with the master ', - name: 'fortinet.firewall.sync_status', + 'suricata.eve.app_proto_tc': { + category: 'suricata', + name: 'suricata.eve.app_proto_tc', type: 'keyword', }, - 'fortinet.firewall.sync_type': { - category: 'fortinet', - description: 'The sync type with the master ', - name: 'fortinet.firewall.sync_type', + 'suricata.eve.smtp.rcpt_to': { + category: 'suricata', + name: 'suricata.eve.smtp.rcpt_to', type: 'keyword', }, - 'fortinet.firewall.sysuptime': { - category: 'fortinet', - description: 'System uptime ', - name: 'fortinet.firewall.sysuptime', + 'suricata.eve.smtp.mail_from': { + category: 'suricata', + name: 'suricata.eve.smtp.mail_from', type: 'keyword', }, - 'fortinet.firewall.tamac': { - category: 'fortinet', - description: 'the MAC address of Transmitter, if none, then Receiver ', - name: 'fortinet.firewall.tamac', + 'suricata.eve.smtp.helo': { + category: 'suricata', + name: 'suricata.eve.smtp.helo', type: 'keyword', }, - 'fortinet.firewall.threattype': { - category: 'fortinet', - description: 'WIDS threat type ', - name: 'fortinet.firewall.threattype', + 'suricata.eve.app_proto_expected': { + category: 'suricata', + name: 'suricata.eve.app_proto_expected', type: 'keyword', }, - 'fortinet.firewall.time': { - category: 'fortinet', - description: 'Time of the event ', - name: 'fortinet.firewall.time', - type: 'keyword', + 'suricata.eve.flags': { + category: 'suricata', + name: 'suricata.eve.flags', + type: 'group', }, - 'fortinet.firewall.to': { - category: 'fortinet', - description: 'Email to field ', - name: 'fortinet.firewall.to', + 'zeek.session_id': { + category: 'zeek', + description: 'A unique identifier of the session ', + name: 'zeek.session_id', type: 'keyword', }, - 'fortinet.firewall.to_vcluster': { - category: 'fortinet', - description: 'destination virtual cluster number ', - name: 'fortinet.firewall.to_vcluster', + 'zeek.capture_loss.ts_delta': { + category: 'zeek', + description: 'The time delay between this measurement and the last. ', + name: 'zeek.capture_loss.ts_delta', type: 'integer', }, - 'fortinet.firewall.total': { - category: 'fortinet', - description: 'Total memory ', - name: 'fortinet.firewall.total', + 'zeek.capture_loss.peer': { + category: 'zeek', + description: + 'In the event that there are multiple Bro instances logging to the same host, this distinguishes each peer with its individual name. ', + name: 'zeek.capture_loss.peer', + type: 'keyword', + }, + 'zeek.capture_loss.gaps': { + category: 'zeek', + description: 'Number of missed ACKs from the previous measurement interval. ', + name: 'zeek.capture_loss.gaps', type: 'integer', }, - 'fortinet.firewall.totalsession': { - category: 'fortinet', - description: 'Total Number of Sessions ', - name: 'fortinet.firewall.totalsession', + 'zeek.capture_loss.acks': { + category: 'zeek', + description: 'Total number of ACKs seen in the previous measurement interval. ', + name: 'zeek.capture_loss.acks', type: 'integer', }, - 'fortinet.firewall.trace_id': { - category: 'fortinet', - description: 'Session clash trace ID ', - name: 'fortinet.firewall.trace_id', - type: 'keyword', + 'zeek.capture_loss.percent_lost': { + category: 'zeek', + description: "Percentage of ACKs seen where the data being ACKed wasn't seen. ", + name: 'zeek.capture_loss.percent_lost', + type: 'double', }, - 'fortinet.firewall.trandisp': { - category: 'fortinet', - description: 'NAT translation type ', - name: 'fortinet.firewall.trandisp', - type: 'keyword', + 'zeek.connection.local_orig': { + category: 'zeek', + description: 'Indicates whether the session is originated locally. ', + name: 'zeek.connection.local_orig', + type: 'boolean', }, - 'fortinet.firewall.transid': { - category: 'fortinet', - description: 'HTTP transaction ID ', - name: 'fortinet.firewall.transid', - type: 'integer', + 'zeek.connection.local_resp': { + category: 'zeek', + description: 'Indicates whether the session is responded locally. ', + name: 'zeek.connection.local_resp', + type: 'boolean', }, - 'fortinet.firewall.translationid': { - category: 'fortinet', - description: 'DNS filter transaltion ID ', - name: 'fortinet.firewall.translationid', - type: 'keyword', + 'zeek.connection.missed_bytes': { + category: 'zeek', + description: 'Missed bytes for the session. ', + name: 'zeek.connection.missed_bytes', + type: 'long', }, - 'fortinet.firewall.trigger': { - category: 'fortinet', - description: 'Automation stitch trigger ', - name: 'fortinet.firewall.trigger', + 'zeek.connection.state': { + category: 'zeek', + description: 'Code indicating the state of the session. ', + name: 'zeek.connection.state', type: 'keyword', }, - 'fortinet.firewall.trueclntip': { - category: 'fortinet', - description: 'File filter true client IP ', - name: 'fortinet.firewall.trueclntip', - type: 'ip', + 'zeek.connection.state_message': { + category: 'zeek', + description: 'The state of the session. ', + name: 'zeek.connection.state_message', + type: 'keyword', }, - 'fortinet.firewall.tunnelid': { - category: 'fortinet', - description: 'IPSEC tunnel ID ', - name: 'fortinet.firewall.tunnelid', + 'zeek.connection.icmp.type': { + category: 'zeek', + description: 'ICMP message type. ', + name: 'zeek.connection.icmp.type', type: 'integer', }, - 'fortinet.firewall.tunnelip': { - category: 'fortinet', - description: 'IPSEC tunnel IP ', - name: 'fortinet.firewall.tunnelip', - type: 'ip', - }, - 'fortinet.firewall.tunneltype': { - category: 'fortinet', - description: 'IPSEC tunnel type ', - name: 'fortinet.firewall.tunneltype', - type: 'keyword', - }, - 'fortinet.firewall.type': { - category: 'fortinet', - description: 'Module type ', - name: 'fortinet.firewall.type', - type: 'keyword', + 'zeek.connection.icmp.code': { + category: 'zeek', + description: 'ICMP message code. ', + name: 'zeek.connection.icmp.code', + type: 'integer', }, - 'fortinet.firewall.ui': { - category: 'fortinet', - description: 'Admin authentication UI type ', - name: 'fortinet.firewall.ui', + 'zeek.connection.history': { + category: 'zeek', + description: 'Flags indicating the history of the session. ', + name: 'zeek.connection.history', type: 'keyword', }, - 'fortinet.firewall.unauthusersource': { - category: 'fortinet', - description: 'Unauthenticated user source ', - name: 'fortinet.firewall.unauthusersource', - type: 'keyword', + 'zeek.connection.vlan': { + category: 'zeek', + description: 'VLAN identifier. ', + name: 'zeek.connection.vlan', + type: 'integer', }, - 'fortinet.firewall.unit': { - category: 'fortinet', - description: 'Power supply unit ', - name: 'fortinet.firewall.unit', + 'zeek.connection.inner_vlan': { + category: 'zeek', + description: 'VLAN identifier. ', + name: 'zeek.connection.inner_vlan', type: 'integer', }, - 'fortinet.firewall.urlfilteridx': { - category: 'fortinet', - description: 'URL filter ID ', - name: 'fortinet.firewall.urlfilteridx', + 'zeek.dce_rpc.rtt': { + category: 'zeek', + description: + "Round trip time from the request to the response. If either the request or response wasn't seen, this will be null. ", + name: 'zeek.dce_rpc.rtt', type: 'integer', }, - 'fortinet.firewall.urlfilterlist': { - category: 'fortinet', - description: 'URL filter list ', - name: 'fortinet.firewall.urlfilterlist', + 'zeek.dce_rpc.named_pipe': { + category: 'zeek', + description: 'Remote pipe name. ', + name: 'zeek.dce_rpc.named_pipe', type: 'keyword', }, - 'fortinet.firewall.urlsource': { - category: 'fortinet', - description: 'URL filter source ', - name: 'fortinet.firewall.urlsource', + 'zeek.dce_rpc.endpoint': { + category: 'zeek', + description: 'Endpoint name looked up from the uuid. ', + name: 'zeek.dce_rpc.endpoint', type: 'keyword', }, - 'fortinet.firewall.urltype': { - category: 'fortinet', - description: 'URL filter type ', - name: 'fortinet.firewall.urltype', + 'zeek.dce_rpc.operation': { + category: 'zeek', + description: 'Operation seen in the call. ', + name: 'zeek.dce_rpc.operation', type: 'keyword', }, - 'fortinet.firewall.used': { - category: 'fortinet', - description: 'Number of Used IPs ', - name: 'fortinet.firewall.used', - type: 'integer', - }, - 'fortinet.firewall.used_for_type': { - category: 'fortinet', - description: 'Connection for the type ', - name: 'fortinet.firewall.used_for_type', - type: 'integer', - }, - 'fortinet.firewall.utmaction': { - category: 'fortinet', - description: 'Security action performed by UTM ', - name: 'fortinet.firewall.utmaction', + 'zeek.dhcp.domain': { + category: 'zeek', + description: 'Domain given by the server in option 15. ', + name: 'zeek.dhcp.domain', type: 'keyword', }, - 'fortinet.firewall.vap': { - category: 'fortinet', - description: 'Virtual AP ', - name: 'fortinet.firewall.vap', + 'zeek.dhcp.duration': { + category: 'zeek', + description: + 'Duration of the DHCP session representing the time from the first message to the last, in seconds. ', + name: 'zeek.dhcp.duration', + type: 'double', + }, + 'zeek.dhcp.hostname': { + category: 'zeek', + description: 'Name given by client in Hostname option 12. ', + name: 'zeek.dhcp.hostname', type: 'keyword', }, - 'fortinet.firewall.vapmode': { - category: 'fortinet', - description: 'Virtual AP mode ', - name: 'fortinet.firewall.vapmode', + 'zeek.dhcp.client_fqdn': { + category: 'zeek', + description: 'FQDN given by client in Client FQDN option 81. ', + name: 'zeek.dhcp.client_fqdn', type: 'keyword', }, - 'fortinet.firewall.vcluster': { - category: 'fortinet', - description: 'virtual cluster id ', - name: 'fortinet.firewall.vcluster', + 'zeek.dhcp.lease_time': { + category: 'zeek', + description: 'IP address lease interval in seconds. ', + name: 'zeek.dhcp.lease_time', type: 'integer', }, - 'fortinet.firewall.vcluster_member': { - category: 'fortinet', - description: 'Virtual cluster member ', - name: 'fortinet.firewall.vcluster_member', - type: 'integer', + 'zeek.dhcp.address.assigned': { + category: 'zeek', + description: 'IP address assigned by the server. ', + name: 'zeek.dhcp.address.assigned', + type: 'ip', }, - 'fortinet.firewall.vcluster_state': { - category: 'fortinet', - description: 'Virtual cluster state ', - name: 'fortinet.firewall.vcluster_state', - type: 'keyword', + 'zeek.dhcp.address.client': { + category: 'zeek', + description: + 'IP address of the client. If a transaction is only a client sending INFORM messages then there is no lease information exchanged so this is helpful to know who sent the messages. Getting an address in this field does require that the client sources at least one DHCP message using a non-broadcast address. ', + name: 'zeek.dhcp.address.client', + type: 'ip', }, - 'fortinet.firewall.vd': { - category: 'fortinet', - description: 'Virtual Domain Name ', - name: 'fortinet.firewall.vd', + 'zeek.dhcp.address.mac': { + category: 'zeek', + description: "Client's hardware address. ", + name: 'zeek.dhcp.address.mac', type: 'keyword', }, - 'fortinet.firewall.vdname': { - category: 'fortinet', - description: 'Virtual Domain Name ', - name: 'fortinet.firewall.vdname', - type: 'keyword', + 'zeek.dhcp.address.requested': { + category: 'zeek', + description: 'IP address requested by the client. ', + name: 'zeek.dhcp.address.requested', + type: 'ip', }, - 'fortinet.firewall.vendorurl': { - category: 'fortinet', - description: 'Vulnerability scan vendor name ', - name: 'fortinet.firewall.vendorurl', - type: 'keyword', + 'zeek.dhcp.address.server': { + category: 'zeek', + description: 'IP address of the DHCP server. ', + name: 'zeek.dhcp.address.server', + type: 'ip', }, - 'fortinet.firewall.version': { - category: 'fortinet', - description: 'Version ', - name: 'fortinet.firewall.version', + 'zeek.dhcp.msg.types': { + category: 'zeek', + description: 'List of DHCP message types seen in this exchange. ', + name: 'zeek.dhcp.msg.types', type: 'keyword', }, - 'fortinet.firewall.vip': { - category: 'fortinet', - description: 'Virtual IP ', - name: 'fortinet.firewall.vip', + 'zeek.dhcp.msg.origin': { + category: 'zeek', + description: + '(present if policy/protocols/dhcp/msg-orig.bro is loaded) The address that originated each message from the msg.types field. ', + name: 'zeek.dhcp.msg.origin', + type: 'ip', + }, + 'zeek.dhcp.msg.client': { + category: 'zeek', + description: + 'Message typically accompanied with a DHCP_DECLINE so the client can tell the server why it rejected an address. ', + name: 'zeek.dhcp.msg.client', type: 'keyword', }, - 'fortinet.firewall.virus': { - category: 'fortinet', - description: 'Virus name ', - name: 'fortinet.firewall.virus', + 'zeek.dhcp.msg.server': { + category: 'zeek', + description: + 'Message typically accompanied with a DHCP_NAK to let the client know why it rejected the request. ', + name: 'zeek.dhcp.msg.server', type: 'keyword', }, - 'fortinet.firewall.virusid': { - category: 'fortinet', - description: 'Virus ID (unique virus identifier) ', - name: 'fortinet.firewall.virusid', - type: 'integer', + 'zeek.dhcp.software.client': { + category: 'zeek', + description: + '(present if policy/protocols/dhcp/software.bro is loaded) Software reported by the client in the vendor_class option. ', + name: 'zeek.dhcp.software.client', + type: 'keyword', }, - 'fortinet.firewall.voip_proto': { - category: 'fortinet', - description: 'VOIP protocol ', - name: 'fortinet.firewall.voip_proto', + 'zeek.dhcp.software.server': { + category: 'zeek', + description: + '(present if policy/protocols/dhcp/software.bro is loaded) Software reported by the client in the vendor_class option. ', + name: 'zeek.dhcp.software.server', type: 'keyword', }, - 'fortinet.firewall.vpn': { - category: 'fortinet', - description: 'VPN description ', - name: 'fortinet.firewall.vpn', + 'zeek.dhcp.id.circuit': { + category: 'zeek', + description: + '(present if policy/protocols/dhcp/sub-opts.bro is loaded) Added by DHCP relay agents which terminate switched or permanent circuits. It encodes an agent-local identifier of the circuit from which a DHCP client-to-server packet was received. Typically it should represent a router or switch interface number. ', + name: 'zeek.dhcp.id.circuit', type: 'keyword', }, - 'fortinet.firewall.vpntunnel': { - category: 'fortinet', - description: 'IPsec Vpn Tunnel Name ', - name: 'fortinet.firewall.vpntunnel', + 'zeek.dhcp.id.remote_agent': { + category: 'zeek', + description: + '(present if policy/protocols/dhcp/sub-opts.bro is loaded) A globally unique identifier added by relay agents to identify the remote host end of the circuit. ', + name: 'zeek.dhcp.id.remote_agent', type: 'keyword', }, - 'fortinet.firewall.vpntype': { - category: 'fortinet', - description: 'The type of the VPN tunnel ', - name: 'fortinet.firewall.vpntype', + 'zeek.dhcp.id.subscriber': { + category: 'zeek', + description: + "(present if policy/protocols/dhcp/sub-opts.bro is loaded) The subscriber ID is a value independent of the physical network configuration so that a customer's DHCP configuration can be given to them correctly no matter where they are physically connected. ", + name: 'zeek.dhcp.id.subscriber', type: 'keyword', }, - 'fortinet.firewall.vrf': { - category: 'fortinet', - description: 'VRF number ', - name: 'fortinet.firewall.vrf', - type: 'integer', + 'zeek.dnp3.function.request': { + category: 'zeek', + description: 'The name of the function message in the request. ', + name: 'zeek.dnp3.function.request', + type: 'keyword', }, - 'fortinet.firewall.vulncat': { - category: 'fortinet', - description: 'Vulnerability Category ', - name: 'fortinet.firewall.vulncat', + 'zeek.dnp3.function.reply': { + category: 'zeek', + description: 'The name of the function message in the reply. ', + name: 'zeek.dnp3.function.reply', type: 'keyword', }, - 'fortinet.firewall.vulnid': { - category: 'fortinet', - description: 'Vulnerability ID ', - name: 'fortinet.firewall.vulnid', + 'zeek.dnp3.id': { + category: 'zeek', + description: "The response's internal indication number. ", + name: 'zeek.dnp3.id', type: 'integer', }, - 'fortinet.firewall.vulnname': { - category: 'fortinet', - description: 'Vulnerability name ', - name: 'fortinet.firewall.vulnname', + 'zeek.dns.trans_id': { + category: 'zeek', + description: 'DNS transaction identifier. ', + name: 'zeek.dns.trans_id', type: 'keyword', }, - 'fortinet.firewall.vwlid': { - category: 'fortinet', - description: 'VWL ID ', - name: 'fortinet.firewall.vwlid', - type: 'integer', + 'zeek.dns.rtt': { + category: 'zeek', + description: 'Round trip time for the query and response. ', + name: 'zeek.dns.rtt', + type: 'double', }, - 'fortinet.firewall.vwlquality': { - category: 'fortinet', - description: 'VWL quality ', - name: 'fortinet.firewall.vwlquality', + 'zeek.dns.query': { + category: 'zeek', + description: 'The domain name that is the subject of the DNS query. ', + name: 'zeek.dns.query', type: 'keyword', }, - 'fortinet.firewall.vwlservice': { - category: 'fortinet', - description: 'VWL service ', - name: 'fortinet.firewall.vwlservice', - type: 'keyword', + 'zeek.dns.qclass': { + category: 'zeek', + description: 'The QCLASS value specifying the class of the query. ', + name: 'zeek.dns.qclass', + type: 'long', }, - 'fortinet.firewall.vwpvlanid': { - category: 'fortinet', - description: 'VWP VLAN ID ', - name: 'fortinet.firewall.vwpvlanid', - type: 'integer', + 'zeek.dns.qclass_name': { + category: 'zeek', + description: 'A descriptive name for the class of the query. ', + name: 'zeek.dns.qclass_name', + type: 'keyword', }, - 'fortinet.firewall.wanin': { - category: 'fortinet', - description: 'WAN incoming traffic in bytes ', - name: 'fortinet.firewall.wanin', + 'zeek.dns.qtype': { + category: 'zeek', + description: 'A QTYPE value specifying the type of the query. ', + name: 'zeek.dns.qtype', type: 'long', }, - 'fortinet.firewall.wanoptapptype': { - category: 'fortinet', - description: 'WAN Optimization Application type ', - name: 'fortinet.firewall.wanoptapptype', + 'zeek.dns.qtype_name': { + category: 'zeek', + description: 'A descriptive name for the type of the query. ', + name: 'zeek.dns.qtype_name', type: 'keyword', }, - 'fortinet.firewall.wanout': { - category: 'fortinet', - description: 'WAN outgoing traffic in bytes ', - name: 'fortinet.firewall.wanout', + 'zeek.dns.rcode': { + category: 'zeek', + description: 'The response code value in DNS response messages. ', + name: 'zeek.dns.rcode', type: 'long', }, - 'fortinet.firewall.weakwepiv': { - category: 'fortinet', - description: 'Weak Wep Initiation Vector ', - name: 'fortinet.firewall.weakwepiv', + 'zeek.dns.rcode_name': { + category: 'zeek', + description: 'A descriptive name for the response code value. ', + name: 'zeek.dns.rcode_name', type: 'keyword', }, - 'fortinet.firewall.xauthgroup': { - category: 'fortinet', - description: 'XAuth Group Name ', - name: 'fortinet.firewall.xauthgroup', - type: 'keyword', + 'zeek.dns.AA': { + category: 'zeek', + description: + 'The Authoritative Answer bit for response messages specifies that the responding name server is an authority for the domain name in the question section. ', + name: 'zeek.dns.AA', + type: 'boolean', }, - 'fortinet.firewall.xauthuser': { - category: 'fortinet', - description: 'XAuth User Name ', - name: 'fortinet.firewall.xauthuser', - type: 'keyword', + 'zeek.dns.TC': { + category: 'zeek', + description: 'The Truncation bit specifies that the message was truncated. ', + name: 'zeek.dns.TC', + type: 'boolean', }, - 'fortinet.firewall.xid': { - category: 'fortinet', - description: 'Wireless X ID ', - name: 'fortinet.firewall.xid', - type: 'integer', + 'zeek.dns.RD': { + category: 'zeek', + description: + 'The Recursion Desired bit in a request message indicates that the client wants recursive service for this query. ', + name: 'zeek.dns.RD', + type: 'boolean', }, - 'googlecloud.destination.instance.project_id': { - category: 'googlecloud', - description: 'ID of the project containing the VM. ', - name: 'googlecloud.destination.instance.project_id', - type: 'keyword', + 'zeek.dns.RA': { + category: 'zeek', + description: + 'The Recursion Available bit in a response message indicates that the name server supports recursive queries. ', + name: 'zeek.dns.RA', + type: 'boolean', }, - 'googlecloud.destination.instance.region': { - category: 'googlecloud', - description: 'Region of the VM. ', - name: 'googlecloud.destination.instance.region', + 'zeek.dns.answers': { + category: 'zeek', + description: 'The set of resource descriptions in the query answer. ', + name: 'zeek.dns.answers', type: 'keyword', }, - 'googlecloud.destination.instance.zone': { - category: 'googlecloud', - description: 'Zone of the VM. ', - name: 'googlecloud.destination.instance.zone', - type: 'keyword', + 'zeek.dns.TTLs': { + category: 'zeek', + description: 'The caching intervals of the associated RRs described by the answers field. ', + name: 'zeek.dns.TTLs', + type: 'double', }, - 'googlecloud.destination.vpc.project_id': { - category: 'googlecloud', - description: 'ID of the project containing the VM. ', - name: 'googlecloud.destination.vpc.project_id', - type: 'keyword', + 'zeek.dns.rejected': { + category: 'zeek', + description: 'Indicates whether the DNS query was rejected by the server. ', + name: 'zeek.dns.rejected', + type: 'boolean', }, - 'googlecloud.destination.vpc.vpc_name': { - category: 'googlecloud', - description: 'VPC on which the VM is operating. ', - name: 'googlecloud.destination.vpc.vpc_name', - type: 'keyword', + 'zeek.dns.total_answers': { + category: 'zeek', + description: 'The total number of resource records in the reply. ', + name: 'zeek.dns.total_answers', + type: 'integer', }, - 'googlecloud.destination.vpc.subnetwork_name': { - category: 'googlecloud', - description: 'Subnetwork on which the VM is operating. ', - name: 'googlecloud.destination.vpc.subnetwork_name', - type: 'keyword', + 'zeek.dns.total_replies': { + category: 'zeek', + description: 'The total number of resource records in the reply message. ', + name: 'zeek.dns.total_replies', + type: 'integer', }, - 'googlecloud.source.instance.project_id': { - category: 'googlecloud', - description: 'ID of the project containing the VM. ', - name: 'googlecloud.source.instance.project_id', - type: 'keyword', + 'zeek.dns.saw_query': { + category: 'zeek', + description: 'Whether the full DNS query has been seen. ', + name: 'zeek.dns.saw_query', + type: 'boolean', }, - 'googlecloud.source.instance.region': { - category: 'googlecloud', - description: 'Region of the VM. ', - name: 'googlecloud.source.instance.region', - type: 'keyword', + 'zeek.dns.saw_reply': { + category: 'zeek', + description: 'Whether the full DNS reply has been seen. ', + name: 'zeek.dns.saw_reply', + type: 'boolean', }, - 'googlecloud.source.instance.zone': { - category: 'googlecloud', - description: 'Zone of the VM. ', - name: 'googlecloud.source.instance.zone', + 'zeek.dpd.analyzer': { + category: 'zeek', + description: 'The analyzer that generated the violation. ', + name: 'zeek.dpd.analyzer', type: 'keyword', }, - 'googlecloud.source.vpc.project_id': { - category: 'googlecloud', - description: 'ID of the project containing the VM. ', - name: 'googlecloud.source.vpc.project_id', + 'zeek.dpd.failure_reason': { + category: 'zeek', + description: 'The textual reason for the analysis failure. ', + name: 'zeek.dpd.failure_reason', type: 'keyword', }, - 'googlecloud.source.vpc.vpc_name': { - category: 'googlecloud', - description: 'VPC on which the VM is operating. ', - name: 'googlecloud.source.vpc.vpc_name', + 'zeek.dpd.packet_segment': { + category: 'zeek', + description: + '(present if policy/frameworks/dpd/packet-segment-logging.bro is loaded) A chunk of the payload that most likely resulted in the protocol violation. ', + name: 'zeek.dpd.packet_segment', type: 'keyword', }, - 'googlecloud.source.vpc.subnetwork_name': { - category: 'googlecloud', - description: 'Subnetwork on which the VM is operating. ', - name: 'googlecloud.source.vpc.subnetwork_name', + 'zeek.files.fuid': { + category: 'zeek', + description: 'A file unique identifier. ', + name: 'zeek.files.fuid', type: 'keyword', }, - 'googlecloud.audit.type': { - category: 'googlecloud', - description: 'Type property. ', - name: 'googlecloud.audit.type', - type: 'keyword', + 'zeek.files.tx_host': { + category: 'zeek', + description: 'The host that transferred the file. ', + name: 'zeek.files.tx_host', + type: 'ip', }, - 'googlecloud.audit.authentication_info.principal_email': { - category: 'googlecloud', - description: 'The email address of the authenticated user making the request. ', - name: 'googlecloud.audit.authentication_info.principal_email', - type: 'keyword', + 'zeek.files.rx_host': { + category: 'zeek', + description: 'The host that received the file. ', + name: 'zeek.files.rx_host', + type: 'ip', }, - 'googlecloud.audit.authentication_info.authority_selector': { - category: 'googlecloud', - description: - 'The authority selector specified by the requestor, if any. It is not guaranteed that the principal was allowed to use this authority. ', - name: 'googlecloud.audit.authentication_info.authority_selector', + 'zeek.files.session_ids': { + category: 'zeek', + description: 'The sessions that have this file. ', + name: 'zeek.files.session_ids', type: 'keyword', }, - 'googlecloud.audit.authorization_info.permission': { - category: 'googlecloud', - description: 'The required IAM permission. ', - name: 'googlecloud.audit.authorization_info.permission', + 'zeek.files.source': { + category: 'zeek', + description: + 'An identification of the source of the file data. E.g. it may be a network protocol over which it was transferred, or a local file path which was read, or some other input source. ', + name: 'zeek.files.source', type: 'keyword', }, - 'googlecloud.audit.authorization_info.granted': { - category: 'googlecloud', - description: 'Whether or not authorization for resource and permission was granted. ', - name: 'googlecloud.audit.authorization_info.granted', - type: 'boolean', + 'zeek.files.depth': { + category: 'zeek', + description: + 'A value to represent the depth of this file in relation to its source. In SMTP, it is the depth of the MIME attachment on the message. In HTTP, it is the depth of the request within the TCP connection. ', + name: 'zeek.files.depth', + type: 'long', }, - 'googlecloud.audit.authorization_info.resource_attributes.service': { - category: 'googlecloud', - description: 'The name of the service. ', - name: 'googlecloud.audit.authorization_info.resource_attributes.service', + 'zeek.files.analyzers': { + category: 'zeek', + description: 'A set of analysis types done during the file analysis. ', + name: 'zeek.files.analyzers', type: 'keyword', }, - 'googlecloud.audit.authorization_info.resource_attributes.name': { - category: 'googlecloud', - description: 'The name of the resource. ', - name: 'googlecloud.audit.authorization_info.resource_attributes.name', + 'zeek.files.mime_type': { + category: 'zeek', + description: 'Mime type of the file. ', + name: 'zeek.files.mime_type', type: 'keyword', }, - 'googlecloud.audit.authorization_info.resource_attributes.type': { - category: 'googlecloud', - description: 'The type of the resource. ', - name: 'googlecloud.audit.authorization_info.resource_attributes.type', + 'zeek.files.filename': { + category: 'zeek', + description: 'Name of the file if available. ', + name: 'zeek.files.filename', type: 'keyword', }, - 'googlecloud.audit.method_name': { - category: 'googlecloud', + 'zeek.files.local_orig': { + category: 'zeek', description: - "The name of the service method or operation. For API calls, this should be the name of the API method. For example, 'google.datastore.v1.Datastore.RunQuery'. ", - name: 'googlecloud.audit.method_name', - type: 'keyword', - }, - 'googlecloud.audit.num_response_items': { - category: 'googlecloud', - description: 'The number of items returned from a List or Query API method, if applicable. ', - name: 'googlecloud.audit.num_response_items', - type: 'long', + 'If the source of this file is a network connection, this field indicates if the data originated from the local network or not. ', + name: 'zeek.files.local_orig', + type: 'boolean', }, - 'googlecloud.audit.request.proto_name': { - category: 'googlecloud', - description: 'Type property of the request. ', - name: 'googlecloud.audit.request.proto_name', - type: 'keyword', + 'zeek.files.is_orig': { + category: 'zeek', + description: + 'If the source of this file is a network connection, this field indicates if the file is being sent by the originator of the connection or the responder. ', + name: 'zeek.files.is_orig', + type: 'boolean', }, - 'googlecloud.audit.request.filter': { - category: 'googlecloud', - description: 'Filter of the request. ', - name: 'googlecloud.audit.request.filter', - type: 'keyword', + 'zeek.files.duration': { + category: 'zeek', + description: 'The duration the file was analyzed for. Not the duration of the session. ', + name: 'zeek.files.duration', + type: 'double', }, - 'googlecloud.audit.request.name': { - category: 'googlecloud', - description: 'Name of the request. ', - name: 'googlecloud.audit.request.name', - type: 'keyword', + 'zeek.files.seen_bytes': { + category: 'zeek', + description: 'Number of bytes provided to the file analysis engine for the file. ', + name: 'zeek.files.seen_bytes', + type: 'long', }, - 'googlecloud.audit.request.resource_name': { - category: 'googlecloud', - description: 'Name of the request resource. ', - name: 'googlecloud.audit.request.resource_name', - type: 'keyword', + 'zeek.files.total_bytes': { + category: 'zeek', + description: 'Total number of bytes that are supposed to comprise the full file. ', + name: 'zeek.files.total_bytes', + type: 'long', }, - 'googlecloud.audit.request_metadata.caller_ip': { - category: 'googlecloud', - description: 'The IP address of the caller. ', - name: 'googlecloud.audit.request_metadata.caller_ip', - type: 'ip', + 'zeek.files.missing_bytes': { + category: 'zeek', + description: + 'The number of bytes in the file stream that were completely missed during the process of analysis. ', + name: 'zeek.files.missing_bytes', + type: 'long', }, - 'googlecloud.audit.request_metadata.caller_supplied_user_agent': { - category: 'googlecloud', + 'zeek.files.overflow_bytes': { + category: 'zeek', description: - 'The user agent of the caller. This information is not authenticated and should be treated accordingly. ', - name: 'googlecloud.audit.request_metadata.caller_supplied_user_agent', - type: 'keyword', + "The number of bytes in the file stream that were not delivered to stream file analyzers. This could be overlapping bytes or bytes that couldn't be reassembled. ", + name: 'zeek.files.overflow_bytes', + type: 'long', }, - 'googlecloud.audit.response.proto_name': { - category: 'googlecloud', - description: 'Type property of the response. ', - name: 'googlecloud.audit.response.proto_name', - type: 'keyword', + 'zeek.files.timedout': { + category: 'zeek', + description: 'Whether the file analysis timed out at least once for the file. ', + name: 'zeek.files.timedout', + type: 'boolean', }, - 'googlecloud.audit.response.details.group': { - category: 'googlecloud', - description: 'The name of the group. ', - name: 'googlecloud.audit.response.details.group', + 'zeek.files.parent_fuid': { + category: 'zeek', + description: + 'Identifier associated with a container file from which this one was extracted as part of the file analysis. ', + name: 'zeek.files.parent_fuid', type: 'keyword', }, - 'googlecloud.audit.response.details.kind': { - category: 'googlecloud', - description: 'The kind of the response details. ', - name: 'googlecloud.audit.response.details.kind', + 'zeek.files.md5': { + category: 'zeek', + description: 'An MD5 digest of the file contents. ', + name: 'zeek.files.md5', type: 'keyword', }, - 'googlecloud.audit.response.details.name': { - category: 'googlecloud', - description: 'The name of the response details. ', - name: 'googlecloud.audit.response.details.name', + 'zeek.files.sha1': { + category: 'zeek', + description: 'A SHA1 digest of the file contents. ', + name: 'zeek.files.sha1', type: 'keyword', }, - 'googlecloud.audit.response.details.uid': { - category: 'googlecloud', - description: 'The uid of the response details. ', - name: 'googlecloud.audit.response.details.uid', + 'zeek.files.sha256': { + category: 'zeek', + description: 'A SHA256 digest of the file contents. ', + name: 'zeek.files.sha256', type: 'keyword', }, - 'googlecloud.audit.response.status': { - category: 'googlecloud', - description: 'Status of the response. ', - name: 'googlecloud.audit.response.status', + 'zeek.files.extracted': { + category: 'zeek', + description: 'Local filename of extracted file. ', + name: 'zeek.files.extracted', type: 'keyword', }, - 'googlecloud.audit.resource_name': { - category: 'googlecloud', + 'zeek.files.extracted_cutoff': { + category: 'zeek', description: - "The resource or collection that is the target of the operation. The name is a scheme-less URI, not including the API service name. For example, 'shelves/SHELF_ID/books'. ", - name: 'googlecloud.audit.resource_name', - type: 'keyword', + 'Indicate whether the file being extracted was cut off hence not extracted completely. ', + name: 'zeek.files.extracted_cutoff', + type: 'boolean', }, - 'googlecloud.audit.resource_location.current_locations': { - category: 'googlecloud', - description: 'Current locations of the resource. ', - name: 'googlecloud.audit.resource_location.current_locations', + 'zeek.files.extracted_size': { + category: 'zeek', + description: 'The number of bytes extracted to disk. ', + name: 'zeek.files.extracted_size', + type: 'long', + }, + 'zeek.files.entropy': { + category: 'zeek', + description: 'The information density of the contents of the file. ', + name: 'zeek.files.entropy', + type: 'double', + }, + 'zeek.ftp.user': { + category: 'zeek', + description: 'User name for the current FTP session. ', + name: 'zeek.ftp.user', type: 'keyword', }, - 'googlecloud.audit.service_name': { - category: 'googlecloud', - description: - 'The name of the API service performing the operation. For example, datastore.googleapis.com. ', - name: 'googlecloud.audit.service_name', + 'zeek.ftp.password': { + category: 'zeek', + description: 'Password for the current FTP session if captured. ', + name: 'zeek.ftp.password', type: 'keyword', }, - 'googlecloud.audit.status.code': { - category: 'googlecloud', - description: 'The status code, which should be an enum value of google.rpc.Code. ', - name: 'googlecloud.audit.status.code', - type: 'integer', + 'zeek.ftp.command': { + category: 'zeek', + description: 'Command given by the client. ', + name: 'zeek.ftp.command', + type: 'keyword', }, - 'googlecloud.audit.status.message': { - category: 'googlecloud', - description: - 'A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client. ', - name: 'googlecloud.audit.status.message', + 'zeek.ftp.arg': { + category: 'zeek', + description: 'Argument for the command if one is given. ', + name: 'zeek.ftp.arg', type: 'keyword', }, - 'googlecloud.firewall.rule_details.priority': { - category: 'googlecloud', - description: 'The priority for the firewall rule.', - name: 'googlecloud.firewall.rule_details.priority', + 'zeek.ftp.file.size': { + category: 'zeek', + description: 'Size of the file if the command indicates a file transfer. ', + name: 'zeek.ftp.file.size', type: 'long', }, - 'googlecloud.firewall.rule_details.action': { - category: 'googlecloud', - description: 'Action that the rule performs on match.', - name: 'googlecloud.firewall.rule_details.action', + 'zeek.ftp.file.mime_type': { + category: 'zeek', + description: 'Sniffed mime type of file. ', + name: 'zeek.ftp.file.mime_type', type: 'keyword', }, - 'googlecloud.firewall.rule_details.direction': { - category: 'googlecloud', - description: 'Direction of traffic that matches this rule.', - name: 'googlecloud.firewall.rule_details.direction', + 'zeek.ftp.file.fuid': { + category: 'zeek', + description: '(present if base/protocols/ftp/files.bro is loaded) File unique ID. ', + name: 'zeek.ftp.file.fuid', type: 'keyword', }, - 'googlecloud.firewall.rule_details.reference': { - category: 'googlecloud', - description: 'Reference to the firewall rule.', - name: 'googlecloud.firewall.rule_details.reference', - type: 'keyword', + 'zeek.ftp.reply.code': { + category: 'zeek', + description: 'Reply code from the server in response to the command. ', + name: 'zeek.ftp.reply.code', + type: 'integer', }, - 'googlecloud.firewall.rule_details.source_range': { - category: 'googlecloud', - description: 'List of source ranges that the firewall rule applies to.', - name: 'googlecloud.firewall.rule_details.source_range', + 'zeek.ftp.reply.msg': { + category: 'zeek', + description: 'Reply message from the server in response to the command. ', + name: 'zeek.ftp.reply.msg', type: 'keyword', }, - 'googlecloud.firewall.rule_details.destination_range': { - category: 'googlecloud', - description: 'List of destination ranges that the firewall applies to.', - name: 'googlecloud.firewall.rule_details.destination_range', - type: 'keyword', + 'zeek.ftp.data_channel.passive': { + category: 'zeek', + description: 'Whether PASV mode is toggled for control channel. ', + name: 'zeek.ftp.data_channel.passive', + type: 'boolean', }, - 'googlecloud.firewall.rule_details.source_tag': { - category: 'googlecloud', - description: 'List of all the source tags that the firewall rule applies to. ', - name: 'googlecloud.firewall.rule_details.source_tag', - type: 'keyword', + 'zeek.ftp.data_channel.originating_host': { + category: 'zeek', + description: 'The host that will be initiating the data connection. ', + name: 'zeek.ftp.data_channel.originating_host', + type: 'ip', }, - 'googlecloud.firewall.rule_details.target_tag': { - category: 'googlecloud', - description: 'List of all the target tags that the firewall rule applies to. ', - name: 'googlecloud.firewall.rule_details.target_tag', - type: 'keyword', + 'zeek.ftp.data_channel.response_host': { + category: 'zeek', + description: 'The host that will be accepting the data connection. ', + name: 'zeek.ftp.data_channel.response_host', + type: 'ip', }, - 'googlecloud.firewall.rule_details.ip_port_info': { - category: 'googlecloud', - description: 'List of ip protocols and applicable port ranges for rules. ', - name: 'googlecloud.firewall.rule_details.ip_port_info', - type: 'array', + 'zeek.ftp.data_channel.response_port': { + category: 'zeek', + description: 'The port at which the acceptor is listening for the data connection. ', + name: 'zeek.ftp.data_channel.response_port', + type: 'integer', }, - 'googlecloud.firewall.rule_details.source_service_account': { - category: 'googlecloud', - description: 'List of all the source service accounts that the firewall rule applies to. ', - name: 'googlecloud.firewall.rule_details.source_service_account', + 'zeek.ftp.cwd': { + category: 'zeek', + description: + "Current working directory that this session is in. By making the default value '.', we can indicate that unless something more concrete is discovered that the existing but unknown directory is ok to use. ", + name: 'zeek.ftp.cwd', type: 'keyword', }, - 'googlecloud.firewall.rule_details.target_service_account': { - category: 'googlecloud', - description: 'List of all the target service accounts that the firewall rule applies to. ', - name: 'googlecloud.firewall.rule_details.target_service_account', + 'zeek.ftp.cmdarg.cmd': { + category: 'zeek', + description: 'Command. ', + name: 'zeek.ftp.cmdarg.cmd', type: 'keyword', }, - 'googlecloud.vpcflow.reporter': { - category: 'googlecloud', - description: "The side which reported the flow. Can be either 'SRC' or 'DEST'. ", - name: 'googlecloud.vpcflow.reporter', + 'zeek.ftp.cmdarg.arg': { + category: 'zeek', + description: 'Argument for the command if one was given. ', + name: 'zeek.ftp.cmdarg.arg', type: 'keyword', }, - 'googlecloud.vpcflow.rtt.ms': { - category: 'googlecloud', + 'zeek.ftp.cmdarg.seq': { + category: 'zeek', + description: 'Counter to track how many commands have been executed. ', + name: 'zeek.ftp.cmdarg.seq', + type: 'integer', + }, + 'zeek.ftp.pending_commands': { + category: 'zeek', description: - 'Latency as measured (for TCP flows only) during the time interval. This is the time elapsed between sending a SEQ and receiving a corresponding ACK and it contains the network RTT as well as the application related delay. ', - name: 'googlecloud.vpcflow.rtt.ms', - type: 'long', + 'Queue for commands that have been sent but not yet responded to are tracked here. ', + name: 'zeek.ftp.pending_commands', + type: 'integer', + }, + 'zeek.ftp.passive': { + category: 'zeek', + description: 'Indicates if the session is in active or passive mode. ', + name: 'zeek.ftp.passive', + type: 'boolean', + }, + 'zeek.ftp.capture_password': { + category: 'zeek', + description: 'Determines if the password will be captured for this request. ', + name: 'zeek.ftp.capture_password', + type: 'boolean', }, - 'gsuite.actor.type': { - category: 'gsuite', + 'zeek.ftp.last_auth_requested': { + category: 'zeek', description: - 'The type of actor. Values can be: *USER*: Another user in the same domain. *EXTERNAL_USER*: A user outside the domain. *KEY*: A non-human actor. ', - name: 'gsuite.actor.type', + 'present if base/protocols/ftp/gridftp.bro is loaded. Last authentication/security mechanism that was used. ', + name: 'zeek.ftp.last_auth_requested', type: 'keyword', }, - 'gsuite.actor.key': { - category: 'gsuite', + 'zeek.http.trans_depth': { + category: 'zeek', description: - 'Only present when `actor.type` is `KEY`. Can be the `consumer_key` of the requestor for OAuth 2LO API requests or an identifier for robot accounts. ', - name: 'gsuite.actor.key', - type: 'keyword', + 'Represents the pipelined depth into the connection of this request/response transaction. ', + name: 'zeek.http.trans_depth', + type: 'integer', }, - 'gsuite.event.type': { - category: 'gsuite', - description: - 'The type of GSuite event, mapped from `items[].events[].type` in the original payload. Each fileset can have a different set of values for it, more details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ', - example: 'audit#activity', - name: 'gsuite.event.type', + 'zeek.http.status_msg': { + category: 'zeek', + description: 'Status message returned by the server. ', + name: 'zeek.http.status_msg', type: 'keyword', }, - 'gsuite.kind': { - category: 'gsuite', - description: - 'The type of API resource, mapped from `kind` in the original payload. More details can be found at https://developers.google.com/admin-sdk/reports/v1/reference/activities/list ', - example: 'audit#activity', - name: 'gsuite.kind', - type: 'keyword', + 'zeek.http.info_code': { + category: 'zeek', + description: 'Last seen 1xx informational reply code returned by the server. ', + name: 'zeek.http.info_code', + type: 'integer', }, - 'gsuite.organization.domain': { - category: 'gsuite', - description: "The domain that is affected by the report's event. ", - name: 'gsuite.organization.domain', + 'zeek.http.info_msg': { + category: 'zeek', + description: 'Last seen 1xx informational reply message returned by the server. ', + name: 'zeek.http.info_msg', type: 'keyword', }, - 'gsuite.admin.application.edition': { - category: 'gsuite', - description: 'The GSuite edition.', - name: 'gsuite.admin.application.edition', + 'zeek.http.tags': { + category: 'zeek', + description: + 'A set of indicators of various attributes discovered and related to a particular request/response pair. ', + name: 'zeek.http.tags', type: 'keyword', }, - 'gsuite.admin.application.name': { - category: 'gsuite', - description: "The application's name.", - name: 'gsuite.admin.application.name', + 'zeek.http.password': { + category: 'zeek', + description: 'Password if basic-auth is performed for the request. ', + name: 'zeek.http.password', type: 'keyword', }, - 'gsuite.admin.application.enabled': { - category: 'gsuite', - description: 'The enabled application.', - name: 'gsuite.admin.application.enabled', - type: 'keyword', + 'zeek.http.captured_password': { + category: 'zeek', + description: 'Determines if the password will be captured for this request. ', + name: 'zeek.http.captured_password', + type: 'boolean', }, - 'gsuite.admin.application.licences_order_number': { - category: 'gsuite', - description: 'Order number used to redeem licenses.', - name: 'gsuite.admin.application.licences_order_number', + 'zeek.http.proxied': { + category: 'zeek', + description: 'All of the headers that may indicate if the HTTP request was proxied. ', + name: 'zeek.http.proxied', type: 'keyword', }, - 'gsuite.admin.application.licences_purchased': { - category: 'gsuite', - description: 'Number of licences purchased.', - name: 'gsuite.admin.application.licences_purchased', - type: 'keyword', + 'zeek.http.range_request': { + category: 'zeek', + description: 'Indicates if this request can assume 206 partial content in response. ', + name: 'zeek.http.range_request', + type: 'boolean', }, - 'gsuite.admin.application.id': { - category: 'gsuite', - description: 'The application ID.', - name: 'gsuite.admin.application.id', + 'zeek.http.client_header_names': { + category: 'zeek', + description: + 'The vector of HTTP header names sent by the client. No header values are included here, just the header names. ', + name: 'zeek.http.client_header_names', type: 'keyword', }, - 'gsuite.admin.application.asp_id': { - category: 'gsuite', - description: 'The application specific password ID.', - name: 'gsuite.admin.application.asp_id', + 'zeek.http.server_header_names': { + category: 'zeek', + description: + 'The vector of HTTP header names sent by the server. No header values are included here, just the header names. ', + name: 'zeek.http.server_header_names', type: 'keyword', }, - 'gsuite.admin.application.package_id': { - category: 'gsuite', - description: 'The mobile application package ID.', - name: 'gsuite.admin.application.package_id', + 'zeek.http.orig_fuids': { + category: 'zeek', + description: 'An ordered vector of file unique IDs from the originator. ', + name: 'zeek.http.orig_fuids', type: 'keyword', }, - 'gsuite.admin.group.email': { - category: 'gsuite', - description: "The group's primary email address.", - name: 'gsuite.admin.group.email', + 'zeek.http.orig_mime_types': { + category: 'zeek', + description: 'An ordered vector of mime types from the originator. ', + name: 'zeek.http.orig_mime_types', type: 'keyword', }, - 'gsuite.admin.new_value': { - category: 'gsuite', - description: 'The new value for the setting.', - name: 'gsuite.admin.new_value', + 'zeek.http.orig_filenames': { + category: 'zeek', + description: 'An ordered vector of filenames from the originator. ', + name: 'zeek.http.orig_filenames', type: 'keyword', }, - 'gsuite.admin.old_value': { - category: 'gsuite', - description: 'The old value for the setting.', - name: 'gsuite.admin.old_value', + 'zeek.http.resp_fuids': { + category: 'zeek', + description: 'An ordered vector of file unique IDs from the responder. ', + name: 'zeek.http.resp_fuids', type: 'keyword', }, - 'gsuite.admin.org_unit.name': { - category: 'gsuite', - description: 'The organizational unit name.', - name: 'gsuite.admin.org_unit.name', + 'zeek.http.resp_mime_types': { + category: 'zeek', + description: 'An ordered vector of mime types from the responder. ', + name: 'zeek.http.resp_mime_types', type: 'keyword', }, - 'gsuite.admin.org_unit.full': { - category: 'gsuite', - description: 'The org unit full path including the root org unit name.', - name: 'gsuite.admin.org_unit.full', + 'zeek.http.resp_filenames': { + category: 'zeek', + description: 'An ordered vector of filenames from the responder. ', + name: 'zeek.http.resp_filenames', type: 'keyword', }, - 'gsuite.admin.setting.name': { - category: 'gsuite', - description: 'The setting name.', - name: 'gsuite.admin.setting.name', - type: 'keyword', + 'zeek.http.orig_mime_depth': { + category: 'zeek', + description: 'Current number of MIME entities in the HTTP request message body. ', + name: 'zeek.http.orig_mime_depth', + type: 'integer', }, - 'gsuite.admin.user_defined_setting.name': { - category: 'gsuite', - description: 'The name of the user-defined setting.', - name: 'gsuite.admin.user_defined_setting.name', - type: 'keyword', + 'zeek.http.resp_mime_depth': { + category: 'zeek', + description: 'Current number of MIME entities in the HTTP response message body. ', + name: 'zeek.http.resp_mime_depth', + type: 'integer', }, - 'gsuite.admin.setting.description': { - category: 'gsuite', - description: 'The setting name.', - name: 'gsuite.admin.setting.description', + 'zeek.intel.seen.indicator': { + category: 'zeek', + description: 'The intelligence indicator. ', + name: 'zeek.intel.seen.indicator', type: 'keyword', }, - 'gsuite.admin.group.priorities': { - category: 'gsuite', - description: 'Group priorities.', - name: 'gsuite.admin.group.priorities', + 'zeek.intel.seen.indicator_type': { + category: 'zeek', + description: 'The type of data the indicator represents. ', + name: 'zeek.intel.seen.indicator_type', type: 'keyword', }, - 'gsuite.admin.domain.alias': { - category: 'gsuite', - description: 'The domain alias.', - name: 'gsuite.admin.domain.alias', + 'zeek.intel.seen.host': { + category: 'zeek', + description: 'If the indicator type was Intel::ADDR, then this field will be present. ', + name: 'zeek.intel.seen.host', type: 'keyword', }, - 'gsuite.admin.domain.name': { - category: 'gsuite', - description: 'The primary domain name.', - name: 'gsuite.admin.domain.name', + 'zeek.intel.seen.conn': { + category: 'zeek', + description: + 'If the data was discovered within a connection, the connection record should go here to give context to the data. ', + name: 'zeek.intel.seen.conn', type: 'keyword', }, - 'gsuite.admin.domain.secondary_name': { - category: 'gsuite', - description: 'The secondary domain name.', - name: 'gsuite.admin.domain.secondary_name', + 'zeek.intel.seen.where': { + category: 'zeek', + description: 'Where the data was discovered. ', + name: 'zeek.intel.seen.where', type: 'keyword', }, - 'gsuite.admin.managed_configuration': { - category: 'gsuite', - description: 'The name of the managed configuration.', - name: 'gsuite.admin.managed_configuration', + 'zeek.intel.seen.node': { + category: 'zeek', + description: 'The name of the node where the match was discovered. ', + name: 'zeek.intel.seen.node', type: 'keyword', }, - 'gsuite.admin.non_featured_services_selection': { - category: 'gsuite', + 'zeek.intel.seen.uid': { + category: 'zeek', description: - 'Non-featured services selection. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-application-settings#FLASHLIGHT_EDU_NON_FEATURED_SERVICES_SELECTED ', - name: 'gsuite.admin.non_featured_services_selection', + 'If the data was discovered within a connection, the connection uid should go here to give context to the data. If the conn field is provided, this will be automatically filled out. ', + name: 'zeek.intel.seen.uid', type: 'keyword', }, - 'gsuite.admin.field': { - category: 'gsuite', - description: 'The name of the field.', - name: 'gsuite.admin.field', - type: 'keyword', + 'zeek.intel.seen.f': { + category: 'zeek', + description: + 'If the data was discovered within a file, the file record should go here to provide context to the data. ', + name: 'zeek.intel.seen.f', + type: 'object', }, - 'gsuite.admin.resource.id': { - category: 'gsuite', - description: 'The name of the resource identifier.', - name: 'gsuite.admin.resource.id', + 'zeek.intel.seen.fuid': { + category: 'zeek', + description: + 'If the data was discovered within a file, the file uid should go here to provide context to the data. If the file record f is provided, this will be automatically filled out. ', + name: 'zeek.intel.seen.fuid', type: 'keyword', }, - 'gsuite.admin.user.email': { - category: 'gsuite', - description: "The user's primary email address.", - name: 'gsuite.admin.user.email', + 'zeek.intel.matched': { + category: 'zeek', + description: 'Event to represent a match in the intelligence data from data that was seen. ', + name: 'zeek.intel.matched', type: 'keyword', }, - 'gsuite.admin.user.nickname': { - category: 'gsuite', - description: "The user's nickname.", - name: 'gsuite.admin.user.nickname', + 'zeek.intel.sources': { + category: 'zeek', + description: 'Sources which supplied data for this match. ', + name: 'zeek.intel.sources', type: 'keyword', }, - 'gsuite.admin.user.birthdate': { - category: 'gsuite', - description: "The user's birth date.", - name: 'gsuite.admin.user.birthdate', - type: 'date', - }, - 'gsuite.admin.gateway.name': { - category: 'gsuite', - description: 'Gateway name. Present on some chat settings.', - name: 'gsuite.admin.gateway.name', + 'zeek.intel.fuid': { + category: 'zeek', + description: + 'If a file was associated with this intelligence hit, this is the uid for the file. ', + name: 'zeek.intel.fuid', type: 'keyword', }, - 'gsuite.admin.chrome_os.session_type': { - category: 'gsuite', - description: 'Chrome OS session type.', - name: 'gsuite.admin.chrome_os.session_type', + 'zeek.intel.file_mime_type': { + category: 'zeek', + description: + 'A mime type if the intelligence hit is related to a file. If the $f field is provided this will be automatically filled out. ', + name: 'zeek.intel.file_mime_type', type: 'keyword', }, - 'gsuite.admin.device.serial_number': { - category: 'gsuite', - description: 'Device serial number.', - name: 'gsuite.admin.device.serial_number', + 'zeek.intel.file_desc': { + category: 'zeek', + description: + 'Frequently files can be described to give a bit more context. If the $f field is provided this field will be automatically filled out. ', + name: 'zeek.intel.file_desc', type: 'keyword', }, - 'gsuite.admin.device.id': { - category: 'gsuite', - name: 'gsuite.admin.device.id', + 'zeek.irc.nick': { + category: 'zeek', + description: 'Nickname given for the connection. ', + name: 'zeek.irc.nick', type: 'keyword', }, - 'gsuite.admin.device.type': { - category: 'gsuite', - description: 'Device type.', - name: 'gsuite.admin.device.type', + 'zeek.irc.user': { + category: 'zeek', + description: 'Username given for the connection. ', + name: 'zeek.irc.user', type: 'keyword', }, - 'gsuite.admin.print_server.name': { - category: 'gsuite', - description: 'The name of the print server.', - name: 'gsuite.admin.print_server.name', + 'zeek.irc.command': { + category: 'zeek', + description: 'Command given by the client. ', + name: 'zeek.irc.command', type: 'keyword', }, - 'gsuite.admin.printer.name': { - category: 'gsuite', - description: 'The name of the printer.', - name: 'gsuite.admin.printer.name', + 'zeek.irc.value': { + category: 'zeek', + description: 'Value for the command given by the client. ', + name: 'zeek.irc.value', type: 'keyword', }, - 'gsuite.admin.device.command_details': { - category: 'gsuite', - description: 'Command details.', - name: 'gsuite.admin.device.command_details', + 'zeek.irc.addl': { + category: 'zeek', + description: 'Any additional data for the command. ', + name: 'zeek.irc.addl', type: 'keyword', }, - 'gsuite.admin.role.id': { - category: 'gsuite', - description: 'Unique identifier for this role privilege.', - name: 'gsuite.admin.role.id', + 'zeek.irc.dcc.file.name': { + category: 'zeek', + description: 'Present if base/protocols/irc/dcc-send.bro is loaded. DCC filename requested. ', + name: 'zeek.irc.dcc.file.name', type: 'keyword', }, - 'gsuite.admin.role.name': { - category: 'gsuite', + 'zeek.irc.dcc.file.size': { + category: 'zeek', description: - 'The role name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-delegated-admin-settings ', - name: 'gsuite.admin.role.name', - type: 'keyword', + 'Present if base/protocols/irc/dcc-send.bro is loaded. Size of the DCC transfer as indicated by the sender. ', + name: 'zeek.irc.dcc.file.size', + type: 'long', }, - 'gsuite.admin.privilege.name': { - category: 'gsuite', - description: 'Privilege name.', - name: 'gsuite.admin.privilege.name', + 'zeek.irc.dcc.mime_type': { + category: 'zeek', + description: + 'present if base/protocols/irc/dcc-send.bro is loaded. Sniffed mime type of the file. ', + name: 'zeek.irc.dcc.mime_type', type: 'keyword', }, - 'gsuite.admin.service.name': { - category: 'gsuite', - description: 'The service name.', - name: 'gsuite.admin.service.name', + 'zeek.irc.fuid': { + category: 'zeek', + description: 'present if base/protocols/irc/files.bro is loaded. File unique ID. ', + name: 'zeek.irc.fuid', type: 'keyword', }, - 'gsuite.admin.url.name': { - category: 'gsuite', - description: 'The website name.', - name: 'gsuite.admin.url.name', + 'zeek.kerberos.request_type': { + category: 'zeek', + description: 'Request type - Authentication Service (AS) or Ticket Granting Service (TGS). ', + name: 'zeek.kerberos.request_type', type: 'keyword', }, - 'gsuite.admin.product.name': { - category: 'gsuite', - description: 'The product name.', - name: 'gsuite.admin.product.name', + 'zeek.kerberos.client': { + category: 'zeek', + description: 'Client name. ', + name: 'zeek.kerberos.client', type: 'keyword', }, - 'gsuite.admin.product.sku': { - category: 'gsuite', - description: 'The product SKU.', - name: 'gsuite.admin.product.sku', + 'zeek.kerberos.service': { + category: 'zeek', + description: 'Service name. ', + name: 'zeek.kerberos.service', type: 'keyword', }, - 'gsuite.admin.bulk_upload.failed': { - category: 'gsuite', - description: 'Number of failed records in bulk upload operation.', - name: 'gsuite.admin.bulk_upload.failed', - type: 'long', - }, - 'gsuite.admin.bulk_upload.total': { - category: 'gsuite', - description: 'Number of total records in bulk upload operation.', - name: 'gsuite.admin.bulk_upload.total', - type: 'long', - }, - 'gsuite.admin.group.allowed_list': { - category: 'gsuite', - description: 'Names of allow-listed groups.', - name: 'gsuite.admin.group.allowed_list', - type: 'keyword', + 'zeek.kerberos.success': { + category: 'zeek', + description: 'Request result. ', + name: 'zeek.kerberos.success', + type: 'boolean', }, - 'gsuite.admin.email.quarantine_name': { - category: 'gsuite', - description: 'The name of the quarantine.', - name: 'gsuite.admin.email.quarantine_name', - type: 'keyword', + 'zeek.kerberos.error.code': { + category: 'zeek', + description: 'Error code. ', + name: 'zeek.kerberos.error.code', + type: 'integer', }, - 'gsuite.admin.email.log_search_filter.message_id': { - category: 'gsuite', - description: "The log search filter's email message ID.", - name: 'gsuite.admin.email.log_search_filter.message_id', + 'zeek.kerberos.error.msg': { + category: 'zeek', + description: 'Error message. ', + name: 'zeek.kerberos.error.msg', type: 'keyword', }, - 'gsuite.admin.email.log_search_filter.start_date': { - category: 'gsuite', - description: "The log search filter's start date.", - name: 'gsuite.admin.email.log_search_filter.start_date', + 'zeek.kerberos.valid.from': { + category: 'zeek', + description: 'Ticket valid from. ', + name: 'zeek.kerberos.valid.from', type: 'date', }, - 'gsuite.admin.email.log_search_filter.end_date': { - category: 'gsuite', - description: "The log search filter's ending date.", - name: 'gsuite.admin.email.log_search_filter.end_date', + 'zeek.kerberos.valid.until': { + category: 'zeek', + description: 'Ticket valid until. ', + name: 'zeek.kerberos.valid.until', type: 'date', }, - 'gsuite.admin.email.log_search_filter.recipient.value': { - category: 'gsuite', - description: "The log search filter's email recipient.", - name: 'gsuite.admin.email.log_search_filter.recipient.value', - type: 'keyword', + 'zeek.kerberos.valid.days': { + category: 'zeek', + description: 'Number of days the ticket is valid for. ', + name: 'zeek.kerberos.valid.days', + type: 'integer', }, - 'gsuite.admin.email.log_search_filter.sender.value': { - category: 'gsuite', - description: "The log search filter's email sender.", - name: 'gsuite.admin.email.log_search_filter.sender.value', + 'zeek.kerberos.cipher': { + category: 'zeek', + description: 'Ticket encryption type. ', + name: 'zeek.kerberos.cipher', type: 'keyword', }, - 'gsuite.admin.email.log_search_filter.recipient.ip': { - category: 'gsuite', - description: "The log search filter's email recipient's IP address.", - name: 'gsuite.admin.email.log_search_filter.recipient.ip', - type: 'ip', - }, - 'gsuite.admin.email.log_search_filter.sender.ip': { - category: 'gsuite', - description: "The log search filter's email sender's IP address.", - name: 'gsuite.admin.email.log_search_filter.sender.ip', - type: 'ip', + 'zeek.kerberos.forwardable': { + category: 'zeek', + description: 'Forwardable ticket requested. ', + name: 'zeek.kerberos.forwardable', + type: 'boolean', }, - 'gsuite.admin.chrome_licenses.enabled': { - category: 'gsuite', - description: - 'Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ', - name: 'gsuite.admin.chrome_licenses.enabled', - type: 'keyword', + 'zeek.kerberos.renewable': { + category: 'zeek', + description: 'Renewable ticket requested. ', + name: 'zeek.kerberos.renewable', + type: 'boolean', }, - 'gsuite.admin.chrome_licenses.allowed': { - category: 'gsuite', - description: - 'Licences enabled. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-org-settings ', - name: 'gsuite.admin.chrome_licenses.allowed', + 'zeek.kerberos.ticket.auth': { + category: 'zeek', + description: 'Hash of ticket used to authorize request/transaction. ', + name: 'zeek.kerberos.ticket.auth', type: 'keyword', }, - 'gsuite.admin.oauth2.service.name': { - category: 'gsuite', - description: - 'OAuth2 service name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ', - name: 'gsuite.admin.oauth2.service.name', + 'zeek.kerberos.ticket.new': { + category: 'zeek', + description: 'Hash of ticket returned by the KDC. ', + name: 'zeek.kerberos.ticket.new', type: 'keyword', }, - 'gsuite.admin.oauth2.application.id': { - category: 'gsuite', - description: 'OAuth2 application ID.', - name: 'gsuite.admin.oauth2.application.id', + 'zeek.kerberos.cert.client.value': { + category: 'zeek', + description: 'Client certificate. ', + name: 'zeek.kerberos.cert.client.value', type: 'keyword', }, - 'gsuite.admin.oauth2.application.name': { - category: 'gsuite', - description: 'OAuth2 application name.', - name: 'gsuite.admin.oauth2.application.name', + 'zeek.kerberos.cert.client.fuid': { + category: 'zeek', + description: 'File unique ID of client cert. ', + name: 'zeek.kerberos.cert.client.fuid', type: 'keyword', }, - 'gsuite.admin.oauth2.application.type': { - category: 'gsuite', - description: - 'OAuth2 application type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings ', - name: 'gsuite.admin.oauth2.application.type', + 'zeek.kerberos.cert.client.subject': { + category: 'zeek', + description: 'Subject of client certificate. ', + name: 'zeek.kerberos.cert.client.subject', type: 'keyword', }, - 'gsuite.admin.verification_method': { - category: 'gsuite', - description: - 'Related verification method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-security-settings and https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ', - name: 'gsuite.admin.verification_method', + 'zeek.kerberos.cert.server.value': { + category: 'zeek', + description: 'Server certificate. ', + name: 'zeek.kerberos.cert.server.value', type: 'keyword', }, - 'gsuite.admin.alert.name': { - category: 'gsuite', - description: 'The alert name.', - name: 'gsuite.admin.alert.name', + 'zeek.kerberos.cert.server.fuid': { + category: 'zeek', + description: 'File unique ID of server certificate. ', + name: 'zeek.kerberos.cert.server.fuid', type: 'keyword', }, - 'gsuite.admin.rule.name': { - category: 'gsuite', - description: 'The rule name.', - name: 'gsuite.admin.rule.name', + 'zeek.kerberos.cert.server.subject': { + category: 'zeek', + description: 'Subject of server certificate. ', + name: 'zeek.kerberos.cert.server.subject', type: 'keyword', }, - 'gsuite.admin.api.client.name': { - category: 'gsuite', - description: 'The API client name.', - name: 'gsuite.admin.api.client.name', + 'zeek.modbus.function': { + category: 'zeek', + description: 'The name of the function message that was sent. ', + name: 'zeek.modbus.function', type: 'keyword', }, - 'gsuite.admin.api.scopes': { - category: 'gsuite', - description: 'The API scopes.', - name: 'gsuite.admin.api.scopes', + 'zeek.modbus.exception': { + category: 'zeek', + description: 'The exception if the response was a failure. ', + name: 'zeek.modbus.exception', type: 'keyword', }, - 'gsuite.admin.mdm.token': { - category: 'gsuite', - description: 'The MDM vendor enrollment token.', - name: 'gsuite.admin.mdm.token', - type: 'keyword', + 'zeek.modbus.track_address': { + category: 'zeek', + description: + 'Present if policy/protocols/modbus/track-memmap.bro is loaded. Modbus track address. ', + name: 'zeek.modbus.track_address', + type: 'integer', }, - 'gsuite.admin.mdm.vendor': { - category: 'gsuite', - description: "The MDM vendor's name.", - name: 'gsuite.admin.mdm.vendor', + 'zeek.mysql.cmd': { + category: 'zeek', + description: 'The command that was issued. ', + name: 'zeek.mysql.cmd', type: 'keyword', }, - 'gsuite.admin.info_type': { - category: 'gsuite', - description: - 'This will be used to state what kind of information was changed. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-domain-settings ', - name: 'gsuite.admin.info_type', + 'zeek.mysql.arg': { + category: 'zeek', + description: 'The argument issued to the command. ', + name: 'zeek.mysql.arg', type: 'keyword', }, - 'gsuite.admin.email_monitor.dest_email': { - category: 'gsuite', - description: 'The destination address of the email monitor.', - name: 'gsuite.admin.email_monitor.dest_email', - type: 'keyword', + 'zeek.mysql.success': { + category: 'zeek', + description: 'Whether the command succeeded. ', + name: 'zeek.mysql.success', + type: 'boolean', }, - 'gsuite.admin.email_monitor.level.chat': { - category: 'gsuite', - description: 'The chat email monitor level.', - name: 'gsuite.admin.email_monitor.level.chat', - type: 'keyword', + 'zeek.mysql.rows': { + category: 'zeek', + description: 'The number of affected rows, if any. ', + name: 'zeek.mysql.rows', + type: 'integer', }, - 'gsuite.admin.email_monitor.level.draft': { - category: 'gsuite', - description: 'The draft email monitor level.', - name: 'gsuite.admin.email_monitor.level.draft', + 'zeek.mysql.response': { + category: 'zeek', + description: 'Server message, if any. ', + name: 'zeek.mysql.response', type: 'keyword', }, - 'gsuite.admin.email_monitor.level.incoming': { - category: 'gsuite', - description: 'The incoming email monitor level.', - name: 'gsuite.admin.email_monitor.level.incoming', + 'zeek.notice.connection_id': { + category: 'zeek', + description: 'Identifier of the related connection session. ', + name: 'zeek.notice.connection_id', type: 'keyword', }, - 'gsuite.admin.email_monitor.level.outgoing': { - category: 'gsuite', - description: 'The outgoing email monitor level.', - name: 'gsuite.admin.email_monitor.level.outgoing', + 'zeek.notice.icmp_id': { + category: 'zeek', + description: 'Identifier of the related ICMP session. ', + name: 'zeek.notice.icmp_id', type: 'keyword', }, - 'gsuite.admin.email_dump.include_deleted': { - category: 'gsuite', - description: 'Indicates if deleted emails are included in the export.', - name: 'gsuite.admin.email_dump.include_deleted', - type: 'boolean', - }, - 'gsuite.admin.email_dump.package_content': { - category: 'gsuite', - description: 'The contents of the mailbox package.', - name: 'gsuite.admin.email_dump.package_content', + 'zeek.notice.file.id': { + category: 'zeek', + description: 'An identifier associated with a single file that is related to this notice. ', + name: 'zeek.notice.file.id', type: 'keyword', }, - 'gsuite.admin.email_dump.query': { - category: 'gsuite', - description: 'The search query used for the dump.', - name: 'gsuite.admin.email_dump.query', + 'zeek.notice.file.parent_id': { + category: 'zeek', + description: 'Identifier associated with a container file from which this one was extracted. ', + name: 'zeek.notice.file.parent_id', type: 'keyword', }, - 'gsuite.admin.request.id': { - category: 'gsuite', - description: 'The request ID.', - name: 'gsuite.admin.request.id', + 'zeek.notice.file.source': { + category: 'zeek', + description: + 'An identification of the source of the file data. E.g. it may be a network protocol over which it was transferred, or a local file path which was read, or some other input source. ', + name: 'zeek.notice.file.source', type: 'keyword', }, - 'gsuite.admin.mobile.action.id': { - category: 'gsuite', - description: "The mobile device action's ID.", - name: 'gsuite.admin.mobile.action.id', + 'zeek.notice.file.mime_type': { + category: 'zeek', + description: 'A mime type if the notice is related to a file. ', + name: 'zeek.notice.file.mime_type', type: 'keyword', }, - 'gsuite.admin.mobile.action.type': { - category: 'gsuite', + 'zeek.notice.file.is_orig': { + category: 'zeek', description: - "The mobile device action's type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ", - name: 'gsuite.admin.mobile.action.type', - type: 'keyword', + 'If the source of this file is a network connection, this field indicates if the file is being sent by the originator of the connection or the responder. ', + name: 'zeek.notice.file.is_orig', + type: 'boolean', }, - 'gsuite.admin.mobile.certificate.name': { - category: 'gsuite', - description: 'The mobile certificate common name.', - name: 'gsuite.admin.mobile.certificate.name', - type: 'keyword', + 'zeek.notice.file.seen_bytes': { + category: 'zeek', + description: 'Number of bytes provided to the file analysis engine for the file. ', + name: 'zeek.notice.file.seen_bytes', + type: 'long', }, - 'gsuite.admin.mobile.company_owned_devices': { - category: 'gsuite', - description: 'The number of devices a company owns.', - name: 'gsuite.admin.mobile.company_owned_devices', + 'zeek.notice.ffile.total_bytes': { + category: 'zeek', + description: 'Total number of bytes that are supposed to comprise the full file. ', + name: 'zeek.notice.ffile.total_bytes', type: 'long', }, - 'gsuite.admin.distribution.entity.name': { - category: 'gsuite', + 'zeek.notice.file.missing_bytes': { + category: 'zeek', description: - 'The distribution entity value, which can be a group name or an org-unit name. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ', - name: 'gsuite.admin.distribution.entity.name', - type: 'keyword', + 'The number of bytes in the file stream that were completely missed during the process of analysis. ', + name: 'zeek.notice.file.missing_bytes', + type: 'long', }, - 'gsuite.admin.distribution.entity.type': { - category: 'gsuite', + 'zeek.notice.file.overflow_bytes': { + category: 'zeek', description: - 'The distribution entity type, which can be a group or an org-unit. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/admin-mobile-settings ', - name: 'gsuite.admin.distribution.entity.type', - type: 'keyword', - }, - 'gsuite.drive.billable': { - category: 'gsuite', - description: 'Whether this activity is billable.', - name: 'gsuite.drive.billable', - type: 'boolean', + "The number of bytes in the file stream that were not delivered to stream file analyzers. This could be overlapping bytes or bytes that couldn't be reassembled. ", + name: 'zeek.notice.file.overflow_bytes', + type: 'long', }, - 'gsuite.drive.source_folder_id': { - category: 'gsuite', - name: 'gsuite.drive.source_folder_id', + 'zeek.notice.fuid': { + category: 'zeek', + description: 'A file unique ID if this notice is related to a file. ', + name: 'zeek.notice.fuid', type: 'keyword', }, - 'gsuite.drive.source_folder_title': { - category: 'gsuite', - name: 'gsuite.drive.source_folder_title', + 'zeek.notice.note': { + category: 'zeek', + description: 'The type of the notice. ', + name: 'zeek.notice.note', type: 'keyword', }, - 'gsuite.drive.destination_folder_id': { - category: 'gsuite', - name: 'gsuite.drive.destination_folder_id', + 'zeek.notice.msg': { + category: 'zeek', + description: 'The human readable message for the notice. ', + name: 'zeek.notice.msg', type: 'keyword', }, - 'gsuite.drive.destination_folder_title': { - category: 'gsuite', - name: 'gsuite.drive.destination_folder_title', + 'zeek.notice.sub': { + category: 'zeek', + description: 'The human readable sub-message. ', + name: 'zeek.notice.sub', type: 'keyword', }, - 'gsuite.drive.file.id': { - category: 'gsuite', - name: 'gsuite.drive.file.id', - type: 'keyword', + 'zeek.notice.n': { + category: 'zeek', + description: 'Associated count, or a status code. ', + name: 'zeek.notice.n', + type: 'long', }, - 'gsuite.drive.file.type': { - category: 'gsuite', - description: - 'Document Drive type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.file.type', + 'zeek.notice.peer_name': { + category: 'zeek', + description: 'Name of remote peer that raised this notice. ', + name: 'zeek.notice.peer_name', type: 'keyword', }, - 'gsuite.drive.originating_app_id': { - category: 'gsuite', - description: 'The Google Cloud Project ID of the application that performed the action. ', - name: 'gsuite.drive.originating_app_id', - type: 'keyword', + 'zeek.notice.peer_descr': { + category: 'zeek', + description: 'Textual description for the peer that raised this notice. ', + name: 'zeek.notice.peer_descr', + type: 'text', }, - 'gsuite.drive.file.owner.email': { - category: 'gsuite', - name: 'gsuite.drive.file.owner.email', + 'zeek.notice.actions': { + category: 'zeek', + description: 'The actions which have been applied to this notice. ', + name: 'zeek.notice.actions', type: 'keyword', }, - 'gsuite.drive.file.owner.is_shared_drive': { - category: 'gsuite', - description: 'Boolean flag denoting whether owner is a shared drive. ', - name: 'gsuite.drive.file.owner.is_shared_drive', - type: 'boolean', - }, - 'gsuite.drive.primary_event': { - category: 'gsuite', + 'zeek.notice.email_body_sections': { + category: 'zeek', description: - 'Whether this is a primary event. A single user action in Drive may generate several events. ', - name: 'gsuite.drive.primary_event', - type: 'boolean', + 'By adding chunks of text into this element, other scripts can expand on notices that are being emailed. ', + name: 'zeek.notice.email_body_sections', + type: 'text', }, - 'gsuite.drive.shared_drive_id': { - category: 'gsuite', + 'zeek.notice.email_delay_tokens': { + category: 'zeek', description: - 'The unique identifier of the Team Drive. Only populated for for events relating to a Team Drive or item contained inside a Team Drive. ', - name: 'gsuite.drive.shared_drive_id', + 'Adding a string token to this set will cause the built-in emailing functionality to delay sending the email either the token has been removed or the email has been delayed for the specified time duration. ', + name: 'zeek.notice.email_delay_tokens', type: 'keyword', }, - 'gsuite.drive.visibility': { - category: 'gsuite', + 'zeek.notice.identifier': { + category: 'zeek', description: - 'Visibility of target file. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.visibility', + 'This field is provided when a notice is generated for the purpose of deduplicating notices. ', + name: 'zeek.notice.identifier', type: 'keyword', }, - 'gsuite.drive.new_value': { - category: 'gsuite', + 'zeek.notice.suppress_for': { + category: 'zeek', description: - 'When a setting or property of the file changes, the new value for it will appear here. ', - name: 'gsuite.drive.new_value', - type: 'keyword', + 'This field indicates the length of time that this unique notice should be suppressed. ', + name: 'zeek.notice.suppress_for', + type: 'double', }, - 'gsuite.drive.old_value': { - category: 'gsuite', - description: - 'When a setting or property of the file changes, the old value for it will appear here. ', - name: 'gsuite.drive.old_value', - type: 'keyword', + 'zeek.notice.dropped': { + category: 'zeek', + description: 'Indicate if the source IP address was dropped and denied network access. ', + name: 'zeek.notice.dropped', + type: 'boolean', }, - 'gsuite.drive.sheets_import_range_recipient_doc': { - category: 'gsuite', - description: 'Doc ID of the recipient of a sheets import range.', - name: 'gsuite.drive.sheets_import_range_recipient_doc', + 'zeek.ntlm.domain': { + category: 'zeek', + description: 'Domain name given by the client. ', + name: 'zeek.ntlm.domain', type: 'keyword', }, - 'gsuite.drive.old_visibility': { - category: 'gsuite', - description: 'When visibility changes, this holds the old value. ', - name: 'gsuite.drive.old_visibility', + 'zeek.ntlm.hostname': { + category: 'zeek', + description: 'Hostname given by the client. ', + name: 'zeek.ntlm.hostname', type: 'keyword', }, - 'gsuite.drive.visibility_change': { - category: 'gsuite', - description: 'When visibility changes, this holds the new overall visibility of the file. ', - name: 'gsuite.drive.visibility_change', - type: 'keyword', + 'zeek.ntlm.success': { + category: 'zeek', + description: 'Indicate whether or not the authentication was successful. ', + name: 'zeek.ntlm.success', + type: 'boolean', }, - 'gsuite.drive.target_domain': { - category: 'gsuite', - description: - 'The domain for which the acccess scope was changed. This can also be the alias all to indicate the access scope was changed for all domains that have visibility for this document. ', - name: 'gsuite.drive.target_domain', + 'zeek.ntlm.username': { + category: 'zeek', + description: 'Username given by the client. ', + name: 'zeek.ntlm.username', type: 'keyword', }, - 'gsuite.drive.added_role': { - category: 'gsuite', - description: - 'Added membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.added_role', + 'zeek.ntlm.server.name.dns': { + category: 'zeek', + description: 'DNS name given by the server in a CHALLENGE. ', + name: 'zeek.ntlm.server.name.dns', type: 'keyword', }, - 'gsuite.drive.membership_change_type': { - category: 'gsuite', - description: - 'Type of change in Team Drive membership of a user/group. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.membership_change_type', + 'zeek.ntlm.server.name.netbios': { + category: 'zeek', + description: 'NetBIOS name given by the server in a CHALLENGE. ', + name: 'zeek.ntlm.server.name.netbios', type: 'keyword', }, - 'gsuite.drive.shared_drive_settings_change_type': { - category: 'gsuite', - description: - 'Type of change in Team Drive settings. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.shared_drive_settings_change_type', + 'zeek.ntlm.server.name.tree': { + category: 'zeek', + description: 'Tree name given by the server in a CHALLENGE. ', + name: 'zeek.ntlm.server.name.tree', type: 'keyword', }, - 'gsuite.drive.removed_role': { - category: 'gsuite', - description: - 'Removed membership role of a user/group in a Team Drive. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/drive ', - name: 'gsuite.drive.removed_role', - type: 'keyword', + 'zeek.ntp.version': { + category: 'zeek', + description: 'The NTP version number (1, 2, 3, 4). ', + name: 'zeek.ntp.version', + type: 'integer', }, - 'gsuite.drive.target': { - category: 'gsuite', - description: 'Target user or group.', - name: 'gsuite.drive.target', - type: 'keyword', + 'zeek.ntp.mode': { + category: 'zeek', + description: 'The NTP mode being used. ', + name: 'zeek.ntp.mode', + type: 'integer', }, - 'gsuite.groups.acl_permission': { - category: 'gsuite', - description: - 'Group permission setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'gsuite.groups.acl_permission', - type: 'keyword', + 'zeek.ntp.stratum': { + category: 'zeek', + description: 'The stratum (primary server, secondary server, etc.). ', + name: 'zeek.ntp.stratum', + type: 'integer', }, - 'gsuite.groups.email': { - category: 'gsuite', - description: 'Group email. ', - name: 'gsuite.groups.email', - type: 'keyword', + 'zeek.ntp.poll': { + category: 'zeek', + description: 'The maximum interval between successive messages in seconds. ', + name: 'zeek.ntp.poll', + type: 'double', }, - 'gsuite.groups.member.email': { - category: 'gsuite', - description: 'Member email. ', - name: 'gsuite.groups.member.email', - type: 'keyword', + 'zeek.ntp.precision': { + category: 'zeek', + description: 'The precision of the system clock in seconds. ', + name: 'zeek.ntp.precision', + type: 'double', }, - 'gsuite.groups.member.role': { - category: 'gsuite', - description: - 'Member role. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'gsuite.groups.member.role', - type: 'keyword', + 'zeek.ntp.root_delay': { + category: 'zeek', + description: 'Total round-trip delay to the reference clock in seconds. ', + name: 'zeek.ntp.root_delay', + type: 'double', }, - 'gsuite.groups.setting': { - category: 'gsuite', - description: - 'Group setting updated. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'gsuite.groups.setting', - type: 'keyword', + 'zeek.ntp.root_disp': { + category: 'zeek', + description: 'Total dispersion to the reference clock in seconds. ', + name: 'zeek.ntp.root_disp', + type: 'double', }, - 'gsuite.groups.new_value': { - category: 'gsuite', + 'zeek.ntp.ref_id': { + category: 'zeek', description: - 'New value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'gsuite.groups.new_value', + 'For stratum 0, 4 character string used for debugging. For stratum 1, ID assigned to the reference clock by IANA. Above stratum 1, when using IPv4, the IP address of the reference clock. Note that the NTP protocol did not originally specify a large enough field to represent IPv6 addresses, so they use the first four bytes of the MD5 hash of the reference clock’s IPv6 address (i.e. an IPv4 address here is not necessarily IPv4). ', + name: 'zeek.ntp.ref_id', type: 'keyword', }, - 'gsuite.groups.old_value': { - category: 'gsuite', - description: - 'Old value(s) of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups', - name: 'gsuite.groups.old_value', - type: 'keyword', + 'zeek.ntp.ref_time': { + category: 'zeek', + description: 'Time when the system clock was last set or correct. ', + name: 'zeek.ntp.ref_time', + type: 'date', }, - 'gsuite.groups.value': { - category: 'gsuite', - description: - 'Value of the group setting. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/groups ', - name: 'gsuite.groups.value', - type: 'keyword', + 'zeek.ntp.org_time': { + category: 'zeek', + description: 'Time at the client when the request departed for the NTP server. ', + name: 'zeek.ntp.org_time', + type: 'date', }, - 'gsuite.groups.message.id': { - category: 'gsuite', - description: 'SMTP message Id of an email message. Present for moderation events. ', - name: 'gsuite.groups.message.id', - type: 'keyword', + 'zeek.ntp.rec_time': { + category: 'zeek', + description: 'Time at the server when the request arrived from the NTP client. ', + name: 'zeek.ntp.rec_time', + type: 'date', }, - 'gsuite.groups.message.moderation_action': { - category: 'gsuite', - description: 'Message moderation action. Possible values are `approved` and `rejected`. ', - name: 'gsuite.groups.message.moderation_action', - type: 'keyword', + 'zeek.ntp.xmt_time': { + category: 'zeek', + description: 'Time at the server when the response departed for the NTP client. ', + name: 'zeek.ntp.xmt_time', + type: 'date', }, - 'gsuite.groups.status': { - category: 'gsuite', - description: - 'A status describing the output of an operation. Possible values are `failed` and `succeeded`. ', - name: 'gsuite.groups.status', - type: 'keyword', + 'zeek.ntp.num_exts': { + category: 'zeek', + description: 'Number of extension fields (which are not currently parsed). ', + name: 'zeek.ntp.num_exts', + type: 'integer', }, - 'gsuite.login.affected_email_address': { - category: 'gsuite', - name: 'gsuite.login.affected_email_address', + 'zeek.ocsp.file_id': { + category: 'zeek', + description: 'File id of the OCSP reply. ', + name: 'zeek.ocsp.file_id', type: 'keyword', }, - 'gsuite.login.challenge_method': { - category: 'gsuite', - description: - 'Login challenge method. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'gsuite.login.challenge_method', + 'zeek.ocsp.hash.algorithm': { + category: 'zeek', + description: 'Hash algorithm used to generate issuerNameHash and issuerKeyHash. ', + name: 'zeek.ocsp.hash.algorithm', type: 'keyword', }, - 'gsuite.login.failure_type': { - category: 'gsuite', - description: - 'Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'gsuite.login.failure_type', + 'zeek.ocsp.hash.issuer.name': { + category: 'zeek', + description: "Hash of the issuer's distingueshed name. ", + name: 'zeek.ocsp.hash.issuer.name', type: 'keyword', }, - 'gsuite.login.type': { - category: 'gsuite', - description: - 'Login credentials type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/login. ', - name: 'gsuite.login.type', + 'zeek.ocsp.hash.issuer.key': { + category: 'zeek', + description: "Hash of the issuer's public key. ", + name: 'zeek.ocsp.hash.issuer.key', type: 'keyword', }, - 'gsuite.login.is_second_factor': { - category: 'gsuite', - name: 'gsuite.login.is_second_factor', - type: 'boolean', - }, - 'gsuite.login.is_suspicious': { - category: 'gsuite', - name: 'gsuite.login.is_suspicious', - type: 'boolean', - }, - 'gsuite.saml.application_name': { - category: 'gsuite', - description: 'Saml SP application name. ', - name: 'gsuite.saml.application_name', + 'zeek.ocsp.serial_number': { + category: 'zeek', + description: 'Serial number of the affected certificate. ', + name: 'zeek.ocsp.serial_number', type: 'keyword', }, - 'gsuite.saml.failure_type': { - category: 'gsuite', - description: - 'Login failure type. For a list of possible values refer to https://developers.google.com/admin-sdk/reports/v1/appendix/activity/saml. ', - name: 'gsuite.saml.failure_type', + 'zeek.ocsp.status': { + category: 'zeek', + description: 'Status of the affected certificate. ', + name: 'zeek.ocsp.status', type: 'keyword', }, - 'gsuite.saml.initiated_by': { - category: 'gsuite', - description: 'Requester of SAML authentication. ', - name: 'gsuite.saml.initiated_by', - type: 'keyword', + 'zeek.ocsp.revoke.time': { + category: 'zeek', + description: 'Time at which the certificate was revoked. ', + name: 'zeek.ocsp.revoke.time', + type: 'date', }, - 'gsuite.saml.orgunit_path': { - category: 'gsuite', - description: 'User orgunit. ', - name: 'gsuite.saml.orgunit_path', + 'zeek.ocsp.revoke.reason': { + category: 'zeek', + description: 'Reason for which the certificate was revoked. ', + name: 'zeek.ocsp.revoke.reason', type: 'keyword', }, - 'gsuite.saml.status_code': { - category: 'gsuite', - description: 'SAML status code. ', - name: 'gsuite.saml.status_code', - type: 'long', - }, - 'gsuite.saml.second_level_status_code': { - category: 'gsuite', - description: 'SAML second level status code. ', - name: 'gsuite.saml.second_level_status_code', - type: 'long', + 'zeek.ocsp.update.this': { + category: 'zeek', + description: 'The time at which the status being shows is known to have been correct. ', + name: 'zeek.ocsp.update.this', + type: 'date', }, - 'ibmmq.errorlog.installation': { - category: 'ibmmq', + 'zeek.ocsp.update.next': { + category: 'zeek', description: - 'This is the installation name which can be given at installation time. Each installation of IBM MQ on UNIX, Linux, and Windows, has a unique identifier known as an installation name. The installation name is used to associate things such as queue managers and configuration files with an installation. ', - name: 'ibmmq.errorlog.installation', - type: 'keyword', + 'The latest time at which new information about the status of the certificate will be available. ', + name: 'zeek.ocsp.update.next', + type: 'date', }, - 'ibmmq.errorlog.qmgr': { - category: 'ibmmq', - description: - 'Name of the queue manager. Queue managers provide queuing services to applications, and manages the queues that belong to them. ', - name: 'ibmmq.errorlog.qmgr', + 'zeek.pe.client': { + category: 'zeek', + description: "The client's version string. ", + name: 'zeek.pe.client', type: 'keyword', }, - 'ibmmq.errorlog.arithinsert': { - category: 'ibmmq', - description: 'Changing content based on error.id', - name: 'ibmmq.errorlog.arithinsert', + 'zeek.pe.id': { + category: 'zeek', + description: 'File id of this portable executable file. ', + name: 'zeek.pe.id', type: 'keyword', }, - 'ibmmq.errorlog.commentinsert': { - category: 'ibmmq', - description: 'Changing content based on error.id', - name: 'ibmmq.errorlog.commentinsert', + 'zeek.pe.machine': { + category: 'zeek', + description: 'The target machine that the file was compiled for. ', + name: 'zeek.pe.machine', type: 'keyword', }, - 'ibmmq.errorlog.errordescription': { - category: 'ibmmq', - description: 'Please add description', - example: 'Please add example', - name: 'ibmmq.errorlog.errordescription', - type: 'text', - }, - 'ibmmq.errorlog.explanation': { - category: 'ibmmq', - description: 'Explaines the error in more detail', - name: 'ibmmq.errorlog.explanation', - type: 'keyword', + 'zeek.pe.compile_time': { + category: 'zeek', + description: 'The time that the file was created at. ', + name: 'zeek.pe.compile_time', + type: 'date', }, - 'ibmmq.errorlog.action': { - category: 'ibmmq', - description: 'Defines what to do when the error occurs', - name: 'ibmmq.errorlog.action', + 'zeek.pe.os': { + category: 'zeek', + description: 'The required operating system. ', + name: 'zeek.pe.os', type: 'keyword', }, - 'ibmmq.errorlog.code': { - category: 'ibmmq', - description: 'Error code.', - name: 'ibmmq.errorlog.code', + 'zeek.pe.subsystem': { + category: 'zeek', + description: 'The subsystem that is required to run this file. ', + name: 'zeek.pe.subsystem', type: 'keyword', }, - 'iptables.ether_type': { - category: 'iptables', - description: 'Value of the ethernet type field identifying the network layer protocol. ', - name: 'iptables.ether_type', - type: 'long', - }, - 'iptables.flow_label': { - category: 'iptables', - description: 'IPv6 flow label. ', - name: 'iptables.flow_label', - type: 'integer', + 'zeek.pe.is_exe': { + category: 'zeek', + description: 'Is the file an executable, or just an object file? ', + name: 'zeek.pe.is_exe', + type: 'boolean', }, - 'iptables.fragment_flags': { - category: 'iptables', - description: 'IP fragment flags. A combination of CE, DF and MF. ', - name: 'iptables.fragment_flags', - type: 'keyword', + 'zeek.pe.is_64bit': { + category: 'zeek', + description: 'Is the file a 64-bit executable? ', + name: 'zeek.pe.is_64bit', + type: 'boolean', }, - 'iptables.fragment_offset': { - category: 'iptables', - description: 'Offset of the current IP fragment. ', - name: 'iptables.fragment_offset', - type: 'long', + 'zeek.pe.uses_aslr': { + category: 'zeek', + description: 'Does the file support Address Space Layout Randomization? ', + name: 'zeek.pe.uses_aslr', + type: 'boolean', }, - 'iptables.icmp.code': { - category: 'iptables', - description: 'ICMP code. ', - name: 'iptables.icmp.code', - type: 'long', + 'zeek.pe.uses_dep': { + category: 'zeek', + description: 'Does the file support Data Execution Prevention? ', + name: 'zeek.pe.uses_dep', + type: 'boolean', }, - 'iptables.icmp.id': { - category: 'iptables', - description: 'ICMP ID. ', - name: 'iptables.icmp.id', - type: 'long', + 'zeek.pe.uses_code_integrity': { + category: 'zeek', + description: 'Does the file enforce code integrity checks? ', + name: 'zeek.pe.uses_code_integrity', + type: 'boolean', }, - 'iptables.icmp.parameter': { - category: 'iptables', - description: 'ICMP parameter. ', - name: 'iptables.icmp.parameter', - type: 'long', + 'zeek.pe.uses_seh': { + category: 'zeek', + description: 'Does the file use structured exception handing? ', + name: 'zeek.pe.uses_seh', + type: 'boolean', }, - 'iptables.icmp.redirect': { - category: 'iptables', - description: 'ICMP redirect address. ', - name: 'iptables.icmp.redirect', - type: 'ip', + 'zeek.pe.has_import_table': { + category: 'zeek', + description: 'Does the file have an import table? ', + name: 'zeek.pe.has_import_table', + type: 'boolean', }, - 'iptables.icmp.seq': { - category: 'iptables', - description: 'ICMP sequence number. ', - name: 'iptables.icmp.seq', - type: 'long', + 'zeek.pe.has_export_table': { + category: 'zeek', + description: 'Does the file have an export table? ', + name: 'zeek.pe.has_export_table', + type: 'boolean', }, - 'iptables.icmp.type': { - category: 'iptables', - description: 'ICMP type. ', - name: 'iptables.icmp.type', - type: 'long', + 'zeek.pe.has_cert_table': { + category: 'zeek', + description: 'Does the file have an attribute certificate table? ', + name: 'zeek.pe.has_cert_table', + type: 'boolean', }, - 'iptables.id': { - category: 'iptables', - description: 'Packet identifier. ', - name: 'iptables.id', - type: 'long', + 'zeek.pe.has_debug_data': { + category: 'zeek', + description: 'Does the file have a debug table? ', + name: 'zeek.pe.has_debug_data', + type: 'boolean', }, - 'iptables.incomplete_bytes': { - category: 'iptables', - description: 'Number of incomplete bytes. ', - name: 'iptables.incomplete_bytes', - type: 'long', + 'zeek.pe.section_names': { + category: 'zeek', + description: 'The names of the sections, in order. ', + name: 'zeek.pe.section_names', + type: 'keyword', }, - 'iptables.input_device': { - category: 'iptables', - description: 'Device that received the packet. ', - name: 'iptables.input_device', + 'zeek.radius.username': { + category: 'zeek', + description: 'The username, if present. ', + name: 'zeek.radius.username', type: 'keyword', }, - 'iptables.precedence_bits': { - category: 'iptables', - description: 'IP precedence bits. ', - name: 'iptables.precedence_bits', - type: 'short', + 'zeek.radius.mac': { + category: 'zeek', + description: 'MAC address, if present. ', + name: 'zeek.radius.mac', + type: 'keyword', }, - 'iptables.tos': { - category: 'iptables', - description: 'IP Type of Service field. ', - name: 'iptables.tos', - type: 'long', + 'zeek.radius.framed_addr': { + category: 'zeek', + description: + 'The address given to the network access server, if present. This is only a hint from the RADIUS server and the network access server is not required to honor the address. ', + name: 'zeek.radius.framed_addr', + type: 'ip', }, - 'iptables.length': { - category: 'iptables', - description: 'Packet length. ', - name: 'iptables.length', - type: 'long', + 'zeek.radius.remote_ip': { + category: 'zeek', + description: + 'Remote IP address, if present. This is collected from the Tunnel-Client-Endpoint attribute. ', + name: 'zeek.radius.remote_ip', + type: 'ip', }, - 'iptables.output_device': { - category: 'iptables', - description: 'Device that output the packet. ', - name: 'iptables.output_device', + 'zeek.radius.connect_info': { + category: 'zeek', + description: 'Connect info, if present. ', + name: 'zeek.radius.connect_info', type: 'keyword', }, - 'iptables.tcp.flags': { - category: 'iptables', - description: 'TCP flags. ', - name: 'iptables.tcp.flags', + 'zeek.radius.reply_msg': { + category: 'zeek', + description: + 'Reply message from the server challenge. This is frequently shown to the user authenticating. ', + name: 'zeek.radius.reply_msg', type: 'keyword', }, - 'iptables.tcp.reserved_bits': { - category: 'iptables', - description: 'TCP reserved bits. ', - name: 'iptables.tcp.reserved_bits', - type: 'short', - }, - 'iptables.tcp.seq': { - category: 'iptables', - description: 'TCP sequence number. ', - name: 'iptables.tcp.seq', - type: 'long', - }, - 'iptables.tcp.ack': { - category: 'iptables', - description: 'TCP Acknowledgment number. ', - name: 'iptables.tcp.ack', - type: 'long', - }, - 'iptables.tcp.window': { - category: 'iptables', - description: 'Advertised TCP window size. ', - name: 'iptables.tcp.window', - type: 'long', + 'zeek.radius.result': { + category: 'zeek', + description: 'Successful or failed authentication. ', + name: 'zeek.radius.result', + type: 'keyword', }, - 'iptables.ttl': { - category: 'iptables', - description: 'Time To Live field. ', - name: 'iptables.ttl', + 'zeek.radius.ttl': { + category: 'zeek', + description: + 'The duration between the first request and either the "Access-Accept" message or an error. If the field is empty, it means that either the request or response was not seen. ', + name: 'zeek.radius.ttl', type: 'integer', }, - 'iptables.udp.length': { - category: 'iptables', - description: 'Length of the UDP header and payload. ', - name: 'iptables.udp.length', - type: 'long', - }, - 'iptables.ubiquiti.input_zone': { - category: 'iptables', - description: 'Input zone. ', - name: 'iptables.ubiquiti.input_zone', - type: 'keyword', + 'zeek.radius.logged': { + category: 'zeek', + description: 'Whether this has already been logged and can be ignored. ', + name: 'zeek.radius.logged', + type: 'boolean', }, - 'iptables.ubiquiti.output_zone': { - category: 'iptables', - description: 'Output zone. ', - name: 'iptables.ubiquiti.output_zone', + 'zeek.rdp.cookie': { + category: 'zeek', + description: 'Cookie value used by the client machine. This is typically a username. ', + name: 'zeek.rdp.cookie', type: 'keyword', }, - 'iptables.ubiquiti.rule_number': { - category: 'iptables', - description: 'The rule number within the rule set.', - name: 'iptables.ubiquiti.rule_number', + 'zeek.rdp.result': { + category: 'zeek', + description: + "Status result for the connection. It's a mix between RDP negotation failure messages and GCC server create response messages. ", + name: 'zeek.rdp.result', type: 'keyword', }, - 'iptables.ubiquiti.rule_set': { - category: 'iptables', - description: 'The rule set name.', - name: 'iptables.ubiquiti.rule_set', + 'zeek.rdp.security_protocol': { + category: 'zeek', + description: 'Security protocol chosen by the server. ', + name: 'zeek.rdp.security_protocol', type: 'keyword', }, - 'microsoft.defender_atp.lastUpdateTime': { - category: 'microsoft', - description: 'The date and time (in UTC) the alert was last updated. ', - name: 'microsoft.defender_atp.lastUpdateTime', - type: 'date', - }, - 'microsoft.defender_atp.resolvedTime': { - category: 'microsoft', - description: "The date and time in which the status of the alert was changed to 'Resolved'. ", - name: 'microsoft.defender_atp.resolvedTime', - type: 'date', - }, - 'microsoft.defender_atp.incidentId': { - category: 'microsoft', - description: 'The Incident ID of the Alert. ', - name: 'microsoft.defender_atp.incidentId', + 'zeek.rdp.keyboard_layout': { + category: 'zeek', + description: 'Keyboard layout (language) of the client machine. ', + name: 'zeek.rdp.keyboard_layout', type: 'keyword', }, - 'microsoft.defender_atp.investigationId': { - category: 'microsoft', - description: 'The Investigation ID related to the Alert. ', - name: 'microsoft.defender_atp.investigationId', + 'zeek.rdp.client.build': { + category: 'zeek', + description: 'RDP client version used by the client machine. ', + name: 'zeek.rdp.client.build', type: 'keyword', }, - 'microsoft.defender_atp.investigationState': { - category: 'microsoft', - description: 'The current state of the Investigation. ', - name: 'microsoft.defender_atp.investigationState', + 'zeek.rdp.client.client_name': { + category: 'zeek', + description: 'Name of the client machine. ', + name: 'zeek.rdp.client.client_name', type: 'keyword', }, - 'microsoft.defender_atp.assignedTo': { - category: 'microsoft', - description: 'Owner of the alert. ', - name: 'microsoft.defender_atp.assignedTo', + 'zeek.rdp.client.product_id': { + category: 'zeek', + description: 'Product ID of the client machine. ', + name: 'zeek.rdp.client.product_id', type: 'keyword', }, - 'microsoft.defender_atp.status': { - category: 'microsoft', - description: - "Specifies the current status of the alert. Possible values are: 'Unknown', 'New', 'InProgress' and 'Resolved'. ", - name: 'microsoft.defender_atp.status', + 'zeek.rdp.desktop.width': { + category: 'zeek', + description: 'Desktop width of the client machine. ', + name: 'zeek.rdp.desktop.width', + type: 'integer', + }, + 'zeek.rdp.desktop.height': { + category: 'zeek', + description: 'Desktop height of the client machine. ', + name: 'zeek.rdp.desktop.height', + type: 'integer', + }, + 'zeek.rdp.desktop.color_depth': { + category: 'zeek', + description: 'The color depth requested by the client in the high_color_depth field. ', + name: 'zeek.rdp.desktop.color_depth', type: 'keyword', }, - 'microsoft.defender_atp.classification': { - category: 'microsoft', + 'zeek.rdp.cert.type': { + category: 'zeek', description: - "Specification of the alert. Possible values are: 'Unknown', 'FalsePositive', 'TruePositive'. ", - name: 'microsoft.defender_atp.classification', + 'If the connection is being encrypted with native RDP encryption, this is the type of cert being used. ', + name: 'zeek.rdp.cert.type', type: 'keyword', }, - 'microsoft.defender_atp.determination': { - category: 'microsoft', + 'zeek.rdp.cert.count': { + category: 'zeek', + description: 'The number of certs seen. X.509 can transfer an entire certificate chain. ', + name: 'zeek.rdp.cert.count', + type: 'integer', + }, + 'zeek.rdp.cert.permanent': { + category: 'zeek', description: - "Specifies the determination of the alert. Possible values are: 'NotAvailable', 'Apt', 'Malware', 'SecurityPersonnel', 'SecurityTesting', 'UnwantedSoftware', 'Other'. ", - name: 'microsoft.defender_atp.determination', - type: 'keyword', + 'Indicates if the provided certificate or certificate chain is permanent or temporary. ', + name: 'zeek.rdp.cert.permanent', + type: 'boolean', }, - 'microsoft.defender_atp.threatFamilyName': { - category: 'microsoft', - description: 'Threat family. ', - name: 'microsoft.defender_atp.threatFamilyName', + 'zeek.rdp.encryption.level': { + category: 'zeek', + description: 'Encryption level of the connection. ', + name: 'zeek.rdp.encryption.level', type: 'keyword', }, - 'microsoft.defender_atp.rbacGroupName': { - category: 'microsoft', - description: 'User group related to the alert ', - name: 'microsoft.defender_atp.rbacGroupName', + 'zeek.rdp.encryption.method': { + category: 'zeek', + description: 'Encryption method of the connection. ', + name: 'zeek.rdp.encryption.method', type: 'keyword', }, - 'microsoft.defender_atp.evidence.domainName': { - category: 'microsoft', - description: 'Domain name related to the alert ', - name: 'microsoft.defender_atp.evidence.domainName', - type: 'keyword', + 'zeek.rdp.done': { + category: 'zeek', + description: 'Track status of logging RDP connections. ', + name: 'zeek.rdp.done', + type: 'boolean', }, - 'microsoft.defender_atp.evidence.ipAddress': { - category: 'microsoft', - description: 'IP address involved in the alert ', - name: 'microsoft.defender_atp.evidence.ipAddress', - type: 'ip', + 'zeek.rdp.ssl': { + category: 'zeek', + description: + '(present if policy/protocols/rdp/indicate_ssl.bro is loaded) Flag the connection if it was seen over SSL. ', + name: 'zeek.rdp.ssl', + type: 'boolean', }, - 'microsoft.defender_atp.evidence.aadUserId': { - category: 'microsoft', - description: 'ID of the user involved in the alert ', - name: 'microsoft.defender_atp.evidence.aadUserId', + 'zeek.rfb.version.client.major': { + category: 'zeek', + description: 'Major version of the client. ', + name: 'zeek.rfb.version.client.major', type: 'keyword', }, - 'microsoft.defender_atp.evidence.accountName': { - category: 'microsoft', - description: 'Username of the user involved in the alert ', - name: 'microsoft.defender_atp.evidence.accountName', + 'zeek.rfb.version.client.minor': { + category: 'zeek', + description: 'Minor version of the client. ', + name: 'zeek.rfb.version.client.minor', type: 'keyword', }, - 'microsoft.defender_atp.evidence.entityType': { - category: 'microsoft', - description: 'The type of evidence ', - name: 'microsoft.defender_atp.evidence.entityType', + 'zeek.rfb.version.server.major': { + category: 'zeek', + description: 'Major version of the server. ', + name: 'zeek.rfb.version.server.major', type: 'keyword', }, - 'microsoft.defender_atp.evidence.userPrincipalName': { - category: 'microsoft', - description: 'Principal name of the user involved in the alert ', - name: 'microsoft.defender_atp.evidence.userPrincipalName', + 'zeek.rfb.version.server.minor': { + category: 'zeek', + description: 'Minor version of the server. ', + name: 'zeek.rfb.version.server.minor', type: 'keyword', }, - 'misp.attack_pattern.id': { - category: 'misp', - description: 'Identifier of the threat indicator. ', - name: 'misp.attack_pattern.id', - type: 'keyword', + 'zeek.rfb.auth.success': { + category: 'zeek', + description: 'Whether or not authentication was successful. ', + name: 'zeek.rfb.auth.success', + type: 'boolean', }, - 'misp.attack_pattern.name': { - category: 'misp', - description: 'Name of the attack pattern. ', - name: 'misp.attack_pattern.name', + 'zeek.rfb.auth.method': { + category: 'zeek', + description: 'Identifier of authentication method used. ', + name: 'zeek.rfb.auth.method', type: 'keyword', }, - 'misp.attack_pattern.description': { - category: 'misp', - description: 'Description of the attack pattern. ', - name: 'misp.attack_pattern.description', - type: 'text', + 'zeek.rfb.share_flag': { + category: 'zeek', + description: 'Whether the client has an exclusive or a shared session. ', + name: 'zeek.rfb.share_flag', + type: 'boolean', }, - 'misp.attack_pattern.kill_chain_phases': { - category: 'misp', - description: 'The kill chain phase(s) to which this attack pattern corresponds. ', - name: 'misp.attack_pattern.kill_chain_phases', + 'zeek.rfb.desktop_name': { + category: 'zeek', + description: 'Name of the screen that is being shared. ', + name: 'zeek.rfb.desktop_name', type: 'keyword', }, - 'misp.campaign.id': { - category: 'misp', - description: 'Identifier of the campaign. ', - name: 'misp.campaign.id', + 'zeek.rfb.width': { + category: 'zeek', + description: 'Width of the screen that is being shared. ', + name: 'zeek.rfb.width', + type: 'integer', + }, + 'zeek.rfb.height': { + category: 'zeek', + description: 'Height of the screen that is being shared. ', + name: 'zeek.rfb.height', + type: 'integer', + }, + 'zeek.signature.note': { + category: 'zeek', + description: 'Notice associated with signature event. ', + name: 'zeek.signature.note', type: 'keyword', }, - 'misp.campaign.name': { - category: 'misp', - description: 'Name of the campaign. ', - name: 'misp.campaign.name', + 'zeek.signature.sig_id': { + category: 'zeek', + description: 'The name of the signature that matched. ', + name: 'zeek.signature.sig_id', type: 'keyword', }, - 'misp.campaign.description': { - category: 'misp', - description: 'Description of the campaign. ', - name: 'misp.campaign.description', - type: 'text', + 'zeek.signature.event_msg': { + category: 'zeek', + description: 'A more descriptive message of the signature-matching event. ', + name: 'zeek.signature.event_msg', + type: 'keyword', }, - 'misp.campaign.aliases': { - category: 'misp', - description: 'Alternative names used to identify this campaign. ', - name: 'misp.campaign.aliases', - type: 'text', + 'zeek.signature.sub_msg': { + category: 'zeek', + description: 'Extracted payload data or extra message. ', + name: 'zeek.signature.sub_msg', + type: 'keyword', }, - 'misp.campaign.first_seen': { - category: 'misp', - description: 'The time that this Campaign was first seen, in RFC3339 format. ', - name: 'misp.campaign.first_seen', - type: 'date', + 'zeek.signature.sig_count': { + category: 'zeek', + description: 'Number of sigs, usually from summary count. ', + name: 'zeek.signature.sig_count', + type: 'integer', }, - 'misp.campaign.last_seen': { - category: 'misp', - description: 'The time that this Campaign was last seen, in RFC3339 format. ', - name: 'misp.campaign.last_seen', - type: 'date', + 'zeek.signature.host_count': { + category: 'zeek', + description: 'Number of hosts, from a summary count. ', + name: 'zeek.signature.host_count', + type: 'integer', }, - 'misp.campaign.objective': { - category: 'misp', + 'zeek.sip.transaction_depth': { + category: 'zeek', description: - "This field defines the Campaign's primary goal, objective, desired outcome, or intended effect. ", - name: 'misp.campaign.objective', - type: 'keyword', + 'Represents the pipelined depth into the connection of this request/response transaction. ', + name: 'zeek.sip.transaction_depth', + type: 'integer', }, - 'misp.course_of_action.id': { - category: 'misp', - description: 'Identifier of the Course of Action. ', - name: 'misp.course_of_action.id', + 'zeek.sip.sequence.method': { + category: 'zeek', + description: 'Verb used in the SIP request (INVITE, REGISTER etc.). ', + name: 'zeek.sip.sequence.method', type: 'keyword', }, - 'misp.course_of_action.name': { - category: 'misp', - description: 'The name used to identify the Course of Action. ', - name: 'misp.course_of_action.name', + 'zeek.sip.sequence.number': { + category: 'zeek', + description: 'Contents of the CSeq: header from the client. ', + name: 'zeek.sip.sequence.number', type: 'keyword', }, - 'misp.course_of_action.description': { - category: 'misp', - description: 'Description of the Course of Action. ', - name: 'misp.course_of_action.description', - type: 'text', - }, - 'misp.identity.id': { - category: 'misp', - description: 'Identifier of the Identity. ', - name: 'misp.identity.id', + 'zeek.sip.uri': { + category: 'zeek', + description: 'URI used in the request. ', + name: 'zeek.sip.uri', type: 'keyword', }, - 'misp.identity.name': { - category: 'misp', - description: 'The name used to identify the Identity. ', - name: 'misp.identity.name', + 'zeek.sip.date': { + category: 'zeek', + description: 'Contents of the Date: header from the client. ', + name: 'zeek.sip.date', type: 'keyword', }, - 'misp.identity.description': { - category: 'misp', - description: 'Description of the Identity. ', - name: 'misp.identity.description', - type: 'text', - }, - 'misp.identity.identity_class': { - category: 'misp', + 'zeek.sip.request.from': { + category: 'zeek', description: - 'The type of entity that this Identity describes, e.g., an individual or organization. Open Vocab - identity-class-ov ', - name: 'misp.identity.identity_class', + "Contents of the request From: header Note: The tag= value that's usually appended to the sender is stripped off and not logged. ", + name: 'zeek.sip.request.from', type: 'keyword', }, - 'misp.identity.labels': { - category: 'misp', - description: 'The list of roles that this Identity performs. ', - example: 'CEO\n', - name: 'misp.identity.labels', + 'zeek.sip.request.to': { + category: 'zeek', + description: 'Contents of the To: header. ', + name: 'zeek.sip.request.to', type: 'keyword', }, - 'misp.identity.sectors': { - category: 'misp', - description: - 'The list of sectors that this Identity belongs to. Open Vocab - industry-sector-ov ', - name: 'misp.identity.sectors', + 'zeek.sip.request.path': { + category: 'zeek', + description: 'The client message transmission path, as extracted from the headers. ', + name: 'zeek.sip.request.path', type: 'keyword', }, - 'misp.identity.contact_information': { - category: 'misp', - description: 'The contact information (e-mail, phone number, etc.) for this Identity. ', - name: 'misp.identity.contact_information', - type: 'text', + 'zeek.sip.request.body_length': { + category: 'zeek', + description: 'Contents of the Content-Length: header from the client. ', + name: 'zeek.sip.request.body_length', + type: 'long', }, - 'misp.intrusion_set.id': { - category: 'misp', - description: 'Identifier of the Intrusion Set. ', - name: 'misp.intrusion_set.id', + 'zeek.sip.response.from': { + category: 'zeek', + description: + "Contents of the response From: header Note: The tag= value that's usually appended to the sender is stripped off and not logged. ", + name: 'zeek.sip.response.from', type: 'keyword', }, - 'misp.intrusion_set.name': { - category: 'misp', - description: 'The name used to identify the Intrusion Set. ', - name: 'misp.intrusion_set.name', + 'zeek.sip.response.to': { + category: 'zeek', + description: 'Contents of the response To: header. ', + name: 'zeek.sip.response.to', type: 'keyword', }, - 'misp.intrusion_set.description': { - category: 'misp', - description: 'Description of the Intrusion Set. ', - name: 'misp.intrusion_set.description', - type: 'text', - }, - 'misp.intrusion_set.aliases': { - category: 'misp', - description: 'Alternative names used to identify the Intrusion Set. ', - name: 'misp.intrusion_set.aliases', - type: 'text', - }, - 'misp.intrusion_set.first_seen': { - category: 'misp', - description: 'The time that this Intrusion Set was first seen, in RFC3339 format. ', - name: 'misp.intrusion_set.first_seen', - type: 'date', - }, - 'misp.intrusion_set.last_seen': { - category: 'misp', - description: 'The time that this Intrusion Set was last seen, in RFC3339 format. ', - name: 'misp.intrusion_set.last_seen', - type: 'date', - }, - 'misp.intrusion_set.goals': { - category: 'misp', - description: 'The high level goals of this Intrusion Set, namely, what are they trying to do. ', - name: 'misp.intrusion_set.goals', - type: 'text', - }, - 'misp.intrusion_set.resource_level': { - category: 'misp', - description: - 'This defines the organizational level at which this Intrusion Set typically works. Open Vocab - attack-resource-level-ov ', - name: 'misp.intrusion_set.resource_level', - type: 'text', - }, - 'misp.intrusion_set.primary_motivation': { - category: 'misp', - description: - 'The primary reason, motivation, or purpose behind this Intrusion Set. Open Vocab - attack-motivation-ov ', - name: 'misp.intrusion_set.primary_motivation', - type: 'text', + 'zeek.sip.response.path': { + category: 'zeek', + description: 'The server message transmission path, as extracted from the headers. ', + name: 'zeek.sip.response.path', + type: 'keyword', }, - 'misp.intrusion_set.secondary_motivations': { - category: 'misp', - description: - 'The secondary reasons, motivations, or purposes behind this Intrusion Set. Open Vocab - attack-motivation-ov ', - name: 'misp.intrusion_set.secondary_motivations', - type: 'text', + 'zeek.sip.response.body_length': { + category: 'zeek', + description: 'Contents of the Content-Length: header from the server. ', + name: 'zeek.sip.response.body_length', + type: 'long', }, - 'misp.malware.id': { - category: 'misp', - description: 'Identifier of the Malware. ', - name: 'misp.malware.id', + 'zeek.sip.reply_to': { + category: 'zeek', + description: 'Contents of the Reply-To: header. ', + name: 'zeek.sip.reply_to', type: 'keyword', }, - 'misp.malware.name': { - category: 'misp', - description: 'The name used to identify the Malware. ', - name: 'misp.malware.name', + 'zeek.sip.call_id': { + category: 'zeek', + description: 'Contents of the Call-ID: header from the client. ', + name: 'zeek.sip.call_id', type: 'keyword', }, - 'misp.malware.description': { - category: 'misp', - description: 'Description of the Malware. ', - name: 'misp.malware.description', - type: 'text', - }, - 'misp.malware.labels': { - category: 'misp', - description: - 'The type of malware being described. Open Vocab - malware-label-ov. adware,backdoor,bot,ddos,dropper,exploit-kit,keylogger,ransomware, remote-access-trojan,resource-exploitation,rogue-security-software,rootkit, screen-capture,spyware,trojan,virus,worm ', - name: 'misp.malware.labels', + 'zeek.sip.subject': { + category: 'zeek', + description: 'Contents of the Subject: header from the client. ', + name: 'zeek.sip.subject', type: 'keyword', }, - 'misp.malware.kill_chain_phases': { - category: 'misp', - description: 'The list of kill chain phases for which this Malware instance can be used. ', - name: 'misp.malware.kill_chain_phases', + 'zeek.sip.user_agent': { + category: 'zeek', + description: 'Contents of the User-Agent: header from the client. ', + name: 'zeek.sip.user_agent', type: 'keyword', - format: 'string', }, - 'misp.note.id': { - category: 'misp', - description: 'Identifier of the Note. ', - name: 'misp.note.id', - type: 'keyword', + 'zeek.sip.status.code': { + category: 'zeek', + description: 'Status code returned by the server. ', + name: 'zeek.sip.status.code', + type: 'integer', }, - 'misp.note.summary': { - category: 'misp', - description: 'A brief description used as a summary of the Note. ', - name: 'misp.note.summary', + 'zeek.sip.status.msg': { + category: 'zeek', + description: 'Status message returned by the server. ', + name: 'zeek.sip.status.msg', type: 'keyword', }, - 'misp.note.description': { - category: 'misp', - description: 'The content of the Note. ', - name: 'misp.note.description', - type: 'text', - }, - 'misp.note.authors': { - category: 'misp', - description: 'The name of the author(s) of this Note. ', - name: 'misp.note.authors', + 'zeek.sip.warning': { + category: 'zeek', + description: 'Contents of the Warning: header. ', + name: 'zeek.sip.warning', type: 'keyword', }, - 'misp.note.object_refs': { - category: 'misp', - description: 'The STIX Objects (SDOs and SROs) that the note is being applied to. ', - name: 'misp.note.object_refs', + 'zeek.sip.content_type': { + category: 'zeek', + description: 'Contents of the Content-Type: header from the server. ', + name: 'zeek.sip.content_type', type: 'keyword', }, - 'misp.threat_indicator.labels': { - category: 'misp', - description: 'list of type open-vocab that specifies the type of indicator. ', - example: 'Domain Watchlist\n', - name: 'misp.threat_indicator.labels', + 'zeek.smb_cmd.command': { + category: 'zeek', + description: 'The command sent by the client. ', + name: 'zeek.smb_cmd.command', type: 'keyword', }, - 'misp.threat_indicator.id': { - category: 'misp', - description: 'Identifier of the threat indicator. ', - name: 'misp.threat_indicator.id', + 'zeek.smb_cmd.sub_command': { + category: 'zeek', + description: 'The subcommand sent by the client, if present. ', + name: 'zeek.smb_cmd.sub_command', type: 'keyword', }, - 'misp.threat_indicator.version': { - category: 'misp', - description: 'Version of the threat indicator. ', - name: 'misp.threat_indicator.version', + 'zeek.smb_cmd.argument': { + category: 'zeek', + description: 'Command argument sent by the client, if any. ', + name: 'zeek.smb_cmd.argument', type: 'keyword', }, - 'misp.threat_indicator.type': { - category: 'misp', - description: 'Type of the threat indicator. ', - name: 'misp.threat_indicator.type', + 'zeek.smb_cmd.status': { + category: 'zeek', + description: "Server reply to the client's command. ", + name: 'zeek.smb_cmd.status', type: 'keyword', }, - 'misp.threat_indicator.description': { - category: 'misp', - description: 'Description of the threat indicator. ', - name: 'misp.threat_indicator.description', - type: 'text', + 'zeek.smb_cmd.rtt': { + category: 'zeek', + description: 'Round trip time from the request to the response. ', + name: 'zeek.smb_cmd.rtt', + type: 'double', }, - 'misp.threat_indicator.feed': { - category: 'misp', - description: 'Name of the threat feed. ', - name: 'misp.threat_indicator.feed', - type: 'text', + 'zeek.smb_cmd.version': { + category: 'zeek', + description: 'Version of SMB for the command. ', + name: 'zeek.smb_cmd.version', + type: 'keyword', }, - 'misp.threat_indicator.valid_from': { - category: 'misp', - description: - 'The time from which this Indicator should be considered valuable intelligence, in RFC3339 format. ', - name: 'misp.threat_indicator.valid_from', - type: 'date', + 'zeek.smb_cmd.username': { + category: 'zeek', + description: 'Authenticated username, if available. ', + name: 'zeek.smb_cmd.username', + type: 'keyword', }, - 'misp.threat_indicator.valid_until': { - category: 'misp', + 'zeek.smb_cmd.tree': { + category: 'zeek', description: - 'The time at which this Indicator should no longer be considered valuable intelligence. If the valid_until property is omitted, then there is no constraint on the latest time for which the indicator should be used, in RFC3339 format. ', - name: 'misp.threat_indicator.valid_until', - type: 'date', - }, - 'misp.threat_indicator.severity': { - category: 'misp', - description: 'Threat severity to which this indicator corresponds. ', - example: 'high', - name: 'misp.threat_indicator.severity', + 'If this is related to a tree, this is the tree that was used for the current command. ', + name: 'zeek.smb_cmd.tree', type: 'keyword', - format: 'string', }, - 'misp.threat_indicator.confidence': { - category: 'misp', - description: 'Confidence level to which this indicator corresponds. ', - example: 'high', - name: 'misp.threat_indicator.confidence', + 'zeek.smb_cmd.tree_service': { + category: 'zeek', + description: 'The type of tree (disk share, printer share, named pipe, etc.). ', + name: 'zeek.smb_cmd.tree_service', type: 'keyword', }, - 'misp.threat_indicator.kill_chain_phases': { - category: 'misp', - description: 'The kill chain phase(s) to which this indicator corresponds. ', - name: 'misp.threat_indicator.kill_chain_phases', + 'zeek.smb_cmd.file.name': { + category: 'zeek', + description: 'Filename if one was seen. ', + name: 'zeek.smb_cmd.file.name', type: 'keyword', - format: 'string', }, - 'misp.threat_indicator.mitre_tactic': { - category: 'misp', - description: 'MITRE tactics to which this indicator corresponds. ', - example: 'Initial Access', - name: 'misp.threat_indicator.mitre_tactic', + 'zeek.smb_cmd.file.action': { + category: 'zeek', + description: 'Action this log record represents. ', + name: 'zeek.smb_cmd.file.action', type: 'keyword', - format: 'string', }, - 'misp.threat_indicator.mitre_technique': { - category: 'misp', - description: 'MITRE techniques to which this indicator corresponds. ', - example: 'Drive-by Compromise', - name: 'misp.threat_indicator.mitre_technique', + 'zeek.smb_cmd.file.uid': { + category: 'zeek', + description: 'UID of the referenced file. ', + name: 'zeek.smb_cmd.file.uid', type: 'keyword', - format: 'string', }, - 'misp.threat_indicator.attack_pattern': { - category: 'misp', + 'zeek.smb_cmd.file.host.tx': { + category: 'zeek', + description: 'Address of the transmitting host. ', + name: 'zeek.smb_cmd.file.host.tx', + type: 'ip', + }, + 'zeek.smb_cmd.file.host.rx': { + category: 'zeek', + description: 'Address of the receiving host. ', + name: 'zeek.smb_cmd.file.host.rx', + type: 'ip', + }, + 'zeek.smb_cmd.smb1_offered_dialects': { + category: 'zeek', description: - 'The attack_pattern for this indicator is a STIX Pattern as specified in STIX Version 2.0 Part 5 - STIX Patterning. ', - example: "[destination:ip = '91.219.29.188/32']\n", - name: 'misp.threat_indicator.attack_pattern', + 'Present if base/protocols/smb/smb1-main.bro is loaded. Dialects offered by the client. ', + name: 'zeek.smb_cmd.smb1_offered_dialects', type: 'keyword', }, - 'misp.threat_indicator.attack_pattern_kql': { - category: 'misp', + 'zeek.smb_cmd.smb2_offered_dialects': { + category: 'zeek', description: - 'The attack_pattern for this indicator is KQL query that matches the attack_pattern specified in the STIX Pattern format. ', - example: 'destination.ip: "91.219.29.188/32"\n', - name: 'misp.threat_indicator.attack_pattern_kql', + 'Present if base/protocols/smb/smb2-main.bro is loaded. Dialects offered by the client. ', + name: 'zeek.smb_cmd.smb2_offered_dialects', + type: 'integer', + }, + 'zeek.smb_files.action': { + category: 'zeek', + description: 'Action this log record represents. ', + name: 'zeek.smb_files.action', type: 'keyword', }, - 'misp.threat_indicator.negate': { - category: 'misp', - description: 'When set to true, it specifies the absence of the attack_pattern. ', - name: 'misp.threat_indicator.negate', - type: 'boolean', + 'zeek.smb_files.fid': { + category: 'zeek', + description: 'ID referencing this file. ', + name: 'zeek.smb_files.fid', + type: 'integer', }, - 'misp.threat_indicator.intrusion_set': { - category: 'misp', - description: 'Name of the intrusion set if known. ', - name: 'misp.threat_indicator.intrusion_set', + 'zeek.smb_files.name': { + category: 'zeek', + description: 'Filename if one was seen. ', + name: 'zeek.smb_files.name', type: 'keyword', }, - 'misp.threat_indicator.campaign': { - category: 'misp', - description: 'Name of the attack campaign if known. ', - name: 'misp.threat_indicator.campaign', + 'zeek.smb_files.path': { + category: 'zeek', + description: 'Path pulled from the tree this file was transferred to or from. ', + name: 'zeek.smb_files.path', type: 'keyword', }, - 'misp.threat_indicator.threat_actor': { - category: 'misp', - description: 'Name of the threat actor if known. ', - name: 'misp.threat_indicator.threat_actor', + 'zeek.smb_files.previous_name': { + category: 'zeek', + description: "If the rename action was seen, this will be the file's previous name. ", + name: 'zeek.smb_files.previous_name', type: 'keyword', }, - 'misp.observed_data.id': { - category: 'misp', - description: 'Identifier of the Observed Data. ', - name: 'misp.observed_data.id', - type: 'keyword', + 'zeek.smb_files.size': { + category: 'zeek', + description: 'Byte size of the file. ', + name: 'zeek.smb_files.size', + type: 'long', }, - 'misp.observed_data.first_observed': { - category: 'misp', - description: 'The beginning of the time window that the data was observed, in RFC3339 format. ', - name: 'misp.observed_data.first_observed', + 'zeek.smb_files.times.accessed': { + category: 'zeek', + description: "The file's access time. ", + name: 'zeek.smb_files.times.accessed', type: 'date', }, - 'misp.observed_data.last_observed': { - category: 'misp', - description: 'The end of the time window that the data was observed, in RFC3339 format. ', - name: 'misp.observed_data.last_observed', + 'zeek.smb_files.times.changed': { + category: 'zeek', + description: "The file's change time. ", + name: 'zeek.smb_files.times.changed', type: 'date', }, - 'misp.observed_data.number_observed': { - category: 'misp', - description: - 'The number of times the data represented in the objects property was observed. This MUST be an integer between 1 and 999,999,999 inclusive. ', - name: 'misp.observed_data.number_observed', - type: 'integer', + 'zeek.smb_files.times.created': { + category: 'zeek', + description: "The file's create time. ", + name: 'zeek.smb_files.times.created', + type: 'date', }, - 'misp.observed_data.objects': { - category: 'misp', - description: - 'A dictionary of Cyber Observable Objects that describes the single fact that was observed. ', - name: 'misp.observed_data.objects', - type: 'keyword', + 'zeek.smb_files.times.modified': { + category: 'zeek', + description: "The file's modify time. ", + name: 'zeek.smb_files.times.modified', + type: 'date', }, - 'misp.report.id': { - category: 'misp', - description: 'Identifier of the Report. ', - name: 'misp.report.id', + 'zeek.smb_files.uuid': { + category: 'zeek', + description: 'UUID referencing this file if DCE/RPC. ', + name: 'zeek.smb_files.uuid', type: 'keyword', }, - 'misp.report.labels': { - category: 'misp', - description: - 'This field is an Open Vocabulary that specifies the primary subject of this report. Open Vocab - report-label-ov. threat-report,attack-pattern,campaign,identity,indicator,malware,observed-data,threat-actor,tool,vulnerability ', - name: 'misp.report.labels', + 'zeek.smb_mapping.path': { + category: 'zeek', + description: 'Name of the tree path. ', + name: 'zeek.smb_mapping.path', type: 'keyword', }, - 'misp.report.name': { - category: 'misp', - description: 'The name used to identify the Report. ', - name: 'misp.report.name', + 'zeek.smb_mapping.service': { + category: 'zeek', + description: 'The type of resource of the tree (disk share, printer share, named pipe, etc.). ', + name: 'zeek.smb_mapping.service', type: 'keyword', }, - 'misp.report.description': { - category: 'misp', - description: 'A description that provides more details and context about Report. ', - name: 'misp.report.description', - type: 'text', + 'zeek.smb_mapping.native_file_system': { + category: 'zeek', + description: 'File system of the tree. ', + name: 'zeek.smb_mapping.native_file_system', + type: 'keyword', }, - 'misp.report.published': { - category: 'misp', + 'zeek.smb_mapping.share_type': { + category: 'zeek', description: - 'The date that this report object was officially published by the creator of this report, in RFC3339 format. ', - name: 'misp.report.published', - type: 'date', + 'If this is SMB2, a share type will be included. For SMB1, the type of share will be deduced and included as well. ', + name: 'zeek.smb_mapping.share_type', + type: 'keyword', }, - 'misp.report.object_refs': { - category: 'misp', - description: 'Specifies the STIX Objects that are referred to by this Report. ', - name: 'misp.report.object_refs', - type: 'text', + 'zeek.smtp.transaction_depth': { + category: 'zeek', + description: + 'A count to represent the depth of this message transaction in a single connection where multiple messages were transferred. ', + name: 'zeek.smtp.transaction_depth', + type: 'integer', }, - 'misp.threat_actor.id': { - category: 'misp', - description: 'Identifier of the Threat Actor. ', - name: 'misp.threat_actor.id', + 'zeek.smtp.helo': { + category: 'zeek', + description: 'Contents of the Helo header. ', + name: 'zeek.smtp.helo', type: 'keyword', }, - 'misp.threat_actor.labels': { - category: 'misp', - description: - 'This field specifies the type of threat actor. Open Vocab - threat-actor-label-ov. activist,competitor,crime-syndicate,criminal,hacker,insider-accidental,insider-disgruntled,nation-state,sensationalist,spy,terrorist ', - name: 'misp.threat_actor.labels', + 'zeek.smtp.mail_from': { + category: 'zeek', + description: 'Email addresses found in the MAIL FROM header. ', + name: 'zeek.smtp.mail_from', type: 'keyword', }, - 'misp.threat_actor.name': { - category: 'misp', - description: 'The name used to identify this Threat Actor or Threat Actor group. ', - name: 'misp.threat_actor.name', + 'zeek.smtp.rcpt_to': { + category: 'zeek', + description: 'Email addresses found in the RCPT TO header. ', + name: 'zeek.smtp.rcpt_to', type: 'keyword', }, - 'misp.threat_actor.description': { - category: 'misp', - description: 'A description that provides more details and context about the Threat Actor. ', - name: 'misp.threat_actor.description', - type: 'text', + 'zeek.smtp.date': { + category: 'zeek', + description: 'Contents of the Date header. ', + name: 'zeek.smtp.date', + type: 'date', }, - 'misp.threat_actor.aliases': { - category: 'misp', - description: 'A list of other names that this Threat Actor is believed to use. ', - name: 'misp.threat_actor.aliases', - type: 'text', + 'zeek.smtp.from': { + category: 'zeek', + description: 'Contents of the From header. ', + name: 'zeek.smtp.from', + type: 'keyword', }, - 'misp.threat_actor.roles': { - category: 'misp', - description: - 'This is a list of roles the Threat Actor plays. Open Vocab - threat-actor-role-ov. agent,director,independent,sponsor,infrastructure-operator,infrastructure-architect,malware-author ', - name: 'misp.threat_actor.roles', - type: 'text', + 'zeek.smtp.to': { + category: 'zeek', + description: 'Contents of the To header. ', + name: 'zeek.smtp.to', + type: 'keyword', }, - 'misp.threat_actor.goals': { - category: 'misp', - description: 'The high level goals of this Threat Actor, namely, what are they trying to do. ', - name: 'misp.threat_actor.goals', - type: 'text', + 'zeek.smtp.cc': { + category: 'zeek', + description: 'Contents of the CC header. ', + name: 'zeek.smtp.cc', + type: 'keyword', }, - 'misp.threat_actor.sophistication': { - category: 'misp', - description: - 'The skill, specific knowledge, special training, or expertise a Threat Actor must have to perform the attack. Open Vocab - threat-actor-sophistication-ov. none,minimal,intermediate,advanced,strategic,expert,innovator ', - name: 'misp.threat_actor.sophistication', - type: 'text', + 'zeek.smtp.reply_to': { + category: 'zeek', + description: 'Contents of the ReplyTo header. ', + name: 'zeek.smtp.reply_to', + type: 'keyword', }, - 'misp.threat_actor.resource_level': { - category: 'misp', - description: - 'This defines the organizational level at which this Threat Actor typically works. Open Vocab - attack-resource-level-ov. individual,club,contest,team,organization,government ', - name: 'misp.threat_actor.resource_level', - type: 'text', + 'zeek.smtp.msg_id': { + category: 'zeek', + description: 'Contents of the MsgID header. ', + name: 'zeek.smtp.msg_id', + type: 'keyword', }, - 'misp.threat_actor.primary_motivation': { - category: 'misp', - description: - 'The primary reason, motivation, or purpose behind this Threat Actor. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', - name: 'misp.threat_actor.primary_motivation', - type: 'text', + 'zeek.smtp.in_reply_to': { + category: 'zeek', + description: 'Contents of the In-Reply-To header. ', + name: 'zeek.smtp.in_reply_to', + type: 'keyword', }, - 'misp.threat_actor.secondary_motivations': { - category: 'misp', - description: - 'The secondary reasons, motivations, or purposes behind this Threat Actor. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', - name: 'misp.threat_actor.secondary_motivations', - type: 'text', + 'zeek.smtp.subject': { + category: 'zeek', + description: 'Contents of the Subject header. ', + name: 'zeek.smtp.subject', + type: 'keyword', }, - 'misp.threat_actor.personal_motivations': { - category: 'misp', - description: - 'The personal reasons, motivations, or purposes of the Threat Actor regardless of organizational goals. Open Vocab - attack-motivation-ov. accidental,coercion,dominance,ideology,notoriety,organizational-gain,personal-gain,personal-satisfaction,revenge,unpredictable ', - name: 'misp.threat_actor.personal_motivations', - type: 'text', + 'zeek.smtp.x_originating_ip': { + category: 'zeek', + description: 'Contents of the X-Originating-IP header. ', + name: 'zeek.smtp.x_originating_ip', + type: 'keyword', }, - 'misp.tool.id': { - category: 'misp', - description: 'Identifier of the Tool. ', - name: 'misp.tool.id', + 'zeek.smtp.first_received': { + category: 'zeek', + description: 'Contents of the first Received header. ', + name: 'zeek.smtp.first_received', type: 'keyword', }, - 'misp.tool.labels': { - category: 'misp', - description: - 'The kind(s) of tool(s) being described. Open Vocab - tool-label-ov. denial-of-service,exploitation,information-gathering,network-capture,credential-exploitation,remote-access,vulnerability-scanning ', - name: 'misp.tool.labels', + 'zeek.smtp.second_received': { + category: 'zeek', + description: 'Contents of the second Received header. ', + name: 'zeek.smtp.second_received', type: 'keyword', }, - 'misp.tool.name': { - category: 'misp', - description: 'The name used to identify the Tool. ', - name: 'misp.tool.name', + 'zeek.smtp.last_reply': { + category: 'zeek', + description: 'The last message that the server sent to the client. ', + name: 'zeek.smtp.last_reply', type: 'keyword', }, - 'misp.tool.description': { - category: 'misp', - description: 'A description that provides more details and context about the Tool. ', - name: 'misp.tool.description', - type: 'text', + 'zeek.smtp.path': { + category: 'zeek', + description: 'The message transmission path, as extracted from the headers. ', + name: 'zeek.smtp.path', + type: 'ip', }, - 'misp.tool.tool_version': { - category: 'misp', - description: 'The version identifier associated with the Tool. ', - name: 'misp.tool.tool_version', + 'zeek.smtp.user_agent': { + category: 'zeek', + description: 'Value of the User-Agent header from the client. ', + name: 'zeek.smtp.user_agent', type: 'keyword', }, - 'misp.tool.kill_chain_phases': { - category: 'misp', - description: 'The list of kill chain phases for which this Tool instance can be used. ', - name: 'misp.tool.kill_chain_phases', - type: 'text', + 'zeek.smtp.tls': { + category: 'zeek', + description: 'Indicates that the connection has switched to using TLS. ', + name: 'zeek.smtp.tls', + type: 'boolean', }, - 'misp.vulnerability.id': { - category: 'misp', - description: 'Identifier of the Vulnerability. ', - name: 'misp.vulnerability.id', - type: 'keyword', + 'zeek.smtp.process_received_from': { + category: 'zeek', + description: 'Indicates if the "Received: from" headers should still be processed. ', + name: 'zeek.smtp.process_received_from', + type: 'boolean', }, - 'misp.vulnerability.name': { - category: 'misp', - description: 'The name used to identify the Vulnerability. ', - name: 'misp.vulnerability.name', + 'zeek.smtp.has_client_activity': { + category: 'zeek', + description: 'Indicates if client activity has been seen, but not yet logged. ', + name: 'zeek.smtp.has_client_activity', + type: 'boolean', + }, + 'zeek.smtp.fuids': { + category: 'zeek', + description: + '(present if base/protocols/smtp/files.bro is loaded) An ordered vector of file unique IDs seen attached to the message. ', + name: 'zeek.smtp.fuids', type: 'keyword', }, - 'misp.vulnerability.description': { - category: 'misp', - description: 'A description that provides more details and context about the Vulnerability. ', - name: 'misp.vulnerability.description', - type: 'text', + 'zeek.smtp.is_webmail': { + category: 'zeek', + description: 'Indicates if the message was sent through a webmail interface. ', + name: 'zeek.smtp.is_webmail', + type: 'boolean', }, - 'mssql.log.origin': { - category: 'mssql', - description: 'Origin of the message, usually the server but it can also be a recovery process', - name: 'mssql.log.origin', - type: 'keyword', + 'zeek.snmp.duration': { + category: 'zeek', + description: + 'The amount of time between the first packet beloning to the SNMP session and the latest one seen. ', + name: 'zeek.snmp.duration', + type: 'double', }, - 'o365.audit.Actor.ID': { - category: 'o365', - name: 'o365.audit.Actor.ID', + 'zeek.snmp.version': { + category: 'zeek', + description: 'The version of SNMP being used. ', + name: 'zeek.snmp.version', type: 'keyword', }, - 'o365.audit.Actor.Type': { - category: 'o365', - name: 'o365.audit.Actor.Type', + 'zeek.snmp.community': { + category: 'zeek', + description: + "The community string of the first SNMP packet associated with the session. This is used as part of SNMP's (v1 and v2c) administrative/security framework. See RFC 1157 or RFC 1901. ", + name: 'zeek.snmp.community', type: 'keyword', }, - 'o365.audit.ActorContextId': { - category: 'o365', - name: 'o365.audit.ActorContextId', - type: 'keyword', + 'zeek.snmp.get.requests': { + category: 'zeek', + description: + 'The number of variable bindings in GetRequest/GetNextRequest PDUs seen for the session. ', + name: 'zeek.snmp.get.requests', + type: 'integer', }, - 'o365.audit.ActorIpAddress': { - category: 'o365', - name: 'o365.audit.ActorIpAddress', - type: 'keyword', + 'zeek.snmp.get.bulk_requests': { + category: 'zeek', + description: 'The number of variable bindings in GetBulkRequest PDUs seen for the session. ', + name: 'zeek.snmp.get.bulk_requests', + type: 'integer', }, - 'o365.audit.ActorUserId': { - category: 'o365', - name: 'o365.audit.ActorUserId', - type: 'keyword', + 'zeek.snmp.get.responses': { + category: 'zeek', + description: + 'The number of variable bindings in GetResponse/Response PDUs seen for the session. ', + name: 'zeek.snmp.get.responses', + type: 'integer', }, - 'o365.audit.ActorYammerUserId': { - category: 'o365', - name: 'o365.audit.ActorYammerUserId', - type: 'keyword', + 'zeek.snmp.set.requests': { + category: 'zeek', + description: 'The number of variable bindings in SetRequest PDUs seen for the session. ', + name: 'zeek.snmp.set.requests', + type: 'integer', }, - 'o365.audit.AlertEntityId': { - category: 'o365', - name: 'o365.audit.AlertEntityId', + 'zeek.snmp.display_string': { + category: 'zeek', + description: 'A system description of the SNMP responder endpoint. ', + name: 'zeek.snmp.display_string', type: 'keyword', }, - 'o365.audit.AlertId': { - category: 'o365', - name: 'o365.audit.AlertId', - type: 'keyword', + 'zeek.snmp.up_since': { + category: 'zeek', + description: "The time at which the SNMP responder endpoint claims it's been up since. ", + name: 'zeek.snmp.up_since', + type: 'date', }, - 'o365.audit.AlertLinks': { - category: 'o365', - name: 'o365.audit.AlertLinks', - type: 'array', + 'zeek.socks.version': { + category: 'zeek', + description: 'Protocol version of SOCKS. ', + name: 'zeek.socks.version', + type: 'integer', }, - 'o365.audit.AlertType': { - category: 'o365', - name: 'o365.audit.AlertType', + 'zeek.socks.user': { + category: 'zeek', + description: 'Username used to request a login to the proxy. ', + name: 'zeek.socks.user', type: 'keyword', }, - 'o365.audit.AppId': { - category: 'o365', - name: 'o365.audit.AppId', + 'zeek.socks.password': { + category: 'zeek', + description: 'Password used to request a login to the proxy. ', + name: 'zeek.socks.password', type: 'keyword', }, - 'o365.audit.ApplicationDisplayName': { - category: 'o365', - name: 'o365.audit.ApplicationDisplayName', + 'zeek.socks.status': { + category: 'zeek', + description: 'Server status for the attempt at using the proxy. ', + name: 'zeek.socks.status', type: 'keyword', }, - 'o365.audit.ApplicationId': { - category: 'o365', - name: 'o365.audit.ApplicationId', + 'zeek.socks.request.host': { + category: 'zeek', + description: 'Client requested SOCKS address. Could be an address, a name or both. ', + name: 'zeek.socks.request.host', type: 'keyword', }, - 'o365.audit.AzureActiveDirectoryEventType': { - category: 'o365', - name: 'o365.audit.AzureActiveDirectoryEventType', + 'zeek.socks.request.port': { + category: 'zeek', + description: 'Client requested port. ', + name: 'zeek.socks.request.port', + type: 'integer', + }, + 'zeek.socks.bound.host': { + category: 'zeek', + description: 'Server bound address. Could be an address, a name or both. ', + name: 'zeek.socks.bound.host', type: 'keyword', }, - 'o365.audit.ExchangeMetaData.*': { - category: 'o365', - name: 'o365.audit.ExchangeMetaData.*', - type: 'object', + 'zeek.socks.bound.port': { + category: 'zeek', + description: 'Server bound port. ', + name: 'zeek.socks.bound.port', + type: 'integer', }, - 'o365.audit.Category': { - category: 'o365', - name: 'o365.audit.Category', - type: 'keyword', + 'zeek.socks.capture_password': { + category: 'zeek', + description: 'Determines if the password will be captured for this request. ', + name: 'zeek.socks.capture_password', + type: 'boolean', }, - 'o365.audit.ClientAppId': { - category: 'o365', - name: 'o365.audit.ClientAppId', + 'zeek.ssh.client': { + category: 'zeek', + description: "The client's version string. ", + name: 'zeek.ssh.client', type: 'keyword', }, - 'o365.audit.ClientInfoString': { - category: 'o365', - name: 'o365.audit.ClientInfoString', + 'zeek.ssh.direction': { + category: 'zeek', + description: + 'Direction of the connection. If the client was a local host logging into an external host, this would be OUTBOUND. INBOUND would be set for the opposite situation. ', + name: 'zeek.ssh.direction', type: 'keyword', }, - 'o365.audit.ClientIP': { - category: 'o365', - name: 'o365.audit.ClientIP', + 'zeek.ssh.host_key': { + category: 'zeek', + description: "The server's key thumbprint. ", + name: 'zeek.ssh.host_key', type: 'keyword', }, - 'o365.audit.ClientIPAddress': { - category: 'o365', - name: 'o365.audit.ClientIPAddress', + 'zeek.ssh.server': { + category: 'zeek', + description: "The server's version string. ", + name: 'zeek.ssh.server', type: 'keyword', }, - 'o365.audit.Comments': { - category: 'o365', - name: 'o365.audit.Comments', - type: 'text', + 'zeek.ssh.version': { + category: 'zeek', + description: 'SSH major version (1 or 2). ', + name: 'zeek.ssh.version', + type: 'integer', }, - 'o365.audit.CorrelationId': { - category: 'o365', - name: 'o365.audit.CorrelationId', + 'zeek.ssh.algorithm.cipher': { + category: 'zeek', + description: 'The encryption algorithm in use. ', + name: 'zeek.ssh.algorithm.cipher', type: 'keyword', }, - 'o365.audit.CreationTime': { - category: 'o365', - name: 'o365.audit.CreationTime', + 'zeek.ssh.algorithm.compression': { + category: 'zeek', + description: 'The compression algorithm in use. ', + name: 'zeek.ssh.algorithm.compression', type: 'keyword', }, - 'o365.audit.CustomUniqueId': { - category: 'o365', - name: 'o365.audit.CustomUniqueId', + 'zeek.ssh.algorithm.host_key': { + category: 'zeek', + description: "The server host key's algorithm. ", + name: 'zeek.ssh.algorithm.host_key', type: 'keyword', }, - 'o365.audit.Data': { - category: 'o365', - name: 'o365.audit.Data', + 'zeek.ssh.algorithm.key_exchange': { + category: 'zeek', + description: 'The key exchange algorithm in use. ', + name: 'zeek.ssh.algorithm.key_exchange', type: 'keyword', }, - 'o365.audit.DataType': { - category: 'o365', - name: 'o365.audit.DataType', + 'zeek.ssh.algorithm.mac': { + category: 'zeek', + description: 'The signing (MAC) algorithm in use. ', + name: 'zeek.ssh.algorithm.mac', type: 'keyword', }, - 'o365.audit.EntityType': { - category: 'o365', - name: 'o365.audit.EntityType', - type: 'keyword', + 'zeek.ssh.auth.attempts': { + category: 'zeek', + description: + "The number of authentication attemps we observed. There's always at least one, since some servers might support no authentication at all. It's important to note that not all of these are failures, since some servers require two-factor auth (e.g. password AND pubkey). ", + name: 'zeek.ssh.auth.attempts', + type: 'integer', }, - 'o365.audit.EventData': { - category: 'o365', - name: 'o365.audit.EventData', + 'zeek.ssh.auth.success': { + category: 'zeek', + description: 'Authentication result. ', + name: 'zeek.ssh.auth.success', + type: 'boolean', + }, + 'zeek.ssl.version': { + category: 'zeek', + description: 'SSL/TLS version that was logged. ', + name: 'zeek.ssl.version', type: 'keyword', }, - 'o365.audit.EventSource': { - category: 'o365', - name: 'o365.audit.EventSource', + 'zeek.ssl.cipher': { + category: 'zeek', + description: 'SSL/TLS cipher suite that was logged. ', + name: 'zeek.ssl.cipher', type: 'keyword', }, - 'o365.audit.ExceptionInfo.*': { - category: 'o365', - name: 'o365.audit.ExceptionInfo.*', - type: 'object', + 'zeek.ssl.curve': { + category: 'zeek', + description: 'Elliptic curve that was logged when using ECDH/ECDHE. ', + name: 'zeek.ssl.curve', + type: 'keyword', }, - 'o365.audit.ExtendedProperties.*': { - category: 'o365', - name: 'o365.audit.ExtendedProperties.*', - type: 'object', + 'zeek.ssl.resumed': { + category: 'zeek', + description: + 'Flag to indicate if the session was resumed reusing the key material exchanged in an earlier connection. ', + name: 'zeek.ssl.resumed', + type: 'boolean', }, - 'o365.audit.ExternalAccess': { - category: 'o365', - name: 'o365.audit.ExternalAccess', + 'zeek.ssl.next_protocol': { + category: 'zeek', + description: + 'Next protocol the server chose using the application layer next protocol extension. ', + name: 'zeek.ssl.next_protocol', type: 'keyword', }, - 'o365.audit.GroupName': { - category: 'o365', - name: 'o365.audit.GroupName', - type: 'keyword', + 'zeek.ssl.established': { + category: 'zeek', + description: 'Flag to indicate if this ssl session has been established successfully. ', + name: 'zeek.ssl.established', + type: 'boolean', }, - 'o365.audit.Id': { - category: 'o365', - name: 'o365.audit.Id', + 'zeek.ssl.validation.status': { + category: 'zeek', + description: 'Result of certificate validation for this connection. ', + name: 'zeek.ssl.validation.status', type: 'keyword', }, - 'o365.audit.ImplicitShare': { - category: 'o365', - name: 'o365.audit.ImplicitShare', + 'zeek.ssl.validation.code': { + category: 'zeek', + description: + 'Result of certificate validation for this connection, given as OpenSSL validation code. ', + name: 'zeek.ssl.validation.code', type: 'keyword', }, - 'o365.audit.IncidentId': { - category: 'o365', - name: 'o365.audit.IncidentId', + 'zeek.ssl.last_alert': { + category: 'zeek', + description: 'Last alert that was seen during the connection. ', + name: 'zeek.ssl.last_alert', type: 'keyword', }, - 'o365.audit.InternalLogonType': { - category: 'o365', - name: 'o365.audit.InternalLogonType', + 'zeek.ssl.server.name': { + category: 'zeek', + description: + 'Value of the Server Name Indicator SSL/TLS extension. It indicates the server name that the client was requesting. ', + name: 'zeek.ssl.server.name', type: 'keyword', }, - 'o365.audit.InterSystemsId': { - category: 'o365', - name: 'o365.audit.InterSystemsId', + 'zeek.ssl.server.cert_chain': { + category: 'zeek', + description: + 'Chain of certificates offered by the server to validate its complete signing chain. ', + name: 'zeek.ssl.server.cert_chain', type: 'keyword', }, - 'o365.audit.IntraSystemId': { - category: 'o365', - name: 'o365.audit.IntraSystemId', + 'zeek.ssl.server.cert_chain_fuids': { + category: 'zeek', + description: + 'An ordered vector of certificate file identifiers for the certificates offered by the server. ', + name: 'zeek.ssl.server.cert_chain_fuids', type: 'keyword', }, - 'o365.audit.Item.*': { - category: 'o365', - name: 'o365.audit.Item.*', - type: 'object', - }, - 'o365.audit.Item.*.*': { - category: 'o365', - name: 'o365.audit.Item.*.*', - type: 'object', - }, - 'o365.audit.ItemName': { - category: 'o365', - name: 'o365.audit.ItemName', + 'zeek.ssl.server.issuer.common_name': { + category: 'zeek', + description: 'Common name of the signer of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.issuer.common_name', type: 'keyword', }, - 'o365.audit.ItemType': { - category: 'o365', - name: 'o365.audit.ItemType', + 'zeek.ssl.server.issuer.country': { + category: 'zeek', + description: 'Country code of the signer of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.issuer.country', type: 'keyword', }, - 'o365.audit.ListId': { - category: 'o365', - name: 'o365.audit.ListId', + 'zeek.ssl.server.issuer.locality': { + category: 'zeek', + description: 'Locality of the signer of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.issuer.locality', type: 'keyword', }, - 'o365.audit.ListItemUniqueId': { - category: 'o365', - name: 'o365.audit.ListItemUniqueId', + 'zeek.ssl.server.issuer.organization': { + category: 'zeek', + description: 'Organization of the signer of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.issuer.organization', type: 'keyword', }, - 'o365.audit.LogonError': { - category: 'o365', - name: 'o365.audit.LogonError', + 'zeek.ssl.server.issuer.organizational_unit': { + category: 'zeek', + description: + 'Organizational unit of the signer of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.issuer.organizational_unit', type: 'keyword', }, - 'o365.audit.LogonType': { - category: 'o365', - name: 'o365.audit.LogonType', + 'zeek.ssl.server.issuer.state': { + category: 'zeek', + description: + 'State or province name of the signer of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.issuer.state', type: 'keyword', }, - 'o365.audit.LogonUserSid': { - category: 'o365', - name: 'o365.audit.LogonUserSid', + 'zeek.ssl.server.subject.common_name': { + category: 'zeek', + description: 'Common name of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.subject.common_name', type: 'keyword', }, - 'o365.audit.MailboxGuid': { - category: 'o365', - name: 'o365.audit.MailboxGuid', + 'zeek.ssl.server.subject.country': { + category: 'zeek', + description: 'Country code of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.subject.country', type: 'keyword', }, - 'o365.audit.MailboxOwnerMasterAccountSid': { - category: 'o365', - name: 'o365.audit.MailboxOwnerMasterAccountSid', + 'zeek.ssl.server.subject.locality': { + category: 'zeek', + description: 'Locality of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.subject.locality', type: 'keyword', }, - 'o365.audit.MailboxOwnerSid': { - category: 'o365', - name: 'o365.audit.MailboxOwnerSid', + 'zeek.ssl.server.subject.organization': { + category: 'zeek', + description: 'Organization of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.subject.organization', type: 'keyword', }, - 'o365.audit.MailboxOwnerUPN': { - category: 'o365', - name: 'o365.audit.MailboxOwnerUPN', + 'zeek.ssl.server.subject.organizational_unit': { + category: 'zeek', + description: 'Organizational unit of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.subject.organizational_unit', type: 'keyword', }, - 'o365.audit.Members': { - category: 'o365', - name: 'o365.audit.Members', - type: 'array', - }, - 'o365.audit.Members.*': { - category: 'o365', - name: 'o365.audit.Members.*', - type: 'object', - }, - 'o365.audit.ModifiedProperties.*.*': { - category: 'o365', - name: 'o365.audit.ModifiedProperties.*.*', - type: 'object', - }, - 'o365.audit.Name': { - category: 'o365', - name: 'o365.audit.Name', + 'zeek.ssl.server.subject.state': { + category: 'zeek', + description: 'State or province name of the X.509 certificate offered by the server. ', + name: 'zeek.ssl.server.subject.state', type: 'keyword', }, - 'o365.audit.ObjectId': { - category: 'o365', - name: 'o365.audit.ObjectId', + 'zeek.ssl.client.cert_chain': { + category: 'zeek', + description: + 'Chain of certificates offered by the client to validate its complete signing chain. ', + name: 'zeek.ssl.client.cert_chain', type: 'keyword', }, - 'o365.audit.Operation': { - category: 'o365', - name: 'o365.audit.Operation', + 'zeek.ssl.client.cert_chain_fuids': { + category: 'zeek', + description: + 'An ordered vector of certificate file identifiers for the certificates offered by the client. ', + name: 'zeek.ssl.client.cert_chain_fuids', type: 'keyword', }, - 'o365.audit.OrganizationId': { - category: 'o365', - name: 'o365.audit.OrganizationId', + 'zeek.ssl.client.issuer.common_name': { + category: 'zeek', + description: 'Common name of the signer of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.issuer.common_name', type: 'keyword', }, - 'o365.audit.OrganizationName': { - category: 'o365', - name: 'o365.audit.OrganizationName', + 'zeek.ssl.client.issuer.country': { + category: 'zeek', + description: 'Country code of the signer of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.issuer.country', type: 'keyword', }, - 'o365.audit.OriginatingServer': { - category: 'o365', - name: 'o365.audit.OriginatingServer', + 'zeek.ssl.client.issuer.locality': { + category: 'zeek', + description: 'Locality of the signer of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.issuer.locality', type: 'keyword', }, - 'o365.audit.Parameters.*': { - category: 'o365', - name: 'o365.audit.Parameters.*', - type: 'object', - }, - 'o365.audit.PolicyDetails': { - category: 'o365', - name: 'o365.audit.PolicyDetails', - type: 'array', - }, - 'o365.audit.PolicyId': { - category: 'o365', - name: 'o365.audit.PolicyId', + 'zeek.ssl.client.issuer.organization': { + category: 'zeek', + description: 'Organization of the signer of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.issuer.organization', type: 'keyword', }, - 'o365.audit.RecordType': { - category: 'o365', - name: 'o365.audit.RecordType', + 'zeek.ssl.client.issuer.organizational_unit': { + category: 'zeek', + description: + 'Organizational unit of the signer of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.issuer.organizational_unit', type: 'keyword', }, - 'o365.audit.ResultStatus': { - category: 'o365', - name: 'o365.audit.ResultStatus', + 'zeek.ssl.client.issuer.state': { + category: 'zeek', + description: + 'State or province name of the signer of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.issuer.state', type: 'keyword', }, - 'o365.audit.SensitiveInfoDetectionIsIncluded': { - category: 'o365', - name: 'o365.audit.SensitiveInfoDetectionIsIncluded', + 'zeek.ssl.client.subject.common_name': { + category: 'zeek', + description: 'Common name of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.subject.common_name', type: 'keyword', }, - 'o365.audit.SharePointMetaData.*': { - category: 'o365', - name: 'o365.audit.SharePointMetaData.*', - type: 'object', + 'zeek.ssl.client.subject.country': { + category: 'zeek', + description: 'Country code of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.subject.country', + type: 'keyword', }, - 'o365.audit.SessionId': { - category: 'o365', - name: 'o365.audit.SessionId', + 'zeek.ssl.client.subject.locality': { + category: 'zeek', + description: 'Locality of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.subject.locality', type: 'keyword', }, - 'o365.audit.Severity': { - category: 'o365', - name: 'o365.audit.Severity', + 'zeek.ssl.client.subject.organization': { + category: 'zeek', + description: 'Organization of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.subject.organization', type: 'keyword', }, - 'o365.audit.Site': { - category: 'o365', - name: 'o365.audit.Site', + 'zeek.ssl.client.subject.organizational_unit': { + category: 'zeek', + description: 'Organizational unit of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.subject.organizational_unit', type: 'keyword', }, - 'o365.audit.SiteUrl': { - category: 'o365', - name: 'o365.audit.SiteUrl', + 'zeek.ssl.client.subject.state': { + category: 'zeek', + description: 'State or province name of the X.509 certificate offered by the client. ', + name: 'zeek.ssl.client.subject.state', type: 'keyword', }, - 'o365.audit.Source': { - category: 'o365', - name: 'o365.audit.Source', + 'zeek.stats.peer': { + category: 'zeek', + description: 'Peer that generated this log. Mostly for clusters. ', + name: 'zeek.stats.peer', type: 'keyword', }, - 'o365.audit.SourceFileExtension': { - category: 'o365', - name: 'o365.audit.SourceFileExtension', - type: 'keyword', + 'zeek.stats.memory': { + category: 'zeek', + description: 'Amount of memory currently in use in MB. ', + name: 'zeek.stats.memory', + type: 'integer', }, - 'o365.audit.SourceFileName': { - category: 'o365', - name: 'o365.audit.SourceFileName', - type: 'keyword', + 'zeek.stats.packets.processed': { + category: 'zeek', + description: 'Number of packets processed since the last stats interval. ', + name: 'zeek.stats.packets.processed', + type: 'long', }, - 'o365.audit.SourceRelativeUrl': { - category: 'o365', - name: 'o365.audit.SourceRelativeUrl', - type: 'keyword', + 'zeek.stats.packets.dropped': { + category: 'zeek', + description: + 'Number of packets dropped since the last stats interval if reading live traffic. ', + name: 'zeek.stats.packets.dropped', + type: 'long', }, - 'o365.audit.Status': { - category: 'o365', - name: 'o365.audit.Status', - type: 'keyword', + 'zeek.stats.packets.received': { + category: 'zeek', + description: + 'Number of packets seen on the link since the last stats interval if reading live traffic. ', + name: 'zeek.stats.packets.received', + type: 'long', }, - 'o365.audit.SupportTicketId': { - category: 'o365', - name: 'o365.audit.SupportTicketId', - type: 'keyword', + 'zeek.stats.bytes.received': { + category: 'zeek', + description: 'Number of bytes received since the last stats interval if reading live traffic. ', + name: 'zeek.stats.bytes.received', + type: 'long', }, - 'o365.audit.Target.ID': { - category: 'o365', - name: 'o365.audit.Target.ID', - type: 'keyword', + 'zeek.stats.connections.tcp.active': { + category: 'zeek', + description: 'TCP connections currently in memory. ', + name: 'zeek.stats.connections.tcp.active', + type: 'integer', }, - 'o365.audit.Target.Type': { - category: 'o365', - name: 'o365.audit.Target.Type', - type: 'keyword', + 'zeek.stats.connections.tcp.count': { + category: 'zeek', + description: 'TCP connections seen since last stats interval. ', + name: 'zeek.stats.connections.tcp.count', + type: 'integer', }, - 'o365.audit.TargetContextId': { - category: 'o365', - name: 'o365.audit.TargetContextId', - type: 'keyword', + 'zeek.stats.connections.udp.active': { + category: 'zeek', + description: 'UDP connections currently in memory. ', + name: 'zeek.stats.connections.udp.active', + type: 'integer', }, - 'o365.audit.TargetUserOrGroupName': { - category: 'o365', - name: 'o365.audit.TargetUserOrGroupName', - type: 'keyword', + 'zeek.stats.connections.udp.count': { + category: 'zeek', + description: 'UDP connections seen since last stats interval. ', + name: 'zeek.stats.connections.udp.count', + type: 'integer', }, - 'o365.audit.TargetUserOrGroupType': { - category: 'o365', - name: 'o365.audit.TargetUserOrGroupType', - type: 'keyword', + 'zeek.stats.connections.icmp.active': { + category: 'zeek', + description: 'ICMP connections currently in memory. ', + name: 'zeek.stats.connections.icmp.active', + type: 'integer', }, - 'o365.audit.TeamName': { - category: 'o365', - name: 'o365.audit.TeamName', - type: 'keyword', + 'zeek.stats.connections.icmp.count': { + category: 'zeek', + description: 'ICMP connections seen since last stats interval. ', + name: 'zeek.stats.connections.icmp.count', + type: 'integer', }, - 'o365.audit.TeamGuid': { - category: 'o365', - name: 'o365.audit.TeamGuid', - type: 'keyword', + 'zeek.stats.events.processed': { + category: 'zeek', + description: 'Number of events processed since the last stats interval. ', + name: 'zeek.stats.events.processed', + type: 'integer', }, - 'o365.audit.UniqueSharingId': { - category: 'o365', - name: 'o365.audit.UniqueSharingId', - type: 'keyword', + 'zeek.stats.events.queued': { + category: 'zeek', + description: 'Number of events that have been queued since the last stats interval. ', + name: 'zeek.stats.events.queued', + type: 'integer', }, - 'o365.audit.UserAgent': { - category: 'o365', - name: 'o365.audit.UserAgent', - type: 'keyword', + 'zeek.stats.timers.count': { + category: 'zeek', + description: 'Number of timers scheduled since last stats interval. ', + name: 'zeek.stats.timers.count', + type: 'integer', }, - 'o365.audit.UserId': { - category: 'o365', - name: 'o365.audit.UserId', - type: 'keyword', + 'zeek.stats.timers.active': { + category: 'zeek', + description: 'Current number of scheduled timers. ', + name: 'zeek.stats.timers.active', + type: 'integer', }, - 'o365.audit.UserKey': { - category: 'o365', - name: 'o365.audit.UserKey', - type: 'keyword', + 'zeek.stats.files.count': { + category: 'zeek', + description: 'Number of files seen since last stats interval. ', + name: 'zeek.stats.files.count', + type: 'integer', }, - 'o365.audit.UserType': { - category: 'o365', - name: 'o365.audit.UserType', - type: 'keyword', + 'zeek.stats.files.active': { + category: 'zeek', + description: 'Current number of files actively being seen. ', + name: 'zeek.stats.files.active', + type: 'integer', }, - 'o365.audit.Version': { - category: 'o365', - name: 'o365.audit.Version', - type: 'keyword', + 'zeek.stats.dns_requests.count': { + category: 'zeek', + description: 'Number of DNS requests seen since last stats interval. ', + name: 'zeek.stats.dns_requests.count', + type: 'integer', }, - 'o365.audit.WebId': { - category: 'o365', - name: 'o365.audit.WebId', - type: 'keyword', + 'zeek.stats.dns_requests.active': { + category: 'zeek', + description: 'Current number of DNS requests awaiting a reply. ', + name: 'zeek.stats.dns_requests.active', + type: 'integer', }, - 'o365.audit.Workload': { - category: 'o365', - name: 'o365.audit.Workload', - type: 'keyword', + 'zeek.stats.reassembly_size.tcp': { + category: 'zeek', + description: 'Current size of TCP data in reassembly. ', + name: 'zeek.stats.reassembly_size.tcp', + type: 'integer', }, - 'o365.audit.YammerNetworkId': { - category: 'o365', - name: 'o365.audit.YammerNetworkId', - type: 'keyword', + 'zeek.stats.reassembly_size.file': { + category: 'zeek', + description: 'Current size of File data in reassembly. ', + name: 'zeek.stats.reassembly_size.file', + type: 'integer', }, - 'okta.uuid': { - category: 'okta', - description: 'The unique identifier of the Okta LogEvent. ', - name: 'okta.uuid', - type: 'keyword', + 'zeek.stats.reassembly_size.frag': { + category: 'zeek', + description: 'Current size of packet fragment data in reassembly. ', + name: 'zeek.stats.reassembly_size.frag', + type: 'integer', }, - 'okta.event_type': { - category: 'okta', - description: 'The type of the LogEvent. ', - name: 'okta.event_type', - type: 'keyword', + 'zeek.stats.reassembly_size.unknown': { + category: 'zeek', + description: 'Current size of unknown data in reassembly (this is only PIA buffer right now). ', + name: 'zeek.stats.reassembly_size.unknown', + type: 'integer', }, - 'okta.version': { - category: 'okta', - description: 'The version of the LogEvent. ', - name: 'okta.version', + 'zeek.stats.timestamp_lag': { + category: 'zeek', + description: 'Lag between the wall clock and packet timestamps if reading live traffic. ', + name: 'zeek.stats.timestamp_lag', + type: 'integer', + }, + 'zeek.syslog.facility': { + category: 'zeek', + description: 'Syslog facility for the message. ', + name: 'zeek.syslog.facility', type: 'keyword', }, - 'okta.severity': { - category: 'okta', - description: 'The severity of the LogEvent. Must be one of DEBUG, INFO, WARN, or ERROR. ', - name: 'okta.severity', + 'zeek.syslog.severity': { + category: 'zeek', + description: 'Syslog severity for the message. ', + name: 'zeek.syslog.severity', type: 'keyword', }, - 'okta.display_message': { - category: 'okta', - description: 'The display message of the LogEvent. ', - name: 'okta.display_message', + 'zeek.syslog.message': { + category: 'zeek', + description: 'The plain text message. ', + name: 'zeek.syslog.message', type: 'keyword', }, - 'okta.actor.id': { - category: 'okta', - description: 'Identifier of the actor. ', - name: 'okta.actor.id', + 'zeek.tunnel.type': { + category: 'zeek', + description: 'The type of tunnel. ', + name: 'zeek.tunnel.type', type: 'keyword', }, - 'okta.actor.type': { - category: 'okta', - description: 'Type of the actor. ', - name: 'okta.actor.type', + 'zeek.tunnel.action': { + category: 'zeek', + description: 'The type of activity that occurred. ', + name: 'zeek.tunnel.action', type: 'keyword', }, - 'okta.actor.alternate_id': { - category: 'okta', - description: 'Alternate identifier of the actor. ', - name: 'okta.actor.alternate_id', + 'zeek.weird.name': { + category: 'zeek', + description: 'The name of the weird that occurred. ', + name: 'zeek.weird.name', type: 'keyword', }, - 'okta.actor.display_name': { - category: 'okta', - description: 'Display name of the actor. ', - name: 'okta.actor.display_name', + 'zeek.weird.additional_info': { + category: 'zeek', + description: 'Additional information accompanying the weird if any. ', + name: 'zeek.weird.additional_info', type: 'keyword', }, - 'okta.client.ip': { - category: 'okta', - description: 'The IP address of the client. ', - name: 'okta.client.ip', - type: 'ip', + 'zeek.weird.notice': { + category: 'zeek', + description: 'Indicate if this weird was also turned into a notice. ', + name: 'zeek.weird.notice', + type: 'boolean', }, - 'okta.client.user_agent.raw_user_agent': { - category: 'okta', - description: 'The raw informaton of the user agent. ', - name: 'okta.client.user_agent.raw_user_agent', + 'zeek.weird.peer': { + category: 'zeek', + description: + 'The peer that originated this weird. This is helpful in cluster deployments if a particular cluster node is having trouble to help identify which node is having trouble. ', + name: 'zeek.weird.peer', type: 'keyword', }, - 'okta.client.user_agent.os': { - category: 'okta', - description: 'The OS informaton. ', - name: 'okta.client.user_agent.os', + 'zeek.weird.identifier': { + category: 'zeek', + description: + 'This field is to be provided when a weird is generated for the purpose of deduplicating weirds. The identifier string should be unique for a single instance of the weird. This field is used to define when a weird is conceptually a duplicate of a previous weird. ', + name: 'zeek.weird.identifier', type: 'keyword', }, - 'okta.client.user_agent.browser': { - category: 'okta', - description: 'The browser informaton of the client. ', - name: 'okta.client.user_agent.browser', + 'zeek.x509.id': { + category: 'zeek', + description: 'File id of this certificate. ', + name: 'zeek.x509.id', type: 'keyword', }, - 'okta.client.zone': { - category: 'okta', - description: 'The zone information of the client. ', - name: 'okta.client.zone', - type: 'keyword', + 'zeek.x509.certificate.version': { + category: 'zeek', + description: 'Version number. ', + name: 'zeek.x509.certificate.version', + type: 'integer', }, - 'okta.client.device': { - category: 'okta', - description: 'The information of the client device. ', - name: 'okta.client.device', + 'zeek.x509.certificate.serial': { + category: 'zeek', + description: 'Serial number. ', + name: 'zeek.x509.certificate.serial', type: 'keyword', }, - 'okta.client.id': { - category: 'okta', - description: 'The identifier of the client. ', - name: 'okta.client.id', + 'zeek.x509.certificate.subject.country': { + category: 'zeek', + description: 'Country provided in the certificate subject. ', + name: 'zeek.x509.certificate.subject.country', type: 'keyword', }, - 'okta.outcome.reason': { - category: 'okta', - description: 'The reason of the outcome. ', - name: 'okta.outcome.reason', + 'zeek.x509.certificate.subject.common_name': { + category: 'zeek', + description: 'Common name provided in the certificate subject. ', + name: 'zeek.x509.certificate.subject.common_name', type: 'keyword', }, - 'okta.outcome.result': { - category: 'okta', - description: - 'The result of the outcome. Must be one of: SUCCESS, FAILURE, SKIPPED, ALLOW, DENY, CHALLENGE, UNKNOWN. ', - name: 'okta.outcome.result', + 'zeek.x509.certificate.subject.locality': { + category: 'zeek', + description: 'Locality provided in the certificate subject. ', + name: 'zeek.x509.certificate.subject.locality', type: 'keyword', }, - 'okta.target.id': { - category: 'okta', - description: 'Identifier of the actor. ', - name: 'okta.target.id', + 'zeek.x509.certificate.subject.organization': { + category: 'zeek', + description: 'Organization provided in the certificate subject. ', + name: 'zeek.x509.certificate.subject.organization', type: 'keyword', }, - 'okta.target.type': { - category: 'okta', - description: 'Type of the actor. ', - name: 'okta.target.type', + 'zeek.x509.certificate.subject.organizational_unit': { + category: 'zeek', + description: 'Organizational unit provided in the certificate subject. ', + name: 'zeek.x509.certificate.subject.organizational_unit', type: 'keyword', }, - 'okta.target.alternate_id': { - category: 'okta', - description: 'Alternate identifier of the actor. ', - name: 'okta.target.alternate_id', + 'zeek.x509.certificate.subject.state': { + category: 'zeek', + description: 'State or province provided in the certificate subject. ', + name: 'zeek.x509.certificate.subject.state', type: 'keyword', }, - 'okta.target.display_name': { - category: 'okta', - description: 'Display name of the actor. ', - name: 'okta.target.display_name', + 'zeek.x509.certificate.issuer.country': { + category: 'zeek', + description: 'Country provided in the certificate issuer field. ', + name: 'zeek.x509.certificate.issuer.country', type: 'keyword', }, - 'okta.transaction.id': { - category: 'okta', - description: 'Identifier of the transaction. ', - name: 'okta.transaction.id', + 'zeek.x509.certificate.issuer.common_name': { + category: 'zeek', + description: 'Common name provided in the certificate issuer field. ', + name: 'zeek.x509.certificate.issuer.common_name', type: 'keyword', }, - 'okta.transaction.type': { - category: 'okta', - description: 'The type of transaction. Must be one of "WEB", "JOB". ', - name: 'okta.transaction.type', + 'zeek.x509.certificate.issuer.locality': { + category: 'zeek', + description: 'Locality provided in the certificate issuer field. ', + name: 'zeek.x509.certificate.issuer.locality', type: 'keyword', }, - 'okta.debug_context.debug_data.device_fingerprint': { - category: 'okta', - description: 'The fingerprint of the device. ', - name: 'okta.debug_context.debug_data.device_fingerprint', + 'zeek.x509.certificate.issuer.organization': { + category: 'zeek', + description: 'Organization provided in the certificate issuer field. ', + name: 'zeek.x509.certificate.issuer.organization', type: 'keyword', }, - 'okta.debug_context.debug_data.request_id': { - category: 'okta', - description: 'The identifier of the request. ', - name: 'okta.debug_context.debug_data.request_id', + 'zeek.x509.certificate.issuer.organizational_unit': { + category: 'zeek', + description: 'Organizational unit provided in the certificate issuer field. ', + name: 'zeek.x509.certificate.issuer.organizational_unit', type: 'keyword', }, - 'okta.debug_context.debug_data.request_uri': { - category: 'okta', - description: 'The request URI. ', - name: 'okta.debug_context.debug_data.request_uri', + 'zeek.x509.certificate.issuer.state': { + category: 'zeek', + description: 'State or province provided in the certificate issuer field. ', + name: 'zeek.x509.certificate.issuer.state', type: 'keyword', }, - 'okta.debug_context.debug_data.threat_suspected': { - category: 'okta', - description: 'Threat suspected. ', - name: 'okta.debug_context.debug_data.threat_suspected', + 'zeek.x509.certificate.common_name': { + category: 'zeek', + description: 'Last (most specific) common name. ', + name: 'zeek.x509.certificate.common_name', type: 'keyword', }, - 'okta.debug_context.debug_data.url': { - category: 'okta', - description: 'The URL. ', - name: 'okta.debug_context.debug_data.url', + 'zeek.x509.certificate.valid.from': { + category: 'zeek', + description: 'Timestamp before when certificate is not valid. ', + name: 'zeek.x509.certificate.valid.from', + type: 'date', + }, + 'zeek.x509.certificate.valid.until': { + category: 'zeek', + description: 'Timestamp after when certificate is not valid. ', + name: 'zeek.x509.certificate.valid.until', + type: 'date', + }, + 'zeek.x509.certificate.key.algorithm': { + category: 'zeek', + description: 'Name of the key algorithm. ', + name: 'zeek.x509.certificate.key.algorithm', type: 'keyword', }, - 'okta.authentication_context.authentication_provider': { - category: 'okta', - description: - 'The information about the authentication provider. Must be one of OKTA_AUTHENTICATION_PROVIDER, ACTIVE_DIRECTORY, LDAP, FEDERATION, SOCIAL, FACTOR_PROVIDER. ', - name: 'okta.authentication_context.authentication_provider', + 'zeek.x509.certificate.key.type': { + category: 'zeek', + description: 'Key type, if key parseable by openssl (either rsa, dsa or ec). ', + name: 'zeek.x509.certificate.key.type', type: 'keyword', }, - 'okta.authentication_context.authentication_step': { - category: 'okta', - description: 'The authentication step. ', - name: 'okta.authentication_context.authentication_step', + 'zeek.x509.certificate.key.length': { + category: 'zeek', + description: 'Key length in bits. ', + name: 'zeek.x509.certificate.key.length', type: 'integer', }, - 'okta.authentication_context.credential_provider': { - category: 'okta', - description: - 'The information about credential provider. Must be one of OKTA_CREDENTIAL_PROVIDER, RSA, SYMANTEC, GOOGLE, DUO, YUBIKEY. ', - name: 'okta.authentication_context.credential_provider', + 'zeek.x509.certificate.signature_algorithm': { + category: 'zeek', + description: 'Name of the signature algorithm. ', + name: 'zeek.x509.certificate.signature_algorithm', type: 'keyword', - }, - 'okta.authentication_context.credential_type': { - category: 'okta', - description: - 'The information about credential type. Must be one of OTP, SMS, PASSWORD, ASSERTION, IWA, EMAIL, OAUTH2, JWT, CERTIFICATE, PRE_SHARED_SYMMETRIC_KEY, OKTA_CLIENT_SESSION, DEVICE_UDID. ', - name: 'okta.authentication_context.credential_type', + }, + 'zeek.x509.certificate.exponent': { + category: 'zeek', + description: 'Exponent, if RSA-certificate. ', + name: 'zeek.x509.certificate.exponent', type: 'keyword', }, - 'okta.authentication_context.issuer.id': { - category: 'okta', - description: 'The identifier of the issuer. ', - name: 'okta.authentication_context.issuer.id', + 'zeek.x509.certificate.curve': { + category: 'zeek', + description: 'Curve, if EC-certificate. ', + name: 'zeek.x509.certificate.curve', type: 'keyword', }, - 'okta.authentication_context.issuer.type': { - category: 'okta', - description: 'The type of the issuer. ', - name: 'okta.authentication_context.issuer.type', + 'zeek.x509.san.dns': { + category: 'zeek', + description: 'List of DNS entries in SAN. ', + name: 'zeek.x509.san.dns', type: 'keyword', }, - 'okta.authentication_context.external_session_id': { - category: 'okta', - description: 'The session identifer of the external session if any. ', - name: 'okta.authentication_context.external_session_id', + 'zeek.x509.san.uri': { + category: 'zeek', + description: 'List of URI entries in SAN. ', + name: 'zeek.x509.san.uri', type: 'keyword', }, - 'okta.authentication_context.interface': { - category: 'okta', - description: 'The interface used. e.g., Outlook, Office365, wsTrust ', - name: 'okta.authentication_context.interface', + 'zeek.x509.san.email': { + category: 'zeek', + description: 'List of email entries in SAN. ', + name: 'zeek.x509.san.email', type: 'keyword', }, - 'okta.security_context.as.number': { - category: 'okta', - description: 'The AS number. ', - name: 'okta.security_context.as.number', - type: 'integer', + 'zeek.x509.san.ip': { + category: 'zeek', + description: 'List of IP entries in SAN. ', + name: 'zeek.x509.san.ip', + type: 'ip', }, - 'okta.security_context.as.organization.name': { - category: 'okta', - description: 'The organization name. ', - name: 'okta.security_context.as.organization.name', - type: 'keyword', + 'zeek.x509.san.other_fields': { + category: 'zeek', + description: 'True if the certificate contained other, not recognized or parsed name fields. ', + name: 'zeek.x509.san.other_fields', + type: 'boolean', }, - 'okta.security_context.isp': { - category: 'okta', - description: 'The Internet Service Provider. ', - name: 'okta.security_context.isp', - type: 'keyword', + 'zeek.x509.basic_constraints.certificate_authority': { + category: 'zeek', + description: 'CA flag set or not. ', + name: 'zeek.x509.basic_constraints.certificate_authority', + type: 'boolean', }, - 'okta.security_context.domain': { - category: 'okta', - description: 'The domain name. ', - name: 'okta.security_context.domain', - type: 'keyword', + 'zeek.x509.basic_constraints.path_length': { + category: 'zeek', + description: 'Maximum path length. ', + name: 'zeek.x509.basic_constraints.path_length', + type: 'integer', }, - 'okta.security_context.is_proxy': { - category: 'okta', - description: 'Whether it is a proxy or not. ', - name: 'okta.security_context.is_proxy', + 'zeek.x509.log_cert': { + category: 'zeek', + description: + 'Present if policy/protocols/ssl/log-hostcerts-only.bro is loaded Logging of certificate is suppressed if set to F. ', + name: 'zeek.x509.log_cert', type: 'boolean', }, - 'okta.request.ip_chain.ip': { - category: 'okta', - description: 'IP address. ', - name: 'okta.request.ip_chain.ip', - type: 'ip', + 'zookeeper.audit.session': { + category: 'zookeeper', + description: 'Client session id ', + name: 'zookeeper.audit.session', + type: 'keyword', }, - 'okta.request.ip_chain.version': { - category: 'okta', - description: 'IP version. Must be one of V4, V6. ', - name: 'okta.request.ip_chain.version', + 'zookeeper.audit.znode': { + category: 'zookeeper', + description: 'Path of the znode ', + name: 'zookeeper.audit.znode', type: 'keyword', }, - 'okta.request.ip_chain.source': { - category: 'okta', - description: 'Source information. ', - name: 'okta.request.ip_chain.source', + 'zookeeper.audit.znode_type': { + category: 'zookeeper', + description: 'Type of znode in case of creation operation ', + name: 'zookeeper.audit.znode_type', type: 'keyword', }, - 'okta.request.ip_chain.geographical_context.city': { - category: 'okta', - description: 'The city.', - name: 'okta.request.ip_chain.geographical_context.city', + 'zookeeper.audit.acl': { + category: 'zookeeper', + description: + 'String representation of znode ACL like cdrwa(create, delete,read, write, admin). This is logged only for setAcl operation ', + name: 'zookeeper.audit.acl', type: 'keyword', }, - 'okta.request.ip_chain.geographical_context.state': { - category: 'okta', - description: 'The state.', - name: 'okta.request.ip_chain.geographical_context.state', + 'zookeeper.audit.result': { + category: 'zookeeper', + description: + 'Result of the operation. Possible values are (success/failure/invoked). Result "invoked" is used for serverStop operation because stop is logged before ensuring that server actually stopped. ', + name: 'zookeeper.audit.result', type: 'keyword', }, - 'okta.request.ip_chain.geographical_context.postal_code': { - category: 'okta', - description: 'The postal code.', - name: 'okta.request.ip_chain.geographical_context.postal_code', + 'zookeeper.audit.user': { + category: 'zookeeper', + description: 'Comma separated list of users who are associate with a client session ', + name: 'zookeeper.audit.user', type: 'keyword', }, - 'okta.request.ip_chain.geographical_context.country': { - category: 'okta', - description: 'The country.', - name: 'okta.request.ip_chain.geographical_context.country', + 'zookeeper.log': { + category: 'zookeeper', + description: 'ZooKeeper logs. ', + name: 'zookeeper.log', + type: 'group', + }, + 'zoom.master_account_id': { + category: 'zoom', + description: 'Master Account related to a specific Sub Account ', + name: 'zoom.master_account_id', type: 'keyword', }, - 'okta.request.ip_chain.geographical_context.geolocation': { - category: 'okta', - description: 'Geolocation information. ', - name: 'okta.request.ip_chain.geographical_context.geolocation', - type: 'geo_point', + 'zoom.sub_account_id': { + category: 'zoom', + description: 'Related Sub Account ', + name: 'zoom.sub_account_id', + type: 'keyword', }, - 'panw.panos.ruleset': { - category: 'panw', - description: 'Name of the rule that matched this session. ', - name: 'panw.panos.ruleset', + 'zoom.operator_id': { + category: 'zoom', + description: 'UserID that triggered the event ', + name: 'zoom.operator_id', type: 'keyword', }, - 'panw.panos.source.zone': { - category: 'panw', - description: 'Source zone for this session. ', - name: 'panw.panos.source.zone', + 'zoom.operator': { + category: 'zoom', + description: 'Username/Email related to the user that triggered the event ', + name: 'zoom.operator', type: 'keyword', }, - 'panw.panos.source.interface': { - category: 'panw', - description: 'Source interface for this session. ', - name: 'panw.panos.source.interface', + 'zoom.account_id': { + category: 'zoom', + description: 'Related accountID to the event ', + name: 'zoom.account_id', type: 'keyword', }, - 'panw.panos.source.nat.ip': { - category: 'panw', - description: 'Post-NAT source IP. ', - name: 'panw.panos.source.nat.ip', - type: 'ip', + 'zoom.timestamp': { + category: 'zoom', + description: 'Timestamp related to the event ', + name: 'zoom.timestamp', + type: 'date', }, - 'panw.panos.source.nat.port': { - category: 'panw', - description: 'Post-NAT source port. ', - name: 'panw.panos.source.nat.port', - type: 'long', + 'zoom.creation_type': { + category: 'zoom', + description: 'Creation type ', + name: 'zoom.creation_type', + type: 'keyword', }, - 'panw.panos.destination.zone': { - category: 'panw', - description: 'Destination zone for this session. ', - name: 'panw.panos.destination.zone', + 'zoom.account.owner_id': { + category: 'zoom', + description: 'UserID of the user whose sub account was created/disassociated ', + name: 'zoom.account.owner_id', type: 'keyword', }, - 'panw.panos.destination.interface': { - category: 'panw', - description: 'Destination interface for this session. ', - name: 'panw.panos.destination.interface', + 'zoom.account.email': { + category: 'zoom', + description: 'Email related to the user the action was performed on ', + name: 'zoom.account.email', type: 'keyword', }, - 'panw.panos.destination.nat.ip': { - category: 'panw', - description: 'Post-NAT destination IP. ', - name: 'panw.panos.destination.nat.ip', - type: 'ip', + 'zoom.account.owner_email': { + category: 'zoom', + description: 'Email of the user whose sub account was created/disassociated ', + name: 'zoom.account.owner_email', + type: 'keyword', }, - 'panw.panos.destination.nat.port': { - category: 'panw', - description: 'Post-NAT destination port. ', - name: 'panw.panos.destination.nat.port', - type: 'long', + 'zoom.account.account_name': { + category: 'zoom', + description: 'When an account name is updated, this is the new value set ', + name: 'zoom.account.account_name', + type: 'keyword', }, - 'panw.panos.network.pcap_id': { - category: 'panw', - description: 'Packet capture ID for a threat. ', - name: 'panw.panos.network.pcap_id', + 'zoom.account.account_alias': { + category: 'zoom', + description: 'When an account alias is updated, this is the new value set ', + name: 'zoom.account.account_alias', type: 'keyword', }, - 'panw.panos.network.nat.community_id': { - category: 'panw', - description: 'Community ID flow-hash for the NAT 5-tuple. ', - name: 'panw.panos.network.nat.community_id', + 'zoom.account.account_support_name': { + category: 'zoom', + description: 'When an account support_name is updated, this is the new value set ', + name: 'zoom.account.account_support_name', type: 'keyword', }, - 'panw.panos.file.hash': { - category: 'panw', - description: 'Binary hash for a threat file sent to be analyzed by the WildFire service. ', - name: 'panw.panos.file.hash', + 'zoom.account.account_support_email': { + category: 'zoom', + description: 'When an account support_email is updated, this is the new value set ', + name: 'zoom.account.account_support_email', type: 'keyword', }, - 'panw.panos.url.category': { - category: 'panw', - description: - "For threat URLs, it's the URL category. For WildFire, the verdict on the file and is either 'malicious', 'grayware', or 'benign'. ", - name: 'panw.panos.url.category', + 'zoom.chat_channel.name': { + category: 'zoom', + description: 'The name of the channel that has been added/modified/deleted ', + name: 'zoom.chat_channel.name', type: 'keyword', }, - 'panw.panos.flow_id': { - category: 'panw', - description: 'Internal numeric identifier for each session. ', - name: 'panw.panos.flow_id', + 'zoom.chat_channel.id': { + category: 'zoom', + description: 'The ID of the channel that has been added/modified/deleted ', + name: 'zoom.chat_channel.id', type: 'keyword', }, - 'panw.panos.sequence_number': { - category: 'panw', + 'zoom.chat_channel.type': { + category: 'zoom', description: - 'Log entry identifier that is incremented sequentially. Unique for each log type. ', - name: 'panw.panos.sequence_number', - type: 'long', - }, - 'panw.panos.threat.resource': { - category: 'panw', - description: 'URL or file name for a threat. ', - name: 'panw.panos.threat.resource', + 'Type of channel related to the event. Can be 1(Invite-Only), 2(Private) or 3(Public) ', + name: 'zoom.chat_channel.type', type: 'keyword', }, - 'panw.panos.threat.id': { - category: 'panw', - description: 'Palo Alto Networks identifier for the threat. ', - name: 'panw.panos.threat.id', + 'zoom.chat_message.id': { + category: 'zoom', + description: 'Unique ID of the related chat message ', + name: 'zoom.chat_message.id', type: 'keyword', }, - 'panw.panos.threat.name': { - category: 'panw', - description: 'Palo Alto Networks name for the threat. ', - name: 'panw.panos.threat.name', + 'zoom.chat_message.type': { + category: 'zoom', + description: 'Type of message, can be either "to_contact" or "to_channel" ', + name: 'zoom.chat_message.type', type: 'keyword', }, - 'panw.panos.action': { - category: 'panw', - description: 'Action taken for the session.', - name: 'panw.panos.action', + 'zoom.chat_message.session_id': { + category: 'zoom', + description: 'SessionID for the channel related to the message ', + name: 'zoom.chat_message.session_id', type: 'keyword', }, - 'rabbitmq.log.pid': { - category: 'rabbitmq', - description: 'The Erlang process id', - example: '<0.222.0>', - name: 'rabbitmq.log.pid', + 'zoom.chat_message.contact_email': { + category: 'zoom', + description: 'Email address related to the user sending the message ', + name: 'zoom.chat_message.contact_email', type: 'keyword', }, - 'sophos.xg.device': { - category: 'sophos', - description: 'device ', - name: 'sophos.xg.device', + 'zoom.chat_message.contact_id': { + category: 'zoom', + description: 'UserID belonging to the user receiving a message ', + name: 'zoom.chat_message.contact_id', type: 'keyword', }, - 'sophos.xg.date': { - category: 'sophos', - description: 'Date (yyyy-mm-dd) when the event occurred ', - name: 'sophos.xg.date', - type: 'date', - }, - 'sophos.xg.timezone': { - category: 'sophos', - description: 'Time (hh:mm:ss) when the event occurred ', - name: 'sophos.xg.timezone', + 'zoom.chat_message.channel_id': { + category: 'zoom', + description: 'ChannelID related to the message ', + name: 'zoom.chat_message.channel_id', type: 'keyword', }, - 'sophos.xg.device_name': { - category: 'sophos', - description: 'Model number of the device ', - name: 'sophos.xg.device_name', + 'zoom.chat_message.channel_name': { + category: 'zoom', + description: 'Channel name related to the message ', + name: 'zoom.chat_message.channel_name', type: 'keyword', }, - 'sophos.xg.device_id': { - category: 'sophos', - description: 'Serial number of the device ', - name: 'sophos.xg.device_id', + 'zoom.chat_message.message': { + category: 'zoom', + description: 'A string containing the full message that was sent ', + name: 'zoom.chat_message.message', type: 'keyword', }, - 'sophos.xg.log_id': { - category: 'sophos', - description: 'Unique 12 characters code (0101011) ', - name: 'sophos.xg.log_id', + 'zoom.meeting.id': { + category: 'zoom', + description: 'Unique ID of the related meeting ', + name: 'zoom.meeting.id', type: 'keyword', }, - 'sophos.xg.log_type': { - category: 'sophos', - description: 'Type of event e.g. firewall event ', - name: 'sophos.xg.log_type', + 'zoom.meeting.uuid': { + category: 'zoom', + description: 'The UUID of the related meeting ', + name: 'zoom.meeting.uuid', type: 'keyword', }, - 'sophos.xg.log_component': { - category: 'sophos', - description: 'Component responsible for logging e.g. Firewall rule ', - name: 'sophos.xg.log_component', + 'zoom.meeting.host_id': { + category: 'zoom', + description: 'The UserID of the configured meeting host ', + name: 'zoom.meeting.host_id', type: 'keyword', }, - 'sophos.xg.log_subtype': { - category: 'sophos', - description: 'Sub type of event ', - name: 'sophos.xg.log_subtype', + 'zoom.meeting.topic': { + category: 'zoom', + description: 'Topic of the related meeting ', + name: 'zoom.meeting.topic', type: 'keyword', }, - 'sophos.xg.hb_health': { - category: 'sophos', - description: 'Heartbeat status ', - name: 'sophos.xg.hb_health', + 'zoom.meeting.type': { + category: 'zoom', + description: 'Type of meeting created ', + name: 'zoom.meeting.type', type: 'keyword', }, - 'sophos.xg.priority': { - category: 'sophos', - description: 'Severity level of traffic ', - name: 'sophos.xg.priority', - type: 'keyword', + 'zoom.meeting.start_time': { + category: 'zoom', + description: 'Date and time the meeting started ', + name: 'zoom.meeting.start_time', + type: 'date', }, - 'sophos.xg.status': { - category: 'sophos', - description: 'Ultimate status of traffic – Allowed or Denied ', - name: 'sophos.xg.status', + 'zoom.meeting.timezone': { + category: 'zoom', + description: 'Which timezone is used for the meeting timestamps ', + name: 'zoom.meeting.timezone', type: 'keyword', }, - 'sophos.xg.duration': { - category: 'sophos', - description: 'Durability of traffic (seconds) ', - name: 'sophos.xg.duration', + 'zoom.meeting.duration': { + category: 'zoom', + description: 'The duration of a meeting in minutes ', + name: 'zoom.meeting.duration', type: 'long', }, - 'sophos.xg.fw_rule_id': { - category: 'sophos', - description: 'Firewall Rule ID which is applied on the traffic ', - name: 'sophos.xg.fw_rule_id', - type: 'integer', - }, - 'sophos.xg.user_name': { - category: 'sophos', - description: 'user_name ', - name: 'sophos.xg.user_name', + 'zoom.meeting.issues': { + category: 'zoom', + description: + 'When a user reports an issue with the meeting, for example: "Unstable audio quality" ', + name: 'zoom.meeting.issues', type: 'keyword', }, - 'sophos.xg.user_group': { - category: 'sophos', - description: 'Group name to which the user belongs ', - name: 'sophos.xg.user_group', + 'zoom.meeting.password': { + category: 'zoom', + description: 'Password related to the meeting ', + name: 'zoom.meeting.password', type: 'keyword', }, - 'sophos.xg.iap': { - category: 'sophos', - description: 'Internet Access policy ID applied on the traffic ', - name: 'sophos.xg.iap', + 'zoom.phone.id': { + category: 'zoom', + description: 'Unique ID for the phone or conversation ', + name: 'zoom.phone.id', type: 'keyword', }, - 'sophos.xg.ips_policy_id': { - category: 'sophos', - description: 'IPS policy ID applied on the traffic ', - name: 'sophos.xg.ips_policy_id', - type: 'integer', + 'zoom.phone.user_id': { + category: 'zoom', + description: 'UserID for the phone owner related to a Call Log being completed ', + name: 'zoom.phone.user_id', + type: 'keyword', }, - 'sophos.xg.policy_type': { - category: 'sophos', - description: 'Policy type applied to the traffic ', - name: 'sophos.xg.policy_type', + 'zoom.phone.download_url': { + category: 'zoom', + description: 'Download URL for the voicemail ', + name: 'zoom.phone.download_url', type: 'keyword', }, - 'sophos.xg.appfilter_policy_id': { - category: 'sophos', - description: 'Application Filter policy applied on the traffic ', - name: 'sophos.xg.appfilter_policy_id', - type: 'integer', + 'zoom.phone.ringing_start_time': { + category: 'zoom', + description: 'The timestamp when a ringtone was established to the callee ', + name: 'zoom.phone.ringing_start_time', + type: 'date', }, - 'sophos.xg.application_filter_policy': { - category: 'sophos', - description: 'Application Filter policy applied on the traffic ', - name: 'sophos.xg.application_filter_policy', - type: 'integer', + 'zoom.phone.connected_start_time': { + category: 'zoom', + description: 'The date and time when a ringtone was established to the callee ', + name: 'zoom.phone.connected_start_time', + type: 'date', }, - 'sophos.xg.application': { - category: 'sophos', - description: 'Application name ', - name: 'sophos.xg.application', - type: 'keyword', + 'zoom.phone.answer_start_time': { + category: 'zoom', + description: 'The date and time when the call was answered ', + name: 'zoom.phone.answer_start_time', + type: 'date', }, - 'sophos.xg.application_name': { - category: 'sophos', - description: 'Application name ', - name: 'sophos.xg.application_name', - type: 'keyword', + 'zoom.phone.call_end_time': { + category: 'zoom', + description: 'The date and time when the call ended ', + name: 'zoom.phone.call_end_time', + type: 'date', }, - 'sophos.xg.application_risk': { - category: 'sophos', - description: 'Risk level assigned to the application ', - name: 'sophos.xg.application_risk', + 'zoom.phone.call_id': { + category: 'zoom', + description: 'Unique ID of the related call ', + name: 'zoom.phone.call_id', type: 'keyword', }, - 'sophos.xg.application_technology': { - category: 'sophos', - description: 'Technology of the application ', - name: 'sophos.xg.application_technology', - type: 'keyword', + 'zoom.phone.duration': { + category: 'zoom', + description: 'Duration of a voicemail in minutes ', + name: 'zoom.phone.duration', + type: 'long', }, - 'sophos.xg.application_category': { - category: 'sophos', - description: 'Application is resolved by signature or synchronized application ', - name: 'sophos.xg.application_category', + 'zoom.phone.caller.id': { + category: 'zoom', + description: 'UserID of the caller related to the voicemail/call ', + name: 'zoom.phone.caller.id', type: 'keyword', }, - 'sophos.xg.appresolvedby': { - category: 'sophos', - description: 'Technology of the application ', - name: 'sophos.xg.appresolvedby', + 'zoom.phone.caller.user_id': { + category: 'zoom', + description: 'UserID of the person which initiated the call ', + name: 'zoom.phone.caller.user_id', type: 'keyword', }, - 'sophos.xg.app_is_cloud': { - category: 'sophos', - description: 'Application is Cloud ', - name: 'sophos.xg.app_is_cloud', + 'zoom.phone.caller.number_type': { + category: 'zoom', + description: 'The type of number, can be 1(Internal) or 2(External) ', + name: 'zoom.phone.caller.number_type', type: 'keyword', }, - 'sophos.xg.in_interface': { - category: 'sophos', - description: 'Interface for incoming traffic, e.g., Port A ', - name: 'sophos.xg.in_interface', + 'zoom.phone.caller.name': { + category: 'zoom', + description: 'The name of the related callee ', + name: 'zoom.phone.caller.name', type: 'keyword', }, - 'sophos.xg.out_interface': { - category: 'sophos', - description: 'Interface for outgoing traffic, e.g., Port B ', - name: 'sophos.xg.out_interface', + 'zoom.phone.caller.phone_number': { + category: 'zoom', + description: 'Phone Number of the caller related to the call ', + name: 'zoom.phone.caller.phone_number', type: 'keyword', }, - 'sophos.xg.src_ip': { - category: 'sophos', - description: 'Original source IP address of traffic ', - name: 'sophos.xg.src_ip', - type: 'ip', - }, - 'sophos.xg.src_mac': { - category: 'sophos', - description: 'Original source MAC address of traffic ', - name: 'sophos.xg.src_mac', + 'zoom.phone.caller.extension_type': { + category: 'zoom', + description: + 'Extension type of the caller number, can be user, callQueue, autoReceptionist or shareLineGroup ', + name: 'zoom.phone.caller.extension_type', type: 'keyword', }, - 'sophos.xg.src_country_code': { - category: 'sophos', - description: 'Code of the country to which the source IP belongs ', - name: 'sophos.xg.src_country_code', + 'zoom.phone.caller.extension_number': { + category: 'zoom', + description: 'Extension number of the caller ', + name: 'zoom.phone.caller.extension_number', type: 'keyword', }, - 'sophos.xg.dst_ip': { - category: 'sophos', - description: 'Original destination IP address of traffic ', - name: 'sophos.xg.dst_ip', - type: 'ip', - }, - 'sophos.xg.dst_country_code': { - category: 'sophos', - description: 'Code of the country to which the destination IP belongs ', - name: 'sophos.xg.dst_country_code', + 'zoom.phone.caller.timezone': { + category: 'zoom', + description: 'Timezone of the caller ', + name: 'zoom.phone.caller.timezone', type: 'keyword', }, - 'sophos.xg.protocol': { - category: 'sophos', - description: 'Protocol number of traffic ', - name: 'sophos.xg.protocol', + 'zoom.phone.caller.device_type': { + category: 'zoom', + description: 'Device type used by the caller ', + name: 'zoom.phone.caller.device_type', type: 'keyword', }, - 'sophos.xg.src_port': { - category: 'sophos', - description: 'Original source port of TCP and UDP traffic ', - name: 'sophos.xg.src_port', - type: 'integer', - }, - 'sophos.xg.dst_port': { - category: 'sophos', - description: 'Original destination port of TCP and UDP traffic ', - name: 'sophos.xg.dst_port', - type: 'integer', - }, - 'sophos.xg.icmp_type': { - category: 'sophos', - description: 'ICMP type of ICMP traffic ', - name: 'sophos.xg.icmp_type', + 'zoom.phone.callee.id': { + category: 'zoom', + description: 'UserID of the callee related to the voicemail/call ', + name: 'zoom.phone.callee.id', type: 'keyword', }, - 'sophos.xg.icmp_code': { - category: 'sophos', - description: 'ICMP code of ICMP traffic ', - name: 'sophos.xg.icmp_code', + 'zoom.phone.callee.user_id': { + category: 'zoom', + description: 'UserID of the related callee of a voicemail/call ', + name: 'zoom.phone.callee.user_id', type: 'keyword', }, - 'sophos.xg.sent_pkts': { - category: 'sophos', - description: 'Total number of packets sent ', - name: 'sophos.xg.sent_pkts', - type: 'long', + 'zoom.phone.callee.name': { + category: 'zoom', + description: 'The name of the related callee ', + name: 'zoom.phone.callee.name', + type: 'keyword', }, - 'sophos.xg.received_pkts': { - category: 'sophos', - description: 'Total number of packets received ', - name: 'sophos.xg.received_pkts', - type: 'long', + 'zoom.phone.callee.number_type': { + category: 'zoom', + description: 'The type of number, can be 1(Internal) or 2(External) ', + name: 'zoom.phone.callee.number_type', + type: 'keyword', }, - 'sophos.xg.sent_bytes': { - category: 'sophos', - description: 'Total number of bytes sent ', - name: 'sophos.xg.sent_bytes', - type: 'long', + 'zoom.phone.callee.phone_number': { + category: 'zoom', + description: 'Phone Number of the callee related to the call ', + name: 'zoom.phone.callee.phone_number', + type: 'keyword', }, - 'sophos.xg.recv_bytes': { - category: 'sophos', - description: 'Total number of bytes received ', - name: 'sophos.xg.recv_bytes', - type: 'long', + 'zoom.phone.callee.extension_type': { + category: 'zoom', + description: + 'Extension type of the callee number, can be user, callQueue, autoReceptionist or shareLineGroup ', + name: 'zoom.phone.callee.extension_type', + type: 'keyword', }, - 'sophos.xg.trans_src_ ip': { - category: 'sophos', - description: 'Translated source IP address for outgoing traffic ', - name: 'sophos.xg.trans_src_ ip', - type: 'ip', + 'zoom.phone.callee.extension_number': { + category: 'zoom', + description: 'Extension number of the callee related to the call ', + name: 'zoom.phone.callee.extension_number', + type: 'keyword', }, - 'sophos.xg.trans_src_port': { - category: 'sophos', - description: 'Translated source port for outgoing traffic ', - name: 'sophos.xg.trans_src_port', - type: 'integer', + 'zoom.phone.callee.timezone': { + category: 'zoom', + description: 'Timezone of the callee related to the call ', + name: 'zoom.phone.callee.timezone', + type: 'keyword', }, - 'sophos.xg.trans_dst_ip': { - category: 'sophos', - description: 'Translated destination IP address for outgoing traffic ', - name: 'sophos.xg.trans_dst_ip', - type: 'ip', + 'zoom.phone.callee.device_type': { + category: 'zoom', + description: 'Device type used by the callee related to the call ', + name: 'zoom.phone.callee.device_type', + type: 'keyword', }, - 'sophos.xg.trans_dst_port': { - category: 'sophos', - description: 'Translated destination port for outgoing traffic ', - name: 'sophos.xg.trans_dst_port', - type: 'integer', + 'zoom.phone.date_time': { + category: 'zoom', + description: 'Date and time of the related phone event ', + name: 'zoom.phone.date_time', + type: 'date', }, - 'sophos.xg.srczonetype': { - category: 'sophos', - description: 'Type of source zone, e.g., LAN ', - name: 'sophos.xg.srczonetype', + 'zoom.recording.id': { + category: 'zoom', + description: 'Unique ID of the related recording ', + name: 'zoom.recording.id', type: 'keyword', }, - 'sophos.xg.srczone': { - category: 'sophos', - description: 'Name of source zone ', - name: 'sophos.xg.srczone', + 'zoom.recording.uuid': { + category: 'zoom', + description: 'UUID of the related recording ', + name: 'zoom.recording.uuid', type: 'keyword', }, - 'sophos.xg.dstzonetype': { - category: 'sophos', - description: 'Type of destination zone, e.g., WAN ', - name: 'sophos.xg.dstzonetype', + 'zoom.recording.host_id': { + category: 'zoom', + description: 'UserID of the host of the meeting that was recorded ', + name: 'zoom.recording.host_id', type: 'keyword', }, - 'sophos.xg.dstzone': { - category: 'sophos', - description: 'Name of destination zone ', - name: 'sophos.xg.dstzone', + 'zoom.recording.topic': { + category: 'zoom', + description: 'Topic of the meeting related to the recording ', + name: 'zoom.recording.topic', type: 'keyword', }, - 'sophos.xg.dir_disp': { - category: 'sophos', - description: 'TPacket direction. Possible values:“org”, “reply”, “” ', - name: 'sophos.xg.dir_disp', + 'zoom.recording.type': { + category: 'zoom', + description: + 'Type of recording, can be multiple type of values, please check Zoom documentation ', + name: 'zoom.recording.type', type: 'keyword', }, - 'sophos.xg.connevent': { - category: 'sophos', - description: 'Event on which this log is generated ', - name: 'sophos.xg.connevent', + 'zoom.recording.start_time': { + category: 'zoom', + description: 'The date and time when the recording started ', + name: 'zoom.recording.start_time', + type: 'date', + }, + 'zoom.recording.timezone': { + category: 'zoom', + description: 'The timezone used for the recording date ', + name: 'zoom.recording.timezone', type: 'keyword', }, - 'sophos.xg.conn_id': { - category: 'sophos', - description: 'Unique identifier of connection ', - name: 'sophos.xg.conn_id', - type: 'integer', + 'zoom.recording.duration': { + category: 'zoom', + description: 'Duration of the recording in minutes ', + name: 'zoom.recording.duration', + type: 'long', }, - 'sophos.xg.vconn_id': { - category: 'sophos', - description: 'Connection ID of the master connection ', - name: 'sophos.xg.vconn_id', - type: 'integer', + 'zoom.recording.share_url': { + category: 'zoom', + description: 'The URL to access the recording ', + name: 'zoom.recording.share_url', + type: 'keyword', }, - 'sophos.xg.idp_policy_id': { - category: 'sophos', - description: 'IPS policy ID which is applied on the traffic ', - name: 'sophos.xg.idp_policy_id', - type: 'integer', + 'zoom.recording.total_size': { + category: 'zoom', + description: 'Total size of the recording in bytes ', + name: 'zoom.recording.total_size', + type: 'long', }, - 'sophos.xg.idp_policy_name': { - category: 'sophos', - description: 'IPS policy name i.e. IPS policy name which is applied on the traffic ', - name: 'sophos.xg.idp_policy_name', - type: 'keyword', + 'zoom.recording.recording_count': { + category: 'zoom', + description: 'Number of recording files related to the recording ', + name: 'zoom.recording.recording_count', + type: 'long', }, - 'sophos.xg.signature_id': { - category: 'sophos', - description: 'Signature ID ', - name: 'sophos.xg.signature_id', - type: 'keyword', + 'zoom.recording.recording_file.recording_start': { + category: 'zoom', + description: 'The date and time the recording started ', + name: 'zoom.recording.recording_file.recording_start', + type: 'date', + }, + 'zoom.recording.recording_file.recording_end': { + category: 'zoom', + description: 'The date and time the recording finished ', + name: 'zoom.recording.recording_file.recording_end', + type: 'date', }, - 'sophos.xg.signature_msg': { - category: 'sophos', - description: 'Signature messsage ', - name: 'sophos.xg.signature_msg', + 'zoom.recording.host_email': { + category: 'zoom', + description: 'Email address of the host related to the meeting that was recorded ', + name: 'zoom.recording.host_email', type: 'keyword', }, - 'sophos.xg.classification': { - category: 'sophos', - description: 'Signature classification ', - name: 'sophos.xg.classification', + 'zoom.user.id': { + category: 'zoom', + description: 'UserID related to the user event ', + name: 'zoom.user.id', type: 'keyword', }, - 'sophos.xg.rule_priority': { - category: 'sophos', - description: 'Priority of IPS policy ', - name: 'sophos.xg.rule_priority', + 'zoom.user.first_name': { + category: 'zoom', + description: 'User first name related to the user event ', + name: 'zoom.user.first_name', type: 'keyword', }, - 'sophos.xg.platform': { - category: 'sophos', - description: 'Platform of the traffic. ', - name: 'sophos.xg.platform', + 'zoom.user.last_name': { + category: 'zoom', + description: 'User last name related to the user event ', + name: 'zoom.user.last_name', type: 'keyword', }, - 'sophos.xg.category': { - category: 'sophos', - description: 'IPS signature category. ', - name: 'sophos.xg.category', + 'zoom.user.email': { + category: 'zoom', + description: 'User email related to the user event ', + name: 'zoom.user.email', type: 'keyword', }, - 'sophos.xg.target': { - category: 'sophos', - description: 'Platform of the traffic. ', - name: 'sophos.xg.target', + 'zoom.user.type': { + category: 'zoom', + description: 'User type related to the user event ', + name: 'zoom.user.type', type: 'keyword', }, - 'sophos.xg.eventid': { - category: 'sophos', - description: 'ATP Evenet ID ', - name: 'sophos.xg.eventid', + 'zoom.user.phone_number': { + category: 'zoom', + description: 'User phone number related to the user event ', + name: 'zoom.user.phone_number', type: 'keyword', }, - 'sophos.xg.ep_uuid': { - category: 'sophos', - description: 'Endpoint UUID ', - name: 'sophos.xg.ep_uuid', + 'zoom.user.phone_country': { + category: 'zoom', + description: 'User country code related to the user event ', + name: 'zoom.user.phone_country', type: 'keyword', }, - 'sophos.xg.threatname': { - category: 'sophos', - description: 'ATP threatname ', - name: 'sophos.xg.threatname', + 'zoom.user.company': { + category: 'zoom', + description: 'User company related to the user event ', + name: 'zoom.user.company', type: 'keyword', }, - 'sophos.xg.sourceip': { - category: 'sophos', - description: 'Original source IP address of traffic ', - name: 'sophos.xg.sourceip', - type: 'ip', + 'zoom.user.pmi': { + category: 'zoom', + description: 'User personal meeting ID related to the user event ', + name: 'zoom.user.pmi', + type: 'keyword', }, - 'sophos.xg.destinationip': { - category: 'sophos', - description: 'Original destination IP address of traffic ', - name: 'sophos.xg.destinationip', - type: 'ip', + 'zoom.user.use_pmi': { + category: 'zoom', + description: 'If a user has PMI enabled ', + name: 'zoom.user.use_pmi', + type: 'boolean', }, - 'sophos.xg.login_user': { - category: 'sophos', - description: 'ATP login user ', - name: 'sophos.xg.login_user', + 'zoom.user.pic_url': { + category: 'zoom', + description: 'Full URL to the profile picture used by the user ', + name: 'zoom.user.pic_url', type: 'keyword', }, - 'sophos.xg.eventtype': { - category: 'sophos', - description: 'ATP event type ', - name: 'sophos.xg.eventtype', + 'zoom.user.vanity_name': { + category: 'zoom', + description: 'Name of the personal meeting room related to the user event ', + name: 'zoom.user.vanity_name', type: 'keyword', }, - 'sophos.xg.execution_path': { - category: 'sophos', - description: 'ATP execution path ', - name: 'sophos.xg.execution_path', + 'zoom.user.timezone': { + category: 'zoom', + description: 'Timezone configured for the user ', + name: 'zoom.user.timezone', type: 'keyword', }, - 'sophos.xg.av_policy_name': { - category: 'sophos', - description: 'Malware scanning policy name which is applied on the traffic ', - name: 'sophos.xg.av_policy_name', + 'zoom.user.language': { + category: 'zoom', + description: 'Language configured for the user ', + name: 'zoom.user.language', type: 'keyword', }, - 'sophos.xg.from_email_address': { - category: 'sophos', - description: 'Sender email address ', - name: 'sophos.xg.from_email_address', + 'zoom.user.host_key': { + category: 'zoom', + description: 'Host key set for the user ', + name: 'zoom.user.host_key', type: 'keyword', }, - 'sophos.xg.to_email_address': { - category: 'sophos', - description: 'Receipeint email address ', - name: 'sophos.xg.to_email_address', + 'zoom.user.role': { + category: 'zoom', + description: 'The configured role for the user ', + name: 'zoom.user.role', type: 'keyword', }, - 'sophos.xg.subject': { - category: 'sophos', - description: 'Email subject ', - name: 'sophos.xg.subject', + 'zoom.user.dept': { + category: 'zoom', + description: 'The configured departement for the user ', + name: 'zoom.user.dept', type: 'keyword', }, - 'sophos.xg.mailsize': { - category: 'sophos', - description: 'mailsize ', - name: 'sophos.xg.mailsize', - type: 'integer', - }, - 'sophos.xg.virus': { - category: 'sophos', - description: 'virus name ', - name: 'sophos.xg.virus', + 'zoom.user.presence_status': { + category: 'zoom', + description: 'Current presence status of user ', + name: 'zoom.user.presence_status', type: 'keyword', }, - 'sophos.xg.FTP_url': { - category: 'sophos', - description: 'FTP URL from which virus was downloaded ', - name: 'sophos.xg.FTP_url', + 'zoom.user.personal_notes': { + category: 'zoom', + description: 'Personal notes for the User ', + name: 'zoom.user.personal_notes', type: 'keyword', }, - 'sophos.xg.FTP_direction': { - category: 'sophos', - description: 'Direction of FTP transfer: Upload or Download ', - name: 'sophos.xg.FTP_direction', + 'zoom.user.client_type': { + category: 'zoom', + description: 'Type of client used by the user. Can be browser, mac, win, iphone or android ', + name: 'zoom.user.client_type', type: 'keyword', }, - 'sophos.xg.filesize': { - category: 'sophos', - description: 'Size of the file that contained virus ', - name: 'sophos.xg.filesize', - type: 'integer', + 'zoom.user.version': { + category: 'zoom', + description: 'Version of the client used by the user ', + name: 'zoom.user.version', + type: 'keyword', }, - 'sophos.xg.filepath': { - category: 'sophos', - description: 'Path of the file containing virus ', - name: 'sophos.xg.filepath', + 'zoom.webinar.id': { + category: 'zoom', + description: 'Unique ID for the related webinar ', + name: 'zoom.webinar.id', type: 'keyword', }, - 'sophos.xg.filename': { - category: 'sophos', - description: 'File name associated with the event ', - name: 'sophos.xg.filename', + 'zoom.webinar.join_url': { + category: 'zoom', + description: 'The URL configured to join the webinar ', + name: 'zoom.webinar.join_url', type: 'keyword', }, - 'sophos.xg.ftpcommand': { - category: 'sophos', - description: 'FTP command used when virus was found ', - name: 'sophos.xg.ftpcommand', + 'zoom.webinar.uuid': { + category: 'zoom', + description: 'UUID for the related webinar ', + name: 'zoom.webinar.uuid', type: 'keyword', }, - 'sophos.xg.url': { - category: 'sophos', - description: 'URL from which virus was downloaded ', - name: 'sophos.xg.url', + 'zoom.webinar.host_id': { + category: 'zoom', + description: 'UserID for the configured host of the webinar ', + name: 'zoom.webinar.host_id', type: 'keyword', }, - 'sophos.xg.domainname': { - category: 'sophos', - description: 'Domain from which virus was downloaded ', - name: 'sophos.xg.domainname', + 'zoom.webinar.topic': { + category: 'zoom', + description: 'Meeting topic of the related webinar ', + name: 'zoom.webinar.topic', type: 'keyword', }, - 'sophos.xg.quarantine': { - category: 'sophos', - description: 'Path and filename of the file quarantined ', - name: 'sophos.xg.quarantine', + 'zoom.webinar.type': { + category: 'zoom', + description: + 'Type of webinar created. Can be either 5(Webinar), 6(Recurring webinar without fixed time) or 9(Recurring webinar with fixed time) ', + name: 'zoom.webinar.type', type: 'keyword', }, - 'sophos.xg.src_domainname': { - category: 'sophos', - description: 'Sender domain name ', - name: 'sophos.xg.src_domainname', + 'zoom.webinar.start_time': { + category: 'zoom', + description: 'The date and time when the webinar started ', + name: 'zoom.webinar.start_time', + type: 'date', + }, + 'zoom.webinar.timezone': { + category: 'zoom', + description: 'Timezone used for the dates related to the webinar ', + name: 'zoom.webinar.timezone', type: 'keyword', }, - 'sophos.xg.dst_domainname': { - category: 'sophos', - description: 'Receiver domain name ', - name: 'sophos.xg.dst_domainname', + 'zoom.webinar.duration': { + category: 'zoom', + description: 'Duration of the webinar in minutes ', + name: 'zoom.webinar.duration', + type: 'long', + }, + 'zoom.webinar.agenda': { + category: 'zoom', + description: 'The configured agenda of the webinar ', + name: 'zoom.webinar.agenda', type: 'keyword', }, - 'sophos.xg.reason': { - category: 'sophos', - description: 'Reason why the record was detected as spam/malicious ', - name: 'sophos.xg.reason', + 'zoom.webinar.password': { + category: 'zoom', + description: 'Password configured to access the webinar ', + name: 'zoom.webinar.password', type: 'keyword', }, - 'sophos.xg.referer': { - category: 'sophos', - description: 'Referer ', - name: 'sophos.xg.referer', + 'zoom.webinar.issues': { + category: 'zoom', + description: 'Any reported issues about a webinar is reported in this field ', + name: 'zoom.webinar.issues', type: 'keyword', }, - 'sophos.xg.spamaction': { - category: 'sophos', - description: 'Spam Action ', - name: 'sophos.xg.spamaction', + 'zoom.zoomroom.id': { + category: 'zoom', + description: 'Unique ID of the Zoom room ', + name: 'zoom.zoomroom.id', type: 'keyword', }, - 'sophos.xg.mailid': { - category: 'sophos', - description: 'mailid ', - name: 'sophos.xg.mailid', + 'zoom.zoomroom.room_name': { + category: 'zoom', + description: 'The configured name of the Zoom room ', + name: 'zoom.zoomroom.room_name', type: 'keyword', }, - 'sophos.xg.quarantine_reason': { - category: 'sophos', - description: 'Quarantine reason ', - name: 'sophos.xg.quarantine_reason', + 'zoom.zoomroom.calendar_name': { + category: 'zoom', + description: 'Calendar name of the Zoom room ', + name: 'zoom.zoomroom.calendar_name', type: 'keyword', }, - 'sophos.xg.status_code': { - category: 'sophos', - description: 'Status code ', - name: 'sophos.xg.status_code', + 'zoom.zoomroom.calendar_id': { + category: 'zoom', + description: 'Unique ID of the calendar used by the Zoom room ', + name: 'zoom.zoomroom.calendar_id', type: 'keyword', }, - 'sophos.xg.override_token': { - category: 'sophos', - description: 'Override token ', - name: 'sophos.xg.override_token', + 'zoom.zoomroom.event_id': { + category: 'zoom', + description: 'Unique ID of the calendar event associated with the Zoom Room ', + name: 'zoom.zoomroom.event_id', type: 'keyword', }, - 'sophos.xg.con_id': { - category: 'sophos', - description: 'Unique identifier of connection ', - name: 'sophos.xg.con_id', - type: 'integer', + 'zoom.zoomroom.change_key': { + category: 'zoom', + description: + 'Key used by Microsoft products integration that represents a specific version of a calendar ', + name: 'zoom.zoomroom.change_key', + type: 'keyword', }, - 'sophos.xg.override_authorizer': { - category: 'sophos', - description: 'Override authorizer ', - name: 'sophos.xg.override_authorizer', + 'zoom.zoomroom.resource_email': { + category: 'zoom', + description: 'Email address associated with the calendar in use by the Zoom room ', + name: 'zoom.zoomroom.resource_email', type: 'keyword', }, - 'sophos.xg.transactionid': { - category: 'sophos', - description: 'Transaction ID of the AV scan. ', - name: 'sophos.xg.transactionid', + 'zoom.zoomroom.email': { + category: 'zoom', + description: 'Email address associated with the Zoom room itself ', + name: 'zoom.zoomroom.email', type: 'keyword', }, - 'sophos.xg.upload_file_type': { - category: 'sophos', - description: 'Upload file type ', - name: 'sophos.xg.upload_file_type', + 'zoom.zoomroom.issue': { + category: 'zoom', + description: 'Any reported alerts or issues related to the Zoom room or its equipment ', + name: 'zoom.zoomroom.issue', type: 'keyword', }, - 'sophos.xg.upload_file_name': { - category: 'sophos', - description: 'Upload file name ', - name: 'sophos.xg.upload_file_name', + 'zoom.zoomroom.alert_type': { + category: 'zoom', + description: + 'An integer value representing the type of alert. The list of alert types can be found in the Zoom documentation ', + name: 'zoom.zoomroom.alert_type', type: 'keyword', }, - 'sophos.xg.httpresponsecode': { - category: 'sophos', - description: 'code of HTTP response ', - name: 'sophos.xg.httpresponsecode', - type: 'long', + 'zoom.zoomroom.component': { + category: 'zoom', + description: + 'An integer value representing the type of equipment or component, The list of component types can be found in the Zoom documentation ', + name: 'zoom.zoomroom.component', + type: 'keyword', }, - 'sophos.xg.user_gp': { - category: 'sophos', - description: 'Group name to which the user belongs. ', - name: 'sophos.xg.user_gp', + 'zoom.zoomroom.alert_kind': { + category: 'zoom', + description: + 'An integer value showing if the Zoom room alert has been either 1(Triggered) or 2(Cleared) ', + name: 'zoom.zoomroom.alert_kind', type: 'keyword', }, - 'sophos.xg.category_type': { - category: 'sophos', - description: 'Type of category under which website falls ', - name: 'sophos.xg.category_type', + 'zoom.registrant.id': { + category: 'zoom', + description: 'Unique ID of the user registering to a meeting or webinar ', + name: 'zoom.registrant.id', type: 'keyword', }, - 'sophos.xg.download_file_type': { - category: 'sophos', - description: 'Download file type ', - name: 'sophos.xg.download_file_type', + 'zoom.registrant.status': { + category: 'zoom', + description: 'Status of the specific user registration ', + name: 'zoom.registrant.status', type: 'keyword', }, - 'sophos.xg.exceptions': { - category: 'sophos', - description: 'List of the checks excluded by web exceptions. ', - name: 'sophos.xg.exceptions', + 'zoom.registrant.email': { + category: 'zoom', + description: 'Email of the user registering to a meeting or webinar ', + name: 'zoom.registrant.email', type: 'keyword', }, - 'sophos.xg.contenttype': { - category: 'sophos', - description: 'Type of the content ', - name: 'sophos.xg.contenttype', + 'zoom.registrant.first_name': { + category: 'zoom', + description: 'First name of the user registering to a meeting or webinar ', + name: 'zoom.registrant.first_name', type: 'keyword', }, - 'sophos.xg.override_name': { - category: 'sophos', - description: 'Override name ', - name: 'sophos.xg.override_name', + 'zoom.registrant.last_name': { + category: 'zoom', + description: 'Last name of the user registering to a meeting or webinar ', + name: 'zoom.registrant.last_name', type: 'keyword', }, - 'sophos.xg.activityname': { - category: 'sophos', - description: 'Web policy activity that matched and caused the policy result. ', - name: 'sophos.xg.activityname', + 'zoom.registrant.address': { + category: 'zoom', + description: 'Address of the user registering to a meeting or webinar ', + name: 'zoom.registrant.address', type: 'keyword', }, - 'sophos.xg.download_file_name': { - category: 'sophos', - description: 'Download file name ', - name: 'sophos.xg.download_file_name', + 'zoom.registrant.city': { + category: 'zoom', + description: 'City of the user registering to a meeting or webinar ', + name: 'zoom.registrant.city', type: 'keyword', }, - 'sophos.xg.sha1sum': { - category: 'sophos', - description: 'SHA1 checksum of the item being analyzed ', - name: 'sophos.xg.sha1sum', + 'zoom.registrant.country': { + category: 'zoom', + description: 'Country of the user registering to a meeting or webinar ', + name: 'zoom.registrant.country', type: 'keyword', }, - 'sophos.xg.message_id': { - category: 'sophos', - description: 'Message ID ', - name: 'sophos.xg.message_id', + 'zoom.registrant.zip': { + category: 'zoom', + description: 'Zip code of the user registering to a meeting or webinar ', + name: 'zoom.registrant.zip', type: 'keyword', }, - 'sophos.xg.connid': { - category: 'sophos', - description: 'Connection ID ', - name: 'sophos.xg.connid', + 'zoom.registrant.state': { + category: 'zoom', + description: 'State of the user registering to a meeting or webinar ', + name: 'zoom.registrant.state', type: 'keyword', }, - 'sophos.xg.message': { - category: 'sophos', - description: 'Message ', - name: 'sophos.xg.message', + 'zoom.registrant.phone': { + category: 'zoom', + description: 'Phone number of the user registering to a meeting or webinar ', + name: 'zoom.registrant.phone', type: 'keyword', }, - 'sophos.xg.email_subject': { - category: 'sophos', - description: 'Email Subject ', - name: 'sophos.xg.email_subject', + 'zoom.registrant.industry': { + category: 'zoom', + description: 'Related industry of the user registering to a meeting or webinar ', + name: 'zoom.registrant.industry', type: 'keyword', }, - 'sophos.xg.file_path': { - category: 'sophos', - description: 'File path ', - name: 'sophos.xg.file_path', + 'zoom.registrant.org': { + category: 'zoom', + description: 'Organization related to the user registering to a meeting or webinar ', + name: 'zoom.registrant.org', type: 'keyword', }, - 'sophos.xg.dstdomain': { - category: 'sophos', - description: 'Destination Domain ', - name: 'sophos.xg.dstdomain', + 'zoom.registrant.job_title': { + category: 'zoom', + description: 'Job title of the user registering to a meeting or webinar ', + name: 'zoom.registrant.job_title', type: 'keyword', }, - 'sophos.xg.file_size': { - category: 'sophos', - description: 'File Size ', - name: 'sophos.xg.file_size', - type: 'integer', + 'zoom.registrant.purchasing_time_frame': { + category: 'zoom', + description: 'Choosen purchase timeframe of the user registering to a meeting or webinar ', + name: 'zoom.registrant.purchasing_time_frame', + type: 'keyword', }, - 'sophos.xg.transaction_id': { - category: 'sophos', - description: 'Transaction ID ', - name: 'sophos.xg.transaction_id', + 'zoom.registrant.role_in_purchase_process': { + category: 'zoom', + description: + 'Choosen role in a purchase process related to the user registering to a meeting or webinar ', + name: 'zoom.registrant.role_in_purchase_process', type: 'keyword', }, - 'sophos.xg.website': { - category: 'sophos', - description: 'Website ', - name: 'sophos.xg.website', + 'zoom.registrant.no_of_employees': { + category: 'zoom', + description: 'Number of employees choosen by the user registering to a meeting or webinar ', + name: 'zoom.registrant.no_of_employees', type: 'keyword', }, - 'sophos.xg.file_name': { - category: 'sophos', - description: 'Filename ', - name: 'sophos.xg.file_name', + 'zoom.registrant.comments': { + category: 'zoom', + description: 'Comments left by the user registering to a meeting or webinar ', + name: 'zoom.registrant.comments', type: 'keyword', }, - 'sophos.xg.context_prefix': { - category: 'sophos', - description: 'Content Prefix ', - name: 'sophos.xg.context_prefix', + 'zoom.registrant.join_url': { + category: 'zoom', + description: 'The URL that the registrant can use to join the webinar ', + name: 'zoom.registrant.join_url', type: 'keyword', }, - 'sophos.xg.site_category': { - category: 'sophos', - description: 'Site Category ', - name: 'sophos.xg.site_category', + 'zoom.participant.id': { + category: 'zoom', + description: 'Unique ID of the participant related to a meeting ', + name: 'zoom.participant.id', type: 'keyword', }, - 'sophos.xg.context_suffix': { - category: 'sophos', - description: 'Context Suffix ', - name: 'sophos.xg.context_suffix', + 'zoom.participant.user_id': { + category: 'zoom', + description: 'UserID of the participant related to a meeting ', + name: 'zoom.participant.user_id', type: 'keyword', }, - 'sophos.xg.dictionary_name': { - category: 'sophos', - description: 'Dictionary Name ', - name: 'sophos.xg.dictionary_name', + 'zoom.participant.user_name': { + category: 'zoom', + description: 'Username of the participant related to a meeting ', + name: 'zoom.participant.user_name', type: 'keyword', }, - 'sophos.xg.action': { - category: 'sophos', - description: 'Event Action ', - name: 'sophos.xg.action', + 'zoom.participant.join_time': { + category: 'zoom', + description: 'The date and time a participant joined a meeting ', + name: 'zoom.participant.join_time', + type: 'date', + }, + 'zoom.participant.leave_time': { + category: 'zoom', + description: 'The date and time a participant left a meeting ', + name: 'zoom.participant.leave_time', + type: 'date', + }, + 'zoom.participant.sharing_details.link_source': { + category: 'zoom', + description: 'Method of sharing with dropbox integration ', + name: 'zoom.participant.sharing_details.link_source', type: 'keyword', }, - 'sophos.xg.user': { - category: 'sophos', - description: 'User ', - name: 'sophos.xg.user', + 'zoom.participant.sharing_details.content': { + category: 'zoom', + description: 'Type of content that was shared ', + name: 'zoom.participant.sharing_details.content', type: 'keyword', }, - 'sophos.xg.context_match': { - category: 'sophos', - description: 'Context Match ', - name: 'sophos.xg.context_match', + 'zoom.participant.sharing_details.file_link': { + category: 'zoom', + description: 'The file link that was shared ', + name: 'zoom.participant.sharing_details.file_link', type: 'keyword', }, - 'sophos.xg.direction': { - category: 'sophos', - description: 'Direction ', - name: 'sophos.xg.direction', + 'zoom.participant.sharing_details.date_time': { + category: 'zoom', + description: 'Timestamp the sharing started ', + name: 'zoom.participant.sharing_details.date_time', type: 'keyword', }, - 'sophos.xg.auth_client': { - category: 'sophos', - description: 'Auth Client ', - name: 'sophos.xg.auth_client', + 'zoom.participant.sharing_details.source': { + category: 'zoom', + description: 'The file source that was share ', + name: 'zoom.participant.sharing_details.source', type: 'keyword', }, - 'sophos.xg.auth_mechanism': { - category: 'sophos', - description: 'Auth mechanism ', - name: 'sophos.xg.auth_mechanism', + 'zoom.old_values': { + category: 'zoom', + description: + 'Includes the old values when updating a object like user, meeting, account or webinar ', + name: 'zoom.old_values', + type: 'flattened', + }, + 'zoom.settings': { + category: 'zoom', + description: + 'The current active settings related to a object like user, meeting, account or webinar ', + name: 'zoom.settings', + type: 'flattened', + }, + 'aws-cloudwatch.log_group': { + category: 'aws-cloudwatch', + description: 'The name of the log group to which this event belongs.', + name: 'aws-cloudwatch.log_group', type: 'keyword', }, - 'sophos.xg.connectionname': { - category: 'sophos', - description: 'Connectionname ', - name: 'sophos.xg.connectionname', + 'aws-cloudwatch.log_stream': { + category: 'aws-cloudwatch', + description: 'The name of the log stream to which this event belongs.', + name: 'aws-cloudwatch.log_stream', type: 'keyword', }, - 'sophos.xg.remotenetwork': { - category: 'sophos', - description: 'remotenetwork ', - name: 'sophos.xg.remotenetwork', + 'aws-cloudwatch.ingestion_time': { + category: 'aws-cloudwatch', + description: 'The time the event was ingested in AWS CloudWatch.', + name: 'aws-cloudwatch.ingestion_time', type: 'keyword', }, - 'sophos.xg.localgateway': { - category: 'sophos', - description: 'Localgateway ', - name: 'sophos.xg.localgateway', + 'bucket.name': { + category: 'bucket', + description: 'Name of the S3 bucket that this log retrieved from. ', + name: 'bucket.name', type: 'keyword', }, - 'sophos.xg.localnetwork': { - category: 'sophos', - description: 'Localnetwork ', - name: 'sophos.xg.localnetwork', + 'bucket.arn': { + category: 'bucket', + description: 'ARN of the S3 bucket that this log retrieved from. ', + name: 'bucket.arn', type: 'keyword', }, - 'sophos.xg.connectiontype': { - category: 'sophos', - description: 'Connectiontype ', - name: 'sophos.xg.connectiontype', + 'object.key': { + category: 'object', + description: 'Name of the S3 object that this log retrieved from. ', + name: 'object.key', type: 'keyword', }, - 'sophos.xg.oldversion': { - category: 'sophos', - description: 'Oldversion ', - name: 'sophos.xg.oldversion', + metadata: { + category: 'base', + description: 'AWS S3 object metadata values.', + name: 'metadata', + type: 'flattened', + }, + 'netflow.type': { + category: 'netflow', + description: 'The type of NetFlow record described by this event. ', + name: 'netflow.type', type: 'keyword', }, - 'sophos.xg.newversion': { - category: 'sophos', - description: 'Newversion ', - name: 'sophos.xg.newversion', + 'netflow.exporter.address': { + category: 'netflow', + description: "Exporter's network address in IP:port format. ", + name: 'netflow.exporter.address', type: 'keyword', }, - 'sophos.xg.ipaddress': { - category: 'sophos', - description: 'Ipaddress ', - name: 'sophos.xg.ipaddress', + 'netflow.exporter.source_id': { + category: 'netflow', + description: 'Observation domain ID to which this record belongs. ', + name: 'netflow.exporter.source_id', + type: 'long', + }, + 'netflow.exporter.timestamp': { + category: 'netflow', + description: 'Time and date of export. ', + name: 'netflow.exporter.timestamp', + type: 'date', + }, + 'netflow.exporter.uptime_millis': { + category: 'netflow', + description: 'How long the exporter process has been running, in milliseconds. ', + name: 'netflow.exporter.uptime_millis', + type: 'long', + }, + 'netflow.exporter.version': { + category: 'netflow', + description: 'NetFlow version used. ', + name: 'netflow.exporter.version', + type: 'integer', + }, + 'netflow.absolute_error': { + category: 'netflow', + name: 'netflow.absolute_error', + type: 'double', + }, + 'netflow.address_pool_high_threshold': { + category: 'netflow', + name: 'netflow.address_pool_high_threshold', + type: 'long', + }, + 'netflow.address_pool_low_threshold': { + category: 'netflow', + name: 'netflow.address_pool_low_threshold', + type: 'long', + }, + 'netflow.address_port_mapping_high_threshold': { + category: 'netflow', + name: 'netflow.address_port_mapping_high_threshold', + type: 'long', + }, + 'netflow.address_port_mapping_low_threshold': { + category: 'netflow', + name: 'netflow.address_port_mapping_low_threshold', + type: 'long', + }, + 'netflow.address_port_mapping_per_user_high_threshold': { + category: 'netflow', + name: 'netflow.address_port_mapping_per_user_high_threshold', + type: 'long', + }, + 'netflow.afc_protocol': { + category: 'netflow', + name: 'netflow.afc_protocol', + type: 'integer', + }, + 'netflow.afc_protocol_name': { + category: 'netflow', + name: 'netflow.afc_protocol_name', type: 'keyword', }, - 'sophos.xg.client_physical_address': { - category: 'sophos', - description: 'Client physical address ', - name: 'sophos.xg.client_physical_address', + 'netflow.anonymization_flags': { + category: 'netflow', + name: 'netflow.anonymization_flags', + type: 'integer', + }, + 'netflow.anonymization_technique': { + category: 'netflow', + name: 'netflow.anonymization_technique', + type: 'integer', + }, + 'netflow.application_business-relevance': { + category: 'netflow', + name: 'netflow.application_business-relevance', + type: 'long', + }, + 'netflow.application_category_name': { + category: 'netflow', + name: 'netflow.application_category_name', type: 'keyword', }, - 'sophos.xg.client_host_name': { - category: 'sophos', - description: 'Client host name ', - name: 'sophos.xg.client_host_name', + 'netflow.application_description': { + category: 'netflow', + name: 'netflow.application_description', type: 'keyword', }, - 'sophos.xg.raw_data': { - category: 'sophos', - description: 'Raw data ', - name: 'sophos.xg.raw_data', + 'netflow.application_group_name': { + category: 'netflow', + name: 'netflow.application_group_name', type: 'keyword', }, - 'sophos.xg.Mode': { - category: 'sophos', - description: 'Mode ', - name: 'sophos.xg.Mode', + 'netflow.application_http_uri_statistics': { + category: 'netflow', + name: 'netflow.application_http_uri_statistics', + type: 'short', + }, + 'netflow.application_http_user-agent': { + category: 'netflow', + name: 'netflow.application_http_user-agent', + type: 'short', + }, + 'netflow.application_id': { + category: 'netflow', + name: 'netflow.application_id', + type: 'short', + }, + 'netflow.application_name': { + category: 'netflow', + name: 'netflow.application_name', type: 'keyword', }, - 'sophos.xg.sessionid': { - category: 'sophos', - description: 'Sessionid ', - name: 'sophos.xg.sessionid', + 'netflow.application_sub_category_name': { + category: 'netflow', + name: 'netflow.application_sub_category_name', type: 'keyword', }, - 'sophos.xg.starttime': { - category: 'sophos', - description: 'Starttime ', - name: 'sophos.xg.starttime', - type: 'date', + 'netflow.application_traffic-class': { + category: 'netflow', + name: 'netflow.application_traffic-class', + type: 'long', + }, + 'netflow.art_client_network_time_maximum': { + category: 'netflow', + name: 'netflow.art_client_network_time_maximum', + type: 'long', + }, + 'netflow.art_client_network_time_minimum': { + category: 'netflow', + name: 'netflow.art_client_network_time_minimum', + type: 'long', + }, + 'netflow.art_client_network_time_sum': { + category: 'netflow', + name: 'netflow.art_client_network_time_sum', + type: 'long', + }, + 'netflow.art_clientpackets': { + category: 'netflow', + name: 'netflow.art_clientpackets', + type: 'long', + }, + 'netflow.art_count_late_responses': { + category: 'netflow', + name: 'netflow.art_count_late_responses', + type: 'long', + }, + 'netflow.art_count_new_connections': { + category: 'netflow', + name: 'netflow.art_count_new_connections', + type: 'long', + }, + 'netflow.art_count_responses': { + category: 'netflow', + name: 'netflow.art_count_responses', + type: 'long', + }, + 'netflow.art_count_responses_histogram_bucket1': { + category: 'netflow', + name: 'netflow.art_count_responses_histogram_bucket1', + type: 'long', + }, + 'netflow.art_count_responses_histogram_bucket2': { + category: 'netflow', + name: 'netflow.art_count_responses_histogram_bucket2', + type: 'long', }, - 'sophos.xg.remote_ip': { - category: 'sophos', - description: 'Remote IP ', - name: 'sophos.xg.remote_ip', - type: 'ip', + 'netflow.art_count_responses_histogram_bucket3': { + category: 'netflow', + name: 'netflow.art_count_responses_histogram_bucket3', + type: 'long', }, - 'sophos.xg.timestamp': { - category: 'sophos', - description: 'timestamp ', - name: 'sophos.xg.timestamp', - type: 'date', + 'netflow.art_count_responses_histogram_bucket4': { + category: 'netflow', + name: 'netflow.art_count_responses_histogram_bucket4', + type: 'long', }, - 'sophos.xg.SysLog_SERVER_NAME': { - category: 'sophos', - description: 'SysLog SERVER NAME ', - name: 'sophos.xg.SysLog_SERVER_NAME', - type: 'keyword', + 'netflow.art_count_responses_histogram_bucket5': { + category: 'netflow', + name: 'netflow.art_count_responses_histogram_bucket5', + type: 'long', }, - 'sophos.xg.backup_mode': { - category: 'sophos', - description: 'Backup mode ', - name: 'sophos.xg.backup_mode', - type: 'keyword', + 'netflow.art_count_responses_histogram_bucket6': { + category: 'netflow', + name: 'netflow.art_count_responses_histogram_bucket6', + type: 'long', }, - 'sophos.xg.source': { - category: 'sophos', - description: 'Source ', - name: 'sophos.xg.source', - type: 'keyword', + 'netflow.art_count_responses_histogram_bucket7': { + category: 'netflow', + name: 'netflow.art_count_responses_histogram_bucket7', + type: 'long', }, - 'sophos.xg.server': { - category: 'sophos', - description: 'Server ', - name: 'sophos.xg.server', - type: 'keyword', + 'netflow.art_count_retransmissions': { + category: 'netflow', + name: 'netflow.art_count_retransmissions', + type: 'long', }, - 'sophos.xg.host': { - category: 'sophos', - description: 'Host ', - name: 'sophos.xg.host', - type: 'keyword', + 'netflow.art_count_transactions': { + category: 'netflow', + name: 'netflow.art_count_transactions', + type: 'long', }, - 'sophos.xg.responsetime': { - category: 'sophos', - description: 'Responsetime ', - name: 'sophos.xg.responsetime', + 'netflow.art_network_time_maximum': { + category: 'netflow', + name: 'netflow.art_network_time_maximum', type: 'long', }, - 'sophos.xg.cookie': { - category: 'sophos', - description: 'cookie ', - name: 'sophos.xg.cookie', - type: 'keyword', + 'netflow.art_network_time_minimum': { + category: 'netflow', + name: 'netflow.art_network_time_minimum', + type: 'long', }, - 'sophos.xg.querystring': { - category: 'sophos', - description: 'querystring ', - name: 'sophos.xg.querystring', - type: 'keyword', + 'netflow.art_network_time_sum': { + category: 'netflow', + name: 'netflow.art_network_time_sum', + type: 'long', }, - 'sophos.xg.extra': { - category: 'sophos', - description: 'extra ', - name: 'sophos.xg.extra', - type: 'keyword', + 'netflow.art_response_time_maximum': { + category: 'netflow', + name: 'netflow.art_response_time_maximum', + type: 'long', }, - 'sophos.xg.PHPSESSID': { - category: 'sophos', - description: 'PHPSESSID ', - name: 'sophos.xg.PHPSESSID', - type: 'keyword', + 'netflow.art_response_time_minimum': { + category: 'netflow', + name: 'netflow.art_response_time_minimum', + type: 'long', }, - 'sophos.xg.start_time': { - category: 'sophos', - description: 'Start time ', - name: 'sophos.xg.start_time', - type: 'date', + 'netflow.art_response_time_sum': { + category: 'netflow', + name: 'netflow.art_response_time_sum', + type: 'long', }, - 'sophos.xg.eventtime': { - category: 'sophos', - description: 'Event time ', - name: 'sophos.xg.eventtime', - type: 'date', + 'netflow.art_server_network_time_maximum': { + category: 'netflow', + name: 'netflow.art_server_network_time_maximum', + type: 'long', }, - 'sophos.xg.red_id': { - category: 'sophos', - description: 'RED ID ', - name: 'sophos.xg.red_id', - type: 'keyword', + 'netflow.art_server_network_time_minimum': { + category: 'netflow', + name: 'netflow.art_server_network_time_minimum', + type: 'long', }, - 'sophos.xg.branch_name': { - category: 'sophos', - description: 'Branch Name ', - name: 'sophos.xg.branch_name', - type: 'keyword', + 'netflow.art_server_network_time_sum': { + category: 'netflow', + name: 'netflow.art_server_network_time_sum', + type: 'long', }, - 'sophos.xg.updatedip': { - category: 'sophos', - description: 'updatedip ', - name: 'sophos.xg.updatedip', - type: 'ip', + 'netflow.art_server_response_time_maximum': { + category: 'netflow', + name: 'netflow.art_server_response_time_maximum', + type: 'long', }, - 'sophos.xg.idle_cpu': { - category: 'sophos', - description: 'idle ## ', - name: 'sophos.xg.idle_cpu', - type: 'float', + 'netflow.art_server_response_time_minimum': { + category: 'netflow', + name: 'netflow.art_server_response_time_minimum', + type: 'long', }, - 'sophos.xg.system_cpu': { - category: 'sophos', - description: 'system ', - name: 'sophos.xg.system_cpu', - type: 'float', + 'netflow.art_server_response_time_sum': { + category: 'netflow', + name: 'netflow.art_server_response_time_sum', + type: 'long', }, - 'sophos.xg.user_cpu': { - category: 'sophos', - description: 'system ', - name: 'sophos.xg.user_cpu', - type: 'float', + 'netflow.art_serverpackets': { + category: 'netflow', + name: 'netflow.art_serverpackets', + type: 'long', }, - 'sophos.xg.used': { - category: 'sophos', - description: 'used ', - name: 'sophos.xg.used', - type: 'integer', + 'netflow.art_total_response_time_maximum': { + category: 'netflow', + name: 'netflow.art_total_response_time_maximum', + type: 'long', }, - 'sophos.xg.unit': { - category: 'sophos', - description: 'unit ', - name: 'sophos.xg.unit', - type: 'keyword', + 'netflow.art_total_response_time_minimum': { + category: 'netflow', + name: 'netflow.art_total_response_time_minimum', + type: 'long', }, - 'sophos.xg.total_memory': { - category: 'sophos', - description: 'Total Memory ', - name: 'sophos.xg.total_memory', - type: 'integer', + 'netflow.art_total_response_time_sum': { + category: 'netflow', + name: 'netflow.art_total_response_time_sum', + type: 'long', }, - 'sophos.xg.free': { - category: 'sophos', - description: 'free ', - name: 'sophos.xg.free', - type: 'integer', + 'netflow.art_total_transaction_time_maximum': { + category: 'netflow', + name: 'netflow.art_total_transaction_time_maximum', + type: 'long', }, - 'sophos.xg.transmittederrors': { - category: 'sophos', - description: 'transmitted errors ', - name: 'sophos.xg.transmittederrors', - type: 'keyword', + 'netflow.art_total_transaction_time_minimum': { + category: 'netflow', + name: 'netflow.art_total_transaction_time_minimum', + type: 'long', }, - 'sophos.xg.receivederrors': { - category: 'sophos', - description: 'received errors ', - name: 'sophos.xg.receivederrors', - type: 'keyword', + 'netflow.art_total_transaction_time_sum': { + category: 'netflow', + name: 'netflow.art_total_transaction_time_sum', + type: 'long', }, - 'sophos.xg.receivedkbits': { - category: 'sophos', - description: 'received kbits ', - name: 'sophos.xg.receivedkbits', + 'netflow.assembled_fragment_count': { + category: 'netflow', + name: 'netflow.assembled_fragment_count', type: 'long', }, - 'sophos.xg.transmittedkbits': { - category: 'sophos', - description: 'transmitted kbits ', - name: 'sophos.xg.transmittedkbits', + 'netflow.audit_counter': { + category: 'netflow', + name: 'netflow.audit_counter', type: 'long', }, - 'sophos.xg.transmitteddrops': { - category: 'sophos', - description: 'transmitted drops ', - name: 'sophos.xg.transmitteddrops', + 'netflow.average_interarrival_time': { + category: 'netflow', + name: 'netflow.average_interarrival_time', type: 'long', }, - 'sophos.xg.receiveddrops': { - category: 'sophos', - description: 'received drops ', - name: 'sophos.xg.receiveddrops', + 'netflow.bgp_destination_as_number': { + category: 'netflow', + name: 'netflow.bgp_destination_as_number', type: 'long', }, - 'sophos.xg.collisions': { - category: 'sophos', - description: 'collisions ', - name: 'sophos.xg.collisions', + 'netflow.bgp_next_adjacent_as_number': { + category: 'netflow', + name: 'netflow.bgp_next_adjacent_as_number', type: 'long', }, - 'sophos.xg.interface': { - category: 'sophos', - description: 'interface ', - name: 'sophos.xg.interface', - type: 'keyword', + 'netflow.bgp_next_hop_ipv4_address': { + category: 'netflow', + name: 'netflow.bgp_next_hop_ipv4_address', + type: 'ip', }, - 'sophos.xg.Configuration': { - category: 'sophos', - description: 'Configuration ', - name: 'sophos.xg.Configuration', - type: 'float', + 'netflow.bgp_next_hop_ipv6_address': { + category: 'netflow', + name: 'netflow.bgp_next_hop_ipv6_address', + type: 'ip', }, - 'sophos.xg.Reports': { - category: 'sophos', - description: 'Reports ', - name: 'sophos.xg.Reports', - type: 'float', + 'netflow.bgp_prev_adjacent_as_number': { + category: 'netflow', + name: 'netflow.bgp_prev_adjacent_as_number', + type: 'long', }, - 'sophos.xg.Signature': { - category: 'sophos', - description: 'Signature ', - name: 'sophos.xg.Signature', - type: 'float', + 'netflow.bgp_source_as_number': { + category: 'netflow', + name: 'netflow.bgp_source_as_number', + type: 'long', }, - 'sophos.xg.Temp': { - category: 'sophos', - description: 'Temp ', - name: 'sophos.xg.Temp', - type: 'float', + 'netflow.bgp_validity_state': { + category: 'netflow', + name: 'netflow.bgp_validity_state', + type: 'short', }, - 'sophos.xg.users': { - category: 'sophos', - description: 'users ', - name: 'sophos.xg.users', - type: 'keyword', + 'netflow.biflow_direction': { + category: 'netflow', + name: 'netflow.biflow_direction', + type: 'short', }, - 'sophos.xg.ssid': { - category: 'sophos', - description: 'ssid ', - name: 'sophos.xg.ssid', - type: 'keyword', + 'netflow.bind_ipv4_address': { + category: 'netflow', + name: 'netflow.bind_ipv4_address', + type: 'ip', }, - 'sophos.xg.ap': { - category: 'sophos', - description: 'ap ', - name: 'sophos.xg.ap', - type: 'keyword', + 'netflow.bind_transport_port': { + category: 'netflow', + name: 'netflow.bind_transport_port', + type: 'integer', }, - 'sophos.xg.clients_conn_ssid': { - category: 'sophos', - description: 'clients connection ssid ', - name: 'sophos.xg.clients_conn_ssid', - type: 'keyword', + 'netflow.class_id': { + category: 'netflow', + name: 'netflow.class_id', + type: 'long', }, - 'suricata.eve.event_type': { - category: 'suricata', - name: 'suricata.eve.event_type', + 'netflow.class_name': { + category: 'netflow', + name: 'netflow.class_name', type: 'keyword', }, - 'suricata.eve.app_proto_orig': { - category: 'suricata', - name: 'suricata.eve.app_proto_orig', - type: 'keyword', + 'netflow.classification_engine_id': { + category: 'netflow', + name: 'netflow.classification_engine_id', + type: 'short', }, - 'suricata.eve.tcp.tcp_flags': { - category: 'suricata', - name: 'suricata.eve.tcp.tcp_flags', - type: 'keyword', + 'netflow.collection_time_milliseconds': { + category: 'netflow', + name: 'netflow.collection_time_milliseconds', + type: 'date', }, - 'suricata.eve.tcp.psh': { - category: 'suricata', - name: 'suricata.eve.tcp.psh', - type: 'boolean', + 'netflow.collector_certificate': { + category: 'netflow', + name: 'netflow.collector_certificate', + type: 'short', }, - 'suricata.eve.tcp.tcp_flags_tc': { - category: 'suricata', - name: 'suricata.eve.tcp.tcp_flags_tc', - type: 'keyword', + 'netflow.collector_ipv4_address': { + category: 'netflow', + name: 'netflow.collector_ipv4_address', + type: 'ip', }, - 'suricata.eve.tcp.ack': { - category: 'suricata', - name: 'suricata.eve.tcp.ack', - type: 'boolean', + 'netflow.collector_ipv6_address': { + category: 'netflow', + name: 'netflow.collector_ipv6_address', + type: 'ip', }, - 'suricata.eve.tcp.syn': { - category: 'suricata', - name: 'suricata.eve.tcp.syn', - type: 'boolean', + 'netflow.collector_transport_port': { + category: 'netflow', + name: 'netflow.collector_transport_port', + type: 'integer', }, - 'suricata.eve.tcp.state': { - category: 'suricata', - name: 'suricata.eve.tcp.state', - type: 'keyword', + 'netflow.common_properties_id': { + category: 'netflow', + name: 'netflow.common_properties_id', + type: 'long', }, - 'suricata.eve.tcp.tcp_flags_ts': { - category: 'suricata', - name: 'suricata.eve.tcp.tcp_flags_ts', - type: 'keyword', + 'netflow.confidence_level': { + category: 'netflow', + name: 'netflow.confidence_level', + type: 'double', }, - 'suricata.eve.tcp.rst': { - category: 'suricata', - name: 'suricata.eve.tcp.rst', - type: 'boolean', + 'netflow.conn_ipv4_address': { + category: 'netflow', + name: 'netflow.conn_ipv4_address', + type: 'ip', }, - 'suricata.eve.tcp.fin': { - category: 'suricata', - name: 'suricata.eve.tcp.fin', - type: 'boolean', + 'netflow.conn_transport_port': { + category: 'netflow', + name: 'netflow.conn_transport_port', + type: 'integer', }, - 'suricata.eve.fileinfo.sha1': { - category: 'suricata', - name: 'suricata.eve.fileinfo.sha1', - type: 'keyword', + 'netflow.connection_sum_duration_seconds': { + category: 'netflow', + name: 'netflow.connection_sum_duration_seconds', + type: 'long', }, - 'suricata.eve.fileinfo.filename': { - category: 'suricata', - name: 'suricata.eve.fileinfo.filename', - type: 'alias', + 'netflow.connection_transaction_id': { + category: 'netflow', + name: 'netflow.connection_transaction_id', + type: 'long', }, - 'suricata.eve.fileinfo.tx_id': { - category: 'suricata', - name: 'suricata.eve.fileinfo.tx_id', + 'netflow.conntrack_id': { + category: 'netflow', + name: 'netflow.conntrack_id', type: 'long', }, - 'suricata.eve.fileinfo.state': { - category: 'suricata', - name: 'suricata.eve.fileinfo.state', - type: 'keyword', + 'netflow.data_byte_count': { + category: 'netflow', + name: 'netflow.data_byte_count', + type: 'long', }, - 'suricata.eve.fileinfo.stored': { - category: 'suricata', - name: 'suricata.eve.fileinfo.stored', - type: 'boolean', + 'netflow.data_link_frame_section': { + category: 'netflow', + name: 'netflow.data_link_frame_section', + type: 'short', }, - 'suricata.eve.fileinfo.gaps': { - category: 'suricata', - name: 'suricata.eve.fileinfo.gaps', + 'netflow.data_link_frame_size': { + category: 'netflow', + name: 'netflow.data_link_frame_size', + type: 'integer', + }, + 'netflow.data_link_frame_type': { + category: 'netflow', + name: 'netflow.data_link_frame_type', + type: 'integer', + }, + 'netflow.data_records_reliability': { + category: 'netflow', + name: 'netflow.data_records_reliability', type: 'boolean', }, - 'suricata.eve.fileinfo.sha256': { - category: 'suricata', - name: 'suricata.eve.fileinfo.sha256', - type: 'keyword', + 'netflow.delta_flow_count': { + category: 'netflow', + name: 'netflow.delta_flow_count', + type: 'long', }, - 'suricata.eve.fileinfo.md5': { - category: 'suricata', - name: 'suricata.eve.fileinfo.md5', + 'netflow.destination_ipv4_address': { + category: 'netflow', + name: 'netflow.destination_ipv4_address', + type: 'ip', + }, + 'netflow.destination_ipv4_prefix': { + category: 'netflow', + name: 'netflow.destination_ipv4_prefix', + type: 'ip', + }, + 'netflow.destination_ipv4_prefix_length': { + category: 'netflow', + name: 'netflow.destination_ipv4_prefix_length', + type: 'short', + }, + 'netflow.destination_ipv6_address': { + category: 'netflow', + name: 'netflow.destination_ipv6_address', + type: 'ip', + }, + 'netflow.destination_ipv6_prefix': { + category: 'netflow', + name: 'netflow.destination_ipv6_prefix', + type: 'ip', + }, + 'netflow.destination_ipv6_prefix_length': { + category: 'netflow', + name: 'netflow.destination_ipv6_prefix_length', + type: 'short', + }, + 'netflow.destination_mac_address': { + category: 'netflow', + name: 'netflow.destination_mac_address', type: 'keyword', }, - 'suricata.eve.fileinfo.size': { - category: 'suricata', - name: 'suricata.eve.fileinfo.size', - type: 'alias', + 'netflow.destination_transport_port': { + category: 'netflow', + name: 'netflow.destination_transport_port', + type: 'integer', }, - 'suricata.eve.icmp_type': { - category: 'suricata', - name: 'suricata.eve.icmp_type', + 'netflow.digest_hash_value': { + category: 'netflow', + name: 'netflow.digest_hash_value', type: 'long', }, - 'suricata.eve.dest_port': { - category: 'suricata', - name: 'suricata.eve.dest_port', - type: 'alias', + 'netflow.distinct_count_of_destination_ip_address': { + category: 'netflow', + name: 'netflow.distinct_count_of_destination_ip_address', + type: 'long', }, - 'suricata.eve.src_port': { - category: 'suricata', - name: 'suricata.eve.src_port', - type: 'alias', + 'netflow.distinct_count_of_destination_ipv4_address': { + category: 'netflow', + name: 'netflow.distinct_count_of_destination_ipv4_address', + type: 'long', }, - 'suricata.eve.proto': { - category: 'suricata', - name: 'suricata.eve.proto', - type: 'alias', + 'netflow.distinct_count_of_destination_ipv6_address': { + category: 'netflow', + name: 'netflow.distinct_count_of_destination_ipv6_address', + type: 'long', }, - 'suricata.eve.pcap_cnt': { - category: 'suricata', - name: 'suricata.eve.pcap_cnt', + 'netflow.distinct_count_of_source_ip_address': { + category: 'netflow', + name: 'netflow.distinct_count_of_source_ip_address', + type: 'long', + }, + 'netflow.distinct_count_of_source_ipv4_address': { + category: 'netflow', + name: 'netflow.distinct_count_of_source_ipv4_address', + type: 'long', + }, + 'netflow.distinct_count_of_source_ipv6_address': { + category: 'netflow', + name: 'netflow.distinct_count_of_source_ipv6_address', type: 'long', }, - 'suricata.eve.src_ip': { - category: 'suricata', - name: 'suricata.eve.src_ip', - type: 'alias', + 'netflow.dns_authoritative': { + category: 'netflow', + name: 'netflow.dns_authoritative', + type: 'short', }, - 'suricata.eve.dns.type': { - category: 'suricata', - name: 'suricata.eve.dns.type', + 'netflow.dns_cname': { + category: 'netflow', + name: 'netflow.dns_cname', type: 'keyword', }, - 'suricata.eve.dns.rrtype': { - category: 'suricata', - name: 'suricata.eve.dns.rrtype', - type: 'keyword', + 'netflow.dns_id': { + category: 'netflow', + name: 'netflow.dns_id', + type: 'integer', }, - 'suricata.eve.dns.rrname': { - category: 'suricata', - name: 'suricata.eve.dns.rrname', + 'netflow.dns_mx_exchange': { + category: 'netflow', + name: 'netflow.dns_mx_exchange', type: 'keyword', }, - 'suricata.eve.dns.rdata': { - category: 'suricata', - name: 'suricata.eve.dns.rdata', + 'netflow.dns_mx_preference': { + category: 'netflow', + name: 'netflow.dns_mx_preference', + type: 'integer', + }, + 'netflow.dns_nsd_name': { + category: 'netflow', + name: 'netflow.dns_nsd_name', type: 'keyword', }, - 'suricata.eve.dns.tx_id': { - category: 'suricata', - name: 'suricata.eve.dns.tx_id', - type: 'long', + 'netflow.dns_nx_domain': { + category: 'netflow', + name: 'netflow.dns_nx_domain', + type: 'short', }, - 'suricata.eve.dns.ttl': { - category: 'suricata', - name: 'suricata.eve.dns.ttl', - type: 'long', + 'netflow.dns_ptrd_name': { + category: 'netflow', + name: 'netflow.dns_ptrd_name', + type: 'keyword', }, - 'suricata.eve.dns.rcode': { - category: 'suricata', - name: 'suricata.eve.dns.rcode', + 'netflow.dns_qname': { + category: 'netflow', + name: 'netflow.dns_qname', type: 'keyword', }, - 'suricata.eve.dns.id': { - category: 'suricata', - name: 'suricata.eve.dns.id', - type: 'long', + 'netflow.dns_qr_type': { + category: 'netflow', + name: 'netflow.dns_qr_type', + type: 'integer', }, - 'suricata.eve.flow_id': { - category: 'suricata', - name: 'suricata.eve.flow_id', - type: 'keyword', + 'netflow.dns_query_response': { + category: 'netflow', + name: 'netflow.dns_query_response', + type: 'short', }, - 'suricata.eve.email.status': { - category: 'suricata', - name: 'suricata.eve.email.status', - type: 'keyword', + 'netflow.dns_rr_section': { + category: 'netflow', + name: 'netflow.dns_rr_section', + type: 'short', }, - 'suricata.eve.dest_ip': { - category: 'suricata', - name: 'suricata.eve.dest_ip', - type: 'alias', + 'netflow.dns_soa_expire': { + category: 'netflow', + name: 'netflow.dns_soa_expire', + type: 'long', }, - 'suricata.eve.icmp_code': { - category: 'suricata', - name: 'suricata.eve.icmp_code', + 'netflow.dns_soa_minimum': { + category: 'netflow', + name: 'netflow.dns_soa_minimum', type: 'long', }, - 'suricata.eve.http.status': { - category: 'suricata', - name: 'suricata.eve.http.status', - type: 'alias', + 'netflow.dns_soa_refresh': { + category: 'netflow', + name: 'netflow.dns_soa_refresh', + type: 'long', }, - 'suricata.eve.http.redirect': { - category: 'suricata', - name: 'suricata.eve.http.redirect', - type: 'keyword', + 'netflow.dns_soa_retry': { + category: 'netflow', + name: 'netflow.dns_soa_retry', + type: 'long', }, - 'suricata.eve.http.http_user_agent': { - category: 'suricata', - name: 'suricata.eve.http.http_user_agent', - type: 'alias', + 'netflow.dns_soa_serial': { + category: 'netflow', + name: 'netflow.dns_soa_serial', + type: 'long', }, - 'suricata.eve.http.protocol': { - category: 'suricata', - name: 'suricata.eve.http.protocol', + 'netflow.dns_soam_name': { + category: 'netflow', + name: 'netflow.dns_soam_name', type: 'keyword', }, - 'suricata.eve.http.http_refer': { - category: 'suricata', - name: 'suricata.eve.http.http_refer', - type: 'alias', - }, - 'suricata.eve.http.url': { - category: 'suricata', - name: 'suricata.eve.http.url', - type: 'alias', + 'netflow.dns_soar_name': { + category: 'netflow', + name: 'netflow.dns_soar_name', + type: 'keyword', }, - 'suricata.eve.http.hostname': { - category: 'suricata', - name: 'suricata.eve.http.hostname', - type: 'alias', + 'netflow.dns_srv_port': { + category: 'netflow', + name: 'netflow.dns_srv_port', + type: 'integer', }, - 'suricata.eve.http.length': { - category: 'suricata', - name: 'suricata.eve.http.length', - type: 'alias', + 'netflow.dns_srv_priority': { + category: 'netflow', + name: 'netflow.dns_srv_priority', + type: 'integer', }, - 'suricata.eve.http.http_method': { - category: 'suricata', - name: 'suricata.eve.http.http_method', - type: 'alias', + 'netflow.dns_srv_target': { + category: 'netflow', + name: 'netflow.dns_srv_target', + type: 'integer', }, - 'suricata.eve.http.http_content_type': { - category: 'suricata', - name: 'suricata.eve.http.http_content_type', - type: 'keyword', + 'netflow.dns_srv_weight': { + category: 'netflow', + name: 'netflow.dns_srv_weight', + type: 'integer', }, - 'suricata.eve.timestamp': { - category: 'suricata', - name: 'suricata.eve.timestamp', - type: 'alias', + 'netflow.dns_ttl': { + category: 'netflow', + name: 'netflow.dns_ttl', + type: 'long', }, - 'suricata.eve.in_iface': { - category: 'suricata', - name: 'suricata.eve.in_iface', + 'netflow.dns_txt_data': { + category: 'netflow', + name: 'netflow.dns_txt_data', type: 'keyword', }, - 'suricata.eve.alert.category': { - category: 'suricata', - name: 'suricata.eve.alert.category', + 'netflow.dot1q_customer_dei': { + category: 'netflow', + name: 'netflow.dot1q_customer_dei', + type: 'boolean', + }, + 'netflow.dot1q_customer_destination_mac_address': { + category: 'netflow', + name: 'netflow.dot1q_customer_destination_mac_address', type: 'keyword', }, - 'suricata.eve.alert.severity': { - category: 'suricata', - name: 'suricata.eve.alert.severity', - type: 'alias', + 'netflow.dot1q_customer_priority': { + category: 'netflow', + name: 'netflow.dot1q_customer_priority', + type: 'short', }, - 'suricata.eve.alert.rev': { - category: 'suricata', - name: 'suricata.eve.alert.rev', - type: 'long', + 'netflow.dot1q_customer_source_mac_address': { + category: 'netflow', + name: 'netflow.dot1q_customer_source_mac_address', + type: 'keyword', }, - 'suricata.eve.alert.gid': { - category: 'suricata', - name: 'suricata.eve.alert.gid', - type: 'long', + 'netflow.dot1q_customer_vlan_id': { + category: 'netflow', + name: 'netflow.dot1q_customer_vlan_id', + type: 'integer', }, - 'suricata.eve.alert.signature': { - category: 'suricata', - name: 'suricata.eve.alert.signature', - type: 'keyword', + 'netflow.dot1q_dei': { + category: 'netflow', + name: 'netflow.dot1q_dei', + type: 'boolean', }, - 'suricata.eve.alert.action': { - category: 'suricata', - name: 'suricata.eve.alert.action', - type: 'alias', + 'netflow.dot1q_priority': { + category: 'netflow', + name: 'netflow.dot1q_priority', + type: 'short', }, - 'suricata.eve.alert.signature_id': { - category: 'suricata', - name: 'suricata.eve.alert.signature_id', + 'netflow.dot1q_service_instance_id': { + category: 'netflow', + name: 'netflow.dot1q_service_instance_id', type: 'long', }, - 'suricata.eve.ssh.client.proto_version': { - category: 'suricata', - name: 'suricata.eve.ssh.client.proto_version', - type: 'keyword', - }, - 'suricata.eve.ssh.client.software_version': { - category: 'suricata', - name: 'suricata.eve.ssh.client.software_version', - type: 'keyword', + 'netflow.dot1q_service_instance_priority': { + category: 'netflow', + name: 'netflow.dot1q_service_instance_priority', + type: 'short', }, - 'suricata.eve.ssh.server.proto_version': { - category: 'suricata', - name: 'suricata.eve.ssh.server.proto_version', - type: 'keyword', + 'netflow.dot1q_service_instance_tag': { + category: 'netflow', + name: 'netflow.dot1q_service_instance_tag', + type: 'short', }, - 'suricata.eve.ssh.server.software_version': { - category: 'suricata', - name: 'suricata.eve.ssh.server.software_version', - type: 'keyword', + 'netflow.dot1q_vlan_id': { + category: 'netflow', + name: 'netflow.dot1q_vlan_id', + type: 'integer', }, - 'suricata.eve.stats.capture.kernel_packets': { - category: 'suricata', - name: 'suricata.eve.stats.capture.kernel_packets', + 'netflow.dropped_layer2_octet_delta_count': { + category: 'netflow', + name: 'netflow.dropped_layer2_octet_delta_count', type: 'long', }, - 'suricata.eve.stats.capture.kernel_drops': { - category: 'suricata', - name: 'suricata.eve.stats.capture.kernel_drops', + 'netflow.dropped_layer2_octet_total_count': { + category: 'netflow', + name: 'netflow.dropped_layer2_octet_total_count', type: 'long', }, - 'suricata.eve.stats.capture.kernel_ifdrops': { - category: 'suricata', - name: 'suricata.eve.stats.capture.kernel_ifdrops', + 'netflow.dropped_octet_delta_count': { + category: 'netflow', + name: 'netflow.dropped_octet_delta_count', type: 'long', }, - 'suricata.eve.stats.uptime': { - category: 'suricata', - name: 'suricata.eve.stats.uptime', + 'netflow.dropped_octet_total_count': { + category: 'netflow', + name: 'netflow.dropped_octet_total_count', type: 'long', }, - 'suricata.eve.stats.detect.alert': { - category: 'suricata', - name: 'suricata.eve.stats.detect.alert', + 'netflow.dropped_packet_delta_count': { + category: 'netflow', + name: 'netflow.dropped_packet_delta_count', type: 'long', }, - 'suricata.eve.stats.http.memcap': { - category: 'suricata', - name: 'suricata.eve.stats.http.memcap', + 'netflow.dropped_packet_total_count': { + category: 'netflow', + name: 'netflow.dropped_packet_total_count', type: 'long', }, - 'suricata.eve.stats.http.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.http.memuse', + 'netflow.dst_traffic_index': { + category: 'netflow', + name: 'netflow.dst_traffic_index', type: 'long', }, - 'suricata.eve.stats.file_store.open_files': { - category: 'suricata', - name: 'suricata.eve.stats.file_store.open_files', + 'netflow.egress_broadcast_packet_total_count': { + category: 'netflow', + name: 'netflow.egress_broadcast_packet_total_count', type: 'long', }, - 'suricata.eve.stats.defrag.max_frag_hits': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.max_frag_hits', + 'netflow.egress_interface': { + category: 'netflow', + name: 'netflow.egress_interface', type: 'long', }, - 'suricata.eve.stats.defrag.ipv4.timeouts': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv4.timeouts', + 'netflow.egress_interface_type': { + category: 'netflow', + name: 'netflow.egress_interface_type', type: 'long', }, - 'suricata.eve.stats.defrag.ipv4.fragments': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv4.fragments', + 'netflow.egress_physical_interface': { + category: 'netflow', + name: 'netflow.egress_physical_interface', type: 'long', }, - 'suricata.eve.stats.defrag.ipv4.reassembled': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv4.reassembled', + 'netflow.egress_unicast_packet_total_count': { + category: 'netflow', + name: 'netflow.egress_unicast_packet_total_count', type: 'long', }, - 'suricata.eve.stats.defrag.ipv6.timeouts': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv6.timeouts', + 'netflow.egress_vrfid': { + category: 'netflow', + name: 'netflow.egress_vrfid', type: 'long', }, - 'suricata.eve.stats.defrag.ipv6.fragments': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv6.fragments', - type: 'long', + 'netflow.encrypted_technology': { + category: 'netflow', + name: 'netflow.encrypted_technology', + type: 'keyword', }, - 'suricata.eve.stats.defrag.ipv6.reassembled': { - category: 'suricata', - name: 'suricata.eve.stats.defrag.ipv6.reassembled', - type: 'long', + 'netflow.engine_id': { + category: 'netflow', + name: 'netflow.engine_id', + type: 'short', }, - 'suricata.eve.stats.flow.tcp_reuse': { - category: 'suricata', - name: 'suricata.eve.stats.flow.tcp_reuse', - type: 'long', + 'netflow.engine_type': { + category: 'netflow', + name: 'netflow.engine_type', + type: 'short', }, - 'suricata.eve.stats.flow.udp': { - category: 'suricata', - name: 'suricata.eve.stats.flow.udp', - type: 'long', + 'netflow.ethernet_header_length': { + category: 'netflow', + name: 'netflow.ethernet_header_length', + type: 'short', }, - 'suricata.eve.stats.flow.memcap': { - category: 'suricata', - name: 'suricata.eve.stats.flow.memcap', - type: 'long', + 'netflow.ethernet_payload_length': { + category: 'netflow', + name: 'netflow.ethernet_payload_length', + type: 'integer', }, - 'suricata.eve.stats.flow.emerg_mode_entered': { - category: 'suricata', - name: 'suricata.eve.stats.flow.emerg_mode_entered', - type: 'long', + 'netflow.ethernet_total_length': { + category: 'netflow', + name: 'netflow.ethernet_total_length', + type: 'integer', }, - 'suricata.eve.stats.flow.emerg_mode_over': { - category: 'suricata', - name: 'suricata.eve.stats.flow.emerg_mode_over', - type: 'long', + 'netflow.ethernet_type': { + category: 'netflow', + name: 'netflow.ethernet_type', + type: 'integer', }, - 'suricata.eve.stats.flow.tcp': { - category: 'suricata', - name: 'suricata.eve.stats.flow.tcp', + 'netflow.expired_fragment_count': { + category: 'netflow', + name: 'netflow.expired_fragment_count', type: 'long', }, - 'suricata.eve.stats.flow.icmpv6': { - category: 'suricata', - name: 'suricata.eve.stats.flow.icmpv6', + 'netflow.export_interface': { + category: 'netflow', + name: 'netflow.export_interface', type: 'long', }, - 'suricata.eve.stats.flow.icmpv4': { - category: 'suricata', - name: 'suricata.eve.stats.flow.icmpv4', - type: 'long', + 'netflow.export_protocol_version': { + category: 'netflow', + name: 'netflow.export_protocol_version', + type: 'short', }, - 'suricata.eve.stats.flow.spare': { - category: 'suricata', - name: 'suricata.eve.stats.flow.spare', + 'netflow.export_sctp_stream_id': { + category: 'netflow', + name: 'netflow.export_sctp_stream_id', + type: 'integer', + }, + 'netflow.export_transport_protocol': { + category: 'netflow', + name: 'netflow.export_transport_protocol', + type: 'short', + }, + 'netflow.exported_flow_record_total_count': { + category: 'netflow', + name: 'netflow.exported_flow_record_total_count', type: 'long', }, - 'suricata.eve.stats.flow.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.flow.memuse', + 'netflow.exported_message_total_count': { + category: 'netflow', + name: 'netflow.exported_message_total_count', type: 'long', }, - 'suricata.eve.stats.tcp.pseudo_failed': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.pseudo_failed', + 'netflow.exported_octet_total_count': { + category: 'netflow', + name: 'netflow.exported_octet_total_count', type: 'long', }, - 'suricata.eve.stats.tcp.ssn_memcap_drop': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.ssn_memcap_drop', + 'netflow.exporter_certificate': { + category: 'netflow', + name: 'netflow.exporter_certificate', + type: 'short', + }, + 'netflow.exporter_ipv4_address': { + category: 'netflow', + name: 'netflow.exporter_ipv4_address', + type: 'ip', + }, + 'netflow.exporter_ipv6_address': { + category: 'netflow', + name: 'netflow.exporter_ipv6_address', + type: 'ip', + }, + 'netflow.exporter_transport_port': { + category: 'netflow', + name: 'netflow.exporter_transport_port', + type: 'integer', + }, + 'netflow.exporting_process_id': { + category: 'netflow', + name: 'netflow.exporting_process_id', type: 'long', }, - 'suricata.eve.stats.tcp.insert_data_overlap_fail': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.insert_data_overlap_fail', + 'netflow.external_address_realm': { + category: 'netflow', + name: 'netflow.external_address_realm', + type: 'short', + }, + 'netflow.firewall_event': { + category: 'netflow', + name: 'netflow.firewall_event', + type: 'short', + }, + 'netflow.first_eight_non_empty_packet_directions': { + category: 'netflow', + name: 'netflow.first_eight_non_empty_packet_directions', + type: 'short', + }, + 'netflow.first_non_empty_packet_size': { + category: 'netflow', + name: 'netflow.first_non_empty_packet_size', + type: 'integer', + }, + 'netflow.first_packet_banner': { + category: 'netflow', + name: 'netflow.first_packet_banner', + type: 'keyword', + }, + 'netflow.flags_and_sampler_id': { + category: 'netflow', + name: 'netflow.flags_and_sampler_id', type: 'long', }, - 'suricata.eve.stats.tcp.sessions': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.sessions', + 'netflow.flow_active_timeout': { + category: 'netflow', + name: 'netflow.flow_active_timeout', + type: 'integer', + }, + 'netflow.flow_attributes': { + category: 'netflow', + name: 'netflow.flow_attributes', + type: 'integer', + }, + 'netflow.flow_direction': { + category: 'netflow', + name: 'netflow.flow_direction', + type: 'short', + }, + 'netflow.flow_duration_microseconds': { + category: 'netflow', + name: 'netflow.flow_duration_microseconds', type: 'long', }, - 'suricata.eve.stats.tcp.pseudo': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.pseudo', + 'netflow.flow_duration_milliseconds': { + category: 'netflow', + name: 'netflow.flow_duration_milliseconds', type: 'long', }, - 'suricata.eve.stats.tcp.synack': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.synack', + 'netflow.flow_end_delta_microseconds': { + category: 'netflow', + name: 'netflow.flow_end_delta_microseconds', type: 'long', }, - 'suricata.eve.stats.tcp.insert_data_normal_fail': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.insert_data_normal_fail', + 'netflow.flow_end_microseconds': { + category: 'netflow', + name: 'netflow.flow_end_microseconds', + type: 'date', + }, + 'netflow.flow_end_milliseconds': { + category: 'netflow', + name: 'netflow.flow_end_milliseconds', + type: 'date', + }, + 'netflow.flow_end_nanoseconds': { + category: 'netflow', + name: 'netflow.flow_end_nanoseconds', + type: 'date', + }, + 'netflow.flow_end_reason': { + category: 'netflow', + name: 'netflow.flow_end_reason', + type: 'short', + }, + 'netflow.flow_end_seconds': { + category: 'netflow', + name: 'netflow.flow_end_seconds', + type: 'date', + }, + 'netflow.flow_end_sys_up_time': { + category: 'netflow', + name: 'netflow.flow_end_sys_up_time', type: 'long', }, - 'suricata.eve.stats.tcp.syn': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.syn', + 'netflow.flow_id': { + category: 'netflow', + name: 'netflow.flow_id', type: 'long', }, - 'suricata.eve.stats.tcp.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.memuse', + 'netflow.flow_idle_timeout': { + category: 'netflow', + name: 'netflow.flow_idle_timeout', + type: 'integer', + }, + 'netflow.flow_key_indicator': { + category: 'netflow', + name: 'netflow.flow_key_indicator', type: 'long', }, - 'suricata.eve.stats.tcp.invalid_checksum': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.invalid_checksum', + 'netflow.flow_label_ipv6': { + category: 'netflow', + name: 'netflow.flow_label_ipv6', type: 'long', }, - 'suricata.eve.stats.tcp.segment_memcap_drop': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.segment_memcap_drop', + 'netflow.flow_sampling_time_interval': { + category: 'netflow', + name: 'netflow.flow_sampling_time_interval', type: 'long', }, - 'suricata.eve.stats.tcp.overlap': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.overlap', + 'netflow.flow_sampling_time_spacing': { + category: 'netflow', + name: 'netflow.flow_sampling_time_spacing', type: 'long', }, - 'suricata.eve.stats.tcp.insert_list_fail': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.insert_list_fail', + 'netflow.flow_selected_flow_delta_count': { + category: 'netflow', + name: 'netflow.flow_selected_flow_delta_count', type: 'long', }, - 'suricata.eve.stats.tcp.rst': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.rst', + 'netflow.flow_selected_octet_delta_count': { + category: 'netflow', + name: 'netflow.flow_selected_octet_delta_count', type: 'long', }, - 'suricata.eve.stats.tcp.stream_depth_reached': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.stream_depth_reached', + 'netflow.flow_selected_packet_delta_count': { + category: 'netflow', + name: 'netflow.flow_selected_packet_delta_count', type: 'long', }, - 'suricata.eve.stats.tcp.reassembly_memuse': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.reassembly_memuse', - type: 'long', + 'netflow.flow_selector_algorithm': { + category: 'netflow', + name: 'netflow.flow_selector_algorithm', + type: 'integer', }, - 'suricata.eve.stats.tcp.reassembly_gap': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.reassembly_gap', + 'netflow.flow_start_delta_microseconds': { + category: 'netflow', + name: 'netflow.flow_start_delta_microseconds', type: 'long', }, - 'suricata.eve.stats.tcp.overlap_diff_data': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.overlap_diff_data', - type: 'long', + 'netflow.flow_start_microseconds': { + category: 'netflow', + name: 'netflow.flow_start_microseconds', + type: 'date', }, - 'suricata.eve.stats.tcp.no_flow': { - category: 'suricata', - name: 'suricata.eve.stats.tcp.no_flow', - type: 'long', + 'netflow.flow_start_milliseconds': { + category: 'netflow', + name: 'netflow.flow_start_milliseconds', + type: 'date', }, - 'suricata.eve.stats.decoder.avg_pkt_size': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.avg_pkt_size', - type: 'long', + 'netflow.flow_start_nanoseconds': { + category: 'netflow', + name: 'netflow.flow_start_nanoseconds', + type: 'date', }, - 'suricata.eve.stats.decoder.bytes': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.bytes', - type: 'long', + 'netflow.flow_start_seconds': { + category: 'netflow', + name: 'netflow.flow_start_seconds', + type: 'date', }, - 'suricata.eve.stats.decoder.tcp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.tcp', + 'netflow.flow_start_sys_up_time': { + category: 'netflow', + name: 'netflow.flow_start_sys_up_time', type: 'long', }, - 'suricata.eve.stats.decoder.raw': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.raw', + 'netflow.flow_table_flush_event_count': { + category: 'netflow', + name: 'netflow.flow_table_flush_event_count', type: 'long', }, - 'suricata.eve.stats.decoder.ppp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ppp', + 'netflow.flow_table_peak_count': { + category: 'netflow', + name: 'netflow.flow_table_peak_count', type: 'long', }, - 'suricata.eve.stats.decoder.vlan_qinq': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.vlan_qinq', - type: 'long', + 'netflow.forwarding_status': { + category: 'netflow', + name: 'netflow.forwarding_status', + type: 'short', }, - 'suricata.eve.stats.decoder.null': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.null', - type: 'long', + 'netflow.fragment_flags': { + category: 'netflow', + name: 'netflow.fragment_flags', + type: 'short', }, - 'suricata.eve.stats.decoder.ltnull.unsupported_type': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ltnull.unsupported_type', + 'netflow.fragment_identification': { + category: 'netflow', + name: 'netflow.fragment_identification', type: 'long', }, - 'suricata.eve.stats.decoder.ltnull.pkt_too_small': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ltnull.pkt_too_small', - type: 'long', + 'netflow.fragment_offset': { + category: 'netflow', + name: 'netflow.fragment_offset', + type: 'integer', }, - 'suricata.eve.stats.decoder.invalid': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.invalid', + 'netflow.fw_blackout_secs': { + category: 'netflow', + name: 'netflow.fw_blackout_secs', type: 'long', }, - 'suricata.eve.stats.decoder.gre': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.gre', + 'netflow.fw_configured_value': { + category: 'netflow', + name: 'netflow.fw_configured_value', type: 'long', }, - 'suricata.eve.stats.decoder.ipv4': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv4', + 'netflow.fw_cts_src_sgt': { + category: 'netflow', + name: 'netflow.fw_cts_src_sgt', type: 'long', }, - 'suricata.eve.stats.decoder.ipv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv6', + 'netflow.fw_event_level': { + category: 'netflow', + name: 'netflow.fw_event_level', type: 'long', }, - 'suricata.eve.stats.decoder.pkts': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.pkts', + 'netflow.fw_event_level_id': { + category: 'netflow', + name: 'netflow.fw_event_level_id', type: 'long', }, - 'suricata.eve.stats.decoder.ipv6_in_ipv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv6_in_ipv6', - type: 'long', + 'netflow.fw_ext_event': { + category: 'netflow', + name: 'netflow.fw_ext_event', + type: 'integer', }, - 'suricata.eve.stats.decoder.ipraw.invalid_ip_version': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipraw.invalid_ip_version', + 'netflow.fw_ext_event_alt': { + category: 'netflow', + name: 'netflow.fw_ext_event_alt', type: 'long', }, - 'suricata.eve.stats.decoder.pppoe': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.pppoe', - type: 'long', + 'netflow.fw_ext_event_desc': { + category: 'netflow', + name: 'netflow.fw_ext_event_desc', + type: 'keyword', }, - 'suricata.eve.stats.decoder.udp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.udp', + 'netflow.fw_half_open_count': { + category: 'netflow', + name: 'netflow.fw_half_open_count', type: 'long', }, - 'suricata.eve.stats.decoder.dce.pkt_too_small': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.dce.pkt_too_small', + 'netflow.fw_half_open_high': { + category: 'netflow', + name: 'netflow.fw_half_open_high', type: 'long', }, - 'suricata.eve.stats.decoder.vlan': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.vlan', + 'netflow.fw_half_open_rate': { + category: 'netflow', + name: 'netflow.fw_half_open_rate', type: 'long', }, - 'suricata.eve.stats.decoder.sctp': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.sctp', + 'netflow.fw_max_sessions': { + category: 'netflow', + name: 'netflow.fw_max_sessions', type: 'long', }, - 'suricata.eve.stats.decoder.max_pkt_size': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.max_pkt_size', - type: 'long', + 'netflow.fw_rule': { + category: 'netflow', + name: 'netflow.fw_rule', + type: 'keyword', }, - 'suricata.eve.stats.decoder.teredo': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.teredo', + 'netflow.fw_summary_pkt_count': { + category: 'netflow', + name: 'netflow.fw_summary_pkt_count', type: 'long', }, - 'suricata.eve.stats.decoder.mpls': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.mpls', + 'netflow.fw_zone_pair_id': { + category: 'netflow', + name: 'netflow.fw_zone_pair_id', type: 'long', }, - 'suricata.eve.stats.decoder.sll': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.sll', + 'netflow.fw_zone_pair_name': { + category: 'netflow', + name: 'netflow.fw_zone_pair_name', type: 'long', }, - 'suricata.eve.stats.decoder.icmpv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.icmpv6', + 'netflow.global_address_mapping_high_threshold': { + category: 'netflow', + name: 'netflow.global_address_mapping_high_threshold', type: 'long', }, - 'suricata.eve.stats.decoder.icmpv4': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.icmpv4', + 'netflow.gre_key': { + category: 'netflow', + name: 'netflow.gre_key', type: 'long', }, - 'suricata.eve.stats.decoder.erspan': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.erspan', - type: 'long', + 'netflow.hash_digest_output': { + category: 'netflow', + name: 'netflow.hash_digest_output', + type: 'boolean', }, - 'suricata.eve.stats.decoder.ethernet': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ethernet', - type: 'long', + 'netflow.hash_flow_domain': { + category: 'netflow', + name: 'netflow.hash_flow_domain', + type: 'integer', }, - 'suricata.eve.stats.decoder.ipv4_in_ipv6': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ipv4_in_ipv6', + 'netflow.hash_initialiser_value': { + category: 'netflow', + name: 'netflow.hash_initialiser_value', type: 'long', }, - 'suricata.eve.stats.decoder.ieee8021ah': { - category: 'suricata', - name: 'suricata.eve.stats.decoder.ieee8021ah', + 'netflow.hash_ip_payload_offset': { + category: 'netflow', + name: 'netflow.hash_ip_payload_offset', type: 'long', }, - 'suricata.eve.stats.dns.memcap_global': { - category: 'suricata', - name: 'suricata.eve.stats.dns.memcap_global', + 'netflow.hash_ip_payload_size': { + category: 'netflow', + name: 'netflow.hash_ip_payload_size', type: 'long', }, - 'suricata.eve.stats.dns.memcap_state': { - category: 'suricata', - name: 'suricata.eve.stats.dns.memcap_state', + 'netflow.hash_output_range_max': { + category: 'netflow', + name: 'netflow.hash_output_range_max', type: 'long', }, - 'suricata.eve.stats.dns.memuse': { - category: 'suricata', - name: 'suricata.eve.stats.dns.memuse', + 'netflow.hash_output_range_min': { + category: 'netflow', + name: 'netflow.hash_output_range_min', type: 'long', }, - 'suricata.eve.stats.flow_mgr.rows_busy': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_busy', + 'netflow.hash_selected_range_max': { + category: 'netflow', + name: 'netflow.hash_selected_range_max', type: 'long', }, - 'suricata.eve.stats.flow_mgr.flows_timeout': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_timeout', + 'netflow.hash_selected_range_min': { + category: 'netflow', + name: 'netflow.hash_selected_range_min', type: 'long', }, - 'suricata.eve.stats.flow_mgr.flows_notimeout': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_notimeout', - type: 'long', + 'netflow.http_content_type': { + category: 'netflow', + name: 'netflow.http_content_type', + type: 'keyword', }, - 'suricata.eve.stats.flow_mgr.rows_skipped': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_skipped', - type: 'long', + 'netflow.http_message_version': { + category: 'netflow', + name: 'netflow.http_message_version', + type: 'keyword', }, - 'suricata.eve.stats.flow_mgr.closed_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.closed_pruned', - type: 'long', + 'netflow.http_reason_phrase': { + category: 'netflow', + name: 'netflow.http_reason_phrase', + type: 'keyword', }, - 'suricata.eve.stats.flow_mgr.new_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.new_pruned', - type: 'long', + 'netflow.http_request_host': { + category: 'netflow', + name: 'netflow.http_request_host', + type: 'keyword', }, - 'suricata.eve.stats.flow_mgr.flows_removed': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_removed', - type: 'long', + 'netflow.http_request_method': { + category: 'netflow', + name: 'netflow.http_request_method', + type: 'keyword', }, - 'suricata.eve.stats.flow_mgr.bypassed_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.bypassed_pruned', - type: 'long', + 'netflow.http_request_target': { + category: 'netflow', + name: 'netflow.http_request_target', + type: 'keyword', }, - 'suricata.eve.stats.flow_mgr.est_pruned': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.est_pruned', - type: 'long', + 'netflow.http_status_code': { + category: 'netflow', + name: 'netflow.http_status_code', + type: 'integer', }, - 'suricata.eve.stats.flow_mgr.flows_timeout_inuse': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_timeout_inuse', - type: 'long', + 'netflow.http_user_agent': { + category: 'netflow', + name: 'netflow.http_user_agent', + type: 'keyword', }, - 'suricata.eve.stats.flow_mgr.flows_checked': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.flows_checked', - type: 'long', + 'netflow.icmp_code_ipv4': { + category: 'netflow', + name: 'netflow.icmp_code_ipv4', + type: 'short', }, - 'suricata.eve.stats.flow_mgr.rows_maxlen': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_maxlen', - type: 'long', + 'netflow.icmp_code_ipv6': { + category: 'netflow', + name: 'netflow.icmp_code_ipv6', + type: 'short', }, - 'suricata.eve.stats.flow_mgr.rows_checked': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_checked', - type: 'long', + 'netflow.icmp_type_code_ipv4': { + category: 'netflow', + name: 'netflow.icmp_type_code_ipv4', + type: 'integer', }, - 'suricata.eve.stats.flow_mgr.rows_empty': { - category: 'suricata', - name: 'suricata.eve.stats.flow_mgr.rows_empty', - type: 'long', + 'netflow.icmp_type_code_ipv6': { + category: 'netflow', + name: 'netflow.icmp_type_code_ipv6', + type: 'integer', }, - 'suricata.eve.stats.app_layer.flow.tls': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.tls', - type: 'long', + 'netflow.icmp_type_ipv4': { + category: 'netflow', + name: 'netflow.icmp_type_ipv4', + type: 'short', }, - 'suricata.eve.stats.app_layer.flow.ftp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.ftp', - type: 'long', + 'netflow.icmp_type_ipv6': { + category: 'netflow', + name: 'netflow.icmp_type_ipv6', + type: 'short', }, - 'suricata.eve.stats.app_layer.flow.http': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.http', - type: 'long', + 'netflow.igmp_type': { + category: 'netflow', + name: 'netflow.igmp_type', + type: 'short', }, - 'suricata.eve.stats.app_layer.flow.failed_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.failed_udp', + 'netflow.ignored_data_record_total_count': { + category: 'netflow', + name: 'netflow.ignored_data_record_total_count', type: 'long', }, - 'suricata.eve.stats.app_layer.flow.dns_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dns_udp', + 'netflow.ignored_layer2_frame_total_count': { + category: 'netflow', + name: 'netflow.ignored_layer2_frame_total_count', type: 'long', }, - 'suricata.eve.stats.app_layer.flow.dns_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dns_tcp', + 'netflow.ignored_layer2_octet_total_count': { + category: 'netflow', + name: 'netflow.ignored_layer2_octet_total_count', type: 'long', }, - 'suricata.eve.stats.app_layer.flow.smtp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.smtp', + 'netflow.ignored_octet_total_count': { + category: 'netflow', + name: 'netflow.ignored_octet_total_count', type: 'long', }, - 'suricata.eve.stats.app_layer.flow.failed_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.failed_tcp', + 'netflow.ignored_packet_total_count': { + category: 'netflow', + name: 'netflow.ignored_packet_total_count', type: 'long', }, - 'suricata.eve.stats.app_layer.flow.msn': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.msn', - type: 'long', + 'netflow.information_element_data_type': { + category: 'netflow', + name: 'netflow.information_element_data_type', + type: 'short', }, - 'suricata.eve.stats.app_layer.flow.ssh': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.ssh', - type: 'long', + 'netflow.information_element_description': { + category: 'netflow', + name: 'netflow.information_element_description', + type: 'keyword', }, - 'suricata.eve.stats.app_layer.flow.imap': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.imap', - type: 'long', + 'netflow.information_element_id': { + category: 'netflow', + name: 'netflow.information_element_id', + type: 'integer', }, - 'suricata.eve.stats.app_layer.flow.dcerpc_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dcerpc_udp', - type: 'long', + 'netflow.information_element_index': { + category: 'netflow', + name: 'netflow.information_element_index', + type: 'integer', }, - 'suricata.eve.stats.app_layer.flow.dcerpc_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.dcerpc_tcp', - type: 'long', + 'netflow.information_element_name': { + category: 'netflow', + name: 'netflow.information_element_name', + type: 'keyword', }, - 'suricata.eve.stats.app_layer.flow.smb': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.flow.smb', + 'netflow.information_element_range_begin': { + category: 'netflow', + name: 'netflow.information_element_range_begin', type: 'long', }, - 'suricata.eve.stats.app_layer.tx.tls': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.tls', + 'netflow.information_element_range_end': { + category: 'netflow', + name: 'netflow.information_element_range_end', type: 'long', }, - 'suricata.eve.stats.app_layer.tx.ftp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.ftp', - type: 'long', + 'netflow.information_element_semantics': { + category: 'netflow', + name: 'netflow.information_element_semantics', + type: 'short', }, - 'suricata.eve.stats.app_layer.tx.http': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.http', + 'netflow.information_element_units': { + category: 'netflow', + name: 'netflow.information_element_units', + type: 'integer', + }, + 'netflow.ingress_broadcast_packet_total_count': { + category: 'netflow', + name: 'netflow.ingress_broadcast_packet_total_count', type: 'long', }, - 'suricata.eve.stats.app_layer.tx.dns_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dns_udp', + 'netflow.ingress_interface': { + category: 'netflow', + name: 'netflow.ingress_interface', type: 'long', }, - 'suricata.eve.stats.app_layer.tx.dns_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dns_tcp', + 'netflow.ingress_interface_type': { + category: 'netflow', + name: 'netflow.ingress_interface_type', type: 'long', }, - 'suricata.eve.stats.app_layer.tx.smtp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.smtp', + 'netflow.ingress_multicast_packet_total_count': { + category: 'netflow', + name: 'netflow.ingress_multicast_packet_total_count', type: 'long', }, - 'suricata.eve.stats.app_layer.tx.ssh': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.ssh', + 'netflow.ingress_physical_interface': { + category: 'netflow', + name: 'netflow.ingress_physical_interface', type: 'long', }, - 'suricata.eve.stats.app_layer.tx.dcerpc_udp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dcerpc_udp', + 'netflow.ingress_unicast_packet_total_count': { + category: 'netflow', + name: 'netflow.ingress_unicast_packet_total_count', type: 'long', }, - 'suricata.eve.stats.app_layer.tx.dcerpc_tcp': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.dcerpc_tcp', + 'netflow.ingress_vrfid': { + category: 'netflow', + name: 'netflow.ingress_vrfid', type: 'long', }, - 'suricata.eve.stats.app_layer.tx.smb': { - category: 'suricata', - name: 'suricata.eve.stats.app_layer.tx.smb', + 'netflow.initial_tcp_flags': { + category: 'netflow', + name: 'netflow.initial_tcp_flags', + type: 'short', + }, + 'netflow.initiator_octets': { + category: 'netflow', + name: 'netflow.initiator_octets', type: 'long', }, - 'suricata.eve.tls.notbefore': { - category: 'suricata', - name: 'suricata.eve.tls.notbefore', - type: 'date', + 'netflow.initiator_packets': { + category: 'netflow', + name: 'netflow.initiator_packets', + type: 'long', }, - 'suricata.eve.tls.issuerdn': { - category: 'suricata', - name: 'suricata.eve.tls.issuerdn', + 'netflow.interface_description': { + category: 'netflow', + name: 'netflow.interface_description', type: 'keyword', }, - 'suricata.eve.tls.sni': { - category: 'suricata', - name: 'suricata.eve.tls.sni', + 'netflow.interface_name': { + category: 'netflow', + name: 'netflow.interface_name', type: 'keyword', }, - 'suricata.eve.tls.version': { - category: 'suricata', - name: 'suricata.eve.tls.version', - type: 'keyword', + 'netflow.intermediate_process_id': { + category: 'netflow', + name: 'netflow.intermediate_process_id', + type: 'long', }, - 'suricata.eve.tls.session_resumed': { - category: 'suricata', - name: 'suricata.eve.tls.session_resumed', - type: 'boolean', + 'netflow.internal_address_realm': { + category: 'netflow', + name: 'netflow.internal_address_realm', + type: 'short', }, - 'suricata.eve.tls.fingerprint': { - category: 'suricata', - name: 'suricata.eve.tls.fingerprint', - type: 'keyword', + 'netflow.ip_class_of_service': { + category: 'netflow', + name: 'netflow.ip_class_of_service', + type: 'short', }, - 'suricata.eve.tls.serial': { - category: 'suricata', - name: 'suricata.eve.tls.serial', - type: 'keyword', + 'netflow.ip_diff_serv_code_point': { + category: 'netflow', + name: 'netflow.ip_diff_serv_code_point', + type: 'short', }, - 'suricata.eve.tls.notafter': { - category: 'suricata', - name: 'suricata.eve.tls.notafter', - type: 'date', + 'netflow.ip_header_length': { + category: 'netflow', + name: 'netflow.ip_header_length', + type: 'short', }, - 'suricata.eve.tls.subject': { - category: 'suricata', - name: 'suricata.eve.tls.subject', - type: 'keyword', + 'netflow.ip_header_packet_section': { + category: 'netflow', + name: 'netflow.ip_header_packet_section', + type: 'short', }, - 'suricata.eve.tls.ja3s.string': { - category: 'suricata', - name: 'suricata.eve.tls.ja3s.string', - type: 'keyword', + 'netflow.ip_next_hop_ipv4_address': { + category: 'netflow', + name: 'netflow.ip_next_hop_ipv4_address', + type: 'ip', }, - 'suricata.eve.tls.ja3s.hash': { - category: 'suricata', - name: 'suricata.eve.tls.ja3s.hash', - type: 'keyword', + 'netflow.ip_next_hop_ipv6_address': { + category: 'netflow', + name: 'netflow.ip_next_hop_ipv6_address', + type: 'ip', }, - 'suricata.eve.tls.ja3.string': { - category: 'suricata', - name: 'suricata.eve.tls.ja3.string', - type: 'keyword', + 'netflow.ip_payload_length': { + category: 'netflow', + name: 'netflow.ip_payload_length', + type: 'long', }, - 'suricata.eve.tls.ja3.hash': { - category: 'suricata', - name: 'suricata.eve.tls.ja3.hash', - type: 'keyword', + 'netflow.ip_payload_packet_section': { + category: 'netflow', + name: 'netflow.ip_payload_packet_section', + type: 'short', }, - 'suricata.eve.app_proto_ts': { - category: 'suricata', - name: 'suricata.eve.app_proto_ts', - type: 'keyword', + 'netflow.ip_precedence': { + category: 'netflow', + name: 'netflow.ip_precedence', + type: 'short', }, - 'suricata.eve.flow.bytes_toclient': { - category: 'suricata', - name: 'suricata.eve.flow.bytes_toclient', - type: 'alias', + 'netflow.ip_sec_spi': { + category: 'netflow', + name: 'netflow.ip_sec_spi', + type: 'long', }, - 'suricata.eve.flow.start': { - category: 'suricata', - name: 'suricata.eve.flow.start', - type: 'alias', + 'netflow.ip_total_length': { + category: 'netflow', + name: 'netflow.ip_total_length', + type: 'long', }, - 'suricata.eve.flow.pkts_toclient': { - category: 'suricata', - name: 'suricata.eve.flow.pkts_toclient', - type: 'alias', + 'netflow.ip_ttl': { + category: 'netflow', + name: 'netflow.ip_ttl', + type: 'short', }, - 'suricata.eve.flow.age': { - category: 'suricata', - name: 'suricata.eve.flow.age', - type: 'long', + 'netflow.ip_version': { + category: 'netflow', + name: 'netflow.ip_version', + type: 'short', }, - 'suricata.eve.flow.state': { - category: 'suricata', - name: 'suricata.eve.flow.state', - type: 'keyword', + 'netflow.ipv4_ihl': { + category: 'netflow', + name: 'netflow.ipv4_ihl', + type: 'short', }, - 'suricata.eve.flow.bytes_toserver': { - category: 'suricata', - name: 'suricata.eve.flow.bytes_toserver', - type: 'alias', + 'netflow.ipv4_options': { + category: 'netflow', + name: 'netflow.ipv4_options', + type: 'long', }, - 'suricata.eve.flow.reason': { - category: 'suricata', - name: 'suricata.eve.flow.reason', - type: 'keyword', + 'netflow.ipv4_router_sc': { + category: 'netflow', + name: 'netflow.ipv4_router_sc', + type: 'ip', }, - 'suricata.eve.flow.pkts_toserver': { - category: 'suricata', - name: 'suricata.eve.flow.pkts_toserver', - type: 'alias', + 'netflow.ipv6_extension_headers': { + category: 'netflow', + name: 'netflow.ipv6_extension_headers', + type: 'long', }, - 'suricata.eve.flow.end': { - category: 'suricata', - name: 'suricata.eve.flow.end', - type: 'date', + 'netflow.is_multicast': { + category: 'netflow', + name: 'netflow.is_multicast', + type: 'short', }, - 'suricata.eve.flow.alerted': { - category: 'suricata', - name: 'suricata.eve.flow.alerted', - type: 'boolean', + 'netflow.ixia_browser_id': { + category: 'netflow', + name: 'netflow.ixia_browser_id', + type: 'short', }, - 'suricata.eve.app_proto': { - category: 'suricata', - name: 'suricata.eve.app_proto', - type: 'alias', + 'netflow.ixia_browser_name': { + category: 'netflow', + name: 'netflow.ixia_browser_name', + type: 'keyword', }, - 'suricata.eve.tx_id': { - category: 'suricata', - name: 'suricata.eve.tx_id', - type: 'long', + 'netflow.ixia_device_id': { + category: 'netflow', + name: 'netflow.ixia_device_id', + type: 'short', }, - 'suricata.eve.app_proto_tc': { - category: 'suricata', - name: 'suricata.eve.app_proto_tc', + 'netflow.ixia_device_name': { + category: 'netflow', + name: 'netflow.ixia_device_name', type: 'keyword', }, - 'suricata.eve.smtp.rcpt_to': { - category: 'suricata', - name: 'suricata.eve.smtp.rcpt_to', + 'netflow.ixia_dns_answer': { + category: 'netflow', + name: 'netflow.ixia_dns_answer', type: 'keyword', }, - 'suricata.eve.smtp.mail_from': { - category: 'suricata', - name: 'suricata.eve.smtp.mail_from', + 'netflow.ixia_dns_classes': { + category: 'netflow', + name: 'netflow.ixia_dns_classes', type: 'keyword', }, - 'suricata.eve.smtp.helo': { - category: 'suricata', - name: 'suricata.eve.smtp.helo', + 'netflow.ixia_dns_query': { + category: 'netflow', + name: 'netflow.ixia_dns_query', type: 'keyword', }, - 'suricata.eve.app_proto_expected': { - category: 'suricata', - name: 'suricata.eve.app_proto_expected', + 'netflow.ixia_dns_record_txt': { + category: 'netflow', + name: 'netflow.ixia_dns_record_txt', type: 'keyword', }, - 'suricata.eve.flags': { - category: 'suricata', - name: 'suricata.eve.flags', - type: 'group', + 'netflow.ixia_dst_as_name': { + category: 'netflow', + name: 'netflow.ixia_dst_as_name', + type: 'keyword', }, - 'zeek.session_id': { - category: 'zeek', - description: 'A unique identifier of the session ', - name: 'zeek.session_id', + 'netflow.ixia_dst_city_name': { + category: 'netflow', + name: 'netflow.ixia_dst_city_name', type: 'keyword', }, - 'zeek.capture_loss.ts_delta': { - category: 'zeek', - description: 'The time delay between this measurement and the last. ', - name: 'zeek.capture_loss.ts_delta', - type: 'integer', + 'netflow.ixia_dst_country_code': { + category: 'netflow', + name: 'netflow.ixia_dst_country_code', + type: 'keyword', }, - 'zeek.capture_loss.peer': { - category: 'zeek', - description: - 'In the event that there are multiple Bro instances logging to the same host, this distinguishes each peer with its individual name. ', - name: 'zeek.capture_loss.peer', + 'netflow.ixia_dst_country_name': { + category: 'netflow', + name: 'netflow.ixia_dst_country_name', type: 'keyword', }, - 'zeek.capture_loss.gaps': { - category: 'zeek', - description: 'Number of missed ACKs from the previous measurement interval. ', - name: 'zeek.capture_loss.gaps', - type: 'integer', + 'netflow.ixia_dst_latitude': { + category: 'netflow', + name: 'netflow.ixia_dst_latitude', + type: 'float', }, - 'zeek.capture_loss.acks': { - category: 'zeek', - description: 'Total number of ACKs seen in the previous measurement interval. ', - name: 'zeek.capture_loss.acks', - type: 'integer', + 'netflow.ixia_dst_longitude': { + category: 'netflow', + name: 'netflow.ixia_dst_longitude', + type: 'float', }, - 'zeek.capture_loss.percent_lost': { - category: 'zeek', - description: "Percentage of ACKs seen where the data being ACKed wasn't seen. ", - name: 'zeek.capture_loss.percent_lost', - type: 'double', + 'netflow.ixia_dst_region_code': { + category: 'netflow', + name: 'netflow.ixia_dst_region_code', + type: 'keyword', }, - 'zeek.connection.local_orig': { - category: 'zeek', - description: 'Indicates whether the session is originated locally. ', - name: 'zeek.connection.local_orig', - type: 'boolean', + 'netflow.ixia_dst_region_node': { + category: 'netflow', + name: 'netflow.ixia_dst_region_node', + type: 'keyword', }, - 'zeek.connection.local_resp': { - category: 'zeek', - description: 'Indicates whether the session is responded locally. ', - name: 'zeek.connection.local_resp', - type: 'boolean', + 'netflow.ixia_encrypt_cipher': { + category: 'netflow', + name: 'netflow.ixia_encrypt_cipher', + type: 'keyword', }, - 'zeek.connection.missed_bytes': { - category: 'zeek', - description: 'Missed bytes for the session. ', - name: 'zeek.connection.missed_bytes', - type: 'long', + 'netflow.ixia_encrypt_key_length': { + category: 'netflow', + name: 'netflow.ixia_encrypt_key_length', + type: 'integer', }, - 'zeek.connection.state': { - category: 'zeek', - description: 'Code indicating the state of the session. ', - name: 'zeek.connection.state', + 'netflow.ixia_encrypt_type': { + category: 'netflow', + name: 'netflow.ixia_encrypt_type', type: 'keyword', }, - 'zeek.connection.state_message': { - category: 'zeek', - description: 'The state of the session. ', - name: 'zeek.connection.state_message', + 'netflow.ixia_http_host_name': { + category: 'netflow', + name: 'netflow.ixia_http_host_name', type: 'keyword', }, - 'zeek.connection.icmp.type': { - category: 'zeek', - description: 'ICMP message type. ', - name: 'zeek.connection.icmp.type', - type: 'integer', + 'netflow.ixia_http_uri': { + category: 'netflow', + name: 'netflow.ixia_http_uri', + type: 'keyword', }, - 'zeek.connection.icmp.code': { - category: 'zeek', - description: 'ICMP message code. ', - name: 'zeek.connection.icmp.code', - type: 'integer', + 'netflow.ixia_http_user_agent': { + category: 'netflow', + name: 'netflow.ixia_http_user_agent', + type: 'keyword', }, - 'zeek.connection.history': { - category: 'zeek', - description: 'Flags indicating the history of the session. ', - name: 'zeek.connection.history', + 'netflow.ixia_imsi_subscriber': { + category: 'netflow', + name: 'netflow.ixia_imsi_subscriber', type: 'keyword', }, - 'zeek.connection.vlan': { - category: 'zeek', - description: 'VLAN identifier. ', - name: 'zeek.connection.vlan', - type: 'integer', + 'netflow.ixia_l7_app_id': { + category: 'netflow', + name: 'netflow.ixia_l7_app_id', + type: 'long', }, - 'zeek.connection.inner_vlan': { - category: 'zeek', - description: 'VLAN identifier. ', - name: 'zeek.connection.inner_vlan', - type: 'integer', + 'netflow.ixia_l7_app_name': { + category: 'netflow', + name: 'netflow.ixia_l7_app_name', + type: 'keyword', }, - 'zeek.dce_rpc.rtt': { - category: 'zeek', - description: - "Round trip time from the request to the response. If either the request or response wasn't seen, this will be null. ", - name: 'zeek.dce_rpc.rtt', - type: 'integer', + 'netflow.ixia_latency': { + category: 'netflow', + name: 'netflow.ixia_latency', + type: 'long', }, - 'zeek.dce_rpc.named_pipe': { - category: 'zeek', - description: 'Remote pipe name. ', - name: 'zeek.dce_rpc.named_pipe', - type: 'keyword', + 'netflow.ixia_rev_octet_delta_count': { + category: 'netflow', + name: 'netflow.ixia_rev_octet_delta_count', + type: 'long', }, - 'zeek.dce_rpc.endpoint': { - category: 'zeek', - description: 'Endpoint name looked up from the uuid. ', - name: 'zeek.dce_rpc.endpoint', - type: 'keyword', + 'netflow.ixia_rev_packet_delta_count': { + category: 'netflow', + name: 'netflow.ixia_rev_packet_delta_count', + type: 'long', }, - 'zeek.dce_rpc.operation': { - category: 'zeek', - description: 'Operation seen in the call. ', - name: 'zeek.dce_rpc.operation', + 'netflow.ixia_src_as_name': { + category: 'netflow', + name: 'netflow.ixia_src_as_name', type: 'keyword', }, - 'zeek.dhcp.domain': { - category: 'zeek', - description: 'Domain given by the server in option 15. ', - name: 'zeek.dhcp.domain', + 'netflow.ixia_src_city_name': { + category: 'netflow', + name: 'netflow.ixia_src_city_name', type: 'keyword', }, - 'zeek.dhcp.duration': { - category: 'zeek', - description: - 'Duration of the DHCP session representing the time from the first message to the last, in seconds. ', - name: 'zeek.dhcp.duration', - type: 'double', - }, - 'zeek.dhcp.hostname': { - category: 'zeek', - description: 'Name given by client in Hostname option 12. ', - name: 'zeek.dhcp.hostname', + 'netflow.ixia_src_country_code': { + category: 'netflow', + name: 'netflow.ixia_src_country_code', type: 'keyword', }, - 'zeek.dhcp.client_fqdn': { - category: 'zeek', - description: 'FQDN given by client in Client FQDN option 81. ', - name: 'zeek.dhcp.client_fqdn', + 'netflow.ixia_src_country_name': { + category: 'netflow', + name: 'netflow.ixia_src_country_name', type: 'keyword', }, - 'zeek.dhcp.lease_time': { - category: 'zeek', - description: 'IP address lease interval in seconds. ', - name: 'zeek.dhcp.lease_time', - type: 'integer', + 'netflow.ixia_src_latitude': { + category: 'netflow', + name: 'netflow.ixia_src_latitude', + type: 'float', }, - 'zeek.dhcp.address.assigned': { - category: 'zeek', - description: 'IP address assigned by the server. ', - name: 'zeek.dhcp.address.assigned', - type: 'ip', + 'netflow.ixia_src_longitude': { + category: 'netflow', + name: 'netflow.ixia_src_longitude', + type: 'float', }, - 'zeek.dhcp.address.client': { - category: 'zeek', - description: - 'IP address of the client. If a transaction is only a client sending INFORM messages then there is no lease information exchanged so this is helpful to know who sent the messages. Getting an address in this field does require that the client sources at least one DHCP message using a non-broadcast address. ', - name: 'zeek.dhcp.address.client', - type: 'ip', + 'netflow.ixia_src_region_code': { + category: 'netflow', + name: 'netflow.ixia_src_region_code', + type: 'keyword', }, - 'zeek.dhcp.address.mac': { - category: 'zeek', - description: "Client's hardware address. ", - name: 'zeek.dhcp.address.mac', + 'netflow.ixia_src_region_name': { + category: 'netflow', + name: 'netflow.ixia_src_region_name', type: 'keyword', }, - 'zeek.dhcp.address.requested': { - category: 'zeek', - description: 'IP address requested by the client. ', - name: 'zeek.dhcp.address.requested', + 'netflow.ixia_threat_ipv4': { + category: 'netflow', + name: 'netflow.ixia_threat_ipv4', type: 'ip', }, - 'zeek.dhcp.address.server': { - category: 'zeek', - description: 'IP address of the DHCP server. ', - name: 'zeek.dhcp.address.server', + 'netflow.ixia_threat_ipv6': { + category: 'netflow', + name: 'netflow.ixia_threat_ipv6', type: 'ip', }, - 'zeek.dhcp.msg.types': { - category: 'zeek', - description: 'List of DHCP message types seen in this exchange. ', - name: 'zeek.dhcp.msg.types', + 'netflow.ixia_threat_type': { + category: 'netflow', + name: 'netflow.ixia_threat_type', type: 'keyword', }, - 'zeek.dhcp.msg.origin': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/msg-orig.bro is loaded) The address that originated each message from the msg.types field. ', - name: 'zeek.dhcp.msg.origin', - type: 'ip', + 'netflow.large_packet_count': { + category: 'netflow', + name: 'netflow.large_packet_count', + type: 'long', }, - 'zeek.dhcp.msg.client': { - category: 'zeek', - description: - 'Message typically accompanied with a DHCP_DECLINE so the client can tell the server why it rejected an address. ', - name: 'zeek.dhcp.msg.client', - type: 'keyword', + 'netflow.layer2_frame_delta_count': { + category: 'netflow', + name: 'netflow.layer2_frame_delta_count', + type: 'long', }, - 'zeek.dhcp.msg.server': { - category: 'zeek', - description: - 'Message typically accompanied with a DHCP_NAK to let the client know why it rejected the request. ', - name: 'zeek.dhcp.msg.server', - type: 'keyword', + 'netflow.layer2_frame_total_count': { + category: 'netflow', + name: 'netflow.layer2_frame_total_count', + type: 'long', }, - 'zeek.dhcp.software.client': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/software.bro is loaded) Software reported by the client in the vendor_class option. ', - name: 'zeek.dhcp.software.client', - type: 'keyword', + 'netflow.layer2_octet_delta_count': { + category: 'netflow', + name: 'netflow.layer2_octet_delta_count', + type: 'long', }, - 'zeek.dhcp.software.server': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/software.bro is loaded) Software reported by the client in the vendor_class option. ', - name: 'zeek.dhcp.software.server', - type: 'keyword', + 'netflow.layer2_octet_delta_sum_of_squares': { + category: 'netflow', + name: 'netflow.layer2_octet_delta_sum_of_squares', + type: 'long', }, - 'zeek.dhcp.id.circuit': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/sub-opts.bro is loaded) Added by DHCP relay agents which terminate switched or permanent circuits. It encodes an agent-local identifier of the circuit from which a DHCP client-to-server packet was received. Typically it should represent a router or switch interface number. ', - name: 'zeek.dhcp.id.circuit', - type: 'keyword', + 'netflow.layer2_octet_total_count': { + category: 'netflow', + name: 'netflow.layer2_octet_total_count', + type: 'long', }, - 'zeek.dhcp.id.remote_agent': { - category: 'zeek', - description: - '(present if policy/protocols/dhcp/sub-opts.bro is loaded) A globally unique identifier added by relay agents to identify the remote host end of the circuit. ', - name: 'zeek.dhcp.id.remote_agent', - type: 'keyword', + 'netflow.layer2_octet_total_sum_of_squares': { + category: 'netflow', + name: 'netflow.layer2_octet_total_sum_of_squares', + type: 'long', }, - 'zeek.dhcp.id.subscriber': { - category: 'zeek', - description: - "(present if policy/protocols/dhcp/sub-opts.bro is loaded) The subscriber ID is a value independent of the physical network configuration so that a customer's DHCP configuration can be given to them correctly no matter where they are physically connected. ", - name: 'zeek.dhcp.id.subscriber', - type: 'keyword', + 'netflow.layer2_segment_id': { + category: 'netflow', + name: 'netflow.layer2_segment_id', + type: 'long', }, - 'zeek.dnp3.function.request': { - category: 'zeek', - description: 'The name of the function message in the request. ', - name: 'zeek.dnp3.function.request', - type: 'keyword', + 'netflow.layer2packet_section_data': { + category: 'netflow', + name: 'netflow.layer2packet_section_data', + type: 'short', }, - 'zeek.dnp3.function.reply': { - category: 'zeek', - description: 'The name of the function message in the reply. ', - name: 'zeek.dnp3.function.reply', - type: 'keyword', + 'netflow.layer2packet_section_offset': { + category: 'netflow', + name: 'netflow.layer2packet_section_offset', + type: 'integer', }, - 'zeek.dnp3.id': { - category: 'zeek', - description: "The response's internal indication number. ", - name: 'zeek.dnp3.id', + 'netflow.layer2packet_section_size': { + category: 'netflow', + name: 'netflow.layer2packet_section_size', type: 'integer', }, - 'zeek.dns.trans_id': { - category: 'zeek', - description: 'DNS transaction identifier. ', - name: 'zeek.dns.trans_id', - type: 'keyword', + 'netflow.line_card_id': { + category: 'netflow', + name: 'netflow.line_card_id', + type: 'long', }, - 'zeek.dns.rtt': { - category: 'zeek', - description: 'Round trip time for the query and response. ', - name: 'zeek.dns.rtt', - type: 'double', + 'netflow.log_op': { + category: 'netflow', + name: 'netflow.log_op', + type: 'short', }, - 'zeek.dns.query': { - category: 'zeek', - description: 'The domain name that is the subject of the DNS query. ', - name: 'zeek.dns.query', - type: 'keyword', + 'netflow.lower_ci_limit': { + category: 'netflow', + name: 'netflow.lower_ci_limit', + type: 'double', }, - 'zeek.dns.qclass': { - category: 'zeek', - description: 'The QCLASS value specifying the class of the query. ', - name: 'zeek.dns.qclass', + 'netflow.mark': { + category: 'netflow', + name: 'netflow.mark', type: 'long', }, - 'zeek.dns.qclass_name': { - category: 'zeek', - description: 'A descriptive name for the class of the query. ', - name: 'zeek.dns.qclass_name', - type: 'keyword', + 'netflow.max_bib_entries': { + category: 'netflow', + name: 'netflow.max_bib_entries', + type: 'long', }, - 'zeek.dns.qtype': { - category: 'zeek', - description: 'A QTYPE value specifying the type of the query. ', - name: 'zeek.dns.qtype', + 'netflow.max_entries_per_user': { + category: 'netflow', + name: 'netflow.max_entries_per_user', type: 'long', }, - 'zeek.dns.qtype_name': { - category: 'zeek', - description: 'A descriptive name for the type of the query. ', - name: 'zeek.dns.qtype_name', - type: 'keyword', + 'netflow.max_export_seconds': { + category: 'netflow', + name: 'netflow.max_export_seconds', + type: 'date', }, - 'zeek.dns.rcode': { - category: 'zeek', - description: 'The response code value in DNS response messages. ', - name: 'zeek.dns.rcode', - type: 'long', + 'netflow.max_flow_end_microseconds': { + category: 'netflow', + name: 'netflow.max_flow_end_microseconds', + type: 'date', }, - 'zeek.dns.rcode_name': { - category: 'zeek', - description: 'A descriptive name for the response code value. ', - name: 'zeek.dns.rcode_name', - type: 'keyword', + 'netflow.max_flow_end_milliseconds': { + category: 'netflow', + name: 'netflow.max_flow_end_milliseconds', + type: 'date', }, - 'zeek.dns.AA': { - category: 'zeek', - description: - 'The Authoritative Answer bit for response messages specifies that the responding name server is an authority for the domain name in the question section. ', - name: 'zeek.dns.AA', - type: 'boolean', + 'netflow.max_flow_end_nanoseconds': { + category: 'netflow', + name: 'netflow.max_flow_end_nanoseconds', + type: 'date', }, - 'zeek.dns.TC': { - category: 'zeek', - description: 'The Truncation bit specifies that the message was truncated. ', - name: 'zeek.dns.TC', - type: 'boolean', + 'netflow.max_flow_end_seconds': { + category: 'netflow', + name: 'netflow.max_flow_end_seconds', + type: 'date', }, - 'zeek.dns.RD': { - category: 'zeek', - description: - 'The Recursion Desired bit in a request message indicates that the client wants recursive service for this query. ', - name: 'zeek.dns.RD', - type: 'boolean', + 'netflow.max_fragments_pending_reassembly': { + category: 'netflow', + name: 'netflow.max_fragments_pending_reassembly', + type: 'long', }, - 'zeek.dns.RA': { - category: 'zeek', - description: - 'The Recursion Available bit in a response message indicates that the name server supports recursive queries. ', - name: 'zeek.dns.RA', - type: 'boolean', + 'netflow.max_packet_size': { + category: 'netflow', + name: 'netflow.max_packet_size', + type: 'integer', }, - 'zeek.dns.answers': { - category: 'zeek', - description: 'The set of resource descriptions in the query answer. ', - name: 'zeek.dns.answers', - type: 'keyword', + 'netflow.max_session_entries': { + category: 'netflow', + name: 'netflow.max_session_entries', + type: 'long', }, - 'zeek.dns.TTLs': { - category: 'zeek', - description: 'The caching intervals of the associated RRs described by the answers field. ', - name: 'zeek.dns.TTLs', - type: 'double', + 'netflow.max_subscribers': { + category: 'netflow', + name: 'netflow.max_subscribers', + type: 'long', }, - 'zeek.dns.rejected': { - category: 'zeek', - description: 'Indicates whether the DNS query was rejected by the server. ', - name: 'zeek.dns.rejected', - type: 'boolean', + 'netflow.maximum_ip_total_length': { + category: 'netflow', + name: 'netflow.maximum_ip_total_length', + type: 'long', }, - 'zeek.dns.total_answers': { - category: 'zeek', - description: 'The total number of resource records in the reply. ', - name: 'zeek.dns.total_answers', - type: 'integer', + 'netflow.maximum_layer2_total_length': { + category: 'netflow', + name: 'netflow.maximum_layer2_total_length', + type: 'long', }, - 'zeek.dns.total_replies': { - category: 'zeek', - description: 'The total number of resource records in the reply message. ', - name: 'zeek.dns.total_replies', - type: 'integer', + 'netflow.maximum_ttl': { + category: 'netflow', + name: 'netflow.maximum_ttl', + type: 'short', }, - 'zeek.dns.saw_query': { - category: 'zeek', - description: 'Whether the full DNS query has been seen. ', - name: 'zeek.dns.saw_query', - type: 'boolean', + 'netflow.mean_flow_rate': { + category: 'netflow', + name: 'netflow.mean_flow_rate', + type: 'long', }, - 'zeek.dns.saw_reply': { - category: 'zeek', - description: 'Whether the full DNS reply has been seen. ', - name: 'zeek.dns.saw_reply', - type: 'boolean', + 'netflow.mean_packet_rate': { + category: 'netflow', + name: 'netflow.mean_packet_rate', + type: 'long', }, - 'zeek.dpd.analyzer': { - category: 'zeek', - description: 'The analyzer that generated the violation. ', - name: 'zeek.dpd.analyzer', - type: 'keyword', + 'netflow.message_md5_checksum': { + category: 'netflow', + name: 'netflow.message_md5_checksum', + type: 'short', }, - 'zeek.dpd.failure_reason': { - category: 'zeek', - description: 'The textual reason for the analysis failure. ', - name: 'zeek.dpd.failure_reason', - type: 'keyword', + 'netflow.message_scope': { + category: 'netflow', + name: 'netflow.message_scope', + type: 'short', }, - 'zeek.dpd.packet_segment': { - category: 'zeek', - description: - '(present if policy/frameworks/dpd/packet-segment-logging.bro is loaded) A chunk of the payload that most likely resulted in the protocol violation. ', - name: 'zeek.dpd.packet_segment', - type: 'keyword', + 'netflow.metering_process_id': { + category: 'netflow', + name: 'netflow.metering_process_id', + type: 'long', }, - 'zeek.files.fuid': { - category: 'zeek', - description: 'A file unique identifier. ', - name: 'zeek.files.fuid', + 'netflow.metro_evc_id': { + category: 'netflow', + name: 'netflow.metro_evc_id', type: 'keyword', }, - 'zeek.files.tx_host': { - category: 'zeek', - description: 'The host that transferred the file. ', - name: 'zeek.files.tx_host', - type: 'ip', + 'netflow.metro_evc_type': { + category: 'netflow', + name: 'netflow.metro_evc_type', + type: 'short', }, - 'zeek.files.rx_host': { - category: 'zeek', - description: 'The host that received the file. ', - name: 'zeek.files.rx_host', - type: 'ip', + 'netflow.mib_capture_time_semantics': { + category: 'netflow', + name: 'netflow.mib_capture_time_semantics', + type: 'short', }, - 'zeek.files.session_ids': { - category: 'zeek', - description: 'The sessions that have this file. ', - name: 'zeek.files.session_ids', - type: 'keyword', + 'netflow.mib_context_engine_id': { + category: 'netflow', + name: 'netflow.mib_context_engine_id', + type: 'short', }, - 'zeek.files.source': { - category: 'zeek', - description: - 'An identification of the source of the file data. E.g. it may be a network protocol over which it was transferred, or a local file path which was read, or some other input source. ', - name: 'zeek.files.source', + 'netflow.mib_context_name': { + category: 'netflow', + name: 'netflow.mib_context_name', type: 'keyword', }, - 'zeek.files.depth': { - category: 'zeek', - description: - 'A value to represent the depth of this file in relation to its source. In SMTP, it is the depth of the MIME attachment on the message. In HTTP, it is the depth of the request within the TCP connection. ', - name: 'zeek.files.depth', + 'netflow.mib_index_indicator': { + category: 'netflow', + name: 'netflow.mib_index_indicator', type: 'long', }, - 'zeek.files.analyzers': { - category: 'zeek', - description: 'A set of analysis types done during the file analysis. ', - name: 'zeek.files.analyzers', - type: 'keyword', - }, - 'zeek.files.mime_type': { - category: 'zeek', - description: 'Mime type of the file. ', - name: 'zeek.files.mime_type', + 'netflow.mib_module_name': { + category: 'netflow', + name: 'netflow.mib_module_name', type: 'keyword', }, - 'zeek.files.filename': { - category: 'zeek', - description: 'Name of the file if available. ', - name: 'zeek.files.filename', + 'netflow.mib_object_description': { + category: 'netflow', + name: 'netflow.mib_object_description', type: 'keyword', }, - 'zeek.files.local_orig': { - category: 'zeek', - description: - 'If the source of this file is a network connection, this field indicates if the data originated from the local network or not. ', - name: 'zeek.files.local_orig', - type: 'boolean', - }, - 'zeek.files.is_orig': { - category: 'zeek', - description: - 'If the source of this file is a network connection, this field indicates if the file is being sent by the originator of the connection or the responder. ', - name: 'zeek.files.is_orig', - type: 'boolean', + 'netflow.mib_object_identifier': { + category: 'netflow', + name: 'netflow.mib_object_identifier', + type: 'short', }, - 'zeek.files.duration': { - category: 'zeek', - description: 'The duration the file was analyzed for. Not the duration of the session. ', - name: 'zeek.files.duration', - type: 'double', + 'netflow.mib_object_name': { + category: 'netflow', + name: 'netflow.mib_object_name', + type: 'keyword', }, - 'zeek.files.seen_bytes': { - category: 'zeek', - description: 'Number of bytes provided to the file analysis engine for the file. ', - name: 'zeek.files.seen_bytes', - type: 'long', + 'netflow.mib_object_syntax': { + category: 'netflow', + name: 'netflow.mib_object_syntax', + type: 'keyword', }, - 'zeek.files.total_bytes': { - category: 'zeek', - description: 'Total number of bytes that are supposed to comprise the full file. ', - name: 'zeek.files.total_bytes', - type: 'long', + 'netflow.mib_object_value_bits': { + category: 'netflow', + name: 'netflow.mib_object_value_bits', + type: 'short', }, - 'zeek.files.missing_bytes': { - category: 'zeek', - description: - 'The number of bytes in the file stream that were completely missed during the process of analysis. ', - name: 'zeek.files.missing_bytes', + 'netflow.mib_object_value_counter': { + category: 'netflow', + name: 'netflow.mib_object_value_counter', type: 'long', }, - 'zeek.files.overflow_bytes': { - category: 'zeek', - description: - "The number of bytes in the file stream that were not delivered to stream file analyzers. This could be overlapping bytes or bytes that couldn't be reassembled. ", - name: 'zeek.files.overflow_bytes', + 'netflow.mib_object_value_gauge': { + category: 'netflow', + name: 'netflow.mib_object_value_gauge', type: 'long', }, - 'zeek.files.timedout': { - category: 'zeek', - description: 'Whether the file analysis timed out at least once for the file. ', - name: 'zeek.files.timedout', - type: 'boolean', - }, - 'zeek.files.parent_fuid': { - category: 'zeek', - description: - 'Identifier associated with a container file from which this one was extracted as part of the file analysis. ', - name: 'zeek.files.parent_fuid', - type: 'keyword', + 'netflow.mib_object_value_integer': { + category: 'netflow', + name: 'netflow.mib_object_value_integer', + type: 'integer', }, - 'zeek.files.md5': { - category: 'zeek', - description: 'An MD5 digest of the file contents. ', - name: 'zeek.files.md5', - type: 'keyword', + 'netflow.mib_object_value_ip_address': { + category: 'netflow', + name: 'netflow.mib_object_value_ip_address', + type: 'ip', }, - 'zeek.files.sha1': { - category: 'zeek', - description: 'A SHA1 digest of the file contents. ', - name: 'zeek.files.sha1', - type: 'keyword', + 'netflow.mib_object_value_octet_string': { + category: 'netflow', + name: 'netflow.mib_object_value_octet_string', + type: 'short', }, - 'zeek.files.sha256': { - category: 'zeek', - description: 'A SHA256 digest of the file contents. ', - name: 'zeek.files.sha256', - type: 'keyword', + 'netflow.mib_object_value_oid': { + category: 'netflow', + name: 'netflow.mib_object_value_oid', + type: 'short', }, - 'zeek.files.extracted': { - category: 'zeek', - description: 'Local filename of extracted file. ', - name: 'zeek.files.extracted', - type: 'keyword', + 'netflow.mib_object_value_time_ticks': { + category: 'netflow', + name: 'netflow.mib_object_value_time_ticks', + type: 'long', }, - 'zeek.files.extracted_cutoff': { - category: 'zeek', - description: - 'Indicate whether the file being extracted was cut off hence not extracted completely. ', - name: 'zeek.files.extracted_cutoff', - type: 'boolean', + 'netflow.mib_object_value_unsigned': { + category: 'netflow', + name: 'netflow.mib_object_value_unsigned', + type: 'long', }, - 'zeek.files.extracted_size': { - category: 'zeek', - description: 'The number of bytes extracted to disk. ', - name: 'zeek.files.extracted_size', + 'netflow.mib_sub_identifier': { + category: 'netflow', + name: 'netflow.mib_sub_identifier', type: 'long', }, - 'zeek.files.entropy': { - category: 'zeek', - description: 'The information density of the contents of the file. ', - name: 'zeek.files.entropy', - type: 'double', + 'netflow.min_export_seconds': { + category: 'netflow', + name: 'netflow.min_export_seconds', + type: 'date', }, - 'zeek.ftp.user': { - category: 'zeek', - description: 'User name for the current FTP session. ', - name: 'zeek.ftp.user', - type: 'keyword', + 'netflow.min_flow_start_microseconds': { + category: 'netflow', + name: 'netflow.min_flow_start_microseconds', + type: 'date', }, - 'zeek.ftp.password': { - category: 'zeek', - description: 'Password for the current FTP session if captured. ', - name: 'zeek.ftp.password', - type: 'keyword', + 'netflow.min_flow_start_milliseconds': { + category: 'netflow', + name: 'netflow.min_flow_start_milliseconds', + type: 'date', }, - 'zeek.ftp.command': { - category: 'zeek', - description: 'Command given by the client. ', - name: 'zeek.ftp.command', - type: 'keyword', + 'netflow.min_flow_start_nanoseconds': { + category: 'netflow', + name: 'netflow.min_flow_start_nanoseconds', + type: 'date', }, - 'zeek.ftp.arg': { - category: 'zeek', - description: 'Argument for the command if one is given. ', - name: 'zeek.ftp.arg', - type: 'keyword', + 'netflow.min_flow_start_seconds': { + category: 'netflow', + name: 'netflow.min_flow_start_seconds', + type: 'date', }, - 'zeek.ftp.file.size': { - category: 'zeek', - description: 'Size of the file if the command indicates a file transfer. ', - name: 'zeek.ftp.file.size', + 'netflow.minimum_ip_total_length': { + category: 'netflow', + name: 'netflow.minimum_ip_total_length', type: 'long', }, - 'zeek.ftp.file.mime_type': { - category: 'zeek', - description: 'Sniffed mime type of file. ', - name: 'zeek.ftp.file.mime_type', - type: 'keyword', + 'netflow.minimum_layer2_total_length': { + category: 'netflow', + name: 'netflow.minimum_layer2_total_length', + type: 'long', }, - 'zeek.ftp.file.fuid': { - category: 'zeek', - description: '(present if base/protocols/ftp/files.bro is loaded) File unique ID. ', - name: 'zeek.ftp.file.fuid', - type: 'keyword', + 'netflow.minimum_ttl': { + category: 'netflow', + name: 'netflow.minimum_ttl', + type: 'short', }, - 'zeek.ftp.reply.code': { - category: 'zeek', - description: 'Reply code from the server in response to the command. ', - name: 'zeek.ftp.reply.code', - type: 'integer', + 'netflow.mobile_imsi': { + category: 'netflow', + name: 'netflow.mobile_imsi', + type: 'keyword', }, - 'zeek.ftp.reply.msg': { - category: 'zeek', - description: 'Reply message from the server in response to the command. ', - name: 'zeek.ftp.reply.msg', + 'netflow.mobile_msisdn': { + category: 'netflow', + name: 'netflow.mobile_msisdn', type: 'keyword', }, - 'zeek.ftp.data_channel.passive': { - category: 'zeek', - description: 'Whether PASV mode is toggled for control channel. ', - name: 'zeek.ftp.data_channel.passive', - type: 'boolean', + 'netflow.monitoring_interval_end_milli_seconds': { + category: 'netflow', + name: 'netflow.monitoring_interval_end_milli_seconds', + type: 'date', + }, + 'netflow.monitoring_interval_start_milli_seconds': { + category: 'netflow', + name: 'netflow.monitoring_interval_start_milli_seconds', + type: 'date', }, - 'zeek.ftp.data_channel.originating_host': { - category: 'zeek', - description: 'The host that will be initiating the data connection. ', - name: 'zeek.ftp.data_channel.originating_host', - type: 'ip', + 'netflow.mpls_label_stack_depth': { + category: 'netflow', + name: 'netflow.mpls_label_stack_depth', + type: 'long', }, - 'zeek.ftp.data_channel.response_host': { - category: 'zeek', - description: 'The host that will be accepting the data connection. ', - name: 'zeek.ftp.data_channel.response_host', - type: 'ip', + 'netflow.mpls_label_stack_length': { + category: 'netflow', + name: 'netflow.mpls_label_stack_length', + type: 'long', }, - 'zeek.ftp.data_channel.response_port': { - category: 'zeek', - description: 'The port at which the acceptor is listening for the data connection. ', - name: 'zeek.ftp.data_channel.response_port', - type: 'integer', + 'netflow.mpls_label_stack_section': { + category: 'netflow', + name: 'netflow.mpls_label_stack_section', + type: 'short', }, - 'zeek.ftp.cwd': { - category: 'zeek', - description: - "Current working directory that this session is in. By making the default value '.', we can indicate that unless something more concrete is discovered that the existing but unknown directory is ok to use. ", - name: 'zeek.ftp.cwd', - type: 'keyword', + 'netflow.mpls_label_stack_section10': { + category: 'netflow', + name: 'netflow.mpls_label_stack_section10', + type: 'short', }, - 'zeek.ftp.cmdarg.cmd': { - category: 'zeek', - description: 'Command. ', - name: 'zeek.ftp.cmdarg.cmd', - type: 'keyword', + 'netflow.mpls_label_stack_section2': { + category: 'netflow', + name: 'netflow.mpls_label_stack_section2', + type: 'short', }, - 'zeek.ftp.cmdarg.arg': { - category: 'zeek', - description: 'Argument for the command if one was given. ', - name: 'zeek.ftp.cmdarg.arg', - type: 'keyword', + 'netflow.mpls_label_stack_section3': { + category: 'netflow', + name: 'netflow.mpls_label_stack_section3', + type: 'short', }, - 'zeek.ftp.cmdarg.seq': { - category: 'zeek', - description: 'Counter to track how many commands have been executed. ', - name: 'zeek.ftp.cmdarg.seq', - type: 'integer', + 'netflow.mpls_label_stack_section4': { + category: 'netflow', + name: 'netflow.mpls_label_stack_section4', + type: 'short', }, - 'zeek.ftp.pending_commands': { - category: 'zeek', - description: - 'Queue for commands that have been sent but not yet responded to are tracked here. ', - name: 'zeek.ftp.pending_commands', - type: 'integer', + 'netflow.mpls_label_stack_section5': { + category: 'netflow', + name: 'netflow.mpls_label_stack_section5', + type: 'short', }, - 'zeek.ftp.passive': { - category: 'zeek', - description: 'Indicates if the session is in active or passive mode. ', - name: 'zeek.ftp.passive', - type: 'boolean', + 'netflow.mpls_label_stack_section6': { + category: 'netflow', + name: 'netflow.mpls_label_stack_section6', + type: 'short', }, - 'zeek.ftp.capture_password': { - category: 'zeek', - description: 'Determines if the password will be captured for this request. ', - name: 'zeek.ftp.capture_password', - type: 'boolean', + 'netflow.mpls_label_stack_section7': { + category: 'netflow', + name: 'netflow.mpls_label_stack_section7', + type: 'short', }, - 'zeek.ftp.last_auth_requested': { - category: 'zeek', - description: - 'present if base/protocols/ftp/gridftp.bro is loaded. Last authentication/security mechanism that was used. ', - name: 'zeek.ftp.last_auth_requested', - type: 'keyword', + 'netflow.mpls_label_stack_section8': { + category: 'netflow', + name: 'netflow.mpls_label_stack_section8', + type: 'short', }, - 'zeek.http.trans_depth': { - category: 'zeek', - description: - 'Represents the pipelined depth into the connection of this request/response transaction. ', - name: 'zeek.http.trans_depth', - type: 'integer', + 'netflow.mpls_label_stack_section9': { + category: 'netflow', + name: 'netflow.mpls_label_stack_section9', + type: 'short', }, - 'zeek.http.status_msg': { - category: 'zeek', - description: 'Status message returned by the server. ', - name: 'zeek.http.status_msg', - type: 'keyword', + 'netflow.mpls_payload_length': { + category: 'netflow', + name: 'netflow.mpls_payload_length', + type: 'long', }, - 'zeek.http.info_code': { - category: 'zeek', - description: 'Last seen 1xx informational reply code returned by the server. ', - name: 'zeek.http.info_code', - type: 'integer', + 'netflow.mpls_payload_packet_section': { + category: 'netflow', + name: 'netflow.mpls_payload_packet_section', + type: 'short', }, - 'zeek.http.info_msg': { - category: 'zeek', - description: 'Last seen 1xx informational reply message returned by the server. ', - name: 'zeek.http.info_msg', - type: 'keyword', + 'netflow.mpls_top_label_exp': { + category: 'netflow', + name: 'netflow.mpls_top_label_exp', + type: 'short', }, - 'zeek.http.tags': { - category: 'zeek', - description: - 'A set of indicators of various attributes discovered and related to a particular request/response pair. ', - name: 'zeek.http.tags', - type: 'keyword', + 'netflow.mpls_top_label_ipv4_address': { + category: 'netflow', + name: 'netflow.mpls_top_label_ipv4_address', + type: 'ip', }, - 'zeek.http.password': { - category: 'zeek', - description: 'Password if basic-auth is performed for the request. ', - name: 'zeek.http.password', - type: 'keyword', + 'netflow.mpls_top_label_ipv6_address': { + category: 'netflow', + name: 'netflow.mpls_top_label_ipv6_address', + type: 'ip', }, - 'zeek.http.captured_password': { - category: 'zeek', - description: 'Determines if the password will be captured for this request. ', - name: 'zeek.http.captured_password', - type: 'boolean', + 'netflow.mpls_top_label_prefix_length': { + category: 'netflow', + name: 'netflow.mpls_top_label_prefix_length', + type: 'short', }, - 'zeek.http.proxied': { - category: 'zeek', - description: 'All of the headers that may indicate if the HTTP request was proxied. ', - name: 'zeek.http.proxied', - type: 'keyword', + 'netflow.mpls_top_label_stack_section': { + category: 'netflow', + name: 'netflow.mpls_top_label_stack_section', + type: 'short', }, - 'zeek.http.range_request': { - category: 'zeek', - description: 'Indicates if this request can assume 206 partial content in response. ', - name: 'zeek.http.range_request', - type: 'boolean', + 'netflow.mpls_top_label_ttl': { + category: 'netflow', + name: 'netflow.mpls_top_label_ttl', + type: 'short', }, - 'zeek.http.client_header_names': { - category: 'zeek', - description: - 'The vector of HTTP header names sent by the client. No header values are included here, just the header names. ', - name: 'zeek.http.client_header_names', - type: 'keyword', + 'netflow.mpls_top_label_type': { + category: 'netflow', + name: 'netflow.mpls_top_label_type', + type: 'short', }, - 'zeek.http.server_header_names': { - category: 'zeek', - description: - 'The vector of HTTP header names sent by the server. No header values are included here, just the header names. ', - name: 'zeek.http.server_header_names', - type: 'keyword', + 'netflow.mpls_vpn_route_distinguisher': { + category: 'netflow', + name: 'netflow.mpls_vpn_route_distinguisher', + type: 'short', }, - 'zeek.http.orig_fuids': { - category: 'zeek', - description: 'An ordered vector of file unique IDs from the originator. ', - name: 'zeek.http.orig_fuids', - type: 'keyword', + 'netflow.mptcp_address_id': { + category: 'netflow', + name: 'netflow.mptcp_address_id', + type: 'short', }, - 'zeek.http.orig_mime_types': { - category: 'zeek', - description: 'An ordered vector of mime types from the originator. ', - name: 'zeek.http.orig_mime_types', - type: 'keyword', + 'netflow.mptcp_flags': { + category: 'netflow', + name: 'netflow.mptcp_flags', + type: 'short', }, - 'zeek.http.orig_filenames': { - category: 'zeek', - description: 'An ordered vector of filenames from the originator. ', - name: 'zeek.http.orig_filenames', - type: 'keyword', + 'netflow.mptcp_initial_data_sequence_number': { + category: 'netflow', + name: 'netflow.mptcp_initial_data_sequence_number', + type: 'long', }, - 'zeek.http.resp_fuids': { - category: 'zeek', - description: 'An ordered vector of file unique IDs from the responder. ', - name: 'zeek.http.resp_fuids', - type: 'keyword', + 'netflow.mptcp_maximum_segment_size': { + category: 'netflow', + name: 'netflow.mptcp_maximum_segment_size', + type: 'integer', }, - 'zeek.http.resp_mime_types': { - category: 'zeek', - description: 'An ordered vector of mime types from the responder. ', - name: 'zeek.http.resp_mime_types', - type: 'keyword', + 'netflow.mptcp_receiver_token': { + category: 'netflow', + name: 'netflow.mptcp_receiver_token', + type: 'long', }, - 'zeek.http.resp_filenames': { - category: 'zeek', - description: 'An ordered vector of filenames from the responder. ', - name: 'zeek.http.resp_filenames', - type: 'keyword', + 'netflow.multicast_replication_factor': { + category: 'netflow', + name: 'netflow.multicast_replication_factor', + type: 'long', }, - 'zeek.http.orig_mime_depth': { - category: 'zeek', - description: 'Current number of MIME entities in the HTTP request message body. ', - name: 'zeek.http.orig_mime_depth', - type: 'integer', + 'netflow.nat_event': { + category: 'netflow', + name: 'netflow.nat_event', + type: 'short', }, - 'zeek.http.resp_mime_depth': { - category: 'zeek', - description: 'Current number of MIME entities in the HTTP response message body. ', - name: 'zeek.http.resp_mime_depth', + 'netflow.nat_inside_svcid': { + category: 'netflow', + name: 'netflow.nat_inside_svcid', type: 'integer', }, - 'zeek.intel.seen.indicator': { - category: 'zeek', - description: 'The intelligence indicator. ', - name: 'zeek.intel.seen.indicator', - type: 'keyword', + 'netflow.nat_instance_id': { + category: 'netflow', + name: 'netflow.nat_instance_id', + type: 'long', }, - 'zeek.intel.seen.indicator_type': { - category: 'zeek', - description: 'The type of data the indicator represents. ', - name: 'zeek.intel.seen.indicator_type', - type: 'keyword', + 'netflow.nat_originating_address_realm': { + category: 'netflow', + name: 'netflow.nat_originating_address_realm', + type: 'short', }, - 'zeek.intel.seen.host': { - category: 'zeek', - description: 'If the indicator type was Intel::ADDR, then this field will be present. ', - name: 'zeek.intel.seen.host', - type: 'keyword', + 'netflow.nat_outside_svcid': { + category: 'netflow', + name: 'netflow.nat_outside_svcid', + type: 'integer', }, - 'zeek.intel.seen.conn': { - category: 'zeek', - description: - 'If the data was discovered within a connection, the connection record should go here to give context to the data. ', - name: 'zeek.intel.seen.conn', - type: 'keyword', + 'netflow.nat_pool_id': { + category: 'netflow', + name: 'netflow.nat_pool_id', + type: 'long', }, - 'zeek.intel.seen.where': { - category: 'zeek', - description: 'Where the data was discovered. ', - name: 'zeek.intel.seen.where', + 'netflow.nat_pool_name': { + category: 'netflow', + name: 'netflow.nat_pool_name', type: 'keyword', }, - 'zeek.intel.seen.node': { - category: 'zeek', - description: 'The name of the node where the match was discovered. ', - name: 'zeek.intel.seen.node', - type: 'keyword', + 'netflow.nat_quota_exceeded_event': { + category: 'netflow', + name: 'netflow.nat_quota_exceeded_event', + type: 'long', }, - 'zeek.intel.seen.uid': { - category: 'zeek', - description: - 'If the data was discovered within a connection, the connection uid should go here to give context to the data. If the conn field is provided, this will be automatically filled out. ', - name: 'zeek.intel.seen.uid', + 'netflow.nat_sub_string': { + category: 'netflow', + name: 'netflow.nat_sub_string', type: 'keyword', }, - 'zeek.intel.seen.f': { - category: 'zeek', - description: - 'If the data was discovered within a file, the file record should go here to provide context to the data. ', - name: 'zeek.intel.seen.f', - type: 'object', + 'netflow.nat_threshold_event': { + category: 'netflow', + name: 'netflow.nat_threshold_event', + type: 'long', }, - 'zeek.intel.seen.fuid': { - category: 'zeek', - description: - 'If the data was discovered within a file, the file uid should go here to provide context to the data. If the file record f is provided, this will be automatically filled out. ', - name: 'zeek.intel.seen.fuid', - type: 'keyword', + 'netflow.nat_type': { + category: 'netflow', + name: 'netflow.nat_type', + type: 'short', }, - 'zeek.intel.matched': { - category: 'zeek', - description: 'Event to represent a match in the intelligence data from data that was seen. ', - name: 'zeek.intel.matched', + 'netflow.netscale_ica_client_version': { + category: 'netflow', + name: 'netflow.netscale_ica_client_version', type: 'keyword', }, - 'zeek.intel.sources': { - category: 'zeek', - description: 'Sources which supplied data for this match. ', - name: 'zeek.intel.sources', + 'netflow.netscaler_aaa_username': { + category: 'netflow', + name: 'netflow.netscaler_aaa_username', type: 'keyword', }, - 'zeek.intel.fuid': { - category: 'zeek', - description: - 'If a file was associated with this intelligence hit, this is the uid for the file. ', - name: 'zeek.intel.fuid', + 'netflow.netscaler_app_name': { + category: 'netflow', + name: 'netflow.netscaler_app_name', type: 'keyword', }, - 'zeek.intel.file_mime_type': { - category: 'zeek', - description: - 'A mime type if the intelligence hit is related to a file. If the $f field is provided this will be automatically filled out. ', - name: 'zeek.intel.file_mime_type', - type: 'keyword', + 'netflow.netscaler_app_name_app_id': { + category: 'netflow', + name: 'netflow.netscaler_app_name_app_id', + type: 'long', }, - 'zeek.intel.file_desc': { - category: 'zeek', - description: - 'Frequently files can be described to give a bit more context. If the $f field is provided this field will be automatically filled out. ', - name: 'zeek.intel.file_desc', - type: 'keyword', + 'netflow.netscaler_app_name_incarnation_number': { + category: 'netflow', + name: 'netflow.netscaler_app_name_incarnation_number', + type: 'long', }, - 'zeek.irc.nick': { - category: 'zeek', - description: 'Nickname given for the connection. ', - name: 'zeek.irc.nick', + 'netflow.netscaler_app_template_name': { + category: 'netflow', + name: 'netflow.netscaler_app_template_name', type: 'keyword', }, - 'zeek.irc.user': { - category: 'zeek', - description: 'Username given for the connection. ', - name: 'zeek.irc.user', - type: 'keyword', + 'netflow.netscaler_app_unit_name_app_id': { + category: 'netflow', + name: 'netflow.netscaler_app_unit_name_app_id', + type: 'long', }, - 'zeek.irc.command': { - category: 'zeek', - description: 'Command given by the client. ', - name: 'zeek.irc.command', - type: 'keyword', + 'netflow.netscaler_application_startup_duration': { + category: 'netflow', + name: 'netflow.netscaler_application_startup_duration', + type: 'long', }, - 'zeek.irc.value': { - category: 'zeek', - description: 'Value for the command given by the client. ', - name: 'zeek.irc.value', - type: 'keyword', + 'netflow.netscaler_application_startup_time': { + category: 'netflow', + name: 'netflow.netscaler_application_startup_time', + type: 'long', }, - 'zeek.irc.addl': { - category: 'zeek', - description: 'Any additional data for the command. ', - name: 'zeek.irc.addl', - type: 'keyword', + 'netflow.netscaler_cache_redir_client_connection_core_id': { + category: 'netflow', + name: 'netflow.netscaler_cache_redir_client_connection_core_id', + type: 'long', }, - 'zeek.irc.dcc.file.name': { - category: 'zeek', - description: 'Present if base/protocols/irc/dcc-send.bro is loaded. DCC filename requested. ', - name: 'zeek.irc.dcc.file.name', - type: 'keyword', + 'netflow.netscaler_cache_redir_client_connection_transaction_id': { + category: 'netflow', + name: 'netflow.netscaler_cache_redir_client_connection_transaction_id', + type: 'long', }, - 'zeek.irc.dcc.file.size': { - category: 'zeek', - description: - 'Present if base/protocols/irc/dcc-send.bro is loaded. Size of the DCC transfer as indicated by the sender. ', - name: 'zeek.irc.dcc.file.size', + 'netflow.netscaler_client_rtt': { + category: 'netflow', + name: 'netflow.netscaler_client_rtt', type: 'long', }, - 'zeek.irc.dcc.mime_type': { - category: 'zeek', - description: - 'present if base/protocols/irc/dcc-send.bro is loaded. Sniffed mime type of the file. ', - name: 'zeek.irc.dcc.mime_type', - type: 'keyword', + 'netflow.netscaler_connection_chain_hop_count': { + category: 'netflow', + name: 'netflow.netscaler_connection_chain_hop_count', + type: 'long', }, - 'zeek.irc.fuid': { - category: 'zeek', - description: 'present if base/protocols/irc/files.bro is loaded. File unique ID. ', - name: 'zeek.irc.fuid', - type: 'keyword', + 'netflow.netscaler_connection_chain_id': { + category: 'netflow', + name: 'netflow.netscaler_connection_chain_id', + type: 'short', }, - 'zeek.kerberos.request_type': { - category: 'zeek', - description: 'Request type - Authentication Service (AS) or Ticket Granting Service (TGS). ', - name: 'zeek.kerberos.request_type', - type: 'keyword', + 'netflow.netscaler_connection_id': { + category: 'netflow', + name: 'netflow.netscaler_connection_id', + type: 'long', }, - 'zeek.kerberos.client': { - category: 'zeek', - description: 'Client name. ', - name: 'zeek.kerberos.client', + 'netflow.netscaler_current_license_consumed': { + category: 'netflow', + name: 'netflow.netscaler_current_license_consumed', + type: 'long', + }, + 'netflow.netscaler_db_clt_host_name': { + category: 'netflow', + name: 'netflow.netscaler_db_clt_host_name', type: 'keyword', }, - 'zeek.kerberos.service': { - category: 'zeek', - description: 'Service name. ', - name: 'zeek.kerberos.service', + 'netflow.netscaler_db_database_name': { + category: 'netflow', + name: 'netflow.netscaler_db_database_name', type: 'keyword', }, - 'zeek.kerberos.success': { - category: 'zeek', - description: 'Request result. ', - name: 'zeek.kerberos.success', - type: 'boolean', + 'netflow.netscaler_db_login_flags': { + category: 'netflow', + name: 'netflow.netscaler_db_login_flags', + type: 'long', }, - 'zeek.kerberos.error.code': { - category: 'zeek', - description: 'Error code. ', - name: 'zeek.kerberos.error.code', - type: 'integer', + 'netflow.netscaler_db_protocol_name': { + category: 'netflow', + name: 'netflow.netscaler_db_protocol_name', + type: 'short', }, - 'zeek.kerberos.error.msg': { - category: 'zeek', - description: 'Error message. ', - name: 'zeek.kerberos.error.msg', + 'netflow.netscaler_db_req_string': { + category: 'netflow', + name: 'netflow.netscaler_db_req_string', type: 'keyword', }, - 'zeek.kerberos.valid.from': { - category: 'zeek', - description: 'Ticket valid from. ', - name: 'zeek.kerberos.valid.from', - type: 'date', + 'netflow.netscaler_db_req_type': { + category: 'netflow', + name: 'netflow.netscaler_db_req_type', + type: 'short', }, - 'zeek.kerberos.valid.until': { - category: 'zeek', - description: 'Ticket valid until. ', - name: 'zeek.kerberos.valid.until', - type: 'date', + 'netflow.netscaler_db_resp_length': { + category: 'netflow', + name: 'netflow.netscaler_db_resp_length', + type: 'long', }, - 'zeek.kerberos.valid.days': { - category: 'zeek', - description: 'Number of days the ticket is valid for. ', - name: 'zeek.kerberos.valid.days', - type: 'integer', + 'netflow.netscaler_db_resp_status': { + category: 'netflow', + name: 'netflow.netscaler_db_resp_status', + type: 'long', }, - 'zeek.kerberos.cipher': { - category: 'zeek', - description: 'Ticket encryption type. ', - name: 'zeek.kerberos.cipher', + 'netflow.netscaler_db_resp_status_string': { + category: 'netflow', + name: 'netflow.netscaler_db_resp_status_string', type: 'keyword', }, - 'zeek.kerberos.forwardable': { - category: 'zeek', - description: 'Forwardable ticket requested. ', - name: 'zeek.kerberos.forwardable', - type: 'boolean', + 'netflow.netscaler_db_user_name': { + category: 'netflow', + name: 'netflow.netscaler_db_user_name', + type: 'keyword', }, - 'zeek.kerberos.renewable': { - category: 'zeek', - description: 'Renewable ticket requested. ', - name: 'zeek.kerberos.renewable', - type: 'boolean', + 'netflow.netscaler_flow_flags': { + category: 'netflow', + name: 'netflow.netscaler_flow_flags', + type: 'long', }, - 'zeek.kerberos.ticket.auth': { - category: 'zeek', - description: 'Hash of ticket used to authorize request/transaction. ', - name: 'zeek.kerberos.ticket.auth', + 'netflow.netscaler_http_client_interaction_end_time': { + category: 'netflow', + name: 'netflow.netscaler_http_client_interaction_end_time', type: 'keyword', }, - 'zeek.kerberos.ticket.new': { - category: 'zeek', - description: 'Hash of ticket returned by the KDC. ', - name: 'zeek.kerberos.ticket.new', + 'netflow.netscaler_http_client_interaction_start_time': { + category: 'netflow', + name: 'netflow.netscaler_http_client_interaction_start_time', type: 'keyword', }, - 'zeek.kerberos.cert.client.value': { - category: 'zeek', - description: 'Client certificate. ', - name: 'zeek.kerberos.cert.client.value', + 'netflow.netscaler_http_client_render_end_time': { + category: 'netflow', + name: 'netflow.netscaler_http_client_render_end_time', type: 'keyword', }, - 'zeek.kerberos.cert.client.fuid': { - category: 'zeek', - description: 'File unique ID of client cert. ', - name: 'zeek.kerberos.cert.client.fuid', + 'netflow.netscaler_http_client_render_start_time': { + category: 'netflow', + name: 'netflow.netscaler_http_client_render_start_time', type: 'keyword', }, - 'zeek.kerberos.cert.client.subject': { - category: 'zeek', - description: 'Subject of client certificate. ', - name: 'zeek.kerberos.cert.client.subject', + 'netflow.netscaler_http_content_type': { + category: 'netflow', + name: 'netflow.netscaler_http_content_type', type: 'keyword', }, - 'zeek.kerberos.cert.server.value': { - category: 'zeek', - description: 'Server certificate. ', - name: 'zeek.kerberos.cert.server.value', + 'netflow.netscaler_http_domain_name': { + category: 'netflow', + name: 'netflow.netscaler_http_domain_name', type: 'keyword', }, - 'zeek.kerberos.cert.server.fuid': { - category: 'zeek', - description: 'File unique ID of server certificate. ', - name: 'zeek.kerberos.cert.server.fuid', + 'netflow.netscaler_http_req_authorization': { + category: 'netflow', + name: 'netflow.netscaler_http_req_authorization', type: 'keyword', }, - 'zeek.kerberos.cert.server.subject': { - category: 'zeek', - description: 'Subject of server certificate. ', - name: 'zeek.kerberos.cert.server.subject', + 'netflow.netscaler_http_req_cookie': { + category: 'netflow', + name: 'netflow.netscaler_http_req_cookie', type: 'keyword', }, - 'zeek.modbus.function': { - category: 'zeek', - description: 'The name of the function message that was sent. ', - name: 'zeek.modbus.function', + 'netflow.netscaler_http_req_forw_fb': { + category: 'netflow', + name: 'netflow.netscaler_http_req_forw_fb', + type: 'long', + }, + 'netflow.netscaler_http_req_forw_lb': { + category: 'netflow', + name: 'netflow.netscaler_http_req_forw_lb', + type: 'long', + }, + 'netflow.netscaler_http_req_host': { + category: 'netflow', + name: 'netflow.netscaler_http_req_host', type: 'keyword', }, - 'zeek.modbus.exception': { - category: 'zeek', - description: 'The exception if the response was a failure. ', - name: 'zeek.modbus.exception', + 'netflow.netscaler_http_req_method': { + category: 'netflow', + name: 'netflow.netscaler_http_req_method', type: 'keyword', }, - 'zeek.modbus.track_address': { - category: 'zeek', - description: - 'Present if policy/protocols/modbus/track-memmap.bro is loaded. Modbus track address. ', - name: 'zeek.modbus.track_address', - type: 'integer', + 'netflow.netscaler_http_req_rcv_fb': { + category: 'netflow', + name: 'netflow.netscaler_http_req_rcv_fb', + type: 'long', }, - 'zeek.mysql.cmd': { - category: 'zeek', - description: 'The command that was issued. ', - name: 'zeek.mysql.cmd', - type: 'keyword', + 'netflow.netscaler_http_req_rcv_lb': { + category: 'netflow', + name: 'netflow.netscaler_http_req_rcv_lb', + type: 'long', }, - 'zeek.mysql.arg': { - category: 'zeek', - description: 'The argument issued to the command. ', - name: 'zeek.mysql.arg', + 'netflow.netscaler_http_req_referer': { + category: 'netflow', + name: 'netflow.netscaler_http_req_referer', type: 'keyword', }, - 'zeek.mysql.success': { - category: 'zeek', - description: 'Whether the command succeeded. ', - name: 'zeek.mysql.success', - type: 'boolean', + 'netflow.netscaler_http_req_url': { + category: 'netflow', + name: 'netflow.netscaler_http_req_url', + type: 'keyword', }, - 'zeek.mysql.rows': { - category: 'zeek', - description: 'The number of affected rows, if any. ', - name: 'zeek.mysql.rows', - type: 'integer', + 'netflow.netscaler_http_req_user_agent': { + category: 'netflow', + name: 'netflow.netscaler_http_req_user_agent', + type: 'keyword', }, - 'zeek.mysql.response': { - category: 'zeek', - description: 'Server message, if any. ', - name: 'zeek.mysql.response', + 'netflow.netscaler_http_req_via': { + category: 'netflow', + name: 'netflow.netscaler_http_req_via', type: 'keyword', }, - 'zeek.notice.connection_id': { - category: 'zeek', - description: 'Identifier of the related connection session. ', - name: 'zeek.notice.connection_id', + 'netflow.netscaler_http_req_xforwarded_for': { + category: 'netflow', + name: 'netflow.netscaler_http_req_xforwarded_for', type: 'keyword', }, - 'zeek.notice.icmp_id': { - category: 'zeek', - description: 'Identifier of the related ICMP session. ', - name: 'zeek.notice.icmp_id', + 'netflow.netscaler_http_res_forw_fb': { + category: 'netflow', + name: 'netflow.netscaler_http_res_forw_fb', + type: 'long', + }, + 'netflow.netscaler_http_res_forw_lb': { + category: 'netflow', + name: 'netflow.netscaler_http_res_forw_lb', + type: 'long', + }, + 'netflow.netscaler_http_res_location': { + category: 'netflow', + name: 'netflow.netscaler_http_res_location', type: 'keyword', }, - 'zeek.notice.file.id': { - category: 'zeek', - description: 'An identifier associated with a single file that is related to this notice. ', - name: 'zeek.notice.file.id', + 'netflow.netscaler_http_res_rcv_fb': { + category: 'netflow', + name: 'netflow.netscaler_http_res_rcv_fb', + type: 'long', + }, + 'netflow.netscaler_http_res_rcv_lb': { + category: 'netflow', + name: 'netflow.netscaler_http_res_rcv_lb', + type: 'long', + }, + 'netflow.netscaler_http_res_set_cookie': { + category: 'netflow', + name: 'netflow.netscaler_http_res_set_cookie', type: 'keyword', }, - 'zeek.notice.file.parent_id': { - category: 'zeek', - description: 'Identifier associated with a container file from which this one was extracted. ', - name: 'zeek.notice.file.parent_id', + 'netflow.netscaler_http_res_set_cookie2': { + category: 'netflow', + name: 'netflow.netscaler_http_res_set_cookie2', type: 'keyword', }, - 'zeek.notice.file.source': { - category: 'zeek', - description: - 'An identification of the source of the file data. E.g. it may be a network protocol over which it was transferred, or a local file path which was read, or some other input source. ', - name: 'zeek.notice.file.source', + 'netflow.netscaler_http_rsp_len': { + category: 'netflow', + name: 'netflow.netscaler_http_rsp_len', + type: 'long', + }, + 'netflow.netscaler_http_rsp_status': { + category: 'netflow', + name: 'netflow.netscaler_http_rsp_status', + type: 'integer', + }, + 'netflow.netscaler_ica_app_module_path': { + category: 'netflow', + name: 'netflow.netscaler_ica_app_module_path', type: 'keyword', }, - 'zeek.notice.file.mime_type': { - category: 'zeek', - description: 'A mime type if the notice is related to a file. ', - name: 'zeek.notice.file.mime_type', + 'netflow.netscaler_ica_app_process_id': { + category: 'netflow', + name: 'netflow.netscaler_ica_app_process_id', + type: 'long', + }, + 'netflow.netscaler_ica_application_name': { + category: 'netflow', + name: 'netflow.netscaler_ica_application_name', type: 'keyword', }, - 'zeek.notice.file.is_orig': { - category: 'zeek', - description: - 'If the source of this file is a network connection, this field indicates if the file is being sent by the originator of the connection or the responder. ', - name: 'zeek.notice.file.is_orig', - type: 'boolean', + 'netflow.netscaler_ica_application_termination_time': { + category: 'netflow', + name: 'netflow.netscaler_ica_application_termination_time', + type: 'long', }, - 'zeek.notice.file.seen_bytes': { - category: 'zeek', - description: 'Number of bytes provided to the file analysis engine for the file. ', - name: 'zeek.notice.file.seen_bytes', + 'netflow.netscaler_ica_application_termination_type': { + category: 'netflow', + name: 'netflow.netscaler_ica_application_termination_type', + type: 'integer', + }, + 'netflow.netscaler_ica_channel_id1': { + category: 'netflow', + name: 'netflow.netscaler_ica_channel_id1', type: 'long', }, - 'zeek.notice.ffile.total_bytes': { - category: 'zeek', - description: 'Total number of bytes that are supposed to comprise the full file. ', - name: 'zeek.notice.ffile.total_bytes', + 'netflow.netscaler_ica_channel_id1_bytes': { + category: 'netflow', + name: 'netflow.netscaler_ica_channel_id1_bytes', type: 'long', }, - 'zeek.notice.file.missing_bytes': { - category: 'zeek', - description: - 'The number of bytes in the file stream that were completely missed during the process of analysis. ', - name: 'zeek.notice.file.missing_bytes', + 'netflow.netscaler_ica_channel_id2': { + category: 'netflow', + name: 'netflow.netscaler_ica_channel_id2', type: 'long', }, - 'zeek.notice.file.overflow_bytes': { - category: 'zeek', - description: - "The number of bytes in the file stream that were not delivered to stream file analyzers. This could be overlapping bytes or bytes that couldn't be reassembled. ", - name: 'zeek.notice.file.overflow_bytes', + 'netflow.netscaler_ica_channel_id2_bytes': { + category: 'netflow', + name: 'netflow.netscaler_ica_channel_id2_bytes', type: 'long', }, - 'zeek.notice.fuid': { - category: 'zeek', - description: 'A file unique ID if this notice is related to a file. ', - name: 'zeek.notice.fuid', - type: 'keyword', + 'netflow.netscaler_ica_channel_id3': { + category: 'netflow', + name: 'netflow.netscaler_ica_channel_id3', + type: 'long', }, - 'zeek.notice.note': { - category: 'zeek', - description: 'The type of the notice. ', - name: 'zeek.notice.note', - type: 'keyword', + 'netflow.netscaler_ica_channel_id3_bytes': { + category: 'netflow', + name: 'netflow.netscaler_ica_channel_id3_bytes', + type: 'long', }, - 'zeek.notice.msg': { - category: 'zeek', - description: 'The human readable message for the notice. ', - name: 'zeek.notice.msg', - type: 'keyword', + 'netflow.netscaler_ica_channel_id4': { + category: 'netflow', + name: 'netflow.netscaler_ica_channel_id4', + type: 'long', }, - 'zeek.notice.sub': { - category: 'zeek', - description: 'The human readable sub-message. ', - name: 'zeek.notice.sub', - type: 'keyword', + 'netflow.netscaler_ica_channel_id4_bytes': { + category: 'netflow', + name: 'netflow.netscaler_ica_channel_id4_bytes', + type: 'long', }, - 'zeek.notice.n': { - category: 'zeek', - description: 'Associated count, or a status code. ', - name: 'zeek.notice.n', + 'netflow.netscaler_ica_channel_id5': { + category: 'netflow', + name: 'netflow.netscaler_ica_channel_id5', type: 'long', }, - 'zeek.notice.peer_name': { - category: 'zeek', - description: 'Name of remote peer that raised this notice. ', - name: 'zeek.notice.peer_name', + 'netflow.netscaler_ica_channel_id5_bytes': { + category: 'netflow', + name: 'netflow.netscaler_ica_channel_id5_bytes', + type: 'long', + }, + 'netflow.netscaler_ica_client_host_name': { + category: 'netflow', + name: 'netflow.netscaler_ica_client_host_name', type: 'keyword', }, - 'zeek.notice.peer_descr': { - category: 'zeek', - description: 'Textual description for the peer that raised this notice. ', - name: 'zeek.notice.peer_descr', - type: 'text', + 'netflow.netscaler_ica_client_ip': { + category: 'netflow', + name: 'netflow.netscaler_ica_client_ip', + type: 'ip', }, - 'zeek.notice.actions': { - category: 'zeek', - description: 'The actions which have been applied to this notice. ', - name: 'zeek.notice.actions', - type: 'keyword', + 'netflow.netscaler_ica_client_launcher': { + category: 'netflow', + name: 'netflow.netscaler_ica_client_launcher', + type: 'integer', }, - 'zeek.notice.email_body_sections': { - category: 'zeek', - description: - 'By adding chunks of text into this element, other scripts can expand on notices that are being emailed. ', - name: 'zeek.notice.email_body_sections', - type: 'text', + 'netflow.netscaler_ica_client_side_rto_count': { + category: 'netflow', + name: 'netflow.netscaler_ica_client_side_rto_count', + type: 'integer', }, - 'zeek.notice.email_delay_tokens': { - category: 'zeek', - description: - 'Adding a string token to this set will cause the built-in emailing functionality to delay sending the email either the token has been removed or the email has been delayed for the specified time duration. ', - name: 'zeek.notice.email_delay_tokens', - type: 'keyword', + 'netflow.netscaler_ica_client_side_window_size': { + category: 'netflow', + name: 'netflow.netscaler_ica_client_side_window_size', + type: 'integer', }, - 'zeek.notice.identifier': { - category: 'zeek', - description: - 'This field is provided when a notice is generated for the purpose of deduplicating notices. ', - name: 'zeek.notice.identifier', - type: 'keyword', + 'netflow.netscaler_ica_client_type': { + category: 'netflow', + name: 'netflow.netscaler_ica_client_type', + type: 'integer', }, - 'zeek.notice.suppress_for': { - category: 'zeek', - description: - 'This field indicates the length of time that this unique notice should be suppressed. ', - name: 'zeek.notice.suppress_for', - type: 'double', + 'netflow.netscaler_ica_clientside_delay': { + category: 'netflow', + name: 'netflow.netscaler_ica_clientside_delay', + type: 'long', }, - 'zeek.notice.dropped': { - category: 'zeek', - description: 'Indicate if the source IP address was dropped and denied network access. ', - name: 'zeek.notice.dropped', - type: 'boolean', + 'netflow.netscaler_ica_clientside_jitter': { + category: 'netflow', + name: 'netflow.netscaler_ica_clientside_jitter', + type: 'long', }, - 'zeek.ntlm.domain': { - category: 'zeek', - description: 'Domain name given by the client. ', - name: 'zeek.ntlm.domain', - type: 'keyword', + 'netflow.netscaler_ica_clientside_packets_retransmit': { + category: 'netflow', + name: 'netflow.netscaler_ica_clientside_packets_retransmit', + type: 'integer', }, - 'zeek.ntlm.hostname': { - category: 'zeek', - description: 'Hostname given by the client. ', - name: 'zeek.ntlm.hostname', - type: 'keyword', + 'netflow.netscaler_ica_clientside_rtt': { + category: 'netflow', + name: 'netflow.netscaler_ica_clientside_rtt', + type: 'long', }, - 'zeek.ntlm.success': { - category: 'zeek', - description: 'Indicate whether or not the authentication was successful. ', - name: 'zeek.ntlm.success', - type: 'boolean', + 'netflow.netscaler_ica_clientside_rx_bytes': { + category: 'netflow', + name: 'netflow.netscaler_ica_clientside_rx_bytes', + type: 'long', }, - 'zeek.ntlm.username': { - category: 'zeek', - description: 'Username given by the client. ', - name: 'zeek.ntlm.username', - type: 'keyword', + 'netflow.netscaler_ica_clientside_srtt': { + category: 'netflow', + name: 'netflow.netscaler_ica_clientside_srtt', + type: 'long', }, - 'zeek.ntlm.server.name.dns': { - category: 'zeek', - description: 'DNS name given by the server in a CHALLENGE. ', - name: 'zeek.ntlm.server.name.dns', - type: 'keyword', + 'netflow.netscaler_ica_clientside_tx_bytes': { + category: 'netflow', + name: 'netflow.netscaler_ica_clientside_tx_bytes', + type: 'long', }, - 'zeek.ntlm.server.name.netbios': { - category: 'zeek', - description: 'NetBIOS name given by the server in a CHALLENGE. ', - name: 'zeek.ntlm.server.name.netbios', - type: 'keyword', + 'netflow.netscaler_ica_connection_priority': { + category: 'netflow', + name: 'netflow.netscaler_ica_connection_priority', + type: 'integer', }, - 'zeek.ntlm.server.name.tree': { - category: 'zeek', - description: 'Tree name given by the server in a CHALLENGE. ', - name: 'zeek.ntlm.server.name.tree', - type: 'keyword', + 'netflow.netscaler_ica_device_serial_no': { + category: 'netflow', + name: 'netflow.netscaler_ica_device_serial_no', + type: 'long', }, - 'zeek.ocsp.file_id': { - category: 'zeek', - description: 'File id of the OCSP reply. ', - name: 'zeek.ocsp.file_id', + 'netflow.netscaler_ica_domain_name': { + category: 'netflow', + name: 'netflow.netscaler_ica_domain_name', type: 'keyword', }, - 'zeek.ocsp.hash.algorithm': { - category: 'zeek', - description: 'Hash algorithm used to generate issuerNameHash and issuerKeyHash. ', - name: 'zeek.ocsp.hash.algorithm', - type: 'keyword', + 'netflow.netscaler_ica_flags': { + category: 'netflow', + name: 'netflow.netscaler_ica_flags', + type: 'long', }, - 'zeek.ocsp.hash.issuer.name': { - category: 'zeek', - description: "Hash of the issuer's distingueshed name. ", - name: 'zeek.ocsp.hash.issuer.name', - type: 'keyword', + 'netflow.netscaler_ica_host_delay': { + category: 'netflow', + name: 'netflow.netscaler_ica_host_delay', + type: 'long', }, - 'zeek.ocsp.hash.issuer.key': { - category: 'zeek', - description: "Hash of the issuer's public key. ", - name: 'zeek.ocsp.hash.issuer.key', - type: 'keyword', + 'netflow.netscaler_ica_l7_client_latency': { + category: 'netflow', + name: 'netflow.netscaler_ica_l7_client_latency', + type: 'long', }, - 'zeek.ocsp.serial_number': { - category: 'zeek', - description: 'Serial number of the affected certificate. ', - name: 'zeek.ocsp.serial_number', - type: 'keyword', + 'netflow.netscaler_ica_l7_server_latency': { + category: 'netflow', + name: 'netflow.netscaler_ica_l7_server_latency', + type: 'long', }, - 'zeek.ocsp.status': { - category: 'zeek', - description: 'Status of the affected certificate. ', - name: 'zeek.ocsp.status', - type: 'keyword', + 'netflow.netscaler_ica_launch_mechanism': { + category: 'netflow', + name: 'netflow.netscaler_ica_launch_mechanism', + type: 'integer', }, - 'zeek.ocsp.revoke.time': { - category: 'zeek', - description: 'Time at which the certificate was revoked. ', - name: 'zeek.ocsp.revoke.time', - type: 'date', + 'netflow.netscaler_ica_network_update_end_time': { + category: 'netflow', + name: 'netflow.netscaler_ica_network_update_end_time', + type: 'long', }, - 'zeek.ocsp.revoke.reason': { - category: 'zeek', - description: 'Reason for which the certificate was revoked. ', - name: 'zeek.ocsp.revoke.reason', + 'netflow.netscaler_ica_network_update_start_time': { + category: 'netflow', + name: 'netflow.netscaler_ica_network_update_start_time', + type: 'long', + }, + 'netflow.netscaler_ica_rtt': { + category: 'netflow', + name: 'netflow.netscaler_ica_rtt', + type: 'long', + }, + 'netflow.netscaler_ica_server_name': { + category: 'netflow', + name: 'netflow.netscaler_ica_server_name', type: 'keyword', }, - 'zeek.ocsp.update.this': { - category: 'zeek', - description: 'The time at which the status being shows is known to have been correct. ', - name: 'zeek.ocsp.update.this', - type: 'date', + 'netflow.netscaler_ica_server_side_rto_count': { + category: 'netflow', + name: 'netflow.netscaler_ica_server_side_rto_count', + type: 'integer', }, - 'zeek.ocsp.update.next': { - category: 'zeek', - description: - 'The latest time at which new information about the status of the certificate will be available. ', - name: 'zeek.ocsp.update.next', - type: 'date', + 'netflow.netscaler_ica_server_side_window_size': { + category: 'netflow', + name: 'netflow.netscaler_ica_server_side_window_size', + type: 'integer', }, - 'zeek.pe.client': { - category: 'zeek', - description: "The client's version string. ", - name: 'zeek.pe.client', - type: 'keyword', + 'netflow.netscaler_ica_serverside_delay': { + category: 'netflow', + name: 'netflow.netscaler_ica_serverside_delay', + type: 'long', }, - 'zeek.pe.id': { - category: 'zeek', - description: 'File id of this portable executable file. ', - name: 'zeek.pe.id', - type: 'keyword', + 'netflow.netscaler_ica_serverside_jitter': { + category: 'netflow', + name: 'netflow.netscaler_ica_serverside_jitter', + type: 'long', }, - 'zeek.pe.machine': { - category: 'zeek', - description: 'The target machine that the file was compiled for. ', - name: 'zeek.pe.machine', - type: 'keyword', + 'netflow.netscaler_ica_serverside_packets_retransmit': { + category: 'netflow', + name: 'netflow.netscaler_ica_serverside_packets_retransmit', + type: 'integer', }, - 'zeek.pe.compile_time': { - category: 'zeek', - description: 'The time that the file was created at. ', - name: 'zeek.pe.compile_time', - type: 'date', + 'netflow.netscaler_ica_serverside_rtt': { + category: 'netflow', + name: 'netflow.netscaler_ica_serverside_rtt', + type: 'long', }, - 'zeek.pe.os': { - category: 'zeek', - description: 'The required operating system. ', - name: 'zeek.pe.os', - type: 'keyword', + 'netflow.netscaler_ica_serverside_srtt': { + category: 'netflow', + name: 'netflow.netscaler_ica_serverside_srtt', + type: 'long', }, - 'zeek.pe.subsystem': { - category: 'zeek', - description: 'The subsystem that is required to run this file. ', - name: 'zeek.pe.subsystem', - type: 'keyword', + 'netflow.netscaler_ica_session_end_time': { + category: 'netflow', + name: 'netflow.netscaler_ica_session_end_time', + type: 'long', }, - 'zeek.pe.is_exe': { - category: 'zeek', - description: 'Is the file an executable, or just an object file? ', - name: 'zeek.pe.is_exe', - type: 'boolean', + 'netflow.netscaler_ica_session_guid': { + category: 'netflow', + name: 'netflow.netscaler_ica_session_guid', + type: 'short', }, - 'zeek.pe.is_64bit': { - category: 'zeek', - description: 'Is the file a 64-bit executable? ', - name: 'zeek.pe.is_64bit', - type: 'boolean', + 'netflow.netscaler_ica_session_reconnects': { + category: 'netflow', + name: 'netflow.netscaler_ica_session_reconnects', + type: 'short', }, - 'zeek.pe.uses_aslr': { - category: 'zeek', - description: 'Does the file support Address Space Layout Randomization? ', - name: 'zeek.pe.uses_aslr', - type: 'boolean', + 'netflow.netscaler_ica_session_setup_time': { + category: 'netflow', + name: 'netflow.netscaler_ica_session_setup_time', + type: 'long', }, - 'zeek.pe.uses_dep': { - category: 'zeek', - description: 'Does the file support Data Execution Prevention? ', - name: 'zeek.pe.uses_dep', - type: 'boolean', + 'netflow.netscaler_ica_session_update_begin_sec': { + category: 'netflow', + name: 'netflow.netscaler_ica_session_update_begin_sec', + type: 'long', }, - 'zeek.pe.uses_code_integrity': { - category: 'zeek', - description: 'Does the file enforce code integrity checks? ', - name: 'zeek.pe.uses_code_integrity', - type: 'boolean', + 'netflow.netscaler_ica_session_update_end_sec': { + category: 'netflow', + name: 'netflow.netscaler_ica_session_update_end_sec', + type: 'long', }, - 'zeek.pe.uses_seh': { - category: 'zeek', - description: 'Does the file use structured exception handing? ', - name: 'zeek.pe.uses_seh', - type: 'boolean', + 'netflow.netscaler_ica_username': { + category: 'netflow', + name: 'netflow.netscaler_ica_username', + type: 'keyword', }, - 'zeek.pe.has_import_table': { - category: 'zeek', - description: 'Does the file have an import table? ', - name: 'zeek.pe.has_import_table', - type: 'boolean', + 'netflow.netscaler_license_type': { + category: 'netflow', + name: 'netflow.netscaler_license_type', + type: 'short', }, - 'zeek.pe.has_export_table': { - category: 'zeek', - description: 'Does the file have an export table? ', - name: 'zeek.pe.has_export_table', - type: 'boolean', + 'netflow.netscaler_main_page_core_id': { + category: 'netflow', + name: 'netflow.netscaler_main_page_core_id', + type: 'long', }, - 'zeek.pe.has_cert_table': { - category: 'zeek', - description: 'Does the file have an attribute certificate table? ', - name: 'zeek.pe.has_cert_table', - type: 'boolean', + 'netflow.netscaler_main_page_id': { + category: 'netflow', + name: 'netflow.netscaler_main_page_id', + type: 'long', + }, + 'netflow.netscaler_max_license_count': { + category: 'netflow', + name: 'netflow.netscaler_max_license_count', + type: 'long', + }, + 'netflow.netscaler_msi_client_cookie': { + category: 'netflow', + name: 'netflow.netscaler_msi_client_cookie', + type: 'short', + }, + 'netflow.netscaler_round_trip_time': { + category: 'netflow', + name: 'netflow.netscaler_round_trip_time', + type: 'long', + }, + 'netflow.netscaler_server_ttfb': { + category: 'netflow', + name: 'netflow.netscaler_server_ttfb', + type: 'long', }, - 'zeek.pe.has_debug_data': { - category: 'zeek', - description: 'Does the file have a debug table? ', - name: 'zeek.pe.has_debug_data', - type: 'boolean', + 'netflow.netscaler_server_ttlb': { + category: 'netflow', + name: 'netflow.netscaler_server_ttlb', + type: 'long', }, - 'zeek.pe.section_names': { - category: 'zeek', - description: 'The names of the sections, in order. ', - name: 'zeek.pe.section_names', + 'netflow.netscaler_syslog_message': { + category: 'netflow', + name: 'netflow.netscaler_syslog_message', type: 'keyword', }, - 'zeek.radius.username': { - category: 'zeek', - description: 'The username, if present. ', - name: 'zeek.radius.username', - type: 'keyword', + 'netflow.netscaler_syslog_priority': { + category: 'netflow', + name: 'netflow.netscaler_syslog_priority', + type: 'short', }, - 'zeek.radius.mac': { - category: 'zeek', - description: 'MAC address, if present. ', - name: 'zeek.radius.mac', - type: 'keyword', + 'netflow.netscaler_syslog_timestamp': { + category: 'netflow', + name: 'netflow.netscaler_syslog_timestamp', + type: 'long', }, - 'zeek.radius.framed_addr': { - category: 'zeek', - description: - 'The address given to the network access server, if present. This is only a hint from the RADIUS server and the network access server is not required to honor the address. ', - name: 'zeek.radius.framed_addr', - type: 'ip', + 'netflow.netscaler_transaction_id': { + category: 'netflow', + name: 'netflow.netscaler_transaction_id', + type: 'long', }, - 'zeek.radius.remote_ip': { - category: 'zeek', - description: - 'Remote IP address, if present. This is collected from the Tunnel-Client-Endpoint attribute. ', - name: 'zeek.radius.remote_ip', - type: 'ip', + 'netflow.netscaler_unknown270': { + category: 'netflow', + name: 'netflow.netscaler_unknown270', + type: 'long', }, - 'zeek.radius.connect_info': { - category: 'zeek', - description: 'Connect info, if present. ', - name: 'zeek.radius.connect_info', - type: 'keyword', + 'netflow.netscaler_unknown271': { + category: 'netflow', + name: 'netflow.netscaler_unknown271', + type: 'long', }, - 'zeek.radius.reply_msg': { - category: 'zeek', - description: - 'Reply message from the server challenge. This is frequently shown to the user authenticating. ', - name: 'zeek.radius.reply_msg', - type: 'keyword', + 'netflow.netscaler_unknown272': { + category: 'netflow', + name: 'netflow.netscaler_unknown272', + type: 'long', }, - 'zeek.radius.result': { - category: 'zeek', - description: 'Successful or failed authentication. ', - name: 'zeek.radius.result', - type: 'keyword', + 'netflow.netscaler_unknown273': { + category: 'netflow', + name: 'netflow.netscaler_unknown273', + type: 'long', }, - 'zeek.radius.ttl': { - category: 'zeek', - description: - 'The duration between the first request and either the "Access-Accept" message or an error. If the field is empty, it means that either the request or response was not seen. ', - name: 'zeek.radius.ttl', - type: 'integer', + 'netflow.netscaler_unknown274': { + category: 'netflow', + name: 'netflow.netscaler_unknown274', + type: 'long', }, - 'zeek.radius.logged': { - category: 'zeek', - description: 'Whether this has already been logged and can be ignored. ', - name: 'zeek.radius.logged', - type: 'boolean', + 'netflow.netscaler_unknown275': { + category: 'netflow', + name: 'netflow.netscaler_unknown275', + type: 'long', }, - 'zeek.rdp.cookie': { - category: 'zeek', - description: 'Cookie value used by the client machine. This is typically a username. ', - name: 'zeek.rdp.cookie', - type: 'keyword', + 'netflow.netscaler_unknown276': { + category: 'netflow', + name: 'netflow.netscaler_unknown276', + type: 'long', }, - 'zeek.rdp.result': { - category: 'zeek', - description: - "Status result for the connection. It's a mix between RDP negotation failure messages and GCC server create response messages. ", - name: 'zeek.rdp.result', - type: 'keyword', + 'netflow.netscaler_unknown277': { + category: 'netflow', + name: 'netflow.netscaler_unknown277', + type: 'long', }, - 'zeek.rdp.security_protocol': { - category: 'zeek', - description: 'Security protocol chosen by the server. ', - name: 'zeek.rdp.security_protocol', - type: 'keyword', + 'netflow.netscaler_unknown278': { + category: 'netflow', + name: 'netflow.netscaler_unknown278', + type: 'long', }, - 'zeek.rdp.keyboard_layout': { - category: 'zeek', - description: 'Keyboard layout (language) of the client machine. ', - name: 'zeek.rdp.keyboard_layout', - type: 'keyword', + 'netflow.netscaler_unknown279': { + category: 'netflow', + name: 'netflow.netscaler_unknown279', + type: 'long', }, - 'zeek.rdp.client.build': { - category: 'zeek', - description: 'RDP client version used by the client machine. ', - name: 'zeek.rdp.client.build', - type: 'keyword', + 'netflow.netscaler_unknown280': { + category: 'netflow', + name: 'netflow.netscaler_unknown280', + type: 'long', }, - 'zeek.rdp.client.client_name': { - category: 'zeek', - description: 'Name of the client machine. ', - name: 'zeek.rdp.client.client_name', - type: 'keyword', + 'netflow.netscaler_unknown281': { + category: 'netflow', + name: 'netflow.netscaler_unknown281', + type: 'long', }, - 'zeek.rdp.client.product_id': { - category: 'zeek', - description: 'Product ID of the client machine. ', - name: 'zeek.rdp.client.product_id', - type: 'keyword', + 'netflow.netscaler_unknown282': { + category: 'netflow', + name: 'netflow.netscaler_unknown282', + type: 'long', }, - 'zeek.rdp.desktop.width': { - category: 'zeek', - description: 'Desktop width of the client machine. ', - name: 'zeek.rdp.desktop.width', - type: 'integer', + 'netflow.netscaler_unknown283': { + category: 'netflow', + name: 'netflow.netscaler_unknown283', + type: 'long', }, - 'zeek.rdp.desktop.height': { - category: 'zeek', - description: 'Desktop height of the client machine. ', - name: 'zeek.rdp.desktop.height', - type: 'integer', + 'netflow.netscaler_unknown284': { + category: 'netflow', + name: 'netflow.netscaler_unknown284', + type: 'long', }, - 'zeek.rdp.desktop.color_depth': { - category: 'zeek', - description: 'The color depth requested by the client in the high_color_depth field. ', - name: 'zeek.rdp.desktop.color_depth', - type: 'keyword', + 'netflow.netscaler_unknown285': { + category: 'netflow', + name: 'netflow.netscaler_unknown285', + type: 'long', }, - 'zeek.rdp.cert.type': { - category: 'zeek', - description: - 'If the connection is being encrypted with native RDP encryption, this is the type of cert being used. ', - name: 'zeek.rdp.cert.type', - type: 'keyword', + 'netflow.netscaler_unknown286': { + category: 'netflow', + name: 'netflow.netscaler_unknown286', + type: 'long', }, - 'zeek.rdp.cert.count': { - category: 'zeek', - description: 'The number of certs seen. X.509 can transfer an entire certificate chain. ', - name: 'zeek.rdp.cert.count', - type: 'integer', + 'netflow.netscaler_unknown287': { + category: 'netflow', + name: 'netflow.netscaler_unknown287', + type: 'long', }, - 'zeek.rdp.cert.permanent': { - category: 'zeek', - description: - 'Indicates if the provided certificate or certificate chain is permanent or temporary. ', - name: 'zeek.rdp.cert.permanent', - type: 'boolean', + 'netflow.netscaler_unknown288': { + category: 'netflow', + name: 'netflow.netscaler_unknown288', + type: 'long', }, - 'zeek.rdp.encryption.level': { - category: 'zeek', - description: 'Encryption level of the connection. ', - name: 'zeek.rdp.encryption.level', - type: 'keyword', + 'netflow.netscaler_unknown289': { + category: 'netflow', + name: 'netflow.netscaler_unknown289', + type: 'long', }, - 'zeek.rdp.encryption.method': { - category: 'zeek', - description: 'Encryption method of the connection. ', - name: 'zeek.rdp.encryption.method', - type: 'keyword', + 'netflow.netscaler_unknown290': { + category: 'netflow', + name: 'netflow.netscaler_unknown290', + type: 'long', }, - 'zeek.rdp.done': { - category: 'zeek', - description: 'Track status of logging RDP connections. ', - name: 'zeek.rdp.done', - type: 'boolean', + 'netflow.netscaler_unknown291': { + category: 'netflow', + name: 'netflow.netscaler_unknown291', + type: 'long', }, - 'zeek.rdp.ssl': { - category: 'zeek', - description: - '(present if policy/protocols/rdp/indicate_ssl.bro is loaded) Flag the connection if it was seen over SSL. ', - name: 'zeek.rdp.ssl', - type: 'boolean', + 'netflow.netscaler_unknown292': { + category: 'netflow', + name: 'netflow.netscaler_unknown292', + type: 'long', }, - 'zeek.rfb.version.client.major': { - category: 'zeek', - description: 'Major version of the client. ', - name: 'zeek.rfb.version.client.major', - type: 'keyword', + 'netflow.netscaler_unknown293': { + category: 'netflow', + name: 'netflow.netscaler_unknown293', + type: 'long', }, - 'zeek.rfb.version.client.minor': { - category: 'zeek', - description: 'Minor version of the client. ', - name: 'zeek.rfb.version.client.minor', - type: 'keyword', + 'netflow.netscaler_unknown294': { + category: 'netflow', + name: 'netflow.netscaler_unknown294', + type: 'long', }, - 'zeek.rfb.version.server.major': { - category: 'zeek', - description: 'Major version of the server. ', - name: 'zeek.rfb.version.server.major', - type: 'keyword', + 'netflow.netscaler_unknown295': { + category: 'netflow', + name: 'netflow.netscaler_unknown295', + type: 'long', }, - 'zeek.rfb.version.server.minor': { - category: 'zeek', - description: 'Minor version of the server. ', - name: 'zeek.rfb.version.server.minor', - type: 'keyword', + 'netflow.netscaler_unknown296': { + category: 'netflow', + name: 'netflow.netscaler_unknown296', + type: 'long', }, - 'zeek.rfb.auth.success': { - category: 'zeek', - description: 'Whether or not authentication was successful. ', - name: 'zeek.rfb.auth.success', - type: 'boolean', + 'netflow.netscaler_unknown297': { + category: 'netflow', + name: 'netflow.netscaler_unknown297', + type: 'long', }, - 'zeek.rfb.auth.method': { - category: 'zeek', - description: 'Identifier of authentication method used. ', - name: 'zeek.rfb.auth.method', - type: 'keyword', + 'netflow.netscaler_unknown298': { + category: 'netflow', + name: 'netflow.netscaler_unknown298', + type: 'long', }, - 'zeek.rfb.share_flag': { - category: 'zeek', - description: 'Whether the client has an exclusive or a shared session. ', - name: 'zeek.rfb.share_flag', - type: 'boolean', + 'netflow.netscaler_unknown299': { + category: 'netflow', + name: 'netflow.netscaler_unknown299', + type: 'long', }, - 'zeek.rfb.desktop_name': { - category: 'zeek', - description: 'Name of the screen that is being shared. ', - name: 'zeek.rfb.desktop_name', - type: 'keyword', + 'netflow.netscaler_unknown300': { + category: 'netflow', + name: 'netflow.netscaler_unknown300', + type: 'long', }, - 'zeek.rfb.width': { - category: 'zeek', - description: 'Width of the screen that is being shared. ', - name: 'zeek.rfb.width', - type: 'integer', + 'netflow.netscaler_unknown301': { + category: 'netflow', + name: 'netflow.netscaler_unknown301', + type: 'long', }, - 'zeek.rfb.height': { - category: 'zeek', - description: 'Height of the screen that is being shared. ', - name: 'zeek.rfb.height', - type: 'integer', + 'netflow.netscaler_unknown302': { + category: 'netflow', + name: 'netflow.netscaler_unknown302', + type: 'long', }, - 'zeek.sip.transaction_depth': { - category: 'zeek', - description: - 'Represents the pipelined depth into the connection of this request/response transaction. ', - name: 'zeek.sip.transaction_depth', - type: 'integer', + 'netflow.netscaler_unknown303': { + category: 'netflow', + name: 'netflow.netscaler_unknown303', + type: 'long', }, - 'zeek.sip.sequence.method': { - category: 'zeek', - description: 'Verb used in the SIP request (INVITE, REGISTER etc.). ', - name: 'zeek.sip.sequence.method', - type: 'keyword', + 'netflow.netscaler_unknown304': { + category: 'netflow', + name: 'netflow.netscaler_unknown304', + type: 'long', }, - 'zeek.sip.sequence.number': { - category: 'zeek', - description: 'Contents of the CSeq: header from the client. ', - name: 'zeek.sip.sequence.number', - type: 'keyword', + 'netflow.netscaler_unknown305': { + category: 'netflow', + name: 'netflow.netscaler_unknown305', + type: 'long', }, - 'zeek.sip.uri': { - category: 'zeek', - description: 'URI used in the request. ', - name: 'zeek.sip.uri', - type: 'keyword', + 'netflow.netscaler_unknown306': { + category: 'netflow', + name: 'netflow.netscaler_unknown306', + type: 'long', }, - 'zeek.sip.date': { - category: 'zeek', - description: 'Contents of the Date: header from the client. ', - name: 'zeek.sip.date', - type: 'keyword', + 'netflow.netscaler_unknown307': { + category: 'netflow', + name: 'netflow.netscaler_unknown307', + type: 'long', }, - 'zeek.sip.request.from': { - category: 'zeek', - description: - "Contents of the request From: header Note: The tag= value that's usually appended to the sender is stripped off and not logged. ", - name: 'zeek.sip.request.from', - type: 'keyword', + 'netflow.netscaler_unknown308': { + category: 'netflow', + name: 'netflow.netscaler_unknown308', + type: 'long', }, - 'zeek.sip.request.to': { - category: 'zeek', - description: 'Contents of the To: header. ', - name: 'zeek.sip.request.to', - type: 'keyword', + 'netflow.netscaler_unknown309': { + category: 'netflow', + name: 'netflow.netscaler_unknown309', + type: 'long', }, - 'zeek.sip.request.path': { - category: 'zeek', - description: 'The client message transmission path, as extracted from the headers. ', - name: 'zeek.sip.request.path', - type: 'keyword', + 'netflow.netscaler_unknown310': { + category: 'netflow', + name: 'netflow.netscaler_unknown310', + type: 'long', }, - 'zeek.sip.request.body_length': { - category: 'zeek', - description: 'Contents of the Content-Length: header from the client. ', - name: 'zeek.sip.request.body_length', + 'netflow.netscaler_unknown311': { + category: 'netflow', + name: 'netflow.netscaler_unknown311', type: 'long', }, - 'zeek.sip.response.from': { - category: 'zeek', - description: - "Contents of the response From: header Note: The tag= value that's usually appended to the sender is stripped off and not logged. ", - name: 'zeek.sip.response.from', - type: 'keyword', + 'netflow.netscaler_unknown312': { + category: 'netflow', + name: 'netflow.netscaler_unknown312', + type: 'long', }, - 'zeek.sip.response.to': { - category: 'zeek', - description: 'Contents of the response To: header. ', - name: 'zeek.sip.response.to', - type: 'keyword', + 'netflow.netscaler_unknown313': { + category: 'netflow', + name: 'netflow.netscaler_unknown313', + type: 'long', }, - 'zeek.sip.response.path': { - category: 'zeek', - description: 'The server message transmission path, as extracted from the headers. ', - name: 'zeek.sip.response.path', - type: 'keyword', + 'netflow.netscaler_unknown314': { + category: 'netflow', + name: 'netflow.netscaler_unknown314', + type: 'long', }, - 'zeek.sip.response.body_length': { - category: 'zeek', - description: 'Contents of the Content-Length: header from the server. ', - name: 'zeek.sip.response.body_length', + 'netflow.netscaler_unknown315': { + category: 'netflow', + name: 'netflow.netscaler_unknown315', type: 'long', }, - 'zeek.sip.reply_to': { - category: 'zeek', - description: 'Contents of the Reply-To: header. ', - name: 'zeek.sip.reply_to', + 'netflow.netscaler_unknown316': { + category: 'netflow', + name: 'netflow.netscaler_unknown316', type: 'keyword', }, - 'zeek.sip.call_id': { - category: 'zeek', - description: 'Contents of the Call-ID: header from the client. ', - name: 'zeek.sip.call_id', - type: 'keyword', + 'netflow.netscaler_unknown317': { + category: 'netflow', + name: 'netflow.netscaler_unknown317', + type: 'long', }, - 'zeek.sip.subject': { - category: 'zeek', - description: 'Contents of the Subject: header from the client. ', - name: 'zeek.sip.subject', - type: 'keyword', + 'netflow.netscaler_unknown318': { + category: 'netflow', + name: 'netflow.netscaler_unknown318', + type: 'long', }, - 'zeek.sip.user_agent': { - category: 'zeek', - description: 'Contents of the User-Agent: header from the client. ', - name: 'zeek.sip.user_agent', + 'netflow.netscaler_unknown319': { + category: 'netflow', + name: 'netflow.netscaler_unknown319', type: 'keyword', }, - 'zeek.sip.status.code': { - category: 'zeek', - description: 'Status code returned by the server. ', - name: 'zeek.sip.status.code', + 'netflow.netscaler_unknown320': { + category: 'netflow', + name: 'netflow.netscaler_unknown320', type: 'integer', }, - 'zeek.sip.status.msg': { - category: 'zeek', - description: 'Status message returned by the server. ', - name: 'zeek.sip.status.msg', - type: 'keyword', + 'netflow.netscaler_unknown321': { + category: 'netflow', + name: 'netflow.netscaler_unknown321', + type: 'long', }, - 'zeek.sip.warning': { - category: 'zeek', - description: 'Contents of the Warning: header. ', - name: 'zeek.sip.warning', - type: 'keyword', + 'netflow.netscaler_unknown322': { + category: 'netflow', + name: 'netflow.netscaler_unknown322', + type: 'long', }, - 'zeek.sip.content_type': { - category: 'zeek', - description: 'Contents of the Content-Type: header from the server. ', - name: 'zeek.sip.content_type', - type: 'keyword', + 'netflow.netscaler_unknown323': { + category: 'netflow', + name: 'netflow.netscaler_unknown323', + type: 'integer', }, - 'zeek.smb_cmd.command': { - category: 'zeek', - description: 'The command sent by the client. ', - name: 'zeek.smb_cmd.command', - type: 'keyword', + 'netflow.netscaler_unknown324': { + category: 'netflow', + name: 'netflow.netscaler_unknown324', + type: 'integer', }, - 'zeek.smb_cmd.sub_command': { - category: 'zeek', - description: 'The subcommand sent by the client, if present. ', - name: 'zeek.smb_cmd.sub_command', - type: 'keyword', + 'netflow.netscaler_unknown325': { + category: 'netflow', + name: 'netflow.netscaler_unknown325', + type: 'integer', }, - 'zeek.smb_cmd.argument': { - category: 'zeek', - description: 'Command argument sent by the client, if any. ', - name: 'zeek.smb_cmd.argument', - type: 'keyword', + 'netflow.netscaler_unknown326': { + category: 'netflow', + name: 'netflow.netscaler_unknown326', + type: 'integer', }, - 'zeek.smb_cmd.status': { - category: 'zeek', - description: "Server reply to the client's command. ", - name: 'zeek.smb_cmd.status', - type: 'keyword', + 'netflow.netscaler_unknown327': { + category: 'netflow', + name: 'netflow.netscaler_unknown327', + type: 'long', }, - 'zeek.smb_cmd.rtt': { - category: 'zeek', - description: 'Round trip time from the request to the response. ', - name: 'zeek.smb_cmd.rtt', - type: 'double', + 'netflow.netscaler_unknown328': { + category: 'netflow', + name: 'netflow.netscaler_unknown328', + type: 'integer', }, - 'zeek.smb_cmd.version': { - category: 'zeek', - description: 'Version of SMB for the command. ', - name: 'zeek.smb_cmd.version', - type: 'keyword', + 'netflow.netscaler_unknown329': { + category: 'netflow', + name: 'netflow.netscaler_unknown329', + type: 'integer', }, - 'zeek.smb_cmd.username': { - category: 'zeek', - description: 'Authenticated username, if available. ', - name: 'zeek.smb_cmd.username', - type: 'keyword', + 'netflow.netscaler_unknown330': { + category: 'netflow', + name: 'netflow.netscaler_unknown330', + type: 'integer', }, - 'zeek.smb_cmd.tree': { - category: 'zeek', - description: - 'If this is related to a tree, this is the tree that was used for the current command. ', - name: 'zeek.smb_cmd.tree', - type: 'keyword', + 'netflow.netscaler_unknown331': { + category: 'netflow', + name: 'netflow.netscaler_unknown331', + type: 'integer', }, - 'zeek.smb_cmd.tree_service': { - category: 'zeek', - description: 'The type of tree (disk share, printer share, named pipe, etc.). ', - name: 'zeek.smb_cmd.tree_service', - type: 'keyword', + 'netflow.netscaler_unknown332': { + category: 'netflow', + name: 'netflow.netscaler_unknown332', + type: 'long', }, - 'zeek.smb_cmd.file.name': { - category: 'zeek', - description: 'Filename if one was seen. ', - name: 'zeek.smb_cmd.file.name', + 'netflow.netscaler_unknown333': { + category: 'netflow', + name: 'netflow.netscaler_unknown333', type: 'keyword', }, - 'zeek.smb_cmd.file.action': { - category: 'zeek', - description: 'Action this log record represents. ', - name: 'zeek.smb_cmd.file.action', + 'netflow.netscaler_unknown334': { + category: 'netflow', + name: 'netflow.netscaler_unknown334', type: 'keyword', }, - 'zeek.smb_cmd.file.uid': { - category: 'zeek', - description: 'UID of the referenced file. ', - name: 'zeek.smb_cmd.file.uid', - type: 'keyword', + 'netflow.netscaler_unknown335': { + category: 'netflow', + name: 'netflow.netscaler_unknown335', + type: 'long', + }, + 'netflow.netscaler_unknown336': { + category: 'netflow', + name: 'netflow.netscaler_unknown336', + type: 'long', + }, + 'netflow.netscaler_unknown337': { + category: 'netflow', + name: 'netflow.netscaler_unknown337', + type: 'long', + }, + 'netflow.netscaler_unknown338': { + category: 'netflow', + name: 'netflow.netscaler_unknown338', + type: 'long', + }, + 'netflow.netscaler_unknown339': { + category: 'netflow', + name: 'netflow.netscaler_unknown339', + type: 'long', + }, + 'netflow.netscaler_unknown340': { + category: 'netflow', + name: 'netflow.netscaler_unknown340', + type: 'long', + }, + 'netflow.netscaler_unknown341': { + category: 'netflow', + name: 'netflow.netscaler_unknown341', + type: 'long', }, - 'zeek.smb_cmd.file.host.tx': { - category: 'zeek', - description: 'Address of the transmitting host. ', - name: 'zeek.smb_cmd.file.host.tx', - type: 'ip', + 'netflow.netscaler_unknown342': { + category: 'netflow', + name: 'netflow.netscaler_unknown342', + type: 'long', }, - 'zeek.smb_cmd.file.host.rx': { - category: 'zeek', - description: 'Address of the receiving host. ', - name: 'zeek.smb_cmd.file.host.rx', - type: 'ip', + 'netflow.netscaler_unknown343': { + category: 'netflow', + name: 'netflow.netscaler_unknown343', + type: 'long', }, - 'zeek.smb_cmd.smb1_offered_dialects': { - category: 'zeek', - description: - 'Present if base/protocols/smb/smb1-main.bro is loaded. Dialects offered by the client. ', - name: 'zeek.smb_cmd.smb1_offered_dialects', - type: 'keyword', + 'netflow.netscaler_unknown344': { + category: 'netflow', + name: 'netflow.netscaler_unknown344', + type: 'long', }, - 'zeek.smb_cmd.smb2_offered_dialects': { - category: 'zeek', - description: - 'Present if base/protocols/smb/smb2-main.bro is loaded. Dialects offered by the client. ', - name: 'zeek.smb_cmd.smb2_offered_dialects', - type: 'integer', + 'netflow.netscaler_unknown345': { + category: 'netflow', + name: 'netflow.netscaler_unknown345', + type: 'long', }, - 'zeek.smb_files.action': { - category: 'zeek', - description: 'Action this log record represents. ', - name: 'zeek.smb_files.action', - type: 'keyword', + 'netflow.netscaler_unknown346': { + category: 'netflow', + name: 'netflow.netscaler_unknown346', + type: 'long', }, - 'zeek.smb_files.fid': { - category: 'zeek', - description: 'ID referencing this file. ', - name: 'zeek.smb_files.fid', + 'netflow.netscaler_unknown347': { + category: 'netflow', + name: 'netflow.netscaler_unknown347', + type: 'long', + }, + 'netflow.netscaler_unknown348': { + category: 'netflow', + name: 'netflow.netscaler_unknown348', type: 'integer', }, - 'zeek.smb_files.name': { - category: 'zeek', - description: 'Filename if one was seen. ', - name: 'zeek.smb_files.name', + 'netflow.netscaler_unknown349': { + category: 'netflow', + name: 'netflow.netscaler_unknown349', type: 'keyword', }, - 'zeek.smb_files.path': { - category: 'zeek', - description: 'Path pulled from the tree this file was transferred to or from. ', - name: 'zeek.smb_files.path', + 'netflow.netscaler_unknown350': { + category: 'netflow', + name: 'netflow.netscaler_unknown350', type: 'keyword', }, - 'zeek.smb_files.previous_name': { - category: 'zeek', - description: "If the rename action was seen, this will be the file's previous name. ", - name: 'zeek.smb_files.previous_name', + 'netflow.netscaler_unknown351': { + category: 'netflow', + name: 'netflow.netscaler_unknown351', type: 'keyword', }, - 'zeek.smb_files.size': { - category: 'zeek', - description: 'Byte size of the file. ', - name: 'zeek.smb_files.size', + 'netflow.netscaler_unknown352': { + category: 'netflow', + name: 'netflow.netscaler_unknown352', + type: 'integer', + }, + 'netflow.netscaler_unknown353': { + category: 'netflow', + name: 'netflow.netscaler_unknown353', type: 'long', }, - 'zeek.smb_files.times.accessed': { - category: 'zeek', - description: "The file's access time. ", - name: 'zeek.smb_files.times.accessed', - type: 'date', + 'netflow.netscaler_unknown354': { + category: 'netflow', + name: 'netflow.netscaler_unknown354', + type: 'long', }, - 'zeek.smb_files.times.changed': { - category: 'zeek', - description: "The file's change time. ", - name: 'zeek.smb_files.times.changed', - type: 'date', + 'netflow.netscaler_unknown355': { + category: 'netflow', + name: 'netflow.netscaler_unknown355', + type: 'long', }, - 'zeek.smb_files.times.created': { - category: 'zeek', - description: "The file's create time. ", - name: 'zeek.smb_files.times.created', - type: 'date', + 'netflow.netscaler_unknown356': { + category: 'netflow', + name: 'netflow.netscaler_unknown356', + type: 'long', }, - 'zeek.smb_files.times.modified': { - category: 'zeek', - description: "The file's modify time. ", - name: 'zeek.smb_files.times.modified', - type: 'date', + 'netflow.netscaler_unknown357': { + category: 'netflow', + name: 'netflow.netscaler_unknown357', + type: 'long', }, - 'zeek.smb_files.uuid': { - category: 'zeek', - description: 'UUID referencing this file if DCE/RPC. ', - name: 'zeek.smb_files.uuid', - type: 'keyword', + 'netflow.netscaler_unknown363': { + category: 'netflow', + name: 'netflow.netscaler_unknown363', + type: 'short', }, - 'zeek.smb_mapping.path': { - category: 'zeek', - description: 'Name of the tree path. ', - name: 'zeek.smb_mapping.path', - type: 'keyword', + 'netflow.netscaler_unknown383': { + category: 'netflow', + name: 'netflow.netscaler_unknown383', + type: 'short', }, - 'zeek.smb_mapping.service': { - category: 'zeek', - description: 'The type of resource of the tree (disk share, printer share, named pipe, etc.). ', - name: 'zeek.smb_mapping.service', - type: 'keyword', + 'netflow.netscaler_unknown391': { + category: 'netflow', + name: 'netflow.netscaler_unknown391', + type: 'long', }, - 'zeek.smb_mapping.native_file_system': { - category: 'zeek', - description: 'File system of the tree. ', - name: 'zeek.smb_mapping.native_file_system', - type: 'keyword', + 'netflow.netscaler_unknown398': { + category: 'netflow', + name: 'netflow.netscaler_unknown398', + type: 'long', }, - 'zeek.smb_mapping.share_type': { - category: 'zeek', - description: - 'If this is SMB2, a share type will be included. For SMB1, the type of share will be deduced and included as well. ', - name: 'zeek.smb_mapping.share_type', - type: 'keyword', + 'netflow.netscaler_unknown404': { + category: 'netflow', + name: 'netflow.netscaler_unknown404', + type: 'long', }, - 'zeek.smtp.transaction_depth': { - category: 'zeek', - description: - 'A count to represent the depth of this message transaction in a single connection where multiple messages were transferred. ', - name: 'zeek.smtp.transaction_depth', - type: 'integer', + 'netflow.netscaler_unknown405': { + category: 'netflow', + name: 'netflow.netscaler_unknown405', + type: 'long', }, - 'zeek.smtp.helo': { - category: 'zeek', - description: 'Contents of the Helo header. ', - name: 'zeek.smtp.helo', - type: 'keyword', + 'netflow.netscaler_unknown427': { + category: 'netflow', + name: 'netflow.netscaler_unknown427', + type: 'long', }, - 'zeek.smtp.mail_from': { - category: 'zeek', - description: 'Email addresses found in the MAIL FROM header. ', - name: 'zeek.smtp.mail_from', - type: 'keyword', + 'netflow.netscaler_unknown429': { + category: 'netflow', + name: 'netflow.netscaler_unknown429', + type: 'short', }, - 'zeek.smtp.rcpt_to': { - category: 'zeek', - description: 'Email addresses found in the RCPT TO header. ', - name: 'zeek.smtp.rcpt_to', - type: 'keyword', + 'netflow.netscaler_unknown432': { + category: 'netflow', + name: 'netflow.netscaler_unknown432', + type: 'short', }, - 'zeek.smtp.date': { - category: 'zeek', - description: 'Contents of the Date header. ', - name: 'zeek.smtp.date', - type: 'date', + 'netflow.netscaler_unknown433': { + category: 'netflow', + name: 'netflow.netscaler_unknown433', + type: 'short', }, - 'zeek.smtp.from': { - category: 'zeek', - description: 'Contents of the From header. ', - name: 'zeek.smtp.from', - type: 'keyword', + 'netflow.netscaler_unknown453': { + category: 'netflow', + name: 'netflow.netscaler_unknown453', + type: 'long', }, - 'zeek.smtp.to': { - category: 'zeek', - description: 'Contents of the To header. ', - name: 'zeek.smtp.to', - type: 'keyword', + 'netflow.netscaler_unknown465': { + category: 'netflow', + name: 'netflow.netscaler_unknown465', + type: 'long', }, - 'zeek.smtp.cc': { - category: 'zeek', - description: 'Contents of the CC header. ', - name: 'zeek.smtp.cc', - type: 'keyword', + 'netflow.new_connection_delta_count': { + category: 'netflow', + name: 'netflow.new_connection_delta_count', + type: 'long', }, - 'zeek.smtp.reply_to': { - category: 'zeek', - description: 'Contents of the ReplyTo header. ', - name: 'zeek.smtp.reply_to', - type: 'keyword', + 'netflow.next_header_ipv6': { + category: 'netflow', + name: 'netflow.next_header_ipv6', + type: 'short', }, - 'zeek.smtp.msg_id': { - category: 'zeek', - description: 'Contents of the MsgID header. ', - name: 'zeek.smtp.msg_id', - type: 'keyword', + 'netflow.non_empty_packet_count': { + category: 'netflow', + name: 'netflow.non_empty_packet_count', + type: 'long', }, - 'zeek.smtp.in_reply_to': { - category: 'zeek', - description: 'Contents of the In-Reply-To header. ', - name: 'zeek.smtp.in_reply_to', - type: 'keyword', + 'netflow.not_sent_flow_total_count': { + category: 'netflow', + name: 'netflow.not_sent_flow_total_count', + type: 'long', }, - 'zeek.smtp.subject': { - category: 'zeek', - description: 'Contents of the Subject header. ', - name: 'zeek.smtp.subject', - type: 'keyword', + 'netflow.not_sent_layer2_octet_total_count': { + category: 'netflow', + name: 'netflow.not_sent_layer2_octet_total_count', + type: 'long', }, - 'zeek.smtp.x_originating_ip': { - category: 'zeek', - description: 'Contents of the X-Originating-IP header. ', - name: 'zeek.smtp.x_originating_ip', - type: 'keyword', + 'netflow.not_sent_octet_total_count': { + category: 'netflow', + name: 'netflow.not_sent_octet_total_count', + type: 'long', }, - 'zeek.smtp.first_received': { - category: 'zeek', - description: 'Contents of the first Received header. ', - name: 'zeek.smtp.first_received', - type: 'keyword', + 'netflow.not_sent_packet_total_count': { + category: 'netflow', + name: 'netflow.not_sent_packet_total_count', + type: 'long', }, - 'zeek.smtp.second_received': { - category: 'zeek', - description: 'Contents of the second Received header. ', - name: 'zeek.smtp.second_received', - type: 'keyword', + 'netflow.observation_domain_id': { + category: 'netflow', + name: 'netflow.observation_domain_id', + type: 'long', }, - 'zeek.smtp.last_reply': { - category: 'zeek', - description: 'The last message that the server sent to the client. ', - name: 'zeek.smtp.last_reply', + 'netflow.observation_domain_name': { + category: 'netflow', + name: 'netflow.observation_domain_name', type: 'keyword', }, - 'zeek.smtp.path': { - category: 'zeek', - description: 'The message transmission path, as extracted from the headers. ', - name: 'zeek.smtp.path', - type: 'ip', + 'netflow.observation_point_id': { + category: 'netflow', + name: 'netflow.observation_point_id', + type: 'long', }, - 'zeek.smtp.user_agent': { - category: 'zeek', - description: 'Value of the User-Agent header from the client. ', - name: 'zeek.smtp.user_agent', - type: 'keyword', + 'netflow.observation_point_type': { + category: 'netflow', + name: 'netflow.observation_point_type', + type: 'short', }, - 'zeek.smtp.tls': { - category: 'zeek', - description: 'Indicates that the connection has switched to using TLS. ', - name: 'zeek.smtp.tls', - type: 'boolean', + 'netflow.observation_time_microseconds': { + category: 'netflow', + name: 'netflow.observation_time_microseconds', + type: 'date', }, - 'zeek.smtp.process_received_from': { - category: 'zeek', - description: 'Indicates if the "Received: from" headers should still be processed. ', - name: 'zeek.smtp.process_received_from', - type: 'boolean', + 'netflow.observation_time_milliseconds': { + category: 'netflow', + name: 'netflow.observation_time_milliseconds', + type: 'date', }, - 'zeek.smtp.has_client_activity': { - category: 'zeek', - description: 'Indicates if client activity has been seen, but not yet logged. ', - name: 'zeek.smtp.has_client_activity', - type: 'boolean', + 'netflow.observation_time_nanoseconds': { + category: 'netflow', + name: 'netflow.observation_time_nanoseconds', + type: 'date', }, - 'zeek.smtp.fuids': { - category: 'zeek', - description: - '(present if base/protocols/smtp/files.bro is loaded) An ordered vector of file unique IDs seen attached to the message. ', - name: 'zeek.smtp.fuids', - type: 'keyword', + 'netflow.observation_time_seconds': { + category: 'netflow', + name: 'netflow.observation_time_seconds', + type: 'date', }, - 'zeek.smtp.is_webmail': { - category: 'zeek', - description: 'Indicates if the message was sent through a webmail interface. ', - name: 'zeek.smtp.is_webmail', - type: 'boolean', + 'netflow.observed_flow_total_count': { + category: 'netflow', + name: 'netflow.observed_flow_total_count', + type: 'long', }, - 'zeek.snmp.duration': { - category: 'zeek', - description: - 'The amount of time between the first packet beloning to the SNMP session and the latest one seen. ', - name: 'zeek.snmp.duration', - type: 'double', + 'netflow.octet_delta_count': { + category: 'netflow', + name: 'netflow.octet_delta_count', + type: 'long', }, - 'zeek.snmp.version': { - category: 'zeek', - description: 'The version of SNMP being used. ', - name: 'zeek.snmp.version', - type: 'keyword', + 'netflow.octet_delta_sum_of_squares': { + category: 'netflow', + name: 'netflow.octet_delta_sum_of_squares', + type: 'long', }, - 'zeek.snmp.community': { - category: 'zeek', - description: - "The community string of the first SNMP packet associated with the session. This is used as part of SNMP's (v1 and v2c) administrative/security framework. See RFC 1157 or RFC 1901. ", - name: 'zeek.snmp.community', - type: 'keyword', + 'netflow.octet_total_count': { + category: 'netflow', + name: 'netflow.octet_total_count', + type: 'long', }, - 'zeek.snmp.get.requests': { - category: 'zeek', - description: - 'The number of variable bindings in GetRequest/GetNextRequest PDUs seen for the session. ', - name: 'zeek.snmp.get.requests', - type: 'integer', + 'netflow.octet_total_sum_of_squares': { + category: 'netflow', + name: 'netflow.octet_total_sum_of_squares', + type: 'long', }, - 'zeek.snmp.get.bulk_requests': { - category: 'zeek', - description: 'The number of variable bindings in GetBulkRequest PDUs seen for the session. ', - name: 'zeek.snmp.get.bulk_requests', - type: 'integer', + 'netflow.opaque_octets': { + category: 'netflow', + name: 'netflow.opaque_octets', + type: 'short', }, - 'zeek.snmp.get.responses': { - category: 'zeek', - description: - 'The number of variable bindings in GetResponse/Response PDUs seen for the session. ', - name: 'zeek.snmp.get.responses', - type: 'integer', + 'netflow.original_exporter_ipv4_address': { + category: 'netflow', + name: 'netflow.original_exporter_ipv4_address', + type: 'ip', }, - 'zeek.snmp.set.requests': { - category: 'zeek', - description: 'The number of variable bindings in SetRequest PDUs seen for the session. ', - name: 'zeek.snmp.set.requests', - type: 'integer', + 'netflow.original_exporter_ipv6_address': { + category: 'netflow', + name: 'netflow.original_exporter_ipv6_address', + type: 'ip', }, - 'zeek.snmp.display_string': { - category: 'zeek', - description: 'A system description of the SNMP responder endpoint. ', - name: 'zeek.snmp.display_string', - type: 'keyword', + 'netflow.original_flows_completed': { + category: 'netflow', + name: 'netflow.original_flows_completed', + type: 'long', }, - 'zeek.snmp.up_since': { - category: 'zeek', - description: "The time at which the SNMP responder endpoint claims it's been up since. ", - name: 'zeek.snmp.up_since', - type: 'date', + 'netflow.original_flows_initiated': { + category: 'netflow', + name: 'netflow.original_flows_initiated', + type: 'long', }, - 'zeek.socks.version': { - category: 'zeek', - description: 'Protocol version of SOCKS. ', - name: 'zeek.socks.version', - type: 'integer', + 'netflow.original_flows_present': { + category: 'netflow', + name: 'netflow.original_flows_present', + type: 'long', }, - 'zeek.socks.user': { - category: 'zeek', - description: 'Username used to request a login to the proxy. ', - name: 'zeek.socks.user', - type: 'keyword', + 'netflow.original_observation_domain_id': { + category: 'netflow', + name: 'netflow.original_observation_domain_id', + type: 'long', }, - 'zeek.socks.password': { - category: 'zeek', - description: 'Password used to request a login to the proxy. ', - name: 'zeek.socks.password', + 'netflow.os_finger_print': { + category: 'netflow', + name: 'netflow.os_finger_print', type: 'keyword', }, - 'zeek.socks.status': { - category: 'zeek', - description: 'Server status for the attempt at using the proxy. ', - name: 'zeek.socks.status', + 'netflow.os_name': { + category: 'netflow', + name: 'netflow.os_name', type: 'keyword', }, - 'zeek.socks.request.host': { - category: 'zeek', - description: 'Client requested SOCKS address. Could be an address, a name or both. ', - name: 'zeek.socks.request.host', + 'netflow.os_version': { + category: 'netflow', + name: 'netflow.os_version', type: 'keyword', }, - 'zeek.socks.request.port': { - category: 'zeek', - description: 'Client requested port. ', - name: 'zeek.socks.request.port', - type: 'integer', - }, - 'zeek.socks.bound.host': { - category: 'zeek', - description: 'Server bound address. Could be an address, a name or both. ', - name: 'zeek.socks.bound.host', + 'netflow.p2p_technology': { + category: 'netflow', + name: 'netflow.p2p_technology', type: 'keyword', }, - 'zeek.socks.bound.port': { - category: 'zeek', - description: 'Server bound port. ', - name: 'zeek.socks.bound.port', - type: 'integer', + 'netflow.packet_delta_count': { + category: 'netflow', + name: 'netflow.packet_delta_count', + type: 'long', }, - 'zeek.socks.capture_password': { - category: 'zeek', - description: 'Determines if the password will be captured for this request. ', - name: 'zeek.socks.capture_password', - type: 'boolean', + 'netflow.packet_total_count': { + category: 'netflow', + name: 'netflow.packet_total_count', + type: 'long', }, - 'zeek.ssh.client': { - category: 'zeek', - description: "The client's version string. ", - name: 'zeek.ssh.client', - type: 'keyword', + 'netflow.padding_octets': { + category: 'netflow', + name: 'netflow.padding_octets', + type: 'short', }, - 'zeek.ssh.direction': { - category: 'zeek', - description: - 'Direction of the connection. If the client was a local host logging into an external host, this would be OUTBOUND. INBOUND would be set for the opposite situation. ', - name: 'zeek.ssh.direction', + 'netflow.payload': { + category: 'netflow', + name: 'netflow.payload', type: 'keyword', }, - 'zeek.ssh.host_key': { - category: 'zeek', - description: "The server's key thumbprint. ", - name: 'zeek.ssh.host_key', - type: 'keyword', + 'netflow.payload_entropy': { + category: 'netflow', + name: 'netflow.payload_entropy', + type: 'short', }, - 'zeek.ssh.server': { - category: 'zeek', - description: "The server's version string. ", - name: 'zeek.ssh.server', - type: 'keyword', + 'netflow.payload_length_ipv6': { + category: 'netflow', + name: 'netflow.payload_length_ipv6', + type: 'integer', + }, + 'netflow.policy_qos_classification_hierarchy': { + category: 'netflow', + name: 'netflow.policy_qos_classification_hierarchy', + type: 'long', + }, + 'netflow.policy_qos_queue_index': { + category: 'netflow', + name: 'netflow.policy_qos_queue_index', + type: 'long', + }, + 'netflow.policy_qos_queuedrops': { + category: 'netflow', + name: 'netflow.policy_qos_queuedrops', + type: 'long', }, - 'zeek.ssh.version': { - category: 'zeek', - description: 'SSH major version (1 or 2). ', - name: 'zeek.ssh.version', + 'netflow.policy_qos_queueindex': { + category: 'netflow', + name: 'netflow.policy_qos_queueindex', + type: 'long', + }, + 'netflow.port_id': { + category: 'netflow', + name: 'netflow.port_id', + type: 'long', + }, + 'netflow.port_range_end': { + category: 'netflow', + name: 'netflow.port_range_end', type: 'integer', }, - 'zeek.ssh.algorithm.cipher': { - category: 'zeek', - description: 'The encryption algorithm in use. ', - name: 'zeek.ssh.algorithm.cipher', - type: 'keyword', + 'netflow.port_range_num_ports': { + category: 'netflow', + name: 'netflow.port_range_num_ports', + type: 'integer', }, - 'zeek.ssh.algorithm.compression': { - category: 'zeek', - description: 'The compression algorithm in use. ', - name: 'zeek.ssh.algorithm.compression', - type: 'keyword', + 'netflow.port_range_start': { + category: 'netflow', + name: 'netflow.port_range_start', + type: 'integer', }, - 'zeek.ssh.algorithm.host_key': { - category: 'zeek', - description: "The server host key's algorithm. ", - name: 'zeek.ssh.algorithm.host_key', - type: 'keyword', + 'netflow.port_range_step_size': { + category: 'netflow', + name: 'netflow.port_range_step_size', + type: 'integer', }, - 'zeek.ssh.algorithm.key_exchange': { - category: 'zeek', - description: 'The key exchange algorithm in use. ', - name: 'zeek.ssh.algorithm.key_exchange', + 'netflow.post_destination_mac_address': { + category: 'netflow', + name: 'netflow.post_destination_mac_address', type: 'keyword', }, - 'zeek.ssh.algorithm.mac': { - category: 'zeek', - description: 'The signing (MAC) algorithm in use. ', - name: 'zeek.ssh.algorithm.mac', - type: 'keyword', + 'netflow.post_dot1q_customer_vlan_id': { + category: 'netflow', + name: 'netflow.post_dot1q_customer_vlan_id', + type: 'integer', }, - 'zeek.ssh.auth.attempts': { - category: 'zeek', - description: - "The number of authentication attemps we observed. There's always at least one, since some servers might support no authentication at all. It's important to note that not all of these are failures, since some servers require two-factor auth (e.g. password AND pubkey). ", - name: 'zeek.ssh.auth.attempts', + 'netflow.post_dot1q_vlan_id': { + category: 'netflow', + name: 'netflow.post_dot1q_vlan_id', type: 'integer', }, - 'zeek.ssh.auth.success': { - category: 'zeek', - description: 'Authentication result. ', - name: 'zeek.ssh.auth.success', - type: 'boolean', + 'netflow.post_ip_class_of_service': { + category: 'netflow', + name: 'netflow.post_ip_class_of_service', + type: 'short', }, - 'zeek.ssl.version': { - category: 'zeek', - description: 'SSL/TLS version that was logged. ', - name: 'zeek.ssl.version', - type: 'keyword', + 'netflow.post_ip_diff_serv_code_point': { + category: 'netflow', + name: 'netflow.post_ip_diff_serv_code_point', + type: 'short', }, - 'zeek.ssl.cipher': { - category: 'zeek', - description: 'SSL/TLS cipher suite that was logged. ', - name: 'zeek.ssl.cipher', - type: 'keyword', + 'netflow.post_ip_precedence': { + category: 'netflow', + name: 'netflow.post_ip_precedence', + type: 'short', }, - 'zeek.ssl.curve': { - category: 'zeek', - description: 'Elliptic curve that was logged when using ECDH/ECDHE. ', - name: 'zeek.ssl.curve', - type: 'keyword', + 'netflow.post_layer2_octet_delta_count': { + category: 'netflow', + name: 'netflow.post_layer2_octet_delta_count', + type: 'long', }, - 'zeek.ssl.resumed': { - category: 'zeek', - description: - 'Flag to indicate if the session was resumed reusing the key material exchanged in an earlier connection. ', - name: 'zeek.ssl.resumed', - type: 'boolean', + 'netflow.post_layer2_octet_total_count': { + category: 'netflow', + name: 'netflow.post_layer2_octet_total_count', + type: 'long', }, - 'zeek.ssl.next_protocol': { - category: 'zeek', - description: - 'Next protocol the server chose using the application layer next protocol extension. ', - name: 'zeek.ssl.next_protocol', - type: 'keyword', + 'netflow.post_mcast_layer2_octet_delta_count': { + category: 'netflow', + name: 'netflow.post_mcast_layer2_octet_delta_count', + type: 'long', }, - 'zeek.ssl.established': { - category: 'zeek', - description: 'Flag to indicate if this ssl session has been established successfully. ', - name: 'zeek.ssl.established', - type: 'boolean', + 'netflow.post_mcast_layer2_octet_total_count': { + category: 'netflow', + name: 'netflow.post_mcast_layer2_octet_total_count', + type: 'long', }, - 'zeek.ssl.validation.status': { - category: 'zeek', - description: 'Result of certificate validation for this connection. ', - name: 'zeek.ssl.validation.status', - type: 'keyword', + 'netflow.post_mcast_octet_delta_count': { + category: 'netflow', + name: 'netflow.post_mcast_octet_delta_count', + type: 'long', }, - 'zeek.ssl.validation.code': { - category: 'zeek', - description: - 'Result of certificate validation for this connection, given as OpenSSL validation code. ', - name: 'zeek.ssl.validation.code', - type: 'keyword', + 'netflow.post_mcast_octet_total_count': { + category: 'netflow', + name: 'netflow.post_mcast_octet_total_count', + type: 'long', }, - 'zeek.ssl.last_alert': { - category: 'zeek', - description: 'Last alert that was seen during the connection. ', - name: 'zeek.ssl.last_alert', - type: 'keyword', + 'netflow.post_mcast_packet_delta_count': { + category: 'netflow', + name: 'netflow.post_mcast_packet_delta_count', + type: 'long', }, - 'zeek.ssl.server.name': { - category: 'zeek', - description: - 'Value of the Server Name Indicator SSL/TLS extension. It indicates the server name that the client was requesting. ', - name: 'zeek.ssl.server.name', - type: 'keyword', + 'netflow.post_mcast_packet_total_count': { + category: 'netflow', + name: 'netflow.post_mcast_packet_total_count', + type: 'long', }, - 'zeek.ssl.server.cert_chain': { - category: 'zeek', - description: - 'Chain of certificates offered by the server to validate its complete signing chain. ', - name: 'zeek.ssl.server.cert_chain', - type: 'keyword', + 'netflow.post_mpls_top_label_exp': { + category: 'netflow', + name: 'netflow.post_mpls_top_label_exp', + type: 'short', }, - 'zeek.ssl.server.cert_chain_fuids': { - category: 'zeek', - description: - 'An ordered vector of certificate file identifiers for the certificates offered by the server. ', - name: 'zeek.ssl.server.cert_chain_fuids', - type: 'keyword', + 'netflow.post_napt_destination_transport_port': { + category: 'netflow', + name: 'netflow.post_napt_destination_transport_port', + type: 'integer', }, - 'zeek.ssl.server.issuer.common_name': { - category: 'zeek', - description: 'Common name of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.common_name', - type: 'keyword', + 'netflow.post_napt_source_transport_port': { + category: 'netflow', + name: 'netflow.post_napt_source_transport_port', + type: 'integer', }, - 'zeek.ssl.server.issuer.country': { - category: 'zeek', - description: 'Country code of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.country', - type: 'keyword', + 'netflow.post_nat_destination_ipv4_address': { + category: 'netflow', + name: 'netflow.post_nat_destination_ipv4_address', + type: 'ip', }, - 'zeek.ssl.server.issuer.locality': { - category: 'zeek', - description: 'Locality of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.locality', - type: 'keyword', + 'netflow.post_nat_destination_ipv6_address': { + category: 'netflow', + name: 'netflow.post_nat_destination_ipv6_address', + type: 'ip', }, - 'zeek.ssl.server.issuer.organization': { - category: 'zeek', - description: 'Organization of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.organization', - type: 'keyword', + 'netflow.post_nat_source_ipv4_address': { + category: 'netflow', + name: 'netflow.post_nat_source_ipv4_address', + type: 'ip', }, - 'zeek.ssl.server.issuer.organizational_unit': { - category: 'zeek', - description: - 'Organizational unit of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.organizational_unit', - type: 'keyword', + 'netflow.post_nat_source_ipv6_address': { + category: 'netflow', + name: 'netflow.post_nat_source_ipv6_address', + type: 'ip', }, - 'zeek.ssl.server.issuer.state': { - category: 'zeek', - description: - 'State or province name of the signer of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.issuer.state', - type: 'keyword', + 'netflow.post_octet_delta_count': { + category: 'netflow', + name: 'netflow.post_octet_delta_count', + type: 'long', }, - 'zeek.ssl.server.subject.common_name': { - category: 'zeek', - description: 'Common name of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.common_name', - type: 'keyword', + 'netflow.post_octet_total_count': { + category: 'netflow', + name: 'netflow.post_octet_total_count', + type: 'long', }, - 'zeek.ssl.server.subject.country': { - category: 'zeek', - description: 'Country code of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.country', - type: 'keyword', + 'netflow.post_packet_delta_count': { + category: 'netflow', + name: 'netflow.post_packet_delta_count', + type: 'long', }, - 'zeek.ssl.server.subject.locality': { - category: 'zeek', - description: 'Locality of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.locality', - type: 'keyword', + 'netflow.post_packet_total_count': { + category: 'netflow', + name: 'netflow.post_packet_total_count', + type: 'long', }, - 'zeek.ssl.server.subject.organization': { - category: 'zeek', - description: 'Organization of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.organization', + 'netflow.post_source_mac_address': { + category: 'netflow', + name: 'netflow.post_source_mac_address', type: 'keyword', }, - 'zeek.ssl.server.subject.organizational_unit': { - category: 'zeek', - description: 'Organizational unit of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.organizational_unit', - type: 'keyword', + 'netflow.post_vlan_id': { + category: 'netflow', + name: 'netflow.post_vlan_id', + type: 'integer', }, - 'zeek.ssl.server.subject.state': { - category: 'zeek', - description: 'State or province name of the X.509 certificate offered by the server. ', - name: 'zeek.ssl.server.subject.state', - type: 'keyword', + 'netflow.private_enterprise_number': { + category: 'netflow', + name: 'netflow.private_enterprise_number', + type: 'long', }, - 'zeek.ssl.client.cert_chain': { - category: 'zeek', - description: - 'Chain of certificates offered by the client to validate its complete signing chain. ', - name: 'zeek.ssl.client.cert_chain', + 'netflow.procera_apn': { + category: 'netflow', + name: 'netflow.procera_apn', type: 'keyword', }, - 'zeek.ssl.client.cert_chain_fuids': { - category: 'zeek', - description: - 'An ordered vector of certificate file identifiers for the certificates offered by the client. ', - name: 'zeek.ssl.client.cert_chain_fuids', + 'netflow.procera_base_service': { + category: 'netflow', + name: 'netflow.procera_base_service', type: 'keyword', }, - 'zeek.ssl.client.issuer.common_name': { - category: 'zeek', - description: 'Common name of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.common_name', + 'netflow.procera_content_categories': { + category: 'netflow', + name: 'netflow.procera_content_categories', type: 'keyword', }, - 'zeek.ssl.client.issuer.country': { - category: 'zeek', - description: 'Country code of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.country', - type: 'keyword', + 'netflow.procera_device_id': { + category: 'netflow', + name: 'netflow.procera_device_id', + type: 'long', }, - 'zeek.ssl.client.issuer.locality': { - category: 'zeek', - description: 'Locality of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.locality', - type: 'keyword', + 'netflow.procera_external_rtt': { + category: 'netflow', + name: 'netflow.procera_external_rtt', + type: 'integer', }, - 'zeek.ssl.client.issuer.organization': { - category: 'zeek', - description: 'Organization of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.organization', + 'netflow.procera_flow_behavior': { + category: 'netflow', + name: 'netflow.procera_flow_behavior', type: 'keyword', }, - 'zeek.ssl.client.issuer.organizational_unit': { - category: 'zeek', - description: - 'Organizational unit of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.organizational_unit', + 'netflow.procera_ggsn': { + category: 'netflow', + name: 'netflow.procera_ggsn', type: 'keyword', }, - 'zeek.ssl.client.issuer.state': { - category: 'zeek', - description: - 'State or province name of the signer of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.issuer.state', + 'netflow.procera_http_content_type': { + category: 'netflow', + name: 'netflow.procera_http_content_type', type: 'keyword', }, - 'zeek.ssl.client.subject.common_name': { - category: 'zeek', - description: 'Common name of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.common_name', - type: 'keyword', + 'netflow.procera_http_file_length': { + category: 'netflow', + name: 'netflow.procera_http_file_length', + type: 'long', }, - 'zeek.ssl.client.subject.country': { - category: 'zeek', - description: 'Country code of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.country', + 'netflow.procera_http_language': { + category: 'netflow', + name: 'netflow.procera_http_language', type: 'keyword', }, - 'zeek.ssl.client.subject.locality': { - category: 'zeek', - description: 'Locality of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.locality', + 'netflow.procera_http_location': { + category: 'netflow', + name: 'netflow.procera_http_location', type: 'keyword', }, - 'zeek.ssl.client.subject.organization': { - category: 'zeek', - description: 'Organization of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.organization', + 'netflow.procera_http_referer': { + category: 'netflow', + name: 'netflow.procera_http_referer', type: 'keyword', }, - 'zeek.ssl.client.subject.organizational_unit': { - category: 'zeek', - description: 'Organizational unit of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.organizational_unit', + 'netflow.procera_http_request_method': { + category: 'netflow', + name: 'netflow.procera_http_request_method', type: 'keyword', }, - 'zeek.ssl.client.subject.state': { - category: 'zeek', - description: 'State or province name of the X.509 certificate offered by the client. ', - name: 'zeek.ssl.client.subject.state', + 'netflow.procera_http_request_version': { + category: 'netflow', + name: 'netflow.procera_http_request_version', type: 'keyword', }, - 'zeek.stats.peer': { - category: 'zeek', - description: 'Peer that generated this log. Mostly for clusters. ', - name: 'zeek.stats.peer', + 'netflow.procera_http_response_status': { + category: 'netflow', + name: 'netflow.procera_http_response_status', + type: 'integer', + }, + 'netflow.procera_http_url': { + category: 'netflow', + name: 'netflow.procera_http_url', type: 'keyword', }, - 'zeek.stats.memory': { - category: 'zeek', - description: 'Amount of memory currently in use in MB. ', - name: 'zeek.stats.memory', - type: 'integer', + 'netflow.procera_http_user_agent': { + category: 'netflow', + name: 'netflow.procera_http_user_agent', + type: 'keyword', }, - 'zeek.stats.packets.processed': { - category: 'zeek', - description: 'Number of packets processed since the last stats interval. ', - name: 'zeek.stats.packets.processed', + 'netflow.procera_imsi': { + category: 'netflow', + name: 'netflow.procera_imsi', type: 'long', }, - 'zeek.stats.packets.dropped': { - category: 'zeek', - description: - 'Number of packets dropped since the last stats interval if reading live traffic. ', - name: 'zeek.stats.packets.dropped', + 'netflow.procera_incoming_octets': { + category: 'netflow', + name: 'netflow.procera_incoming_octets', type: 'long', }, - 'zeek.stats.packets.received': { - category: 'zeek', - description: - 'Number of packets seen on the link since the last stats interval if reading live traffic. ', - name: 'zeek.stats.packets.received', + 'netflow.procera_incoming_packets': { + category: 'netflow', + name: 'netflow.procera_incoming_packets', type: 'long', }, - 'zeek.stats.bytes.received': { - category: 'zeek', - description: 'Number of bytes received since the last stats interval if reading live traffic. ', - name: 'zeek.stats.bytes.received', + 'netflow.procera_incoming_shaping_drops': { + category: 'netflow', + name: 'netflow.procera_incoming_shaping_drops', type: 'long', }, - 'zeek.stats.connections.tcp.active': { - category: 'zeek', - description: 'TCP connections currently in memory. ', - name: 'zeek.stats.connections.tcp.active', - type: 'integer', - }, - 'zeek.stats.connections.tcp.count': { - category: 'zeek', - description: 'TCP connections seen since last stats interval. ', - name: 'zeek.stats.connections.tcp.count', + 'netflow.procera_incoming_shaping_latency': { + category: 'netflow', + name: 'netflow.procera_incoming_shaping_latency', type: 'integer', }, - 'zeek.stats.connections.udp.active': { - category: 'zeek', - description: 'UDP connections currently in memory. ', - name: 'zeek.stats.connections.udp.active', + 'netflow.procera_internal_rtt': { + category: 'netflow', + name: 'netflow.procera_internal_rtt', type: 'integer', }, - 'zeek.stats.connections.udp.count': { - category: 'zeek', - description: 'UDP connections seen since last stats interval. ', - name: 'zeek.stats.connections.udp.count', - type: 'integer', + 'netflow.procera_local_ipv4_host': { + category: 'netflow', + name: 'netflow.procera_local_ipv4_host', + type: 'ip', }, - 'zeek.stats.connections.icmp.active': { - category: 'zeek', - description: 'ICMP connections currently in memory. ', - name: 'zeek.stats.connections.icmp.active', - type: 'integer', + 'netflow.procera_local_ipv6_host': { + category: 'netflow', + name: 'netflow.procera_local_ipv6_host', + type: 'ip', }, - 'zeek.stats.connections.icmp.count': { - category: 'zeek', - description: 'ICMP connections seen since last stats interval. ', - name: 'zeek.stats.connections.icmp.count', - type: 'integer', + 'netflow.procera_msisdn': { + category: 'netflow', + name: 'netflow.procera_msisdn', + type: 'long', }, - 'zeek.stats.events.processed': { - category: 'zeek', - description: 'Number of events processed since the last stats interval. ', - name: 'zeek.stats.events.processed', - type: 'integer', + 'netflow.procera_outgoing_octets': { + category: 'netflow', + name: 'netflow.procera_outgoing_octets', + type: 'long', }, - 'zeek.stats.events.queued': { - category: 'zeek', - description: 'Number of events that have been queued since the last stats interval. ', - name: 'zeek.stats.events.queued', - type: 'integer', + 'netflow.procera_outgoing_packets': { + category: 'netflow', + name: 'netflow.procera_outgoing_packets', + type: 'long', }, - 'zeek.stats.timers.count': { - category: 'zeek', - description: 'Number of timers scheduled since last stats interval. ', - name: 'zeek.stats.timers.count', - type: 'integer', + 'netflow.procera_outgoing_shaping_drops': { + category: 'netflow', + name: 'netflow.procera_outgoing_shaping_drops', + type: 'long', }, - 'zeek.stats.timers.active': { - category: 'zeek', - description: 'Current number of scheduled timers. ', - name: 'zeek.stats.timers.active', + 'netflow.procera_outgoing_shaping_latency': { + category: 'netflow', + name: 'netflow.procera_outgoing_shaping_latency', type: 'integer', }, - 'zeek.stats.files.count': { - category: 'zeek', - description: 'Number of files seen since last stats interval. ', - name: 'zeek.stats.files.count', - type: 'integer', + 'netflow.procera_property': { + category: 'netflow', + name: 'netflow.procera_property', + type: 'keyword', }, - 'zeek.stats.files.active': { - category: 'zeek', - description: 'Current number of files actively being seen. ', - name: 'zeek.stats.files.active', - type: 'integer', + 'netflow.procera_qoe_incoming_external': { + category: 'netflow', + name: 'netflow.procera_qoe_incoming_external', + type: 'float', }, - 'zeek.stats.dns_requests.count': { - category: 'zeek', - description: 'Number of DNS requests seen since last stats interval. ', - name: 'zeek.stats.dns_requests.count', - type: 'integer', + 'netflow.procera_qoe_incoming_internal': { + category: 'netflow', + name: 'netflow.procera_qoe_incoming_internal', + type: 'float', }, - 'zeek.stats.dns_requests.active': { - category: 'zeek', - description: 'Current number of DNS requests awaiting a reply. ', - name: 'zeek.stats.dns_requests.active', - type: 'integer', + 'netflow.procera_qoe_outgoing_external': { + category: 'netflow', + name: 'netflow.procera_qoe_outgoing_external', + type: 'float', }, - 'zeek.stats.reassembly_size.tcp': { - category: 'zeek', - description: 'Current size of TCP data in reassembly. ', - name: 'zeek.stats.reassembly_size.tcp', - type: 'integer', + 'netflow.procera_qoe_outgoing_internal': { + category: 'netflow', + name: 'netflow.procera_qoe_outgoing_internal', + type: 'float', }, - 'zeek.stats.reassembly_size.file': { - category: 'zeek', - description: 'Current size of File data in reassembly. ', - name: 'zeek.stats.reassembly_size.file', - type: 'integer', + 'netflow.procera_rat': { + category: 'netflow', + name: 'netflow.procera_rat', + type: 'keyword', }, - 'zeek.stats.reassembly_size.frag': { - category: 'zeek', - description: 'Current size of packet fragment data in reassembly. ', - name: 'zeek.stats.reassembly_size.frag', - type: 'integer', + 'netflow.procera_remote_ipv4_host': { + category: 'netflow', + name: 'netflow.procera_remote_ipv4_host', + type: 'ip', }, - 'zeek.stats.reassembly_size.unknown': { - category: 'zeek', - description: 'Current size of unknown data in reassembly (this is only PIA buffer right now). ', - name: 'zeek.stats.reassembly_size.unknown', - type: 'integer', + 'netflow.procera_remote_ipv6_host': { + category: 'netflow', + name: 'netflow.procera_remote_ipv6_host', + type: 'ip', }, - 'zeek.stats.timestamp_lag': { - category: 'zeek', - description: 'Lag between the wall clock and packet timestamps if reading live traffic. ', - name: 'zeek.stats.timestamp_lag', + 'netflow.procera_rnc': { + category: 'netflow', + name: 'netflow.procera_rnc', type: 'integer', }, - 'zeek.syslog.facility': { - category: 'zeek', - description: 'Syslog facility for the message. ', - name: 'zeek.syslog.facility', + 'netflow.procera_server_hostname': { + category: 'netflow', + name: 'netflow.procera_server_hostname', type: 'keyword', }, - 'zeek.syslog.severity': { - category: 'zeek', - description: 'Syslog severity for the message. ', - name: 'zeek.syslog.severity', + 'netflow.procera_service': { + category: 'netflow', + name: 'netflow.procera_service', type: 'keyword', }, - 'zeek.syslog.message': { - category: 'zeek', - description: 'The plain text message. ', - name: 'zeek.syslog.message', + 'netflow.procera_sgsn': { + category: 'netflow', + name: 'netflow.procera_sgsn', type: 'keyword', }, - 'zeek.tunnel.type': { - category: 'zeek', - description: 'The type of tunnel. ', - name: 'zeek.tunnel.type', + 'netflow.procera_subscriber_identifier': { + category: 'netflow', + name: 'netflow.procera_subscriber_identifier', type: 'keyword', }, - 'zeek.tunnel.action': { - category: 'zeek', - description: 'The type of activity that occurred. ', - name: 'zeek.tunnel.action', + 'netflow.procera_template_name': { + category: 'netflow', + name: 'netflow.procera_template_name', type: 'keyword', }, - 'zeek.weird.name': { - category: 'zeek', - description: 'The name of the weird that occurred. ', - name: 'zeek.weird.name', + 'netflow.procera_user_location_information': { + category: 'netflow', + name: 'netflow.procera_user_location_information', type: 'keyword', }, - 'zeek.weird.additional_info': { - category: 'zeek', - description: 'Additional information accompanying the weird if any. ', - name: 'zeek.weird.additional_info', - type: 'keyword', + 'netflow.protocol_identifier': { + category: 'netflow', + name: 'netflow.protocol_identifier', + type: 'short', }, - 'zeek.weird.notice': { - category: 'zeek', - description: 'Indicate if this weird was also turned into a notice. ', - name: 'zeek.weird.notice', - type: 'boolean', + 'netflow.pseudo_wire_control_word': { + category: 'netflow', + name: 'netflow.pseudo_wire_control_word', + type: 'long', }, - 'zeek.weird.peer': { - category: 'zeek', - description: - 'The peer that originated this weird. This is helpful in cluster deployments if a particular cluster node is having trouble to help identify which node is having trouble. ', - name: 'zeek.weird.peer', - type: 'keyword', + 'netflow.pseudo_wire_destination_ipv4_address': { + category: 'netflow', + name: 'netflow.pseudo_wire_destination_ipv4_address', + type: 'ip', }, - 'zeek.weird.identifier': { - category: 'zeek', - description: - 'This field is to be provided when a weird is generated for the purpose of deduplicating weirds. The identifier string should be unique for a single instance of the weird. This field is used to define when a weird is conceptually a duplicate of a previous weird. ', - name: 'zeek.weird.identifier', - type: 'keyword', + 'netflow.pseudo_wire_id': { + category: 'netflow', + name: 'netflow.pseudo_wire_id', + type: 'long', }, - 'zeek.x509.id': { - category: 'zeek', - description: 'File id of this certificate. ', - name: 'zeek.x509.id', + 'netflow.pseudo_wire_type': { + category: 'netflow', + name: 'netflow.pseudo_wire_type', + type: 'integer', + }, + 'netflow.reason': { + category: 'netflow', + name: 'netflow.reason', + type: 'long', + }, + 'netflow.reason_text': { + category: 'netflow', + name: 'netflow.reason_text', type: 'keyword', }, - 'zeek.x509.certificate.version': { - category: 'zeek', - description: 'Version number. ', - name: 'zeek.x509.certificate.version', + 'netflow.relative_error': { + category: 'netflow', + name: 'netflow.relative_error', + type: 'double', + }, + 'netflow.responder_octets': { + category: 'netflow', + name: 'netflow.responder_octets', + type: 'long', + }, + 'netflow.responder_packets': { + category: 'netflow', + name: 'netflow.responder_packets', + type: 'long', + }, + 'netflow.reverse_absolute_error': { + category: 'netflow', + name: 'netflow.reverse_absolute_error', + type: 'double', + }, + 'netflow.reverse_anonymization_flags': { + category: 'netflow', + name: 'netflow.reverse_anonymization_flags', type: 'integer', }, - 'zeek.x509.certificate.serial': { - category: 'zeek', - description: 'Serial number. ', - name: 'zeek.x509.certificate.serial', - type: 'keyword', + 'netflow.reverse_anonymization_technique': { + category: 'netflow', + name: 'netflow.reverse_anonymization_technique', + type: 'integer', }, - 'zeek.x509.certificate.subject.country': { - category: 'zeek', - description: 'Country provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.country', + 'netflow.reverse_application_category_name': { + category: 'netflow', + name: 'netflow.reverse_application_category_name', type: 'keyword', }, - 'zeek.x509.certificate.subject.common_name': { - category: 'zeek', - description: 'Common name provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.common_name', + 'netflow.reverse_application_description': { + category: 'netflow', + name: 'netflow.reverse_application_description', type: 'keyword', }, - 'zeek.x509.certificate.subject.locality': { - category: 'zeek', - description: 'Locality provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.locality', + 'netflow.reverse_application_group_name': { + category: 'netflow', + name: 'netflow.reverse_application_group_name', type: 'keyword', }, - 'zeek.x509.certificate.subject.organization': { - category: 'zeek', - description: 'Organization provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.organization', + 'netflow.reverse_application_id': { + category: 'netflow', + name: 'netflow.reverse_application_id', type: 'keyword', }, - 'zeek.x509.certificate.subject.organizational_unit': { - category: 'zeek', - description: 'Organizational unit provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.organizational_unit', + 'netflow.reverse_application_name': { + category: 'netflow', + name: 'netflow.reverse_application_name', type: 'keyword', }, - 'zeek.x509.certificate.subject.state': { - category: 'zeek', - description: 'State or province provided in the certificate subject. ', - name: 'zeek.x509.certificate.subject.state', + 'netflow.reverse_application_sub_category_name': { + category: 'netflow', + name: 'netflow.reverse_application_sub_category_name', type: 'keyword', }, - 'zeek.x509.certificate.issuer.country': { - category: 'zeek', - description: 'Country provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.country', - type: 'keyword', + 'netflow.reverse_average_interarrival_time': { + category: 'netflow', + name: 'netflow.reverse_average_interarrival_time', + type: 'long', }, - 'zeek.x509.certificate.issuer.common_name': { - category: 'zeek', - description: 'Common name provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.common_name', - type: 'keyword', + 'netflow.reverse_bgp_destination_as_number': { + category: 'netflow', + name: 'netflow.reverse_bgp_destination_as_number', + type: 'long', }, - 'zeek.x509.certificate.issuer.locality': { - category: 'zeek', - description: 'Locality provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.locality', - type: 'keyword', + 'netflow.reverse_bgp_next_adjacent_as_number': { + category: 'netflow', + name: 'netflow.reverse_bgp_next_adjacent_as_number', + type: 'long', }, - 'zeek.x509.certificate.issuer.organization': { - category: 'zeek', - description: 'Organization provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.organization', - type: 'keyword', + 'netflow.reverse_bgp_next_hop_ipv4_address': { + category: 'netflow', + name: 'netflow.reverse_bgp_next_hop_ipv4_address', + type: 'ip', }, - 'zeek.x509.certificate.issuer.organizational_unit': { - category: 'zeek', - description: 'Organizational unit provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.organizational_unit', - type: 'keyword', + 'netflow.reverse_bgp_next_hop_ipv6_address': { + category: 'netflow', + name: 'netflow.reverse_bgp_next_hop_ipv6_address', + type: 'ip', }, - 'zeek.x509.certificate.issuer.state': { - category: 'zeek', - description: 'State or province provided in the certificate issuer field. ', - name: 'zeek.x509.certificate.issuer.state', - type: 'keyword', + 'netflow.reverse_bgp_prev_adjacent_as_number': { + category: 'netflow', + name: 'netflow.reverse_bgp_prev_adjacent_as_number', + type: 'long', }, - 'zeek.x509.certificate.common_name': { - category: 'zeek', - description: 'Last (most specific) common name. ', - name: 'zeek.x509.certificate.common_name', - type: 'keyword', + 'netflow.reverse_bgp_source_as_number': { + category: 'netflow', + name: 'netflow.reverse_bgp_source_as_number', + type: 'long', }, - 'zeek.x509.certificate.valid.from': { - category: 'zeek', - description: 'Timestamp before when certificate is not valid. ', - name: 'zeek.x509.certificate.valid.from', - type: 'date', + 'netflow.reverse_bgp_validity_state': { + category: 'netflow', + name: 'netflow.reverse_bgp_validity_state', + type: 'short', }, - 'zeek.x509.certificate.valid.until': { - category: 'zeek', - description: 'Timestamp after when certificate is not valid. ', - name: 'zeek.x509.certificate.valid.until', - type: 'date', + 'netflow.reverse_class_id': { + category: 'netflow', + name: 'netflow.reverse_class_id', + type: 'short', }, - 'zeek.x509.certificate.key.algorithm': { - category: 'zeek', - description: 'Name of the key algorithm. ', - name: 'zeek.x509.certificate.key.algorithm', + 'netflow.reverse_class_name': { + category: 'netflow', + name: 'netflow.reverse_class_name', type: 'keyword', }, - 'zeek.x509.certificate.key.type': { - category: 'zeek', - description: 'Key type, if key parseable by openssl (either rsa, dsa or ec). ', - name: 'zeek.x509.certificate.key.type', - type: 'keyword', + 'netflow.reverse_classification_engine_id': { + category: 'netflow', + name: 'netflow.reverse_classification_engine_id', + type: 'short', }, - 'zeek.x509.certificate.key.length': { - category: 'zeek', - description: 'Key length in bits. ', - name: 'zeek.x509.certificate.key.length', - type: 'integer', + 'netflow.reverse_collection_time_milliseconds': { + category: 'netflow', + name: 'netflow.reverse_collection_time_milliseconds', + type: 'long', }, - 'zeek.x509.certificate.signature_algorithm': { - category: 'zeek', - description: 'Name of the signature algorithm. ', - name: 'zeek.x509.certificate.signature_algorithm', + 'netflow.reverse_collector_certificate': { + category: 'netflow', + name: 'netflow.reverse_collector_certificate', type: 'keyword', }, - 'zeek.x509.certificate.exponent': { - category: 'zeek', - description: 'Exponent, if RSA-certificate. ', - name: 'zeek.x509.certificate.exponent', - type: 'keyword', + 'netflow.reverse_confidence_level': { + category: 'netflow', + name: 'netflow.reverse_confidence_level', + type: 'double', }, - 'zeek.x509.certificate.curve': { - category: 'zeek', - description: 'Curve, if EC-certificate. ', - name: 'zeek.x509.certificate.curve', - type: 'keyword', + 'netflow.reverse_connection_sum_duration_seconds': { + category: 'netflow', + name: 'netflow.reverse_connection_sum_duration_seconds', + type: 'long', }, - 'zeek.x509.san.dns': { - category: 'zeek', - description: 'List of DNS entries in SAN. ', - name: 'zeek.x509.san.dns', - type: 'keyword', + 'netflow.reverse_connection_transaction_id': { + category: 'netflow', + name: 'netflow.reverse_connection_transaction_id', + type: 'long', }, - 'zeek.x509.san.uri': { - category: 'zeek', - description: 'List of URI entries in SAN. ', - name: 'zeek.x509.san.uri', - type: 'keyword', + 'netflow.reverse_data_byte_count': { + category: 'netflow', + name: 'netflow.reverse_data_byte_count', + type: 'long', }, - 'zeek.x509.san.email': { - category: 'zeek', - description: 'List of email entries in SAN. ', - name: 'zeek.x509.san.email', + 'netflow.reverse_data_link_frame_section': { + category: 'netflow', + name: 'netflow.reverse_data_link_frame_section', type: 'keyword', }, - 'zeek.x509.san.ip': { - category: 'zeek', - description: 'List of IP entries in SAN. ', - name: 'zeek.x509.san.ip', - type: 'ip', + 'netflow.reverse_data_link_frame_size': { + category: 'netflow', + name: 'netflow.reverse_data_link_frame_size', + type: 'integer', }, - 'zeek.x509.san.other_fields': { - category: 'zeek', - description: 'True if the certificate contained other, not recognized or parsed name fields. ', - name: 'zeek.x509.san.other_fields', - type: 'boolean', + 'netflow.reverse_data_link_frame_type': { + category: 'netflow', + name: 'netflow.reverse_data_link_frame_type', + type: 'integer', }, - 'zeek.x509.basic_constraints.certificate_authority': { - category: 'zeek', - description: 'CA flag set or not. ', - name: 'zeek.x509.basic_constraints.certificate_authority', - type: 'boolean', + 'netflow.reverse_data_records_reliability': { + category: 'netflow', + name: 'netflow.reverse_data_records_reliability', + type: 'short', }, - 'zeek.x509.basic_constraints.path_length': { - category: 'zeek', - description: 'Maximum path length. ', - name: 'zeek.x509.basic_constraints.path_length', - type: 'integer', + 'netflow.reverse_delta_flow_count': { + category: 'netflow', + name: 'netflow.reverse_delta_flow_count', + type: 'long', }, - 'zeek.x509.log_cert': { - category: 'zeek', - description: - 'Present if policy/protocols/ssl/log-hostcerts-only.bro is loaded Logging of certificate is suppressed if set to F. ', - name: 'zeek.x509.log_cert', - type: 'boolean', + 'netflow.reverse_destination_ipv4_address': { + category: 'netflow', + name: 'netflow.reverse_destination_ipv4_address', + type: 'ip', }, - 'awscloudwatch.log_group': { - category: 'awscloudwatch', - description: 'The name of the log group to which this event belongs.', - name: 'awscloudwatch.log_group', - type: 'keyword', + 'netflow.reverse_destination_ipv4_prefix': { + category: 'netflow', + name: 'netflow.reverse_destination_ipv4_prefix', + type: 'ip', }, - 'awscloudwatch.log_stream': { - category: 'awscloudwatch', - description: 'The name of the log stream to which this event belongs.', - name: 'awscloudwatch.log_stream', - type: 'keyword', + 'netflow.reverse_destination_ipv4_prefix_length': { + category: 'netflow', + name: 'netflow.reverse_destination_ipv4_prefix_length', + type: 'short', }, - 'awscloudwatch.ingestion_time': { - category: 'awscloudwatch', - description: 'The time the event was ingested in AWS CloudWatch.', - name: 'awscloudwatch.ingestion_time', - type: 'keyword', + 'netflow.reverse_destination_ipv6_address': { + category: 'netflow', + name: 'netflow.reverse_destination_ipv6_address', + type: 'ip', }, - 'netflow.type': { + 'netflow.reverse_destination_ipv6_prefix': { category: 'netflow', - description: 'The type of NetFlow record described by this event. ', - name: 'netflow.type', - type: 'keyword', + name: 'netflow.reverse_destination_ipv6_prefix', + type: 'ip', }, - 'netflow.exporter.address': { + 'netflow.reverse_destination_ipv6_prefix_length': { category: 'netflow', - description: "Exporter's network address in IP:port format. ", - name: 'netflow.exporter.address', + name: 'netflow.reverse_destination_ipv6_prefix_length', + type: 'short', + }, + 'netflow.reverse_destination_mac_address': { + category: 'netflow', + name: 'netflow.reverse_destination_mac_address', type: 'keyword', }, - 'netflow.exporter.source_id': { + 'netflow.reverse_destination_transport_port': { category: 'netflow', - description: 'Observation domain ID to which this record belongs. ', - name: 'netflow.exporter.source_id', + name: 'netflow.reverse_destination_transport_port', + type: 'integer', + }, + 'netflow.reverse_digest_hash_value': { + category: 'netflow', + name: 'netflow.reverse_digest_hash_value', type: 'long', }, - 'netflow.exporter.timestamp': { + 'netflow.reverse_distinct_count_of_destination_ip_address': { category: 'netflow', - description: 'Time and date of export. ', - name: 'netflow.exporter.timestamp', - type: 'date', + name: 'netflow.reverse_distinct_count_of_destination_ip_address', + type: 'long', }, - 'netflow.exporter.uptime_millis': { + 'netflow.reverse_distinct_count_of_destination_ipv4_address': { category: 'netflow', - description: 'How long the exporter process has been running, in milliseconds. ', - name: 'netflow.exporter.uptime_millis', + name: 'netflow.reverse_distinct_count_of_destination_ipv4_address', type: 'long', }, - 'netflow.exporter.version': { + 'netflow.reverse_distinct_count_of_destination_ipv6_address': { category: 'netflow', - description: 'NetFlow version used. ', - name: 'netflow.exporter.version', - type: 'integer', + name: 'netflow.reverse_distinct_count_of_destination_ipv6_address', + type: 'long', }, - 'netflow.octet_delta_count': { + 'netflow.reverse_distinct_count_of_source_ip_address': { category: 'netflow', - name: 'netflow.octet_delta_count', + name: 'netflow.reverse_distinct_count_of_source_ip_address', type: 'long', }, - 'netflow.packet_delta_count': { + 'netflow.reverse_distinct_count_of_source_ipv4_address': { category: 'netflow', - name: 'netflow.packet_delta_count', + name: 'netflow.reverse_distinct_count_of_source_ipv4_address', type: 'long', }, - 'netflow.delta_flow_count': { + 'netflow.reverse_distinct_count_of_source_ipv6_address': { category: 'netflow', - name: 'netflow.delta_flow_count', + name: 'netflow.reverse_distinct_count_of_source_ipv6_address', type: 'long', }, - 'netflow.protocol_identifier': { + 'netflow.reverse_dot1q_customer_dei': { category: 'netflow', - name: 'netflow.protocol_identifier', + name: 'netflow.reverse_dot1q_customer_dei', type: 'short', }, - 'netflow.ip_class_of_service': { + 'netflow.reverse_dot1q_customer_destination_mac_address': { category: 'netflow', - name: 'netflow.ip_class_of_service', + name: 'netflow.reverse_dot1q_customer_destination_mac_address', + type: 'keyword', + }, + 'netflow.reverse_dot1q_customer_priority': { + category: 'netflow', + name: 'netflow.reverse_dot1q_customer_priority', type: 'short', }, - 'netflow.tcp_control_bits': { + 'netflow.reverse_dot1q_customer_source_mac_address': { category: 'netflow', - name: 'netflow.tcp_control_bits', - type: 'integer', + name: 'netflow.reverse_dot1q_customer_source_mac_address', + type: 'keyword', }, - 'netflow.source_transport_port': { + 'netflow.reverse_dot1q_customer_vlan_id': { category: 'netflow', - name: 'netflow.source_transport_port', + name: 'netflow.reverse_dot1q_customer_vlan_id', type: 'integer', }, - 'netflow.source_ipv4_address': { + 'netflow.reverse_dot1q_dei': { category: 'netflow', - name: 'netflow.source_ipv4_address', - type: 'ip', + name: 'netflow.reverse_dot1q_dei', + type: 'short', }, - 'netflow.source_ipv4_prefix_length': { + 'netflow.reverse_dot1q_priority': { category: 'netflow', - name: 'netflow.source_ipv4_prefix_length', + name: 'netflow.reverse_dot1q_priority', type: 'short', }, - 'netflow.ingress_interface': { + 'netflow.reverse_dot1q_service_instance_id': { category: 'netflow', - name: 'netflow.ingress_interface', + name: 'netflow.reverse_dot1q_service_instance_id', type: 'long', }, - 'netflow.destination_transport_port': { + 'netflow.reverse_dot1q_service_instance_priority': { category: 'netflow', - name: 'netflow.destination_transport_port', - type: 'integer', + name: 'netflow.reverse_dot1q_service_instance_priority', + type: 'short', }, - 'netflow.destination_ipv4_address': { + 'netflow.reverse_dot1q_service_instance_tag': { category: 'netflow', - name: 'netflow.destination_ipv4_address', - type: 'ip', + name: 'netflow.reverse_dot1q_service_instance_tag', + type: 'keyword', }, - 'netflow.destination_ipv4_prefix_length': { + 'netflow.reverse_dot1q_vlan_id': { category: 'netflow', - name: 'netflow.destination_ipv4_prefix_length', - type: 'short', + name: 'netflow.reverse_dot1q_vlan_id', + type: 'integer', }, - 'netflow.egress_interface': { + 'netflow.reverse_dropped_layer2_octet_delta_count': { category: 'netflow', - name: 'netflow.egress_interface', + name: 'netflow.reverse_dropped_layer2_octet_delta_count', type: 'long', }, - 'netflow.ip_next_hop_ipv4_address': { + 'netflow.reverse_dropped_layer2_octet_total_count': { category: 'netflow', - name: 'netflow.ip_next_hop_ipv4_address', - type: 'ip', + name: 'netflow.reverse_dropped_layer2_octet_total_count', + type: 'long', }, - 'netflow.bgp_source_as_number': { + 'netflow.reverse_dropped_octet_delta_count': { category: 'netflow', - name: 'netflow.bgp_source_as_number', + name: 'netflow.reverse_dropped_octet_delta_count', type: 'long', }, - 'netflow.bgp_destination_as_number': { + 'netflow.reverse_dropped_octet_total_count': { category: 'netflow', - name: 'netflow.bgp_destination_as_number', + name: 'netflow.reverse_dropped_octet_total_count', type: 'long', }, - 'netflow.bgp_next_hop_ipv4_address': { + 'netflow.reverse_dropped_packet_delta_count': { category: 'netflow', - name: 'netflow.bgp_next_hop_ipv4_address', - type: 'ip', + name: 'netflow.reverse_dropped_packet_delta_count', + type: 'long', }, - 'netflow.post_mcast_packet_delta_count': { + 'netflow.reverse_dropped_packet_total_count': { category: 'netflow', - name: 'netflow.post_mcast_packet_delta_count', + name: 'netflow.reverse_dropped_packet_total_count', type: 'long', }, - 'netflow.post_mcast_octet_delta_count': { + 'netflow.reverse_dst_traffic_index': { category: 'netflow', - name: 'netflow.post_mcast_octet_delta_count', + name: 'netflow.reverse_dst_traffic_index', type: 'long', }, - 'netflow.flow_end_sys_up_time': { + 'netflow.reverse_egress_broadcast_packet_total_count': { category: 'netflow', - name: 'netflow.flow_end_sys_up_time', + name: 'netflow.reverse_egress_broadcast_packet_total_count', type: 'long', }, - 'netflow.flow_start_sys_up_time': { + 'netflow.reverse_egress_interface': { category: 'netflow', - name: 'netflow.flow_start_sys_up_time', + name: 'netflow.reverse_egress_interface', type: 'long', }, - 'netflow.post_octet_delta_count': { + 'netflow.reverse_egress_interface_type': { category: 'netflow', - name: 'netflow.post_octet_delta_count', + name: 'netflow.reverse_egress_interface_type', type: 'long', }, - 'netflow.post_packet_delta_count': { + 'netflow.reverse_egress_physical_interface': { category: 'netflow', - name: 'netflow.post_packet_delta_count', + name: 'netflow.reverse_egress_physical_interface', type: 'long', }, - 'netflow.minimum_ip_total_length': { + 'netflow.reverse_egress_unicast_packet_total_count': { category: 'netflow', - name: 'netflow.minimum_ip_total_length', + name: 'netflow.reverse_egress_unicast_packet_total_count', type: 'long', }, - 'netflow.maximum_ip_total_length': { + 'netflow.reverse_egress_vrfid': { category: 'netflow', - name: 'netflow.maximum_ip_total_length', + name: 'netflow.reverse_egress_vrfid', type: 'long', }, - 'netflow.source_ipv6_address': { + 'netflow.reverse_encrypted_technology': { category: 'netflow', - name: 'netflow.source_ipv6_address', - type: 'ip', + name: 'netflow.reverse_encrypted_technology', + type: 'keyword', }, - 'netflow.destination_ipv6_address': { + 'netflow.reverse_engine_id': { category: 'netflow', - name: 'netflow.destination_ipv6_address', - type: 'ip', + name: 'netflow.reverse_engine_id', + type: 'short', }, - 'netflow.source_ipv6_prefix_length': { + 'netflow.reverse_engine_type': { category: 'netflow', - name: 'netflow.source_ipv6_prefix_length', + name: 'netflow.reverse_engine_type', type: 'short', }, - 'netflow.destination_ipv6_prefix_length': { + 'netflow.reverse_ethernet_header_length': { category: 'netflow', - name: 'netflow.destination_ipv6_prefix_length', + name: 'netflow.reverse_ethernet_header_length', type: 'short', }, - 'netflow.flow_label_ipv6': { + 'netflow.reverse_ethernet_payload_length': { category: 'netflow', - name: 'netflow.flow_label_ipv6', - type: 'long', + name: 'netflow.reverse_ethernet_payload_length', + type: 'integer', }, - 'netflow.icmp_type_code_ipv4': { + 'netflow.reverse_ethernet_total_length': { category: 'netflow', - name: 'netflow.icmp_type_code_ipv4', + name: 'netflow.reverse_ethernet_total_length', type: 'integer', }, - 'netflow.igmp_type': { + 'netflow.reverse_ethernet_type': { category: 'netflow', - name: 'netflow.igmp_type', - type: 'short', + name: 'netflow.reverse_ethernet_type', + type: 'integer', }, - 'netflow.sampling_interval': { + 'netflow.reverse_export_sctp_stream_id': { category: 'netflow', - name: 'netflow.sampling_interval', + name: 'netflow.reverse_export_sctp_stream_id', + type: 'integer', + }, + 'netflow.reverse_exporter_certificate': { + category: 'netflow', + name: 'netflow.reverse_exporter_certificate', + type: 'keyword', + }, + 'netflow.reverse_exporting_process_id': { + category: 'netflow', + name: 'netflow.reverse_exporting_process_id', type: 'long', }, - 'netflow.sampling_algorithm': { + 'netflow.reverse_firewall_event': { category: 'netflow', - name: 'netflow.sampling_algorithm', + name: 'netflow.reverse_firewall_event', type: 'short', }, - 'netflow.flow_active_timeout': { + 'netflow.reverse_first_non_empty_packet_size': { category: 'netflow', - name: 'netflow.flow_active_timeout', + name: 'netflow.reverse_first_non_empty_packet_size', type: 'integer', }, - 'netflow.flow_idle_timeout': { + 'netflow.reverse_first_packet_banner': { category: 'netflow', - name: 'netflow.flow_idle_timeout', + name: 'netflow.reverse_first_packet_banner', + type: 'keyword', + }, + 'netflow.reverse_flags_and_sampler_id': { + category: 'netflow', + name: 'netflow.reverse_flags_and_sampler_id', + type: 'long', + }, + 'netflow.reverse_flow_active_timeout': { + category: 'netflow', + name: 'netflow.reverse_flow_active_timeout', type: 'integer', }, - 'netflow.engine_type': { + 'netflow.reverse_flow_attributes': { + category: 'netflow', + name: 'netflow.reverse_flow_attributes', + type: 'integer', + }, + 'netflow.reverse_flow_delta_milliseconds': { + category: 'netflow', + name: 'netflow.reverse_flow_delta_milliseconds', + type: 'long', + }, + 'netflow.reverse_flow_direction': { + category: 'netflow', + name: 'netflow.reverse_flow_direction', + type: 'short', + }, + 'netflow.reverse_flow_duration_microseconds': { + category: 'netflow', + name: 'netflow.reverse_flow_duration_microseconds', + type: 'long', + }, + 'netflow.reverse_flow_duration_milliseconds': { + category: 'netflow', + name: 'netflow.reverse_flow_duration_milliseconds', + type: 'long', + }, + 'netflow.reverse_flow_end_delta_microseconds': { + category: 'netflow', + name: 'netflow.reverse_flow_end_delta_microseconds', + type: 'long', + }, + 'netflow.reverse_flow_end_microseconds': { + category: 'netflow', + name: 'netflow.reverse_flow_end_microseconds', + type: 'long', + }, + 'netflow.reverse_flow_end_milliseconds': { + category: 'netflow', + name: 'netflow.reverse_flow_end_milliseconds', + type: 'long', + }, + 'netflow.reverse_flow_end_nanoseconds': { + category: 'netflow', + name: 'netflow.reverse_flow_end_nanoseconds', + type: 'long', + }, + 'netflow.reverse_flow_end_reason': { + category: 'netflow', + name: 'netflow.reverse_flow_end_reason', + type: 'short', + }, + 'netflow.reverse_flow_end_seconds': { + category: 'netflow', + name: 'netflow.reverse_flow_end_seconds', + type: 'long', + }, + 'netflow.reverse_flow_end_sys_up_time': { + category: 'netflow', + name: 'netflow.reverse_flow_end_sys_up_time', + type: 'long', + }, + 'netflow.reverse_flow_idle_timeout': { category: 'netflow', - name: 'netflow.engine_type', - type: 'short', + name: 'netflow.reverse_flow_idle_timeout', + type: 'integer', }, - 'netflow.engine_id': { + 'netflow.reverse_flow_label_ipv6': { category: 'netflow', - name: 'netflow.engine_id', - type: 'short', + name: 'netflow.reverse_flow_label_ipv6', + type: 'long', }, - 'netflow.exported_octet_total_count': { + 'netflow.reverse_flow_sampling_time_interval': { category: 'netflow', - name: 'netflow.exported_octet_total_count', + name: 'netflow.reverse_flow_sampling_time_interval', type: 'long', }, - 'netflow.exported_message_total_count': { + 'netflow.reverse_flow_sampling_time_spacing': { category: 'netflow', - name: 'netflow.exported_message_total_count', + name: 'netflow.reverse_flow_sampling_time_spacing', type: 'long', }, - 'netflow.exported_flow_record_total_count': { + 'netflow.reverse_flow_selected_flow_delta_count': { category: 'netflow', - name: 'netflow.exported_flow_record_total_count', + name: 'netflow.reverse_flow_selected_flow_delta_count', type: 'long', }, - 'netflow.ipv4_router_sc': { + 'netflow.reverse_flow_selected_octet_delta_count': { category: 'netflow', - name: 'netflow.ipv4_router_sc', - type: 'ip', + name: 'netflow.reverse_flow_selected_octet_delta_count', + type: 'long', }, - 'netflow.source_ipv4_prefix': { + 'netflow.reverse_flow_selected_packet_delta_count': { category: 'netflow', - name: 'netflow.source_ipv4_prefix', - type: 'ip', + name: 'netflow.reverse_flow_selected_packet_delta_count', + type: 'long', }, - 'netflow.destination_ipv4_prefix': { + 'netflow.reverse_flow_selector_algorithm': { category: 'netflow', - name: 'netflow.destination_ipv4_prefix', - type: 'ip', + name: 'netflow.reverse_flow_selector_algorithm', + type: 'integer', }, - 'netflow.mpls_top_label_type': { + 'netflow.reverse_flow_start_delta_microseconds': { category: 'netflow', - name: 'netflow.mpls_top_label_type', - type: 'short', + name: 'netflow.reverse_flow_start_delta_microseconds', + type: 'long', }, - 'netflow.mpls_top_label_ipv4_address': { + 'netflow.reverse_flow_start_microseconds': { category: 'netflow', - name: 'netflow.mpls_top_label_ipv4_address', - type: 'ip', + name: 'netflow.reverse_flow_start_microseconds', + type: 'long', }, - 'netflow.sampler_id': { + 'netflow.reverse_flow_start_milliseconds': { category: 'netflow', - name: 'netflow.sampler_id', - type: 'short', + name: 'netflow.reverse_flow_start_milliseconds', + type: 'long', }, - 'netflow.sampler_mode': { + 'netflow.reverse_flow_start_nanoseconds': { category: 'netflow', - name: 'netflow.sampler_mode', - type: 'short', + name: 'netflow.reverse_flow_start_nanoseconds', + type: 'long', }, - 'netflow.sampler_random_interval': { + 'netflow.reverse_flow_start_seconds': { category: 'netflow', - name: 'netflow.sampler_random_interval', + name: 'netflow.reverse_flow_start_seconds', type: 'long', }, - 'netflow.class_id': { + 'netflow.reverse_flow_start_sys_up_time': { category: 'netflow', - name: 'netflow.class_id', + name: 'netflow.reverse_flow_start_sys_up_time', type: 'long', }, - 'netflow.minimum_ttl': { + 'netflow.reverse_forwarding_status': { category: 'netflow', - name: 'netflow.minimum_ttl', - type: 'short', + name: 'netflow.reverse_forwarding_status', + type: 'long', }, - 'netflow.maximum_ttl': { + 'netflow.reverse_fragment_flags': { category: 'netflow', - name: 'netflow.maximum_ttl', + name: 'netflow.reverse_fragment_flags', type: 'short', }, - 'netflow.fragment_identification': { + 'netflow.reverse_fragment_identification': { category: 'netflow', - name: 'netflow.fragment_identification', + name: 'netflow.reverse_fragment_identification', type: 'long', }, - 'netflow.post_ip_class_of_service': { + 'netflow.reverse_fragment_offset': { category: 'netflow', - name: 'netflow.post_ip_class_of_service', - type: 'short', + name: 'netflow.reverse_fragment_offset', + type: 'integer', }, - 'netflow.source_mac_address': { + 'netflow.reverse_gre_key': { category: 'netflow', - name: 'netflow.source_mac_address', - type: 'keyword', + name: 'netflow.reverse_gre_key', + type: 'long', }, - 'netflow.post_destination_mac_address': { + 'netflow.reverse_hash_digest_output': { category: 'netflow', - name: 'netflow.post_destination_mac_address', - type: 'keyword', + name: 'netflow.reverse_hash_digest_output', + type: 'short', }, - 'netflow.vlan_id': { + 'netflow.reverse_hash_flow_domain': { category: 'netflow', - name: 'netflow.vlan_id', + name: 'netflow.reverse_hash_flow_domain', type: 'integer', }, - 'netflow.post_vlan_id': { + 'netflow.reverse_hash_initialiser_value': { category: 'netflow', - name: 'netflow.post_vlan_id', - type: 'integer', + name: 'netflow.reverse_hash_initialiser_value', + type: 'long', }, - 'netflow.ip_version': { + 'netflow.reverse_hash_ip_payload_offset': { category: 'netflow', - name: 'netflow.ip_version', - type: 'short', + name: 'netflow.reverse_hash_ip_payload_offset', + type: 'long', }, - 'netflow.flow_direction': { + 'netflow.reverse_hash_ip_payload_size': { category: 'netflow', - name: 'netflow.flow_direction', - type: 'short', + name: 'netflow.reverse_hash_ip_payload_size', + type: 'long', }, - 'netflow.ip_next_hop_ipv6_address': { + 'netflow.reverse_hash_output_range_max': { category: 'netflow', - name: 'netflow.ip_next_hop_ipv6_address', - type: 'ip', + name: 'netflow.reverse_hash_output_range_max', + type: 'long', }, - 'netflow.bgp_next_hop_ipv6_address': { + 'netflow.reverse_hash_output_range_min': { category: 'netflow', - name: 'netflow.bgp_next_hop_ipv6_address', - type: 'ip', + name: 'netflow.reverse_hash_output_range_min', + type: 'long', }, - 'netflow.ipv6_extension_headers': { + 'netflow.reverse_hash_selected_range_max': { category: 'netflow', - name: 'netflow.ipv6_extension_headers', + name: 'netflow.reverse_hash_selected_range_max', type: 'long', }, - 'netflow.mpls_top_label_stack_section': { + 'netflow.reverse_hash_selected_range_min': { category: 'netflow', - name: 'netflow.mpls_top_label_stack_section', - type: 'short', + name: 'netflow.reverse_hash_selected_range_min', + type: 'long', }, - 'netflow.mpls_label_stack_section2': { + 'netflow.reverse_icmp_code_ipv4': { category: 'netflow', - name: 'netflow.mpls_label_stack_section2', + name: 'netflow.reverse_icmp_code_ipv4', type: 'short', }, - 'netflow.mpls_label_stack_section3': { + 'netflow.reverse_icmp_code_ipv6': { category: 'netflow', - name: 'netflow.mpls_label_stack_section3', + name: 'netflow.reverse_icmp_code_ipv6', type: 'short', }, - 'netflow.mpls_label_stack_section4': { + 'netflow.reverse_icmp_type_code_ipv4': { category: 'netflow', - name: 'netflow.mpls_label_stack_section4', - type: 'short', + name: 'netflow.reverse_icmp_type_code_ipv4', + type: 'integer', }, - 'netflow.mpls_label_stack_section5': { + 'netflow.reverse_icmp_type_code_ipv6': { category: 'netflow', - name: 'netflow.mpls_label_stack_section5', - type: 'short', + name: 'netflow.reverse_icmp_type_code_ipv6', + type: 'integer', }, - 'netflow.mpls_label_stack_section6': { + 'netflow.reverse_icmp_type_ipv4': { category: 'netflow', - name: 'netflow.mpls_label_stack_section6', + name: 'netflow.reverse_icmp_type_ipv4', type: 'short', }, - 'netflow.mpls_label_stack_section7': { + 'netflow.reverse_icmp_type_ipv6': { category: 'netflow', - name: 'netflow.mpls_label_stack_section7', + name: 'netflow.reverse_icmp_type_ipv6', type: 'short', }, - 'netflow.mpls_label_stack_section8': { + 'netflow.reverse_igmp_type': { category: 'netflow', - name: 'netflow.mpls_label_stack_section8', + name: 'netflow.reverse_igmp_type', type: 'short', }, - 'netflow.mpls_label_stack_section9': { + 'netflow.reverse_ignored_data_record_total_count': { category: 'netflow', - name: 'netflow.mpls_label_stack_section9', - type: 'short', + name: 'netflow.reverse_ignored_data_record_total_count', + type: 'long', }, - 'netflow.mpls_label_stack_section10': { + 'netflow.reverse_ignored_layer2_frame_total_count': { category: 'netflow', - name: 'netflow.mpls_label_stack_section10', - type: 'short', + name: 'netflow.reverse_ignored_layer2_frame_total_count', + type: 'long', }, - 'netflow.destination_mac_address': { + 'netflow.reverse_ignored_layer2_octet_total_count': { category: 'netflow', - name: 'netflow.destination_mac_address', - type: 'keyword', + name: 'netflow.reverse_ignored_layer2_octet_total_count', + type: 'long', }, - 'netflow.post_source_mac_address': { + 'netflow.reverse_information_element_data_type': { category: 'netflow', - name: 'netflow.post_source_mac_address', - type: 'keyword', + name: 'netflow.reverse_information_element_data_type', + type: 'short', }, - 'netflow.interface_name': { + 'netflow.reverse_information_element_description': { category: 'netflow', - name: 'netflow.interface_name', + name: 'netflow.reverse_information_element_description', type: 'keyword', }, - 'netflow.interface_description': { + 'netflow.reverse_information_element_id': { category: 'netflow', - name: 'netflow.interface_description', - type: 'keyword', + name: 'netflow.reverse_information_element_id', + type: 'integer', }, - 'netflow.sampler_name': { + 'netflow.reverse_information_element_index': { category: 'netflow', - name: 'netflow.sampler_name', + name: 'netflow.reverse_information_element_index', + type: 'integer', + }, + 'netflow.reverse_information_element_name': { + category: 'netflow', + name: 'netflow.reverse_information_element_name', type: 'keyword', }, - 'netflow.octet_total_count': { + 'netflow.reverse_information_element_range_begin': { category: 'netflow', - name: 'netflow.octet_total_count', + name: 'netflow.reverse_information_element_range_begin', type: 'long', }, - 'netflow.packet_total_count': { + 'netflow.reverse_information_element_range_end': { category: 'netflow', - name: 'netflow.packet_total_count', + name: 'netflow.reverse_information_element_range_end', type: 'long', }, - 'netflow.flags_and_sampler_id': { + 'netflow.reverse_information_element_semantics': { category: 'netflow', - name: 'netflow.flags_and_sampler_id', - type: 'long', + name: 'netflow.reverse_information_element_semantics', + type: 'short', }, - 'netflow.fragment_offset': { + 'netflow.reverse_information_element_units': { category: 'netflow', - name: 'netflow.fragment_offset', + name: 'netflow.reverse_information_element_units', type: 'integer', }, - 'netflow.forwarding_status': { + 'netflow.reverse_ingress_broadcast_packet_total_count': { category: 'netflow', - name: 'netflow.forwarding_status', - type: 'short', + name: 'netflow.reverse_ingress_broadcast_packet_total_count', + type: 'long', }, - 'netflow.mpls_vpn_route_distinguisher': { + 'netflow.reverse_ingress_interface': { category: 'netflow', - name: 'netflow.mpls_vpn_route_distinguisher', - type: 'short', + name: 'netflow.reverse_ingress_interface', + type: 'long', }, - 'netflow.mpls_top_label_prefix_length': { + 'netflow.reverse_ingress_interface_type': { category: 'netflow', - name: 'netflow.mpls_top_label_prefix_length', - type: 'short', + name: 'netflow.reverse_ingress_interface_type', + type: 'long', }, - 'netflow.src_traffic_index': { + 'netflow.reverse_ingress_multicast_packet_total_count': { category: 'netflow', - name: 'netflow.src_traffic_index', + name: 'netflow.reverse_ingress_multicast_packet_total_count', type: 'long', }, - 'netflow.dst_traffic_index': { + 'netflow.reverse_ingress_physical_interface': { category: 'netflow', - name: 'netflow.dst_traffic_index', + name: 'netflow.reverse_ingress_physical_interface', type: 'long', }, - 'netflow.application_description': { + 'netflow.reverse_ingress_unicast_packet_total_count': { category: 'netflow', - name: 'netflow.application_description', - type: 'keyword', + name: 'netflow.reverse_ingress_unicast_packet_total_count', + type: 'long', }, - 'netflow.application_id': { + 'netflow.reverse_ingress_vrfid': { category: 'netflow', - name: 'netflow.application_id', - type: 'short', + name: 'netflow.reverse_ingress_vrfid', + type: 'long', }, - 'netflow.application_name': { + 'netflow.reverse_initial_tcp_flags': { category: 'netflow', - name: 'netflow.application_name', - type: 'keyword', + name: 'netflow.reverse_initial_tcp_flags', + type: 'short', }, - 'netflow.post_ip_diff_serv_code_point': { + 'netflow.reverse_initiator_octets': { category: 'netflow', - name: 'netflow.post_ip_diff_serv_code_point', - type: 'short', + name: 'netflow.reverse_initiator_octets', + type: 'long', }, - 'netflow.multicast_replication_factor': { + 'netflow.reverse_initiator_packets': { category: 'netflow', - name: 'netflow.multicast_replication_factor', + name: 'netflow.reverse_initiator_packets', type: 'long', }, - 'netflow.class_name': { + 'netflow.reverse_interface_description': { category: 'netflow', - name: 'netflow.class_name', + name: 'netflow.reverse_interface_description', type: 'keyword', }, - 'netflow.classification_engine_id': { + 'netflow.reverse_interface_name': { category: 'netflow', - name: 'netflow.classification_engine_id', - type: 'short', + name: 'netflow.reverse_interface_name', + type: 'keyword', }, - 'netflow.layer2packet_section_offset': { + 'netflow.reverse_intermediate_process_id': { category: 'netflow', - name: 'netflow.layer2packet_section_offset', - type: 'integer', + name: 'netflow.reverse_intermediate_process_id', + type: 'long', }, - 'netflow.layer2packet_section_size': { + 'netflow.reverse_ip_class_of_service': { category: 'netflow', - name: 'netflow.layer2packet_section_size', - type: 'integer', + name: 'netflow.reverse_ip_class_of_service', + type: 'short', }, - 'netflow.layer2packet_section_data': { + 'netflow.reverse_ip_diff_serv_code_point': { category: 'netflow', - name: 'netflow.layer2packet_section_data', + name: 'netflow.reverse_ip_diff_serv_code_point', type: 'short', }, - 'netflow.bgp_next_adjacent_as_number': { + 'netflow.reverse_ip_header_length': { category: 'netflow', - name: 'netflow.bgp_next_adjacent_as_number', - type: 'long', + name: 'netflow.reverse_ip_header_length', + type: 'short', }, - 'netflow.bgp_prev_adjacent_as_number': { + 'netflow.reverse_ip_header_packet_section': { category: 'netflow', - name: 'netflow.bgp_prev_adjacent_as_number', - type: 'long', + name: 'netflow.reverse_ip_header_packet_section', + type: 'keyword', }, - 'netflow.exporter_ipv4_address': { + 'netflow.reverse_ip_next_hop_ipv4_address': { category: 'netflow', - name: 'netflow.exporter_ipv4_address', + name: 'netflow.reverse_ip_next_hop_ipv4_address', type: 'ip', }, - 'netflow.exporter_ipv6_address': { + 'netflow.reverse_ip_next_hop_ipv6_address': { category: 'netflow', - name: 'netflow.exporter_ipv6_address', + name: 'netflow.reverse_ip_next_hop_ipv6_address', type: 'ip', }, - 'netflow.dropped_octet_delta_count': { + 'netflow.reverse_ip_payload_length': { category: 'netflow', - name: 'netflow.dropped_octet_delta_count', + name: 'netflow.reverse_ip_payload_length', type: 'long', }, - 'netflow.dropped_packet_delta_count': { + 'netflow.reverse_ip_payload_packet_section': { category: 'netflow', - name: 'netflow.dropped_packet_delta_count', - type: 'long', + name: 'netflow.reverse_ip_payload_packet_section', + type: 'keyword', }, - 'netflow.dropped_octet_total_count': { + 'netflow.reverse_ip_precedence': { category: 'netflow', - name: 'netflow.dropped_octet_total_count', + name: 'netflow.reverse_ip_precedence', + type: 'short', + }, + 'netflow.reverse_ip_sec_spi': { + category: 'netflow', + name: 'netflow.reverse_ip_sec_spi', type: 'long', }, - 'netflow.dropped_packet_total_count': { + 'netflow.reverse_ip_total_length': { category: 'netflow', - name: 'netflow.dropped_packet_total_count', + name: 'netflow.reverse_ip_total_length', type: 'long', }, - 'netflow.flow_end_reason': { + 'netflow.reverse_ip_ttl': { category: 'netflow', - name: 'netflow.flow_end_reason', + name: 'netflow.reverse_ip_ttl', type: 'short', }, - 'netflow.common_properties_id': { + 'netflow.reverse_ip_version': { category: 'netflow', - name: 'netflow.common_properties_id', - type: 'long', + name: 'netflow.reverse_ip_version', + type: 'short', }, - 'netflow.observation_point_id': { + 'netflow.reverse_ipv4_ihl': { category: 'netflow', - name: 'netflow.observation_point_id', - type: 'long', + name: 'netflow.reverse_ipv4_ihl', + type: 'short', }, - 'netflow.icmp_type_code_ipv6': { + 'netflow.reverse_ipv4_options': { category: 'netflow', - name: 'netflow.icmp_type_code_ipv6', - type: 'integer', + name: 'netflow.reverse_ipv4_options', + type: 'long', }, - 'netflow.mpls_top_label_ipv6_address': { + 'netflow.reverse_ipv4_router_sc': { category: 'netflow', - name: 'netflow.mpls_top_label_ipv6_address', + name: 'netflow.reverse_ipv4_router_sc', type: 'ip', }, - 'netflow.line_card_id': { + 'netflow.reverse_ipv6_extension_headers': { category: 'netflow', - name: 'netflow.line_card_id', + name: 'netflow.reverse_ipv6_extension_headers', type: 'long', }, - 'netflow.port_id': { + 'netflow.reverse_is_multicast': { category: 'netflow', - name: 'netflow.port_id', - type: 'long', + name: 'netflow.reverse_is_multicast', + type: 'short', }, - 'netflow.metering_process_id': { + 'netflow.reverse_large_packet_count': { category: 'netflow', - name: 'netflow.metering_process_id', + name: 'netflow.reverse_large_packet_count', type: 'long', }, - 'netflow.exporting_process_id': { + 'netflow.reverse_layer2_frame_delta_count': { category: 'netflow', - name: 'netflow.exporting_process_id', + name: 'netflow.reverse_layer2_frame_delta_count', type: 'long', }, - 'netflow.template_id': { - category: 'netflow', - name: 'netflow.template_id', - type: 'integer', - }, - 'netflow.wlan_channel_id': { + 'netflow.reverse_layer2_frame_total_count': { category: 'netflow', - name: 'netflow.wlan_channel_id', - type: 'short', + name: 'netflow.reverse_layer2_frame_total_count', + type: 'long', }, - 'netflow.wlan_ssid': { + 'netflow.reverse_layer2_octet_delta_count': { category: 'netflow', - name: 'netflow.wlan_ssid', - type: 'keyword', + name: 'netflow.reverse_layer2_octet_delta_count', + type: 'long', }, - 'netflow.flow_id': { + 'netflow.reverse_layer2_octet_delta_sum_of_squares': { category: 'netflow', - name: 'netflow.flow_id', + name: 'netflow.reverse_layer2_octet_delta_sum_of_squares', type: 'long', }, - 'netflow.observation_domain_id': { + 'netflow.reverse_layer2_octet_total_count': { category: 'netflow', - name: 'netflow.observation_domain_id', + name: 'netflow.reverse_layer2_octet_total_count', type: 'long', }, - 'netflow.flow_start_seconds': { + 'netflow.reverse_layer2_octet_total_sum_of_squares': { category: 'netflow', - name: 'netflow.flow_start_seconds', - type: 'date', + name: 'netflow.reverse_layer2_octet_total_sum_of_squares', + type: 'long', }, - 'netflow.flow_end_seconds': { + 'netflow.reverse_layer2_segment_id': { category: 'netflow', - name: 'netflow.flow_end_seconds', - type: 'date', + name: 'netflow.reverse_layer2_segment_id', + type: 'long', }, - 'netflow.flow_start_milliseconds': { + 'netflow.reverse_layer2packet_section_data': { category: 'netflow', - name: 'netflow.flow_start_milliseconds', - type: 'date', + name: 'netflow.reverse_layer2packet_section_data', + type: 'keyword', }, - 'netflow.flow_end_milliseconds': { + 'netflow.reverse_layer2packet_section_offset': { category: 'netflow', - name: 'netflow.flow_end_milliseconds', - type: 'date', + name: 'netflow.reverse_layer2packet_section_offset', + type: 'integer', }, - 'netflow.flow_start_microseconds': { + 'netflow.reverse_layer2packet_section_size': { category: 'netflow', - name: 'netflow.flow_start_microseconds', - type: 'date', + name: 'netflow.reverse_layer2packet_section_size', + type: 'integer', }, - 'netflow.flow_end_microseconds': { + 'netflow.reverse_line_card_id': { category: 'netflow', - name: 'netflow.flow_end_microseconds', - type: 'date', + name: 'netflow.reverse_line_card_id', + type: 'long', }, - 'netflow.flow_start_nanoseconds': { + 'netflow.reverse_lower_ci_limit': { category: 'netflow', - name: 'netflow.flow_start_nanoseconds', - type: 'date', + name: 'netflow.reverse_lower_ci_limit', + type: 'double', }, - 'netflow.flow_end_nanoseconds': { + 'netflow.reverse_max_export_seconds': { category: 'netflow', - name: 'netflow.flow_end_nanoseconds', - type: 'date', + name: 'netflow.reverse_max_export_seconds', + type: 'long', }, - 'netflow.flow_start_delta_microseconds': { + 'netflow.reverse_max_flow_end_microseconds': { category: 'netflow', - name: 'netflow.flow_start_delta_microseconds', + name: 'netflow.reverse_max_flow_end_microseconds', type: 'long', }, - 'netflow.flow_end_delta_microseconds': { + 'netflow.reverse_max_flow_end_milliseconds': { category: 'netflow', - name: 'netflow.flow_end_delta_microseconds', + name: 'netflow.reverse_max_flow_end_milliseconds', type: 'long', }, - 'netflow.system_init_time_milliseconds': { + 'netflow.reverse_max_flow_end_nanoseconds': { category: 'netflow', - name: 'netflow.system_init_time_milliseconds', - type: 'date', + name: 'netflow.reverse_max_flow_end_nanoseconds', + type: 'long', }, - 'netflow.flow_duration_milliseconds': { + 'netflow.reverse_max_flow_end_seconds': { category: 'netflow', - name: 'netflow.flow_duration_milliseconds', + name: 'netflow.reverse_max_flow_end_seconds', type: 'long', }, - 'netflow.flow_duration_microseconds': { + 'netflow.reverse_max_packet_size': { category: 'netflow', - name: 'netflow.flow_duration_microseconds', - type: 'long', + name: 'netflow.reverse_max_packet_size', + type: 'integer', }, - 'netflow.observed_flow_total_count': { + 'netflow.reverse_maximum_ip_total_length': { category: 'netflow', - name: 'netflow.observed_flow_total_count', + name: 'netflow.reverse_maximum_ip_total_length', type: 'long', }, - 'netflow.ignored_packet_total_count': { + 'netflow.reverse_maximum_layer2_total_length': { category: 'netflow', - name: 'netflow.ignored_packet_total_count', + name: 'netflow.reverse_maximum_layer2_total_length', type: 'long', }, - 'netflow.ignored_octet_total_count': { + 'netflow.reverse_maximum_ttl': { category: 'netflow', - name: 'netflow.ignored_octet_total_count', - type: 'long', + name: 'netflow.reverse_maximum_ttl', + type: 'short', }, - 'netflow.not_sent_flow_total_count': { + 'netflow.reverse_message_md5_checksum': { category: 'netflow', - name: 'netflow.not_sent_flow_total_count', - type: 'long', + name: 'netflow.reverse_message_md5_checksum', + type: 'keyword', }, - 'netflow.not_sent_packet_total_count': { + 'netflow.reverse_message_scope': { category: 'netflow', - name: 'netflow.not_sent_packet_total_count', - type: 'long', + name: 'netflow.reverse_message_scope', + type: 'short', }, - 'netflow.not_sent_octet_total_count': { + 'netflow.reverse_metering_process_id': { category: 'netflow', - name: 'netflow.not_sent_octet_total_count', + name: 'netflow.reverse_metering_process_id', type: 'long', }, - 'netflow.destination_ipv6_prefix': { + 'netflow.reverse_metro_evc_id': { category: 'netflow', - name: 'netflow.destination_ipv6_prefix', - type: 'ip', + name: 'netflow.reverse_metro_evc_id', + type: 'keyword', }, - 'netflow.source_ipv6_prefix': { + 'netflow.reverse_metro_evc_type': { category: 'netflow', - name: 'netflow.source_ipv6_prefix', - type: 'ip', + name: 'netflow.reverse_metro_evc_type', + type: 'short', }, - 'netflow.post_octet_total_count': { + 'netflow.reverse_min_export_seconds': { category: 'netflow', - name: 'netflow.post_octet_total_count', + name: 'netflow.reverse_min_export_seconds', type: 'long', }, - 'netflow.post_packet_total_count': { + 'netflow.reverse_min_flow_start_microseconds': { category: 'netflow', - name: 'netflow.post_packet_total_count', + name: 'netflow.reverse_min_flow_start_microseconds', type: 'long', }, - 'netflow.flow_key_indicator': { + 'netflow.reverse_min_flow_start_milliseconds': { category: 'netflow', - name: 'netflow.flow_key_indicator', + name: 'netflow.reverse_min_flow_start_milliseconds', type: 'long', }, - 'netflow.post_mcast_packet_total_count': { + 'netflow.reverse_min_flow_start_nanoseconds': { category: 'netflow', - name: 'netflow.post_mcast_packet_total_count', + name: 'netflow.reverse_min_flow_start_nanoseconds', type: 'long', }, - 'netflow.post_mcast_octet_total_count': { + 'netflow.reverse_min_flow_start_seconds': { category: 'netflow', - name: 'netflow.post_mcast_octet_total_count', + name: 'netflow.reverse_min_flow_start_seconds', type: 'long', }, - 'netflow.icmp_type_ipv4': { - category: 'netflow', - name: 'netflow.icmp_type_ipv4', - type: 'short', - }, - 'netflow.icmp_code_ipv4': { + 'netflow.reverse_minimum_ip_total_length': { category: 'netflow', - name: 'netflow.icmp_code_ipv4', - type: 'short', + name: 'netflow.reverse_minimum_ip_total_length', + type: 'long', }, - 'netflow.icmp_type_ipv6': { + 'netflow.reverse_minimum_layer2_total_length': { category: 'netflow', - name: 'netflow.icmp_type_ipv6', - type: 'short', + name: 'netflow.reverse_minimum_layer2_total_length', + type: 'long', }, - 'netflow.icmp_code_ipv6': { + 'netflow.reverse_minimum_ttl': { category: 'netflow', - name: 'netflow.icmp_code_ipv6', + name: 'netflow.reverse_minimum_ttl', type: 'short', }, - 'netflow.udp_source_port': { - category: 'netflow', - name: 'netflow.udp_source_port', - type: 'integer', - }, - 'netflow.udp_destination_port': { + 'netflow.reverse_monitoring_interval_end_milli_seconds': { category: 'netflow', - name: 'netflow.udp_destination_port', - type: 'integer', + name: 'netflow.reverse_monitoring_interval_end_milli_seconds', + type: 'long', }, - 'netflow.tcp_source_port': { + 'netflow.reverse_monitoring_interval_start_milli_seconds': { category: 'netflow', - name: 'netflow.tcp_source_port', - type: 'integer', + name: 'netflow.reverse_monitoring_interval_start_milli_seconds', + type: 'long', }, - 'netflow.tcp_destination_port': { + 'netflow.reverse_mpls_label_stack_depth': { category: 'netflow', - name: 'netflow.tcp_destination_port', - type: 'integer', + name: 'netflow.reverse_mpls_label_stack_depth', + type: 'long', }, - 'netflow.tcp_sequence_number': { + 'netflow.reverse_mpls_label_stack_length': { category: 'netflow', - name: 'netflow.tcp_sequence_number', + name: 'netflow.reverse_mpls_label_stack_length', type: 'long', }, - 'netflow.tcp_acknowledgement_number': { + 'netflow.reverse_mpls_label_stack_section': { category: 'netflow', - name: 'netflow.tcp_acknowledgement_number', - type: 'long', + name: 'netflow.reverse_mpls_label_stack_section', + type: 'keyword', }, - 'netflow.tcp_window_size': { + 'netflow.reverse_mpls_label_stack_section10': { category: 'netflow', - name: 'netflow.tcp_window_size', - type: 'integer', + name: 'netflow.reverse_mpls_label_stack_section10', + type: 'keyword', }, - 'netflow.tcp_urgent_pointer': { + 'netflow.reverse_mpls_label_stack_section2': { category: 'netflow', - name: 'netflow.tcp_urgent_pointer', - type: 'integer', + name: 'netflow.reverse_mpls_label_stack_section2', + type: 'keyword', }, - 'netflow.tcp_header_length': { + 'netflow.reverse_mpls_label_stack_section3': { category: 'netflow', - name: 'netflow.tcp_header_length', - type: 'short', + name: 'netflow.reverse_mpls_label_stack_section3', + type: 'keyword', }, - 'netflow.ip_header_length': { + 'netflow.reverse_mpls_label_stack_section4': { category: 'netflow', - name: 'netflow.ip_header_length', - type: 'short', + name: 'netflow.reverse_mpls_label_stack_section4', + type: 'keyword', }, - 'netflow.total_length_ipv4': { + 'netflow.reverse_mpls_label_stack_section5': { category: 'netflow', - name: 'netflow.total_length_ipv4', - type: 'integer', + name: 'netflow.reverse_mpls_label_stack_section5', + type: 'keyword', }, - 'netflow.payload_length_ipv6': { + 'netflow.reverse_mpls_label_stack_section6': { category: 'netflow', - name: 'netflow.payload_length_ipv6', - type: 'integer', + name: 'netflow.reverse_mpls_label_stack_section6', + type: 'keyword', }, - 'netflow.ip_ttl': { + 'netflow.reverse_mpls_label_stack_section7': { category: 'netflow', - name: 'netflow.ip_ttl', - type: 'short', + name: 'netflow.reverse_mpls_label_stack_section7', + type: 'keyword', }, - 'netflow.next_header_ipv6': { + 'netflow.reverse_mpls_label_stack_section8': { category: 'netflow', - name: 'netflow.next_header_ipv6', - type: 'short', + name: 'netflow.reverse_mpls_label_stack_section8', + type: 'keyword', }, - 'netflow.mpls_payload_length': { + 'netflow.reverse_mpls_label_stack_section9': { category: 'netflow', - name: 'netflow.mpls_payload_length', - type: 'long', + name: 'netflow.reverse_mpls_label_stack_section9', + type: 'keyword', }, - 'netflow.ip_diff_serv_code_point': { + 'netflow.reverse_mpls_payload_length': { category: 'netflow', - name: 'netflow.ip_diff_serv_code_point', - type: 'short', + name: 'netflow.reverse_mpls_payload_length', + type: 'long', }, - 'netflow.ip_precedence': { + 'netflow.reverse_mpls_payload_packet_section': { category: 'netflow', - name: 'netflow.ip_precedence', - type: 'short', + name: 'netflow.reverse_mpls_payload_packet_section', + type: 'keyword', }, - 'netflow.fragment_flags': { + 'netflow.reverse_mpls_top_label_exp': { category: 'netflow', - name: 'netflow.fragment_flags', + name: 'netflow.reverse_mpls_top_label_exp', type: 'short', }, - 'netflow.octet_delta_sum_of_squares': { + 'netflow.reverse_mpls_top_label_ipv4_address': { category: 'netflow', - name: 'netflow.octet_delta_sum_of_squares', - type: 'long', + name: 'netflow.reverse_mpls_top_label_ipv4_address', + type: 'ip', }, - 'netflow.octet_total_sum_of_squares': { + 'netflow.reverse_mpls_top_label_ipv6_address': { category: 'netflow', - name: 'netflow.octet_total_sum_of_squares', - type: 'long', + name: 'netflow.reverse_mpls_top_label_ipv6_address', + type: 'ip', }, - 'netflow.mpls_top_label_ttl': { + 'netflow.reverse_mpls_top_label_prefix_length': { category: 'netflow', - name: 'netflow.mpls_top_label_ttl', + name: 'netflow.reverse_mpls_top_label_prefix_length', type: 'short', }, - 'netflow.mpls_label_stack_length': { + 'netflow.reverse_mpls_top_label_stack_section': { category: 'netflow', - name: 'netflow.mpls_label_stack_length', - type: 'long', + name: 'netflow.reverse_mpls_top_label_stack_section', + type: 'keyword', }, - 'netflow.mpls_label_stack_depth': { + 'netflow.reverse_mpls_top_label_ttl': { category: 'netflow', - name: 'netflow.mpls_label_stack_depth', - type: 'long', + name: 'netflow.reverse_mpls_top_label_ttl', + type: 'short', }, - 'netflow.mpls_top_label_exp': { + 'netflow.reverse_mpls_top_label_type': { category: 'netflow', - name: 'netflow.mpls_top_label_exp', + name: 'netflow.reverse_mpls_top_label_type', type: 'short', }, - 'netflow.ip_payload_length': { + 'netflow.reverse_mpls_vpn_route_distinguisher': { category: 'netflow', - name: 'netflow.ip_payload_length', - type: 'long', + name: 'netflow.reverse_mpls_vpn_route_distinguisher', + type: 'keyword', }, - 'netflow.udp_message_length': { + 'netflow.reverse_multicast_replication_factor': { category: 'netflow', - name: 'netflow.udp_message_length', - type: 'integer', + name: 'netflow.reverse_multicast_replication_factor', + type: 'long', }, - 'netflow.is_multicast': { + 'netflow.reverse_nat_event': { category: 'netflow', - name: 'netflow.is_multicast', + name: 'netflow.reverse_nat_event', type: 'short', }, - 'netflow.ipv4_ihl': { + 'netflow.reverse_nat_originating_address_realm': { category: 'netflow', - name: 'netflow.ipv4_ihl', + name: 'netflow.reverse_nat_originating_address_realm', type: 'short', }, - 'netflow.ipv4_options': { + 'netflow.reverse_nat_pool_id': { category: 'netflow', - name: 'netflow.ipv4_options', + name: 'netflow.reverse_nat_pool_id', type: 'long', }, - 'netflow.tcp_options': { + 'netflow.reverse_nat_pool_name': { category: 'netflow', - name: 'netflow.tcp_options', - type: 'long', + name: 'netflow.reverse_nat_pool_name', + type: 'keyword', }, - 'netflow.padding_octets': { + 'netflow.reverse_nat_type': { category: 'netflow', - name: 'netflow.padding_octets', + name: 'netflow.reverse_nat_type', type: 'short', }, - 'netflow.collector_ipv4_address': { + 'netflow.reverse_new_connection_delta_count': { category: 'netflow', - name: 'netflow.collector_ipv4_address', - type: 'ip', + name: 'netflow.reverse_new_connection_delta_count', + type: 'long', }, - 'netflow.collector_ipv6_address': { + 'netflow.reverse_next_header_ipv6': { category: 'netflow', - name: 'netflow.collector_ipv6_address', - type: 'ip', + name: 'netflow.reverse_next_header_ipv6', + type: 'short', }, - 'netflow.export_interface': { + 'netflow.reverse_non_empty_packet_count': { category: 'netflow', - name: 'netflow.export_interface', + name: 'netflow.reverse_non_empty_packet_count', type: 'long', }, - 'netflow.export_protocol_version': { + 'netflow.reverse_not_sent_layer2_octet_total_count': { category: 'netflow', - name: 'netflow.export_protocol_version', - type: 'short', + name: 'netflow.reverse_not_sent_layer2_octet_total_count', + type: 'long', }, - 'netflow.export_transport_protocol': { + 'netflow.reverse_observation_domain_name': { category: 'netflow', - name: 'netflow.export_transport_protocol', - type: 'short', + name: 'netflow.reverse_observation_domain_name', + type: 'keyword', }, - 'netflow.collector_transport_port': { + 'netflow.reverse_observation_point_id': { category: 'netflow', - name: 'netflow.collector_transport_port', - type: 'integer', + name: 'netflow.reverse_observation_point_id', + type: 'long', }, - 'netflow.exporter_transport_port': { + 'netflow.reverse_observation_point_type': { category: 'netflow', - name: 'netflow.exporter_transport_port', - type: 'integer', + name: 'netflow.reverse_observation_point_type', + type: 'short', }, - 'netflow.tcp_syn_total_count': { + 'netflow.reverse_observation_time_microseconds': { category: 'netflow', - name: 'netflow.tcp_syn_total_count', + name: 'netflow.reverse_observation_time_microseconds', type: 'long', }, - 'netflow.tcp_fin_total_count': { + 'netflow.reverse_observation_time_milliseconds': { category: 'netflow', - name: 'netflow.tcp_fin_total_count', + name: 'netflow.reverse_observation_time_milliseconds', type: 'long', }, - 'netflow.tcp_rst_total_count': { + 'netflow.reverse_observation_time_nanoseconds': { category: 'netflow', - name: 'netflow.tcp_rst_total_count', + name: 'netflow.reverse_observation_time_nanoseconds', type: 'long', }, - 'netflow.tcp_psh_total_count': { + 'netflow.reverse_observation_time_seconds': { category: 'netflow', - name: 'netflow.tcp_psh_total_count', + name: 'netflow.reverse_observation_time_seconds', type: 'long', }, - 'netflow.tcp_ack_total_count': { + 'netflow.reverse_octet_delta_count': { category: 'netflow', - name: 'netflow.tcp_ack_total_count', + name: 'netflow.reverse_octet_delta_count', + type: 'long', + }, + 'netflow.reverse_octet_delta_sum_of_squares': { + category: 'netflow', + name: 'netflow.reverse_octet_delta_sum_of_squares', type: 'long', }, - 'netflow.tcp_urg_total_count': { + 'netflow.reverse_octet_total_count': { category: 'netflow', - name: 'netflow.tcp_urg_total_count', + name: 'netflow.reverse_octet_total_count', type: 'long', }, - 'netflow.ip_total_length': { + 'netflow.reverse_octet_total_sum_of_squares': { category: 'netflow', - name: 'netflow.ip_total_length', + name: 'netflow.reverse_octet_total_sum_of_squares', type: 'long', }, - 'netflow.post_nat_source_ipv4_address': { + 'netflow.reverse_opaque_octets': { category: 'netflow', - name: 'netflow.post_nat_source_ipv4_address', - type: 'ip', + name: 'netflow.reverse_opaque_octets', + type: 'keyword', }, - 'netflow.post_nat_destination_ipv4_address': { + 'netflow.reverse_original_exporter_ipv4_address': { category: 'netflow', - name: 'netflow.post_nat_destination_ipv4_address', + name: 'netflow.reverse_original_exporter_ipv4_address', type: 'ip', }, - 'netflow.post_napt_source_transport_port': { + 'netflow.reverse_original_exporter_ipv6_address': { category: 'netflow', - name: 'netflow.post_napt_source_transport_port', - type: 'integer', + name: 'netflow.reverse_original_exporter_ipv6_address', + type: 'ip', }, - 'netflow.post_napt_destination_transport_port': { + 'netflow.reverse_original_flows_completed': { category: 'netflow', - name: 'netflow.post_napt_destination_transport_port', - type: 'integer', + name: 'netflow.reverse_original_flows_completed', + type: 'long', }, - 'netflow.nat_originating_address_realm': { + 'netflow.reverse_original_flows_initiated': { category: 'netflow', - name: 'netflow.nat_originating_address_realm', - type: 'short', + name: 'netflow.reverse_original_flows_initiated', + type: 'long', }, - 'netflow.nat_event': { + 'netflow.reverse_original_flows_present': { category: 'netflow', - name: 'netflow.nat_event', - type: 'short', + name: 'netflow.reverse_original_flows_present', + type: 'long', }, - 'netflow.initiator_octets': { + 'netflow.reverse_original_observation_domain_id': { category: 'netflow', - name: 'netflow.initiator_octets', + name: 'netflow.reverse_original_observation_domain_id', type: 'long', }, - 'netflow.responder_octets': { + 'netflow.reverse_os_finger_print': { category: 'netflow', - name: 'netflow.responder_octets', - type: 'long', + name: 'netflow.reverse_os_finger_print', + type: 'keyword', }, - 'netflow.firewall_event': { + 'netflow.reverse_os_name': { category: 'netflow', - name: 'netflow.firewall_event', - type: 'short', + name: 'netflow.reverse_os_name', + type: 'keyword', }, - 'netflow.ingress_vrfid': { + 'netflow.reverse_os_version': { category: 'netflow', - name: 'netflow.ingress_vrfid', + name: 'netflow.reverse_os_version', + type: 'keyword', + }, + 'netflow.reverse_p2p_technology': { + category: 'netflow', + name: 'netflow.reverse_p2p_technology', + type: 'keyword', + }, + 'netflow.reverse_packet_delta_count': { + category: 'netflow', + name: 'netflow.reverse_packet_delta_count', type: 'long', }, - 'netflow.egress_vrfid': { + 'netflow.reverse_packet_total_count': { category: 'netflow', - name: 'netflow.egress_vrfid', + name: 'netflow.reverse_packet_total_count', type: 'long', }, - 'netflow.vr_fname': { + 'netflow.reverse_payload': { category: 'netflow', - name: 'netflow.vr_fname', + name: 'netflow.reverse_payload', type: 'keyword', }, - 'netflow.post_mpls_top_label_exp': { + 'netflow.reverse_payload_entropy': { category: 'netflow', - name: 'netflow.post_mpls_top_label_exp', + name: 'netflow.reverse_payload_entropy', type: 'short', }, - 'netflow.tcp_window_scale': { + 'netflow.reverse_payload_length_ipv6': { category: 'netflow', - name: 'netflow.tcp_window_scale', + name: 'netflow.reverse_payload_length_ipv6', type: 'integer', }, - 'netflow.biflow_direction': { + 'netflow.reverse_port_id': { category: 'netflow', - name: 'netflow.biflow_direction', - type: 'short', + name: 'netflow.reverse_port_id', + type: 'long', }, - 'netflow.ethernet_header_length': { + 'netflow.reverse_port_range_end': { category: 'netflow', - name: 'netflow.ethernet_header_length', - type: 'short', + name: 'netflow.reverse_port_range_end', + type: 'integer', }, - 'netflow.ethernet_payload_length': { + 'netflow.reverse_port_range_num_ports': { category: 'netflow', - name: 'netflow.ethernet_payload_length', + name: 'netflow.reverse_port_range_num_ports', type: 'integer', }, - 'netflow.ethernet_total_length': { + 'netflow.reverse_port_range_start': { category: 'netflow', - name: 'netflow.ethernet_total_length', + name: 'netflow.reverse_port_range_start', type: 'integer', }, - 'netflow.dot1q_vlan_id': { + 'netflow.reverse_port_range_step_size': { category: 'netflow', - name: 'netflow.dot1q_vlan_id', + name: 'netflow.reverse_port_range_step_size', type: 'integer', }, - 'netflow.dot1q_priority': { + 'netflow.reverse_post_destination_mac_address': { category: 'netflow', - name: 'netflow.dot1q_priority', - type: 'short', + name: 'netflow.reverse_post_destination_mac_address', + type: 'keyword', }, - 'netflow.dot1q_customer_vlan_id': { + 'netflow.reverse_post_dot1q_customer_vlan_id': { category: 'netflow', - name: 'netflow.dot1q_customer_vlan_id', + name: 'netflow.reverse_post_dot1q_customer_vlan_id', type: 'integer', }, - 'netflow.dot1q_customer_priority': { + 'netflow.reverse_post_dot1q_vlan_id': { category: 'netflow', - name: 'netflow.dot1q_customer_priority', + name: 'netflow.reverse_post_dot1q_vlan_id', + type: 'integer', + }, + 'netflow.reverse_post_ip_class_of_service': { + category: 'netflow', + name: 'netflow.reverse_post_ip_class_of_service', type: 'short', }, - 'netflow.metro_evc_id': { + 'netflow.reverse_post_ip_diff_serv_code_point': { category: 'netflow', - name: 'netflow.metro_evc_id', - type: 'keyword', + name: 'netflow.reverse_post_ip_diff_serv_code_point', + type: 'short', }, - 'netflow.metro_evc_type': { + 'netflow.reverse_post_ip_precedence': { category: 'netflow', - name: 'netflow.metro_evc_type', + name: 'netflow.reverse_post_ip_precedence', type: 'short', }, - 'netflow.pseudo_wire_id': { + 'netflow.reverse_post_layer2_octet_delta_count': { category: 'netflow', - name: 'netflow.pseudo_wire_id', + name: 'netflow.reverse_post_layer2_octet_delta_count', type: 'long', }, - 'netflow.pseudo_wire_type': { + 'netflow.reverse_post_layer2_octet_total_count': { category: 'netflow', - name: 'netflow.pseudo_wire_type', - type: 'integer', + name: 'netflow.reverse_post_layer2_octet_total_count', + type: 'long', }, - 'netflow.pseudo_wire_control_word': { + 'netflow.reverse_post_mcast_layer2_octet_delta_count': { category: 'netflow', - name: 'netflow.pseudo_wire_control_word', + name: 'netflow.reverse_post_mcast_layer2_octet_delta_count', type: 'long', }, - 'netflow.ingress_physical_interface': { + 'netflow.reverse_post_mcast_layer2_octet_total_count': { category: 'netflow', - name: 'netflow.ingress_physical_interface', + name: 'netflow.reverse_post_mcast_layer2_octet_total_count', type: 'long', }, - 'netflow.egress_physical_interface': { + 'netflow.reverse_post_mcast_octet_delta_count': { category: 'netflow', - name: 'netflow.egress_physical_interface', + name: 'netflow.reverse_post_mcast_octet_delta_count', type: 'long', }, - 'netflow.post_dot1q_vlan_id': { + 'netflow.reverse_post_mcast_octet_total_count': { category: 'netflow', - name: 'netflow.post_dot1q_vlan_id', - type: 'integer', + name: 'netflow.reverse_post_mcast_octet_total_count', + type: 'long', }, - 'netflow.post_dot1q_customer_vlan_id': { + 'netflow.reverse_post_mcast_packet_delta_count': { category: 'netflow', - name: 'netflow.post_dot1q_customer_vlan_id', - type: 'integer', + name: 'netflow.reverse_post_mcast_packet_delta_count', + type: 'long', }, - 'netflow.ethernet_type': { + 'netflow.reverse_post_mcast_packet_total_count': { category: 'netflow', - name: 'netflow.ethernet_type', - type: 'integer', + name: 'netflow.reverse_post_mcast_packet_total_count', + type: 'long', }, - 'netflow.post_ip_precedence': { + 'netflow.reverse_post_mpls_top_label_exp': { category: 'netflow', - name: 'netflow.post_ip_precedence', + name: 'netflow.reverse_post_mpls_top_label_exp', type: 'short', }, - 'netflow.collection_time_milliseconds': { - category: 'netflow', - name: 'netflow.collection_time_milliseconds', - type: 'date', - }, - 'netflow.export_sctp_stream_id': { + 'netflow.reverse_post_napt_destination_transport_port': { category: 'netflow', - name: 'netflow.export_sctp_stream_id', + name: 'netflow.reverse_post_napt_destination_transport_port', type: 'integer', }, - 'netflow.max_export_seconds': { + 'netflow.reverse_post_napt_source_transport_port': { category: 'netflow', - name: 'netflow.max_export_seconds', - type: 'date', + name: 'netflow.reverse_post_napt_source_transport_port', + type: 'integer', }, - 'netflow.max_flow_end_seconds': { + 'netflow.reverse_post_nat_destination_ipv4_address': { category: 'netflow', - name: 'netflow.max_flow_end_seconds', - type: 'date', + name: 'netflow.reverse_post_nat_destination_ipv4_address', + type: 'ip', }, - 'netflow.message_md5_checksum': { + 'netflow.reverse_post_nat_destination_ipv6_address': { category: 'netflow', - name: 'netflow.message_md5_checksum', - type: 'short', + name: 'netflow.reverse_post_nat_destination_ipv6_address', + type: 'ip', }, - 'netflow.message_scope': { + 'netflow.reverse_post_nat_source_ipv4_address': { category: 'netflow', - name: 'netflow.message_scope', - type: 'short', + name: 'netflow.reverse_post_nat_source_ipv4_address', + type: 'ip', }, - 'netflow.min_export_seconds': { + 'netflow.reverse_post_nat_source_ipv6_address': { category: 'netflow', - name: 'netflow.min_export_seconds', - type: 'date', + name: 'netflow.reverse_post_nat_source_ipv6_address', + type: 'ip', }, - 'netflow.min_flow_start_seconds': { + 'netflow.reverse_post_octet_delta_count': { category: 'netflow', - name: 'netflow.min_flow_start_seconds', - type: 'date', + name: 'netflow.reverse_post_octet_delta_count', + type: 'long', }, - 'netflow.opaque_octets': { + 'netflow.reverse_post_octet_total_count': { category: 'netflow', - name: 'netflow.opaque_octets', - type: 'short', + name: 'netflow.reverse_post_octet_total_count', + type: 'long', }, - 'netflow.session_scope': { + 'netflow.reverse_post_packet_delta_count': { category: 'netflow', - name: 'netflow.session_scope', - type: 'short', + name: 'netflow.reverse_post_packet_delta_count', + type: 'long', }, - 'netflow.max_flow_end_microseconds': { + 'netflow.reverse_post_packet_total_count': { category: 'netflow', - name: 'netflow.max_flow_end_microseconds', - type: 'date', + name: 'netflow.reverse_post_packet_total_count', + type: 'long', }, - 'netflow.max_flow_end_milliseconds': { + 'netflow.reverse_post_source_mac_address': { category: 'netflow', - name: 'netflow.max_flow_end_milliseconds', - type: 'date', + name: 'netflow.reverse_post_source_mac_address', + type: 'keyword', }, - 'netflow.max_flow_end_nanoseconds': { + 'netflow.reverse_post_vlan_id': { category: 'netflow', - name: 'netflow.max_flow_end_nanoseconds', - type: 'date', + name: 'netflow.reverse_post_vlan_id', + type: 'integer', }, - 'netflow.min_flow_start_microseconds': { + 'netflow.reverse_private_enterprise_number': { category: 'netflow', - name: 'netflow.min_flow_start_microseconds', - type: 'date', + name: 'netflow.reverse_private_enterprise_number', + type: 'long', }, - 'netflow.min_flow_start_milliseconds': { + 'netflow.reverse_protocol_identifier': { category: 'netflow', - name: 'netflow.min_flow_start_milliseconds', - type: 'date', + name: 'netflow.reverse_protocol_identifier', + type: 'short', }, - 'netflow.min_flow_start_nanoseconds': { + 'netflow.reverse_pseudo_wire_control_word': { category: 'netflow', - name: 'netflow.min_flow_start_nanoseconds', - type: 'date', + name: 'netflow.reverse_pseudo_wire_control_word', + type: 'long', }, - 'netflow.collector_certificate': { + 'netflow.reverse_pseudo_wire_destination_ipv4_address': { category: 'netflow', - name: 'netflow.collector_certificate', - type: 'short', + name: 'netflow.reverse_pseudo_wire_destination_ipv4_address', + type: 'ip', }, - 'netflow.exporter_certificate': { + 'netflow.reverse_pseudo_wire_id': { category: 'netflow', - name: 'netflow.exporter_certificate', - type: 'short', + name: 'netflow.reverse_pseudo_wire_id', + type: 'long', }, - 'netflow.data_records_reliability': { + 'netflow.reverse_pseudo_wire_type': { category: 'netflow', - name: 'netflow.data_records_reliability', - type: 'boolean', + name: 'netflow.reverse_pseudo_wire_type', + type: 'integer', }, - 'netflow.observation_point_type': { + 'netflow.reverse_relative_error': { category: 'netflow', - name: 'netflow.observation_point_type', - type: 'short', + name: 'netflow.reverse_relative_error', + type: 'double', }, - 'netflow.new_connection_delta_count': { + 'netflow.reverse_responder_octets': { category: 'netflow', - name: 'netflow.new_connection_delta_count', + name: 'netflow.reverse_responder_octets', type: 'long', }, - 'netflow.connection_sum_duration_seconds': { + 'netflow.reverse_responder_packets': { category: 'netflow', - name: 'netflow.connection_sum_duration_seconds', + name: 'netflow.reverse_responder_packets', type: 'long', }, - 'netflow.connection_transaction_id': { + 'netflow.reverse_rfc3550_jitter_microseconds': { category: 'netflow', - name: 'netflow.connection_transaction_id', + name: 'netflow.reverse_rfc3550_jitter_microseconds', type: 'long', }, - 'netflow.post_nat_source_ipv6_address': { - category: 'netflow', - name: 'netflow.post_nat_source_ipv6_address', - type: 'ip', - }, - 'netflow.post_nat_destination_ipv6_address': { + 'netflow.reverse_rfc3550_jitter_milliseconds': { category: 'netflow', - name: 'netflow.post_nat_destination_ipv6_address', - type: 'ip', + name: 'netflow.reverse_rfc3550_jitter_milliseconds', + type: 'long', }, - 'netflow.nat_pool_id': { + 'netflow.reverse_rfc3550_jitter_nanoseconds': { category: 'netflow', - name: 'netflow.nat_pool_id', + name: 'netflow.reverse_rfc3550_jitter_nanoseconds', type: 'long', }, - 'netflow.nat_pool_name': { + 'netflow.reverse_rtp_payload_type': { category: 'netflow', - name: 'netflow.nat_pool_name', - type: 'keyword', + name: 'netflow.reverse_rtp_payload_type', + type: 'short', }, - 'netflow.anonymization_flags': { + 'netflow.reverse_rtp_sequence_number': { category: 'netflow', - name: 'netflow.anonymization_flags', + name: 'netflow.reverse_rtp_sequence_number', type: 'integer', }, - 'netflow.anonymization_technique': { + 'netflow.reverse_sampler_id': { category: 'netflow', - name: 'netflow.anonymization_technique', - type: 'integer', + name: 'netflow.reverse_sampler_id', + type: 'short', }, - 'netflow.information_element_index': { + 'netflow.reverse_sampler_mode': { category: 'netflow', - name: 'netflow.information_element_index', - type: 'integer', + name: 'netflow.reverse_sampler_mode', + type: 'short', }, - 'netflow.p2p_technology': { + 'netflow.reverse_sampler_name': { category: 'netflow', - name: 'netflow.p2p_technology', + name: 'netflow.reverse_sampler_name', type: 'keyword', }, - 'netflow.tunnel_technology': { + 'netflow.reverse_sampler_random_interval': { category: 'netflow', - name: 'netflow.tunnel_technology', - type: 'keyword', + name: 'netflow.reverse_sampler_random_interval', + type: 'long', }, - 'netflow.encrypted_technology': { + 'netflow.reverse_sampling_algorithm': { category: 'netflow', - name: 'netflow.encrypted_technology', - type: 'keyword', + name: 'netflow.reverse_sampling_algorithm', + type: 'short', }, - 'netflow.bgp_validity_state': { + 'netflow.reverse_sampling_flow_interval': { category: 'netflow', - name: 'netflow.bgp_validity_state', - type: 'short', + name: 'netflow.reverse_sampling_flow_interval', + type: 'long', }, - 'netflow.ip_sec_spi': { + 'netflow.reverse_sampling_flow_spacing': { category: 'netflow', - name: 'netflow.ip_sec_spi', + name: 'netflow.reverse_sampling_flow_spacing', type: 'long', }, - 'netflow.gre_key': { + 'netflow.reverse_sampling_interval': { category: 'netflow', - name: 'netflow.gre_key', + name: 'netflow.reverse_sampling_interval', type: 'long', }, - 'netflow.nat_type': { + 'netflow.reverse_sampling_packet_interval': { category: 'netflow', - name: 'netflow.nat_type', - type: 'short', + name: 'netflow.reverse_sampling_packet_interval', + type: 'long', }, - 'netflow.initiator_packets': { + 'netflow.reverse_sampling_packet_space': { category: 'netflow', - name: 'netflow.initiator_packets', + name: 'netflow.reverse_sampling_packet_space', type: 'long', }, - 'netflow.responder_packets': { + 'netflow.reverse_sampling_population': { category: 'netflow', - name: 'netflow.responder_packets', + name: 'netflow.reverse_sampling_population', type: 'long', }, - 'netflow.observation_domain_name': { + 'netflow.reverse_sampling_probability': { category: 'netflow', - name: 'netflow.observation_domain_name', - type: 'keyword', + name: 'netflow.reverse_sampling_probability', + type: 'double', }, - 'netflow.selection_sequence_id': { + 'netflow.reverse_sampling_size': { category: 'netflow', - name: 'netflow.selection_sequence_id', + name: 'netflow.reverse_sampling_size', type: 'long', }, - 'netflow.selector_id': { + 'netflow.reverse_sampling_time_interval': { category: 'netflow', - name: 'netflow.selector_id', + name: 'netflow.reverse_sampling_time_interval', type: 'long', }, - 'netflow.information_element_id': { + 'netflow.reverse_sampling_time_space': { category: 'netflow', - name: 'netflow.information_element_id', + name: 'netflow.reverse_sampling_time_space', + type: 'long', + }, + 'netflow.reverse_second_packet_banner': { + category: 'netflow', + name: 'netflow.reverse_second_packet_banner', + type: 'keyword', + }, + 'netflow.reverse_section_exported_octets': { + category: 'netflow', + name: 'netflow.reverse_section_exported_octets', type: 'integer', }, - 'netflow.selector_algorithm': { + 'netflow.reverse_section_offset': { category: 'netflow', - name: 'netflow.selector_algorithm', + name: 'netflow.reverse_section_offset', type: 'integer', }, - 'netflow.sampling_packet_interval': { + 'netflow.reverse_selection_sequence_id': { category: 'netflow', - name: 'netflow.sampling_packet_interval', + name: 'netflow.reverse_selection_sequence_id', type: 'long', }, - 'netflow.sampling_packet_space': { + 'netflow.reverse_selector_algorithm': { category: 'netflow', - name: 'netflow.sampling_packet_space', - type: 'long', + name: 'netflow.reverse_selector_algorithm', + type: 'integer', }, - 'netflow.sampling_time_interval': { + 'netflow.reverse_selector_id': { category: 'netflow', - name: 'netflow.sampling_time_interval', + name: 'netflow.reverse_selector_id', type: 'long', }, - 'netflow.sampling_time_space': { + 'netflow.reverse_selector_id_total_flows_observed': { category: 'netflow', - name: 'netflow.sampling_time_space', + name: 'netflow.reverse_selector_id_total_flows_observed', type: 'long', }, - 'netflow.sampling_size': { + 'netflow.reverse_selector_id_total_flows_selected': { category: 'netflow', - name: 'netflow.sampling_size', + name: 'netflow.reverse_selector_id_total_flows_selected', type: 'long', }, - 'netflow.sampling_population': { + 'netflow.reverse_selector_id_total_pkts_observed': { category: 'netflow', - name: 'netflow.sampling_population', + name: 'netflow.reverse_selector_id_total_pkts_observed', type: 'long', }, - 'netflow.sampling_probability': { + 'netflow.reverse_selector_id_total_pkts_selected': { category: 'netflow', - name: 'netflow.sampling_probability', - type: 'double', + name: 'netflow.reverse_selector_id_total_pkts_selected', + type: 'long', }, - 'netflow.data_link_frame_size': { + 'netflow.reverse_selector_name': { category: 'netflow', - name: 'netflow.data_link_frame_size', - type: 'integer', + name: 'netflow.reverse_selector_name', + type: 'keyword', }, - 'netflow.ip_header_packet_section': { + 'netflow.reverse_session_scope': { category: 'netflow', - name: 'netflow.ip_header_packet_section', + name: 'netflow.reverse_session_scope', type: 'short', }, - 'netflow.ip_payload_packet_section': { + 'netflow.reverse_small_packet_count': { category: 'netflow', - name: 'netflow.ip_payload_packet_section', - type: 'short', + name: 'netflow.reverse_small_packet_count', + type: 'long', }, - 'netflow.data_link_frame_section': { + 'netflow.reverse_source_ipv4_address': { category: 'netflow', - name: 'netflow.data_link_frame_section', - type: 'short', + name: 'netflow.reverse_source_ipv4_address', + type: 'ip', }, - 'netflow.mpls_label_stack_section': { + 'netflow.reverse_source_ipv4_prefix': { category: 'netflow', - name: 'netflow.mpls_label_stack_section', - type: 'short', + name: 'netflow.reverse_source_ipv4_prefix', + type: 'ip', }, - 'netflow.mpls_payload_packet_section': { + 'netflow.reverse_source_ipv4_prefix_length': { category: 'netflow', - name: 'netflow.mpls_payload_packet_section', + name: 'netflow.reverse_source_ipv4_prefix_length', type: 'short', }, - 'netflow.selector_id_total_pkts_observed': { - category: 'netflow', - name: 'netflow.selector_id_total_pkts_observed', - type: 'long', - }, - 'netflow.selector_id_total_pkts_selected': { + 'netflow.reverse_source_ipv6_address': { category: 'netflow', - name: 'netflow.selector_id_total_pkts_selected', - type: 'long', + name: 'netflow.reverse_source_ipv6_address', + type: 'ip', }, - 'netflow.absolute_error': { + 'netflow.reverse_source_ipv6_prefix': { category: 'netflow', - name: 'netflow.absolute_error', - type: 'double', + name: 'netflow.reverse_source_ipv6_prefix', + type: 'ip', }, - 'netflow.relative_error': { + 'netflow.reverse_source_ipv6_prefix_length': { category: 'netflow', - name: 'netflow.relative_error', - type: 'double', + name: 'netflow.reverse_source_ipv6_prefix_length', + type: 'short', }, - 'netflow.observation_time_seconds': { + 'netflow.reverse_source_mac_address': { category: 'netflow', - name: 'netflow.observation_time_seconds', - type: 'date', + name: 'netflow.reverse_source_mac_address', + type: 'keyword', }, - 'netflow.observation_time_milliseconds': { + 'netflow.reverse_source_transport_port': { category: 'netflow', - name: 'netflow.observation_time_milliseconds', - type: 'date', + name: 'netflow.reverse_source_transport_port', + type: 'integer', }, - 'netflow.observation_time_microseconds': { + 'netflow.reverse_src_traffic_index': { category: 'netflow', - name: 'netflow.observation_time_microseconds', - type: 'date', + name: 'netflow.reverse_src_traffic_index', + type: 'long', }, - 'netflow.observation_time_nanoseconds': { + 'netflow.reverse_sta_ipv4_address': { category: 'netflow', - name: 'netflow.observation_time_nanoseconds', - type: 'date', + name: 'netflow.reverse_sta_ipv4_address', + type: 'ip', }, - 'netflow.digest_hash_value': { + 'netflow.reverse_sta_mac_address': { category: 'netflow', - name: 'netflow.digest_hash_value', - type: 'long', + name: 'netflow.reverse_sta_mac_address', + type: 'keyword', }, - 'netflow.hash_ip_payload_offset': { + 'netflow.reverse_standard_deviation_interarrival_time': { category: 'netflow', - name: 'netflow.hash_ip_payload_offset', + name: 'netflow.reverse_standard_deviation_interarrival_time', type: 'long', }, - 'netflow.hash_ip_payload_size': { + 'netflow.reverse_standard_deviation_payload_length': { category: 'netflow', - name: 'netflow.hash_ip_payload_size', - type: 'long', + name: 'netflow.reverse_standard_deviation_payload_length', + type: 'integer', }, - 'netflow.hash_output_range_min': { + 'netflow.reverse_system_init_time_milliseconds': { category: 'netflow', - name: 'netflow.hash_output_range_min', + name: 'netflow.reverse_system_init_time_milliseconds', type: 'long', }, - 'netflow.hash_output_range_max': { + 'netflow.reverse_tcp_ack_total_count': { category: 'netflow', - name: 'netflow.hash_output_range_max', + name: 'netflow.reverse_tcp_ack_total_count', type: 'long', }, - 'netflow.hash_selected_range_min': { + 'netflow.reverse_tcp_acknowledgement_number': { category: 'netflow', - name: 'netflow.hash_selected_range_min', + name: 'netflow.reverse_tcp_acknowledgement_number', type: 'long', }, - 'netflow.hash_selected_range_max': { + 'netflow.reverse_tcp_control_bits': { category: 'netflow', - name: 'netflow.hash_selected_range_max', - type: 'long', + name: 'netflow.reverse_tcp_control_bits', + type: 'integer', }, - 'netflow.hash_digest_output': { + 'netflow.reverse_tcp_destination_port': { category: 'netflow', - name: 'netflow.hash_digest_output', - type: 'boolean', + name: 'netflow.reverse_tcp_destination_port', + type: 'integer', }, - 'netflow.hash_initialiser_value': { + 'netflow.reverse_tcp_fin_total_count': { category: 'netflow', - name: 'netflow.hash_initialiser_value', + name: 'netflow.reverse_tcp_fin_total_count', type: 'long', }, - 'netflow.selector_name': { - category: 'netflow', - name: 'netflow.selector_name', - type: 'keyword', - }, - 'netflow.upper_ci_limit': { + 'netflow.reverse_tcp_header_length': { category: 'netflow', - name: 'netflow.upper_ci_limit', - type: 'double', + name: 'netflow.reverse_tcp_header_length', + type: 'short', }, - 'netflow.lower_ci_limit': { + 'netflow.reverse_tcp_options': { category: 'netflow', - name: 'netflow.lower_ci_limit', - type: 'double', + name: 'netflow.reverse_tcp_options', + type: 'long', }, - 'netflow.confidence_level': { + 'netflow.reverse_tcp_psh_total_count': { category: 'netflow', - name: 'netflow.confidence_level', - type: 'double', + name: 'netflow.reverse_tcp_psh_total_count', + type: 'long', }, - 'netflow.information_element_data_type': { + 'netflow.reverse_tcp_rst_total_count': { category: 'netflow', - name: 'netflow.information_element_data_type', - type: 'short', + name: 'netflow.reverse_tcp_rst_total_count', + type: 'long', }, - 'netflow.information_element_description': { + 'netflow.reverse_tcp_sequence_number': { category: 'netflow', - name: 'netflow.information_element_description', - type: 'keyword', + name: 'netflow.reverse_tcp_sequence_number', + type: 'long', }, - 'netflow.information_element_name': { + 'netflow.reverse_tcp_source_port': { category: 'netflow', - name: 'netflow.information_element_name', - type: 'keyword', + name: 'netflow.reverse_tcp_source_port', + type: 'integer', }, - 'netflow.information_element_range_begin': { + 'netflow.reverse_tcp_syn_total_count': { category: 'netflow', - name: 'netflow.information_element_range_begin', + name: 'netflow.reverse_tcp_syn_total_count', type: 'long', }, - 'netflow.information_element_range_end': { + 'netflow.reverse_tcp_urg_total_count': { category: 'netflow', - name: 'netflow.information_element_range_end', + name: 'netflow.reverse_tcp_urg_total_count', type: 'long', }, - 'netflow.information_element_semantics': { + 'netflow.reverse_tcp_urgent_pointer': { category: 'netflow', - name: 'netflow.information_element_semantics', - type: 'short', + name: 'netflow.reverse_tcp_urgent_pointer', + type: 'integer', }, - 'netflow.information_element_units': { + 'netflow.reverse_tcp_window_scale': { category: 'netflow', - name: 'netflow.information_element_units', + name: 'netflow.reverse_tcp_window_scale', type: 'integer', }, - 'netflow.private_enterprise_number': { + 'netflow.reverse_tcp_window_size': { category: 'netflow', - name: 'netflow.private_enterprise_number', - type: 'long', + name: 'netflow.reverse_tcp_window_size', + type: 'integer', }, - 'netflow.virtual_station_interface_id': { + 'netflow.reverse_total_length_ipv4': { category: 'netflow', - name: 'netflow.virtual_station_interface_id', - type: 'short', + name: 'netflow.reverse_total_length_ipv4', + type: 'integer', }, - 'netflow.virtual_station_interface_name': { + 'netflow.reverse_transport_octet_delta_count': { category: 'netflow', - name: 'netflow.virtual_station_interface_name', - type: 'keyword', + name: 'netflow.reverse_transport_octet_delta_count', + type: 'long', }, - 'netflow.virtual_station_uuid': { + 'netflow.reverse_transport_packet_delta_count': { category: 'netflow', - name: 'netflow.virtual_station_uuid', - type: 'short', + name: 'netflow.reverse_transport_packet_delta_count', + type: 'long', }, - 'netflow.virtual_station_name': { + 'netflow.reverse_tunnel_technology': { category: 'netflow', - name: 'netflow.virtual_station_name', + name: 'netflow.reverse_tunnel_technology', type: 'keyword', }, - 'netflow.layer2_segment_id': { + 'netflow.reverse_udp_destination_port': { category: 'netflow', - name: 'netflow.layer2_segment_id', - type: 'long', + name: 'netflow.reverse_udp_destination_port', + type: 'integer', }, - 'netflow.layer2_octet_delta_count': { + 'netflow.reverse_udp_message_length': { category: 'netflow', - name: 'netflow.layer2_octet_delta_count', - type: 'long', + name: 'netflow.reverse_udp_message_length', + type: 'integer', }, - 'netflow.layer2_octet_total_count': { + 'netflow.reverse_udp_source_port': { category: 'netflow', - name: 'netflow.layer2_octet_total_count', - type: 'long', + name: 'netflow.reverse_udp_source_port', + type: 'integer', }, - 'netflow.ingress_unicast_packet_total_count': { + 'netflow.reverse_union_tcp_flags': { category: 'netflow', - name: 'netflow.ingress_unicast_packet_total_count', - type: 'long', + name: 'netflow.reverse_union_tcp_flags', + type: 'short', }, - 'netflow.ingress_multicast_packet_total_count': { + 'netflow.reverse_upper_ci_limit': { category: 'netflow', - name: 'netflow.ingress_multicast_packet_total_count', - type: 'long', + name: 'netflow.reverse_upper_ci_limit', + type: 'double', }, - 'netflow.ingress_broadcast_packet_total_count': { + 'netflow.reverse_user_name': { category: 'netflow', - name: 'netflow.ingress_broadcast_packet_total_count', - type: 'long', + name: 'netflow.reverse_user_name', + type: 'keyword', }, - 'netflow.egress_unicast_packet_total_count': { + 'netflow.reverse_value_distribution_method': { category: 'netflow', - name: 'netflow.egress_unicast_packet_total_count', - type: 'long', + name: 'netflow.reverse_value_distribution_method', + type: 'short', }, - 'netflow.egress_broadcast_packet_total_count': { + 'netflow.reverse_virtual_station_interface_id': { category: 'netflow', - name: 'netflow.egress_broadcast_packet_total_count', - type: 'long', + name: 'netflow.reverse_virtual_station_interface_id', + type: 'keyword', }, - 'netflow.monitoring_interval_start_milli_seconds': { + 'netflow.reverse_virtual_station_interface_name': { category: 'netflow', - name: 'netflow.monitoring_interval_start_milli_seconds', - type: 'date', + name: 'netflow.reverse_virtual_station_interface_name', + type: 'keyword', }, - 'netflow.monitoring_interval_end_milli_seconds': { + 'netflow.reverse_virtual_station_name': { category: 'netflow', - name: 'netflow.monitoring_interval_end_milli_seconds', - type: 'date', + name: 'netflow.reverse_virtual_station_name', + type: 'keyword', }, - 'netflow.port_range_start': { + 'netflow.reverse_virtual_station_uuid': { category: 'netflow', - name: 'netflow.port_range_start', - type: 'integer', + name: 'netflow.reverse_virtual_station_uuid', + type: 'keyword', }, - 'netflow.port_range_end': { + 'netflow.reverse_vlan_id': { category: 'netflow', - name: 'netflow.port_range_end', + name: 'netflow.reverse_vlan_id', type: 'integer', }, - 'netflow.port_range_step_size': { + 'netflow.reverse_vr_fname': { category: 'netflow', - name: 'netflow.port_range_step_size', - type: 'integer', + name: 'netflow.reverse_vr_fname', + type: 'keyword', }, - 'netflow.port_range_num_ports': { + 'netflow.reverse_wlan_channel_id': { category: 'netflow', - name: 'netflow.port_range_num_ports', - type: 'integer', + name: 'netflow.reverse_wlan_channel_id', + type: 'short', }, - 'netflow.sta_mac_address': { + 'netflow.reverse_wlan_ssid': { category: 'netflow', - name: 'netflow.sta_mac_address', + name: 'netflow.reverse_wlan_ssid', type: 'keyword', }, - 'netflow.sta_ipv4_address': { - category: 'netflow', - name: 'netflow.sta_ipv4_address', - type: 'ip', - }, - 'netflow.wtp_mac_address': { + 'netflow.reverse_wtp_mac_address': { category: 'netflow', - name: 'netflow.wtp_mac_address', + name: 'netflow.reverse_wtp_mac_address', type: 'keyword', }, - 'netflow.ingress_interface_type': { + 'netflow.rfc3550_jitter_microseconds': { category: 'netflow', - name: 'netflow.ingress_interface_type', + name: 'netflow.rfc3550_jitter_microseconds', type: 'long', }, - 'netflow.egress_interface_type': { + 'netflow.rfc3550_jitter_milliseconds': { category: 'netflow', - name: 'netflow.egress_interface_type', + name: 'netflow.rfc3550_jitter_milliseconds', type: 'long', }, - 'netflow.rtp_sequence_number': { + 'netflow.rfc3550_jitter_nanoseconds': { category: 'netflow', - name: 'netflow.rtp_sequence_number', - type: 'integer', + name: 'netflow.rfc3550_jitter_nanoseconds', + type: 'long', }, - 'netflow.user_name': { + 'netflow.rtp_payload_type': { category: 'netflow', - name: 'netflow.user_name', - type: 'keyword', + name: 'netflow.rtp_payload_type', + type: 'short', }, - 'netflow.application_category_name': { + 'netflow.rtp_sequence_number': { category: 'netflow', - name: 'netflow.application_category_name', - type: 'keyword', + name: 'netflow.rtp_sequence_number', + type: 'integer', }, - 'netflow.application_sub_category_name': { + 'netflow.sampler_id': { category: 'netflow', - name: 'netflow.application_sub_category_name', - type: 'keyword', + name: 'netflow.sampler_id', + type: 'short', }, - 'netflow.application_group_name': { + 'netflow.sampler_mode': { category: 'netflow', - name: 'netflow.application_group_name', - type: 'keyword', + name: 'netflow.sampler_mode', + type: 'short', }, - 'netflow.original_flows_present': { + 'netflow.sampler_name': { category: 'netflow', - name: 'netflow.original_flows_present', - type: 'long', + name: 'netflow.sampler_name', + type: 'keyword', }, - 'netflow.original_flows_initiated': { + 'netflow.sampler_random_interval': { category: 'netflow', - name: 'netflow.original_flows_initiated', + name: 'netflow.sampler_random_interval', type: 'long', }, - 'netflow.original_flows_completed': { + 'netflow.sampling_algorithm': { category: 'netflow', - name: 'netflow.original_flows_completed', - type: 'long', + name: 'netflow.sampling_algorithm', + type: 'short', }, - 'netflow.distinct_count_of_source_ip_address': { + 'netflow.sampling_flow_interval': { category: 'netflow', - name: 'netflow.distinct_count_of_source_ip_address', + name: 'netflow.sampling_flow_interval', type: 'long', }, - 'netflow.distinct_count_of_destination_ip_address': { + 'netflow.sampling_flow_spacing': { category: 'netflow', - name: 'netflow.distinct_count_of_destination_ip_address', + name: 'netflow.sampling_flow_spacing', type: 'long', }, - 'netflow.distinct_count_of_source_ipv4_address': { + 'netflow.sampling_interval': { category: 'netflow', - name: 'netflow.distinct_count_of_source_ipv4_address', + name: 'netflow.sampling_interval', type: 'long', }, - 'netflow.distinct_count_of_destination_ipv4_address': { + 'netflow.sampling_packet_interval': { category: 'netflow', - name: 'netflow.distinct_count_of_destination_ipv4_address', + name: 'netflow.sampling_packet_interval', type: 'long', }, - 'netflow.distinct_count_of_source_ipv6_address': { + 'netflow.sampling_packet_space': { category: 'netflow', - name: 'netflow.distinct_count_of_source_ipv6_address', + name: 'netflow.sampling_packet_space', type: 'long', }, - 'netflow.distinct_count_of_destination_ipv6_address': { + 'netflow.sampling_population': { category: 'netflow', - name: 'netflow.distinct_count_of_destination_ipv6_address', + name: 'netflow.sampling_population', type: 'long', }, - 'netflow.value_distribution_method': { + 'netflow.sampling_probability': { category: 'netflow', - name: 'netflow.value_distribution_method', - type: 'short', + name: 'netflow.sampling_probability', + type: 'double', }, - 'netflow.rfc3550_jitter_milliseconds': { + 'netflow.sampling_size': { category: 'netflow', - name: 'netflow.rfc3550_jitter_milliseconds', + name: 'netflow.sampling_size', type: 'long', }, - 'netflow.rfc3550_jitter_microseconds': { + 'netflow.sampling_time_interval': { category: 'netflow', - name: 'netflow.rfc3550_jitter_microseconds', + name: 'netflow.sampling_time_interval', type: 'long', }, - 'netflow.rfc3550_jitter_nanoseconds': { + 'netflow.sampling_time_space': { category: 'netflow', - name: 'netflow.rfc3550_jitter_nanoseconds', + name: 'netflow.sampling_time_space', type: 'long', }, - 'netflow.dot1q_dei': { + 'netflow.second_packet_banner': { category: 'netflow', - name: 'netflow.dot1q_dei', - type: 'boolean', + name: 'netflow.second_packet_banner', + type: 'keyword', }, - 'netflow.dot1q_customer_dei': { + 'netflow.section_exported_octets': { category: 'netflow', - name: 'netflow.dot1q_customer_dei', - type: 'boolean', + name: 'netflow.section_exported_octets', + type: 'integer', }, - 'netflow.flow_selector_algorithm': { + 'netflow.section_offset': { category: 'netflow', - name: 'netflow.flow_selector_algorithm', + name: 'netflow.section_offset', type: 'integer', }, - 'netflow.flow_selected_octet_delta_count': { + 'netflow.selection_sequence_id': { category: 'netflow', - name: 'netflow.flow_selected_octet_delta_count', + name: 'netflow.selection_sequence_id', type: 'long', }, - 'netflow.flow_selected_packet_delta_count': { + 'netflow.selector_algorithm': { category: 'netflow', - name: 'netflow.flow_selected_packet_delta_count', - type: 'long', + name: 'netflow.selector_algorithm', + type: 'integer', }, - 'netflow.flow_selected_flow_delta_count': { + 'netflow.selector_id': { category: 'netflow', - name: 'netflow.flow_selected_flow_delta_count', + name: 'netflow.selector_id', type: 'long', }, 'netflow.selector_id_total_flows_observed': { @@ -30519,433 +44204,491 @@ export const fieldsBeat: BeatFields = { name: 'netflow.selector_id_total_flows_selected', type: 'long', }, - 'netflow.sampling_flow_interval': { + 'netflow.selector_id_total_pkts_observed': { category: 'netflow', - name: 'netflow.sampling_flow_interval', + name: 'netflow.selector_id_total_pkts_observed', type: 'long', }, - 'netflow.sampling_flow_spacing': { + 'netflow.selector_id_total_pkts_selected': { category: 'netflow', - name: 'netflow.sampling_flow_spacing', + name: 'netflow.selector_id_total_pkts_selected', type: 'long', }, - 'netflow.flow_sampling_time_interval': { + 'netflow.selector_name': { category: 'netflow', - name: 'netflow.flow_sampling_time_interval', - type: 'long', + name: 'netflow.selector_name', + type: 'keyword', }, - 'netflow.flow_sampling_time_spacing': { + 'netflow.service_name': { category: 'netflow', - name: 'netflow.flow_sampling_time_spacing', - type: 'long', + name: 'netflow.service_name', + type: 'keyword', }, - 'netflow.hash_flow_domain': { + 'netflow.session_scope': { category: 'netflow', - name: 'netflow.hash_flow_domain', + name: 'netflow.session_scope', + type: 'short', + }, + 'netflow.silk_app_label': { + category: 'netflow', + name: 'netflow.silk_app_label', type: 'integer', }, - 'netflow.transport_octet_delta_count': { + 'netflow.small_packet_count': { category: 'netflow', - name: 'netflow.transport_octet_delta_count', + name: 'netflow.small_packet_count', type: 'long', }, - 'netflow.transport_packet_delta_count': { + 'netflow.source_ipv4_address': { category: 'netflow', - name: 'netflow.transport_packet_delta_count', - type: 'long', + name: 'netflow.source_ipv4_address', + type: 'ip', }, - 'netflow.original_exporter_ipv4_address': { + 'netflow.source_ipv4_prefix': { category: 'netflow', - name: 'netflow.original_exporter_ipv4_address', + name: 'netflow.source_ipv4_prefix', type: 'ip', }, - 'netflow.original_exporter_ipv6_address': { + 'netflow.source_ipv4_prefix_length': { category: 'netflow', - name: 'netflow.original_exporter_ipv6_address', + name: 'netflow.source_ipv4_prefix_length', + type: 'short', + }, + 'netflow.source_ipv6_address': { + category: 'netflow', + name: 'netflow.source_ipv6_address', type: 'ip', }, - 'netflow.original_observation_domain_id': { + 'netflow.source_ipv6_prefix': { category: 'netflow', - name: 'netflow.original_observation_domain_id', - type: 'long', + name: 'netflow.source_ipv6_prefix', + type: 'ip', }, - 'netflow.intermediate_process_id': { + 'netflow.source_ipv6_prefix_length': { category: 'netflow', - name: 'netflow.intermediate_process_id', - type: 'long', + name: 'netflow.source_ipv6_prefix_length', + type: 'short', }, - 'netflow.ignored_data_record_total_count': { + 'netflow.source_mac_address': { category: 'netflow', - name: 'netflow.ignored_data_record_total_count', - type: 'long', + name: 'netflow.source_mac_address', + type: 'keyword', }, - 'netflow.data_link_frame_type': { + 'netflow.source_transport_port': { category: 'netflow', - name: 'netflow.data_link_frame_type', + name: 'netflow.source_transport_port', type: 'integer', }, - 'netflow.section_offset': { + 'netflow.source_transport_ports_limit': { category: 'netflow', - name: 'netflow.section_offset', + name: 'netflow.source_transport_ports_limit', type: 'integer', }, - 'netflow.section_exported_octets': { + 'netflow.src_traffic_index': { category: 'netflow', - name: 'netflow.section_exported_octets', - type: 'integer', + name: 'netflow.src_traffic_index', + type: 'long', }, - 'netflow.dot1q_service_instance_tag': { + 'netflow.ssl_cert_serial_number': { category: 'netflow', - name: 'netflow.dot1q_service_instance_tag', - type: 'short', + name: 'netflow.ssl_cert_serial_number', + type: 'keyword', }, - 'netflow.dot1q_service_instance_id': { + 'netflow.ssl_cert_signature': { category: 'netflow', - name: 'netflow.dot1q_service_instance_id', - type: 'long', + name: 'netflow.ssl_cert_signature', + type: 'keyword', }, - 'netflow.dot1q_service_instance_priority': { + 'netflow.ssl_cert_validity_not_after': { category: 'netflow', - name: 'netflow.dot1q_service_instance_priority', - type: 'short', + name: 'netflow.ssl_cert_validity_not_after', + type: 'keyword', }, - 'netflow.dot1q_customer_source_mac_address': { + 'netflow.ssl_cert_validity_not_before': { category: 'netflow', - name: 'netflow.dot1q_customer_source_mac_address', + name: 'netflow.ssl_cert_validity_not_before', type: 'keyword', }, - 'netflow.dot1q_customer_destination_mac_address': { + 'netflow.ssl_cert_version': { category: 'netflow', - name: 'netflow.dot1q_customer_destination_mac_address', + name: 'netflow.ssl_cert_version', + type: 'short', + }, + 'netflow.ssl_certificate_hash': { + category: 'netflow', + name: 'netflow.ssl_certificate_hash', type: 'keyword', }, - 'netflow.post_layer2_octet_delta_count': { + 'netflow.ssl_cipher': { category: 'netflow', - name: 'netflow.post_layer2_octet_delta_count', - type: 'long', + name: 'netflow.ssl_cipher', + type: 'keyword', }, - 'netflow.post_mcast_layer2_octet_delta_count': { + 'netflow.ssl_client_version': { category: 'netflow', - name: 'netflow.post_mcast_layer2_octet_delta_count', - type: 'long', + name: 'netflow.ssl_client_version', + type: 'short', }, - 'netflow.post_layer2_octet_total_count': { + 'netflow.ssl_compression_method': { category: 'netflow', - name: 'netflow.post_layer2_octet_total_count', - type: 'long', + name: 'netflow.ssl_compression_method', + type: 'short', }, - 'netflow.post_mcast_layer2_octet_total_count': { + 'netflow.ssl_object_type': { category: 'netflow', - name: 'netflow.post_mcast_layer2_octet_total_count', - type: 'long', + name: 'netflow.ssl_object_type', + type: 'keyword', }, - 'netflow.minimum_layer2_total_length': { + 'netflow.ssl_object_value': { category: 'netflow', - name: 'netflow.minimum_layer2_total_length', - type: 'long', + name: 'netflow.ssl_object_value', + type: 'keyword', }, - 'netflow.maximum_layer2_total_length': { + 'netflow.ssl_public_key_algorithm': { category: 'netflow', - name: 'netflow.maximum_layer2_total_length', - type: 'long', + name: 'netflow.ssl_public_key_algorithm', + type: 'keyword', }, - 'netflow.dropped_layer2_octet_delta_count': { + 'netflow.ssl_public_key_length': { category: 'netflow', - name: 'netflow.dropped_layer2_octet_delta_count', - type: 'long', + name: 'netflow.ssl_public_key_length', + type: 'keyword', }, - 'netflow.dropped_layer2_octet_total_count': { + 'netflow.ssl_server_cipher': { category: 'netflow', - name: 'netflow.dropped_layer2_octet_total_count', + name: 'netflow.ssl_server_cipher', type: 'long', }, - 'netflow.ignored_layer2_octet_total_count': { + 'netflow.ssl_server_name': { category: 'netflow', - name: 'netflow.ignored_layer2_octet_total_count', - type: 'long', + name: 'netflow.ssl_server_name', + type: 'keyword', }, - 'netflow.not_sent_layer2_octet_total_count': { + 'netflow.sta_ipv4_address': { category: 'netflow', - name: 'netflow.not_sent_layer2_octet_total_count', - type: 'long', + name: 'netflow.sta_ipv4_address', + type: 'ip', }, - 'netflow.layer2_octet_delta_sum_of_squares': { + 'netflow.sta_mac_address': { category: 'netflow', - name: 'netflow.layer2_octet_delta_sum_of_squares', - type: 'long', + name: 'netflow.sta_mac_address', + type: 'keyword', }, - 'netflow.layer2_octet_total_sum_of_squares': { + 'netflow.standard_deviation_interarrival_time': { category: 'netflow', - name: 'netflow.layer2_octet_total_sum_of_squares', + name: 'netflow.standard_deviation_interarrival_time', type: 'long', }, - 'netflow.layer2_frame_delta_count': { + 'netflow.standard_deviation_payload_length': { category: 'netflow', - name: 'netflow.layer2_frame_delta_count', - type: 'long', + name: 'netflow.standard_deviation_payload_length', + type: 'short', }, - 'netflow.layer2_frame_total_count': { + 'netflow.system_init_time_milliseconds': { category: 'netflow', - name: 'netflow.layer2_frame_total_count', - type: 'long', + name: 'netflow.system_init_time_milliseconds', + type: 'date', }, - 'netflow.pseudo_wire_destination_ipv4_address': { + 'netflow.tcp_ack_total_count': { category: 'netflow', - name: 'netflow.pseudo_wire_destination_ipv4_address', - type: 'ip', + name: 'netflow.tcp_ack_total_count', + type: 'long', }, - 'netflow.ignored_layer2_frame_total_count': { + 'netflow.tcp_acknowledgement_number': { category: 'netflow', - name: 'netflow.ignored_layer2_frame_total_count', + name: 'netflow.tcp_acknowledgement_number', type: 'long', }, - 'netflow.mib_object_value_integer': { + 'netflow.tcp_control_bits': { category: 'netflow', - name: 'netflow.mib_object_value_integer', + name: 'netflow.tcp_control_bits', type: 'integer', }, - 'netflow.mib_object_value_octet_string': { + 'netflow.tcp_destination_port': { category: 'netflow', - name: 'netflow.mib_object_value_octet_string', - type: 'short', + name: 'netflow.tcp_destination_port', + type: 'integer', }, - 'netflow.mib_object_value_oid': { + 'netflow.tcp_fin_total_count': { category: 'netflow', - name: 'netflow.mib_object_value_oid', - type: 'short', + name: 'netflow.tcp_fin_total_count', + type: 'long', }, - 'netflow.mib_object_value_bits': { + 'netflow.tcp_header_length': { category: 'netflow', - name: 'netflow.mib_object_value_bits', + name: 'netflow.tcp_header_length', type: 'short', }, - 'netflow.mib_object_value_ip_address': { - category: 'netflow', - name: 'netflow.mib_object_value_ip_address', - type: 'ip', - }, - 'netflow.mib_object_value_counter': { + 'netflow.tcp_options': { category: 'netflow', - name: 'netflow.mib_object_value_counter', + name: 'netflow.tcp_options', type: 'long', }, - 'netflow.mib_object_value_gauge': { + 'netflow.tcp_psh_total_count': { category: 'netflow', - name: 'netflow.mib_object_value_gauge', + name: 'netflow.tcp_psh_total_count', type: 'long', }, - 'netflow.mib_object_value_time_ticks': { + 'netflow.tcp_rst_total_count': { category: 'netflow', - name: 'netflow.mib_object_value_time_ticks', + name: 'netflow.tcp_rst_total_count', type: 'long', }, - 'netflow.mib_object_value_unsigned': { + 'netflow.tcp_sequence_number': { category: 'netflow', - name: 'netflow.mib_object_value_unsigned', + name: 'netflow.tcp_sequence_number', type: 'long', }, - 'netflow.mib_object_identifier': { + 'netflow.tcp_source_port': { category: 'netflow', - name: 'netflow.mib_object_identifier', - type: 'short', + name: 'netflow.tcp_source_port', + type: 'integer', }, - 'netflow.mib_sub_identifier': { + 'netflow.tcp_syn_total_count': { category: 'netflow', - name: 'netflow.mib_sub_identifier', + name: 'netflow.tcp_syn_total_count', type: 'long', }, - 'netflow.mib_index_indicator': { + 'netflow.tcp_urg_total_count': { category: 'netflow', - name: 'netflow.mib_index_indicator', + name: 'netflow.tcp_urg_total_count', type: 'long', }, - 'netflow.mib_capture_time_semantics': { + 'netflow.tcp_urgent_pointer': { category: 'netflow', - name: 'netflow.mib_capture_time_semantics', - type: 'short', + name: 'netflow.tcp_urgent_pointer', + type: 'integer', }, - 'netflow.mib_context_engine_id': { + 'netflow.tcp_window_scale': { category: 'netflow', - name: 'netflow.mib_context_engine_id', - type: 'short', + name: 'netflow.tcp_window_scale', + type: 'integer', }, - 'netflow.mib_context_name': { + 'netflow.tcp_window_size': { category: 'netflow', - name: 'netflow.mib_context_name', - type: 'keyword', + name: 'netflow.tcp_window_size', + type: 'integer', }, - 'netflow.mib_object_name': { + 'netflow.template_id': { category: 'netflow', - name: 'netflow.mib_object_name', - type: 'keyword', + name: 'netflow.template_id', + type: 'integer', }, - 'netflow.mib_object_description': { + 'netflow.tftp_filename': { category: 'netflow', - name: 'netflow.mib_object_description', + name: 'netflow.tftp_filename', type: 'keyword', }, - 'netflow.mib_object_syntax': { + 'netflow.tftp_mode': { category: 'netflow', - name: 'netflow.mib_object_syntax', + name: 'netflow.tftp_mode', type: 'keyword', }, - 'netflow.mib_module_name': { + 'netflow.timestamp': { category: 'netflow', - name: 'netflow.mib_module_name', - type: 'keyword', + name: 'netflow.timestamp', + type: 'long', }, - 'netflow.mobile_imsi': { + 'netflow.timestamp_absolute_monitoring-interval': { category: 'netflow', - name: 'netflow.mobile_imsi', - type: 'keyword', + name: 'netflow.timestamp_absolute_monitoring-interval', + type: 'long', }, - 'netflow.mobile_msisdn': { + 'netflow.total_length_ipv4': { category: 'netflow', - name: 'netflow.mobile_msisdn', - type: 'keyword', + name: 'netflow.total_length_ipv4', + type: 'integer', }, - 'netflow.http_status_code': { + 'netflow.traffic_type': { category: 'netflow', - name: 'netflow.http_status_code', - type: 'integer', + name: 'netflow.traffic_type', + type: 'short', }, - 'netflow.source_transport_ports_limit': { + 'netflow.transport_octet_delta_count': { category: 'netflow', - name: 'netflow.source_transport_ports_limit', - type: 'integer', + name: 'netflow.transport_octet_delta_count', + type: 'long', }, - 'netflow.http_request_method': { + 'netflow.transport_packet_delta_count': { category: 'netflow', - name: 'netflow.http_request_method', - type: 'keyword', + name: 'netflow.transport_packet_delta_count', + type: 'long', }, - 'netflow.http_request_host': { + 'netflow.tunnel_technology': { category: 'netflow', - name: 'netflow.http_request_host', + name: 'netflow.tunnel_technology', type: 'keyword', }, - 'netflow.http_request_target': { + 'netflow.udp_destination_port': { category: 'netflow', - name: 'netflow.http_request_target', - type: 'keyword', + name: 'netflow.udp_destination_port', + type: 'integer', }, - 'netflow.http_message_version': { + 'netflow.udp_message_length': { category: 'netflow', - name: 'netflow.http_message_version', - type: 'keyword', + name: 'netflow.udp_message_length', + type: 'integer', }, - 'netflow.nat_instance_id': { + 'netflow.udp_source_port': { category: 'netflow', - name: 'netflow.nat_instance_id', - type: 'long', + name: 'netflow.udp_source_port', + type: 'integer', }, - 'netflow.internal_address_realm': { + 'netflow.union_tcp_flags': { category: 'netflow', - name: 'netflow.internal_address_realm', + name: 'netflow.union_tcp_flags', type: 'short', }, - 'netflow.external_address_realm': { + 'netflow.upper_ci_limit': { category: 'netflow', - name: 'netflow.external_address_realm', + name: 'netflow.upper_ci_limit', + type: 'double', + }, + 'netflow.user_name': { + category: 'netflow', + name: 'netflow.user_name', + type: 'keyword', + }, + 'netflow.username': { + category: 'netflow', + name: 'netflow.username', + type: 'keyword', + }, + 'netflow.value_distribution_method': { + category: 'netflow', + name: 'netflow.value_distribution_method', type: 'short', }, - 'netflow.nat_quota_exceeded_event': { + 'netflow.viptela_vpn_id': { category: 'netflow', - name: 'netflow.nat_quota_exceeded_event', + name: 'netflow.viptela_vpn_id', type: 'long', }, - 'netflow.nat_threshold_event': { + 'netflow.virtual_station_interface_id': { category: 'netflow', - name: 'netflow.nat_threshold_event', - type: 'long', + name: 'netflow.virtual_station_interface_id', + type: 'short', }, - 'netflow.http_user_agent': { + 'netflow.virtual_station_interface_name': { category: 'netflow', - name: 'netflow.http_user_agent', + name: 'netflow.virtual_station_interface_name', type: 'keyword', }, - 'netflow.http_content_type': { + 'netflow.virtual_station_name': { category: 'netflow', - name: 'netflow.http_content_type', + name: 'netflow.virtual_station_name', type: 'keyword', }, - 'netflow.http_reason_phrase': { + 'netflow.virtual_station_uuid': { category: 'netflow', - name: 'netflow.http_reason_phrase', - type: 'keyword', + name: 'netflow.virtual_station_uuid', + type: 'short', }, - 'netflow.max_session_entries': { + 'netflow.vlan_id': { category: 'netflow', - name: 'netflow.max_session_entries', - type: 'long', + name: 'netflow.vlan_id', + type: 'integer', }, - 'netflow.max_bib_entries': { + 'netflow.vmware_egress_interface_attr': { category: 'netflow', - name: 'netflow.max_bib_entries', - type: 'long', + name: 'netflow.vmware_egress_interface_attr', + type: 'integer', }, - 'netflow.max_entries_per_user': { + 'netflow.vmware_ingress_interface_attr': { category: 'netflow', - name: 'netflow.max_entries_per_user', - type: 'long', + name: 'netflow.vmware_ingress_interface_attr', + type: 'integer', }, - 'netflow.max_subscribers': { + 'netflow.vmware_tenant_dest_ipv4': { category: 'netflow', - name: 'netflow.max_subscribers', - type: 'long', + name: 'netflow.vmware_tenant_dest_ipv4', + type: 'ip', }, - 'netflow.max_fragments_pending_reassembly': { + 'netflow.vmware_tenant_dest_ipv6': { category: 'netflow', - name: 'netflow.max_fragments_pending_reassembly', - type: 'long', + name: 'netflow.vmware_tenant_dest_ipv6', + type: 'ip', }, - 'netflow.address_pool_high_threshold': { + 'netflow.vmware_tenant_dest_port': { category: 'netflow', - name: 'netflow.address_pool_high_threshold', - type: 'long', + name: 'netflow.vmware_tenant_dest_port', + type: 'integer', }, - 'netflow.address_pool_low_threshold': { + 'netflow.vmware_tenant_protocol': { category: 'netflow', - name: 'netflow.address_pool_low_threshold', - type: 'long', + name: 'netflow.vmware_tenant_protocol', + type: 'short', }, - 'netflow.address_port_mapping_high_threshold': { + 'netflow.vmware_tenant_source_ipv4': { category: 'netflow', - name: 'netflow.address_port_mapping_high_threshold', - type: 'long', + name: 'netflow.vmware_tenant_source_ipv4', + type: 'ip', }, - 'netflow.address_port_mapping_low_threshold': { + 'netflow.vmware_tenant_source_ipv6': { category: 'netflow', - name: 'netflow.address_port_mapping_low_threshold', - type: 'long', + name: 'netflow.vmware_tenant_source_ipv6', + type: 'ip', }, - 'netflow.address_port_mapping_per_user_high_threshold': { + 'netflow.vmware_tenant_source_port': { category: 'netflow', - name: 'netflow.address_port_mapping_per_user_high_threshold', - type: 'long', + name: 'netflow.vmware_tenant_source_port', + type: 'integer', }, - 'netflow.global_address_mapping_high_threshold': { + 'netflow.vmware_vxlan_export_role': { category: 'netflow', - name: 'netflow.global_address_mapping_high_threshold', - type: 'long', + name: 'netflow.vmware_vxlan_export_role', + type: 'short', }, 'netflow.vpn_identifier': { category: 'netflow', name: 'netflow.vpn_identifier', type: 'short', }, - bucket_name: { - category: 'base', - description: 'Name of the S3 bucket that this log retrieved from. ', - name: 'bucket_name', + 'netflow.vr_fname': { + category: 'netflow', + name: 'netflow.vr_fname', type: 'keyword', }, - object_key: { - category: 'base', - description: 'Name of the S3 object that this log retrieved from. ', - name: 'object_key', + 'netflow.waasoptimization_segment': { + category: 'netflow', + name: 'netflow.waasoptimization_segment', + type: 'short', + }, + 'netflow.wlan_channel_id': { + category: 'netflow', + name: 'netflow.wlan_channel_id', + type: 'short', + }, + 'netflow.wlan_ssid': { + category: 'netflow', + name: 'netflow.wlan_ssid', + type: 'keyword', + }, + 'netflow.wtp_mac_address': { + category: 'netflow', + name: 'netflow.wtp_mac_address', type: 'keyword', }, + 'netflow.xlate_destination_address_ip_v4': { + category: 'netflow', + name: 'netflow.xlate_destination_address_ip_v4', + type: 'ip', + }, + 'netflow.xlate_destination_port': { + category: 'netflow', + name: 'netflow.xlate_destination_port', + type: 'integer', + }, + 'netflow.xlate_source_address_ip_v4': { + category: 'netflow', + name: 'netflow.xlate_source_address_ip_v4', + type: 'ip', + }, + 'netflow.xlate_source_port': { + category: 'netflow', + name: 'netflow.xlate_source_port', + type: 'integer', + }, 'cef.version': { category: 'cef', description: 'Version of the CEF specification used by the message. ', @@ -33954,377 +47697,451 @@ export const fieldsBeat: BeatFields = { 'If the Redis command has resulted in an error, this field contains the error message returned by the Redis server. ', name: 'redis.error', }, - 'thrift.params': { - category: 'thrift', - description: - 'The RPC method call parameters in a human readable format. If the IDL files are available, the parameters use names whenever possible. Otherwise, the IDs from the message are used. ', - name: 'thrift.params', + 'sip.code': { + category: 'sip', + description: 'Response status code.', + name: 'sip.code', + type: 'keyword', }, - 'thrift.service': { - category: 'thrift', - description: 'The name of the Thrift-RPC service as defined in the IDL files. ', - name: 'thrift.service', + 'sip.method': { + category: 'sip', + description: 'Request method.', + name: 'sip.method', + type: 'keyword', }, - 'thrift.return_value': { - category: 'thrift', - description: - 'The value returned by the Thrift-RPC call. This is encoded in a human readable format. ', - name: 'thrift.return_value', + 'sip.status': { + category: 'sip', + description: 'Response status phrase.', + name: 'sip.status', + type: 'keyword', }, - 'thrift.exceptions': { - category: 'thrift', - description: - 'If the call resulted in exceptions, this field contains the exceptions in a human readable format. ', - name: 'thrift.exceptions', + 'sip.type': { + category: 'sip', + description: 'Either request or response.', + name: 'sip.type', + type: 'keyword', }, - 'tls.client.x509.version': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.client.x509.version', + 'sip.version': { + category: 'sip', + description: 'SIP protocol version.', + name: 'sip.version', type: 'keyword', }, - 'tls.client.x509.version_number': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.client.x509.version_number', + 'sip.uri.original': { + category: 'sip', + description: 'The original URI.', + name: 'sip.uri.original', type: 'keyword', }, - 'tls.client.x509.serial_number': { - category: 'tls', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters. ', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'tls.client.x509.serial_number', + 'sip.uri.scheme': { + category: 'sip', + description: 'The URI scheme.', + name: 'sip.uri.scheme', type: 'keyword', }, - 'tls.client.x509.issuer.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA', - name: 'tls.client.x509.issuer.distinguished_name', + 'sip.uri.username': { + category: 'sip', + description: 'The URI user name.', + name: 'sip.uri.username', type: 'keyword', }, - 'tls.client.x509.issuer.common_name': { - category: 'tls', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'DigiCert SHA2 High Assurance Server CA', - name: 'tls.client.x509.issuer.common_name', + 'sip.uri.host': { + category: 'sip', + description: 'The URI host.', + name: 'sip.uri.host', type: 'keyword', }, - 'tls.client.x509.issuer.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.digicert.com', - name: 'tls.client.x509.issuer.organizational_unit', + 'sip.uri.port': { + category: 'sip', + description: 'The URI port.', + name: 'sip.uri.port', type: 'keyword', }, - 'tls.client.x509.issuer.organization': { - category: 'tls', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'DigiCert Inc', - name: 'tls.client.x509.issuer.organization', + 'sip.accept': { + category: 'sip', + description: 'Accept header value.', + name: 'sip.accept', type: 'keyword', }, - 'tls.client.x509.issuer.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'tls.client.x509.issuer.locality', + 'sip.allow': { + category: 'sip', + description: 'Allowed methods.', + name: 'sip.allow', type: 'keyword', }, - 'tls.client.x509.issuer.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.client.x509.issuer.province', + 'sip.call_id': { + category: 'sip', + description: 'Call ID.', + name: 'sip.call_id', type: 'keyword', }, - 'tls.client.x509.issuer.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.client.x509.issuer.state_or_province', + 'sip.content_length': { + category: 'sip', + name: 'sip.content_length', + type: 'long', + }, + 'sip.content_type': { + category: 'sip', + name: 'sip.content_type', type: 'keyword', }, - 'tls.client.x509.issuer.country': { - category: 'tls', - description: 'List of country (C) codes', - example: 'US', - name: 'tls.client.x509.issuer.country', + 'sip.max_forwards': { + category: 'sip', + name: 'sip.max_forwards', + type: 'long', + }, + 'sip.supported': { + category: 'sip', + description: 'Supported methods.', + name: 'sip.supported', type: 'keyword', }, - 'tls.client.x509.signature_algorithm': { - category: 'tls', - description: - 'Identifier for certificate signature algorithm. Recommend using names found in Go Lang Crypto library (See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353).', - example: 'SHA256-RSA', - name: 'tls.client.x509.signature_algorithm', + 'sip.user_agent.original': { + category: 'sip', + name: 'sip.user_agent.original', type: 'keyword', }, - 'tls.client.x509.not_before': { - category: 'tls', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'tls.client.x509.not_before', - type: 'date', + 'sip.private.uri.original': { + category: 'sip', + description: 'Private original URI.', + name: 'sip.private.uri.original', + type: 'keyword', }, - 'tls.client.x509.not_after': { - category: 'tls', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'tls.client.x509.not_after', - type: 'date', + 'sip.private.uri.scheme': { + category: 'sip', + description: 'Private URI scheme.', + name: 'sip.private.uri.scheme', + type: 'keyword', }, - 'tls.client.x509.subject.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Fastly, Inc., CN=r2.shared.global.fastly.net', - name: 'tls.client.x509.subject.distinguished_name', + 'sip.private.uri.username': { + category: 'sip', + description: 'Private URI user name.', + name: 'sip.private.uri.username', type: 'keyword', }, - 'tls.client.x509.subject.common_name': { - category: 'tls', - description: 'List of common names (CN) of subject.', - example: 'r2.shared.global.fastly.net', - name: 'tls.client.x509.subject.common_name', + 'sip.private.uri.host': { + category: 'sip', + description: 'Private URI host.', + name: 'sip.private.uri.host', type: 'keyword', }, - 'tls.client.x509.subject.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of subject.', - name: 'tls.client.x509.subject.organizational_unit', + 'sip.private.uri.port': { + category: 'sip', + description: 'Private URI port.', + name: 'sip.private.uri.port', type: 'keyword', }, - 'tls.client.x509.subject.organization': { - category: 'tls', - description: 'List of organizations (O) of subject.', - example: 'Fastly, Inc.', - name: 'tls.client.x509.subject.organization', + 'sip.cseq.code': { + category: 'sip', + description: 'Sequence code.', + name: 'sip.cseq.code', type: 'keyword', }, - 'tls.client.x509.subject.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'tls.client.x509.subject.locality', + 'sip.cseq.method': { + category: 'sip', + description: 'Sequence method.', + name: 'sip.cseq.method', type: 'keyword', }, - 'tls.client.x509.subject.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.client.x509.subject.province', + 'sip.via.original': { + category: 'sip', + description: 'The original Via value.', + name: 'sip.via.original', type: 'keyword', }, - 'tls.client.x509.subject.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.client.x509.subject.state_or_province', + 'sip.to.display_info': { + category: 'sip', + description: 'To display info', + name: 'sip.to.display_info', type: 'keyword', }, - 'tls.client.x509.subject.country': { - category: 'tls', - description: 'List of country (C) code', - example: 'US', - name: 'tls.client.x509.subject.country', + 'sip.to.uri.original': { + category: 'sip', + description: 'To original URI', + name: 'sip.to.uri.original', type: 'keyword', }, - 'tls.client.x509.public_key_algorithm': { - category: 'tls', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'tls.client.x509.public_key_algorithm', + 'sip.to.uri.scheme': { + category: 'sip', + description: 'To URI scheme', + name: 'sip.to.uri.scheme', type: 'keyword', }, - 'tls.client.x509.public_key_size': { - category: 'tls', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'tls.client.x509.public_key_size', - type: 'long', + 'sip.to.uri.username': { + category: 'sip', + description: 'To URI user name', + name: 'sip.to.uri.username', + type: 'keyword', }, - 'tls.client.x509.alternative_names': { - category: 'tls', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'tls.client.x509.alternative_names', + 'sip.to.uri.host': { + category: 'sip', + description: 'To URI host', + name: 'sip.to.uri.host', type: 'keyword', }, - 'tls.server.x509.version': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.server.x509.version', + 'sip.to.uri.port': { + category: 'sip', + description: 'To URI port', + name: 'sip.to.uri.port', type: 'keyword', }, - 'tls.server.x509.version_number': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.server.x509.version_number', + 'sip.to.tag': { + category: 'sip', + description: 'To tag', + name: 'sip.to.tag', type: 'keyword', }, - 'tls.server.x509.serial_number': { - category: 'tls', - description: - 'Unique serial number issued by the certificate authority. For consistency, if this value is alphanumeric, it should be formatted without colons and uppercase characters. ', - example: '55FBB9C7DEBF09809D12CCAA', - name: 'tls.server.x509.serial_number', + 'sip.from.display_info': { + category: 'sip', + description: 'From display info', + name: 'sip.from.display_info', type: 'keyword', }, - 'tls.server.x509.issuer.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of issuing certificate authority.', - example: 'C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA', - name: 'tls.server.x509.issuer.distinguished_name', + 'sip.from.uri.original': { + category: 'sip', + description: 'From original URI', + name: 'sip.from.uri.original', type: 'keyword', }, - 'tls.server.x509.issuer.common_name': { - category: 'tls', - description: 'List of common name (CN) of issuing certificate authority.', - example: 'DigiCert SHA2 High Assurance Server CA', - name: 'tls.server.x509.issuer.common_name', + 'sip.from.uri.scheme': { + category: 'sip', + description: 'From URI scheme', + name: 'sip.from.uri.scheme', type: 'keyword', }, - 'tls.server.x509.issuer.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of issuing certificate authority.', - example: 'www.digicert.com', - name: 'tls.server.x509.issuer.organizational_unit', + 'sip.from.uri.username': { + category: 'sip', + description: 'From URI user name', + name: 'sip.from.uri.username', type: 'keyword', }, - 'tls.server.x509.issuer.organization': { - category: 'tls', - description: 'List of organizations (O) of issuing certificate authority.', - example: 'DigiCert Inc', - name: 'tls.server.x509.issuer.organization', + 'sip.from.uri.host': { + category: 'sip', + description: 'From URI host', + name: 'sip.from.uri.host', type: 'keyword', }, - 'tls.server.x509.issuer.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'Mountain View', - name: 'tls.server.x509.issuer.locality', + 'sip.from.uri.port': { + category: 'sip', + description: 'From URI port', + name: 'sip.from.uri.port', type: 'keyword', }, - 'tls.server.x509.issuer.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.server.x509.issuer.province', + 'sip.from.tag': { + category: 'sip', + description: 'From tag', + name: 'sip.from.tag', type: 'keyword', }, - 'tls.server.x509.issuer.state_or_province': { - category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.server.x509.issuer.state_or_province', + 'sip.contact.display_info': { + category: 'sip', + description: 'Contact display info', + name: 'sip.contact.display_info', type: 'keyword', }, - 'tls.server.x509.issuer.country': { - category: 'tls', - description: 'List of country (C) codes', - example: 'US', - name: 'tls.server.x509.issuer.country', + 'sip.contact.uri.original': { + category: 'sip', + description: 'Contact original URI', + name: 'sip.contact.uri.original', type: 'keyword', }, - 'tls.server.x509.signature_algorithm': { - category: 'tls', - description: - 'Identifier for certificate signature algorithm. Recommend using names found in Go Lang Crypto library (See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353).', - example: 'SHA256-RSA', - name: 'tls.server.x509.signature_algorithm', + 'sip.contact.uri.scheme': { + category: 'sip', + description: 'Contat URI scheme', + name: 'sip.contact.uri.scheme', type: 'keyword', }, - 'tls.server.x509.not_before': { - category: 'tls', - description: 'Time at which the certificate is first considered valid.', - example: '"2019-08-16T01:40:25.000Z"', - name: 'tls.server.x509.not_before', - type: 'date', + 'sip.contact.uri.username': { + category: 'sip', + description: 'Contact URI user name', + name: 'sip.contact.uri.username', + type: 'keyword', }, - 'tls.server.x509.not_after': { - category: 'tls', - description: 'Time at which the certificate is no longer considered valid.', - example: '"2020-07-16T03:15:39.000Z"', - name: 'tls.server.x509.not_after', - type: 'date', + 'sip.contact.uri.host': { + category: 'sip', + description: 'Contact URI host', + name: 'sip.contact.uri.host', + type: 'keyword', }, - 'tls.server.x509.subject.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Fastly, Inc., CN=r2.shared.global.fastly.net', - name: 'tls.server.x509.subject.distinguished_name', + 'sip.contact.uri.port': { + category: 'sip', + description: 'Contact URI port', + name: 'sip.contact.uri.port', type: 'keyword', }, - 'tls.server.x509.subject.common_name': { - category: 'tls', - description: 'List of common names (CN) of subject.', - example: 'r2.shared.global.fastly.net', - name: 'tls.server.x509.subject.common_name', + 'sip.contact.transport': { + category: 'sip', + description: 'Contact transport', + name: 'sip.contact.transport', type: 'keyword', }, - 'tls.server.x509.subject.organizational_unit': { - category: 'tls', - description: 'List of organizational units (OU) of subject.', - name: 'tls.server.x509.subject.organizational_unit', + 'sip.contact.line': { + category: 'sip', + description: 'Contact line', + name: 'sip.contact.line', type: 'keyword', }, - 'tls.server.x509.subject.organization': { - category: 'tls', - description: 'List of organizations (O) of subject.', - example: 'Fastly, Inc.', - name: 'tls.server.x509.subject.organization', + 'sip.contact.expires': { + category: 'sip', + description: 'Contact expires', + name: 'sip.contact.expires', type: 'keyword', }, - 'tls.server.x509.subject.locality': { - category: 'tls', - description: 'List of locality names (L)', - example: 'San Francisco', - name: 'tls.server.x509.subject.locality', + 'sip.contact.q': { + category: 'sip', + description: 'Contact Q', + name: 'sip.contact.q', type: 'keyword', }, - 'tls.server.x509.subject.province': { + 'sip.auth.scheme': { + category: 'sip', + description: 'Auth scheme', + name: 'sip.auth.scheme', + type: 'keyword', + }, + 'sip.auth.realm': { + category: 'sip', + description: 'Auth realm', + name: 'sip.auth.realm', + type: 'keyword', + }, + 'sip.auth.uri.original': { + category: 'sip', + description: 'Auth original URI', + name: 'sip.auth.uri.original', + type: 'keyword', + }, + 'sip.auth.uri.scheme': { + category: 'sip', + description: 'Auth URI scheme', + name: 'sip.auth.uri.scheme', + type: 'keyword', + }, + 'sip.auth.uri.host': { + category: 'sip', + description: 'Auth URI host', + name: 'sip.auth.uri.host', + type: 'keyword', + }, + 'sip.auth.uri.port': { + category: 'sip', + description: 'Auth URI port', + name: 'sip.auth.uri.port', + type: 'keyword', + }, + 'sip.sdp.version': { + category: 'sip', + description: 'SDP version', + name: 'sip.sdp.version', + type: 'keyword', + }, + 'sip.sdp.owner.username': { + category: 'sip', + description: 'SDP owner user name', + name: 'sip.sdp.owner.username', + type: 'keyword', + }, + 'sip.sdp.owner.session_id': { + category: 'sip', + description: 'SDP owner session ID', + name: 'sip.sdp.owner.session_id', + type: 'keyword', + }, + 'sip.sdp.owner.version': { + category: 'sip', + description: 'SDP owner version', + name: 'sip.sdp.owner.version', + type: 'keyword', + }, + 'sip.sdp.owner.ip': { + category: 'sip', + description: 'SDP owner IP', + name: 'sip.sdp.owner.ip', + type: 'ip', + }, + 'sip.sdp.session.name': { + category: 'sip', + description: 'SDP session name', + name: 'sip.sdp.session.name', + type: 'keyword', + }, + 'sip.sdp.connection.info': { + category: 'sip', + description: 'SDP connection info', + name: 'sip.sdp.connection.info', + type: 'keyword', + }, + 'sip.sdp.connection.address': { + category: 'sip', + description: 'SDP connection address', + name: 'sip.sdp.connection.address', + type: 'keyword', + }, + 'sip.sdp.body.original': { + category: 'sip', + description: 'SDP original body', + name: 'sip.sdp.body.original', + type: 'keyword', + }, + 'thrift.params': { + category: 'thrift', + description: + 'The RPC method call parameters in a human readable format. If the IDL files are available, the parameters use names whenever possible. Otherwise, the IDs from the message are used. ', + name: 'thrift.params', + }, + 'thrift.service': { + category: 'thrift', + description: 'The name of the Thrift-RPC service as defined in the IDL files. ', + name: 'thrift.service', + }, + 'thrift.return_value': { + category: 'thrift', + description: + 'The value returned by the Thrift-RPC call. This is encoded in a human readable format. ', + name: 'thrift.return_value', + }, + 'thrift.exceptions': { + category: 'thrift', + description: + 'If the call resulted in exceptions, this field contains the exceptions in a human readable format. ', + name: 'thrift.exceptions', + }, + 'tls.client.x509.version': { category: 'tls', - description: 'Province or region within country.', - name: 'tls.server.x509.subject.province', + description: 'Version of x509 format.', + example: 3, + name: 'tls.client.x509.version', type: 'keyword', }, - 'tls.server.x509.subject.state_or_province': { + 'tls.client.x509.issuer.province': { category: 'tls', - description: 'List of state or province names (ST, S, or P)', - example: 'California', - name: 'tls.server.x509.subject.state_or_province', + description: 'Province or region within country.', + name: 'tls.client.x509.issuer.province', type: 'keyword', }, - 'tls.server.x509.subject.country': { + 'tls.client.x509.subject.province': { category: 'tls', - description: 'List of country (C) code', - example: 'US', - name: 'tls.server.x509.subject.country', + description: 'Province or region within country.', + name: 'tls.client.x509.subject.province', type: 'keyword', }, - 'tls.server.x509.public_key_algorithm': { + 'tls.server.x509.version': { category: 'tls', - description: 'Algorithm used to generate the public key.', - example: 'RSA', - name: 'tls.server.x509.public_key_algorithm', + description: 'Version of x509 format.', + example: 3, + name: 'tls.server.x509.version', type: 'keyword', }, - 'tls.server.x509.public_key_size': { + 'tls.server.x509.issuer.province': { category: 'tls', - description: 'The size of the public key space in bits.', - example: 2048, - name: 'tls.server.x509.public_key_size', - type: 'long', + description: 'Province or region within country.', + name: 'tls.server.x509.issuer.province', + type: 'keyword', }, - 'tls.server.x509.alternative_names': { + 'tls.server.x509.subject.province': { category: 'tls', - description: - 'List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses.', - example: '*.elastic.co', - name: 'tls.server.x509.alternative_names', + description: 'Province or region within country.', + name: 'tls.server.x509.subject.province', type: 'keyword', }, 'tls.detailed.version': { @@ -34472,300 +48289,6 @@ export const fieldsBeat: BeatFields = { name: 'tls.detailed.server_hello.extensions._unparsed_', type: 'keyword', }, - 'tls.detailed.client_certificate.version': { - category: 'tls', - description: 'X509 format version.', - name: 'tls.detailed.client_certificate.version', - type: 'long', - }, - 'tls.detailed.client_certificate.version_number': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.detailed.client_certificate.version_number', - type: 'keyword', - }, - 'tls.detailed.client_certificate.serial_number': { - category: 'tls', - description: "The certificate's serial number.", - name: 'tls.detailed.client_certificate.serial_number', - type: 'keyword', - }, - 'tls.detailed.client_certificate.not_before': { - category: 'tls', - description: 'Date before which the certificate is not valid.', - name: 'tls.detailed.client_certificate.not_before', - type: 'date', - }, - 'tls.detailed.client_certificate.not_after': { - category: 'tls', - description: 'Date after which the certificate expires.', - name: 'tls.detailed.client_certificate.not_after', - type: 'date', - }, - 'tls.detailed.client_certificate.public_key_algorithm': { - category: 'tls', - description: "The algorithm used for this certificate's public key. One of RSA, DSA or ECDSA. ", - name: 'tls.detailed.client_certificate.public_key_algorithm', - type: 'keyword', - }, - 'tls.detailed.client_certificate.public_key_size': { - category: 'tls', - description: 'Size of the public key.', - name: 'tls.detailed.client_certificate.public_key_size', - type: 'long', - }, - 'tls.detailed.client_certificate.signature_algorithm': { - category: 'tls', - description: "The algorithm used for the certificate's signature. ", - name: 'tls.detailed.client_certificate.signature_algorithm', - type: 'keyword', - }, - 'tls.detailed.client_certificate.alternative_names': { - category: 'tls', - description: 'Subject Alternative Names for this certificate.', - name: 'tls.detailed.client_certificate.alternative_names', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.country': { - category: 'tls', - description: 'Country code.', - name: 'tls.detailed.client_certificate.subject.country', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.organization': { - category: 'tls', - description: 'Organization name.', - name: 'tls.detailed.client_certificate.subject.organization', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.organizational_unit': { - category: 'tls', - description: 'Unit within organization.', - name: 'tls.detailed.client_certificate.subject.organizational_unit', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.client_certificate.subject.province', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.common_name': { - category: 'tls', - description: 'Name or host name identified by the certificate.', - name: 'tls.detailed.client_certificate.subject.common_name', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.locality': { - category: 'tls', - description: 'Locality.', - name: 'tls.detailed.client_certificate.subject.locality', - type: 'keyword', - }, - 'tls.detailed.client_certificate.subject.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Fastly, Inc., CN=r2.shared.global.fastly.net', - name: 'tls.detailed.client_certificate.subject.distinguished_name', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.country': { - category: 'tls', - description: 'Country code.', - name: 'tls.detailed.client_certificate.issuer.country', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.organization': { - category: 'tls', - description: 'Organization name.', - name: 'tls.detailed.client_certificate.issuer.organization', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.organizational_unit': { - category: 'tls', - description: 'Unit within organization.', - name: 'tls.detailed.client_certificate.issuer.organizational_unit', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.client_certificate.issuer.province', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.common_name': { - category: 'tls', - description: 'Name or host name identified by the certificate.', - name: 'tls.detailed.client_certificate.issuer.common_name', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.locality': { - category: 'tls', - description: 'Locality.', - name: 'tls.detailed.client_certificate.issuer.locality', - type: 'keyword', - }, - 'tls.detailed.client_certificate.issuer.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate issuer entity.', - example: 'C=US, ST=California, L=San Francisco, O=Fastly, Inc., CN=r2.shared.global.fastly.net', - name: 'tls.detailed.client_certificate.issuer.distinguished_name', - type: 'keyword', - }, - 'tls.detailed.server_certificate.version': { - category: 'tls', - description: 'X509 format version.', - name: 'tls.detailed.server_certificate.version', - type: 'long', - }, - 'tls.detailed.server_certificate.version_number': { - category: 'tls', - description: 'Version of x509 format.', - example: 3, - name: 'tls.detailed.server_certificate.version_number', - type: 'keyword', - }, - 'tls.detailed.server_certificate.serial_number': { - category: 'tls', - description: "The certificate's serial number.", - name: 'tls.detailed.server_certificate.serial_number', - type: 'keyword', - }, - 'tls.detailed.server_certificate.not_before': { - category: 'tls', - description: 'Date before which the certificate is not valid.', - name: 'tls.detailed.server_certificate.not_before', - type: 'date', - }, - 'tls.detailed.server_certificate.not_after': { - category: 'tls', - description: 'Date after which the certificate expires.', - name: 'tls.detailed.server_certificate.not_after', - type: 'date', - }, - 'tls.detailed.server_certificate.public_key_algorithm': { - category: 'tls', - description: "The algorithm used for this certificate's public key. One of RSA, DSA or ECDSA. ", - name: 'tls.detailed.server_certificate.public_key_algorithm', - type: 'keyword', - }, - 'tls.detailed.server_certificate.public_key_size': { - category: 'tls', - description: 'Size of the public key.', - name: 'tls.detailed.server_certificate.public_key_size', - type: 'long', - }, - 'tls.detailed.server_certificate.signature_algorithm': { - category: 'tls', - description: "The algorithm used for the certificate's signature. ", - name: 'tls.detailed.server_certificate.signature_algorithm', - type: 'keyword', - }, - 'tls.detailed.server_certificate.alternative_names': { - category: 'tls', - description: 'Subject Alternative Names for this certificate.', - name: 'tls.detailed.server_certificate.alternative_names', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.country': { - category: 'tls', - description: 'Country code.', - name: 'tls.detailed.server_certificate.subject.country', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.organization': { - category: 'tls', - description: 'Organization name.', - name: 'tls.detailed.server_certificate.subject.organization', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.organizational_unit': { - category: 'tls', - description: 'Unit within organization.', - name: 'tls.detailed.server_certificate.subject.organizational_unit', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.server_certificate.subject.province', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.state_or_province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.server_certificate.subject.state_or_province', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.common_name': { - category: 'tls', - description: 'Name or host name identified by the certificate.', - name: 'tls.detailed.server_certificate.subject.common_name', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.locality': { - category: 'tls', - description: 'Locality.', - name: 'tls.detailed.server_certificate.subject.locality', - type: 'keyword', - }, - 'tls.detailed.server_certificate.subject.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate subject entity.', - example: 'C=US, ST=California, L=San Francisco, O=Fastly, Inc., CN=r2.shared.global.fastly.net', - name: 'tls.detailed.server_certificate.subject.distinguished_name', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.country': { - category: 'tls', - description: 'Country code.', - name: 'tls.detailed.server_certificate.issuer.country', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.organization': { - category: 'tls', - description: 'Organization name.', - name: 'tls.detailed.server_certificate.issuer.organization', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.organizational_unit': { - category: 'tls', - description: 'Unit within organization.', - name: 'tls.detailed.server_certificate.issuer.organizational_unit', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.server_certificate.issuer.province', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.state_or_province': { - category: 'tls', - description: 'Province or region within country.', - name: 'tls.detailed.server_certificate.issuer.state_or_province', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.common_name': { - category: 'tls', - description: 'Name or host name identified by the certificate.', - name: 'tls.detailed.server_certificate.issuer.common_name', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.locality': { - category: 'tls', - description: 'Locality.', - name: 'tls.detailed.server_certificate.issuer.locality', - type: 'keyword', - }, - 'tls.detailed.server_certificate.issuer.distinguished_name': { - category: 'tls', - description: 'Distinguished name (DN) of the certificate issuer entity.', - example: 'C=US, ST=California, L=San Francisco, O=Fastly, Inc., CN=r2.shared.global.fastly.net', - name: 'tls.detailed.server_certificate.issuer.distinguished_name', - type: 'keyword', - }, 'tls.detailed.server_certificate_chain': { category: 'tls', description: 'Chain of trust for the server certificate.', @@ -34784,340 +48307,10 @@ export const fieldsBeat: BeatFields = { name: 'tls.detailed.alert_types', type: 'keyword', }, - 'tls.handshake_completed': { - category: 'tls', - name: 'tls.handshake_completed', - type: 'alias', - }, - 'tls.client_hello.supported_ciphers': { - category: 'tls', - name: 'tls.client_hello.supported_ciphers', - type: 'alias', - }, - 'tls.server_hello.selected_cipher': { - category: 'tls', - name: 'tls.server_hello.selected_cipher', - type: 'alias', - }, - 'tls.fingerprints.ja3': { - category: 'tls', - name: 'tls.fingerprints.ja3', - type: 'alias', - }, - 'tls.resumption_method': { - category: 'tls', - name: 'tls.resumption_method', - type: 'alias', - }, - 'tls.client_certificate_requested': { - category: 'tls', - name: 'tls.client_certificate_requested', - type: 'alias', - }, - 'tls.client_hello.version': { - category: 'tls', - name: 'tls.client_hello.version', - type: 'alias', - }, - 'tls.client_hello.session_id': { - category: 'tls', - name: 'tls.client_hello.session_id', - type: 'alias', - }, - 'tls.client_hello.supported_compression_methods': { - category: 'tls', - name: 'tls.client_hello.supported_compression_methods', - type: 'alias', - }, - 'tls.client_hello.extensions.server_name_indication': { - category: 'tls', - name: 'tls.client_hello.extensions.server_name_indication', - type: 'alias', - }, - 'tls.client_hello.extensions.application_layer_protocol_negotiation': { - category: 'tls', - name: 'tls.client_hello.extensions.application_layer_protocol_negotiation', - type: 'alias', - }, - 'tls.client_hello.extensions.session_ticket': { - category: 'tls', - name: 'tls.client_hello.extensions.session_ticket', - type: 'alias', - }, - 'tls.client_hello.extensions.supported_versions': { - category: 'tls', - name: 'tls.client_hello.extensions.supported_versions', - type: 'alias', - }, - 'tls.client_hello.extensions.supported_groups': { - category: 'tls', - name: 'tls.client_hello.extensions.supported_groups', - type: 'alias', - }, - 'tls.client_hello.extensions.signature_algorithms': { - category: 'tls', - name: 'tls.client_hello.extensions.signature_algorithms', - type: 'alias', - }, - 'tls.client_hello.extensions.ec_points_formats': { - category: 'tls', - name: 'tls.client_hello.extensions.ec_points_formats', - type: 'alias', - }, - 'tls.client_hello.extensions._unparsed_': { - category: 'tls', - name: 'tls.client_hello.extensions._unparsed_', - type: 'alias', - }, - 'tls.server_hello.version': { - category: 'tls', - name: 'tls.server_hello.version', - type: 'alias', - }, - 'tls.server_hello.selected_compression_method': { - category: 'tls', - name: 'tls.server_hello.selected_compression_method', - type: 'alias', - }, - 'tls.server_hello.session_id': { - category: 'tls', - name: 'tls.server_hello.session_id', - type: 'alias', - }, - 'tls.server_hello.extensions.application_layer_protocol_negotiation': { - category: 'tls', - name: 'tls.server_hello.extensions.application_layer_protocol_negotiation', - type: 'alias', - }, - 'tls.server_hello.extensions.session_ticket': { - category: 'tls', - name: 'tls.server_hello.extensions.session_ticket', - type: 'alias', - }, - 'tls.server_hello.extensions.supported_versions': { - category: 'tls', - name: 'tls.server_hello.extensions.supported_versions', - type: 'alias', - }, - 'tls.server_hello.extensions.ec_points_formats': { - category: 'tls', - name: 'tls.server_hello.extensions.ec_points_formats', - type: 'alias', - }, - 'tls.server_hello.extensions._unparsed_': { - category: 'tls', - name: 'tls.server_hello.extensions._unparsed_', - type: 'alias', - }, - 'tls.client_certificate.version': { - category: 'tls', - name: 'tls.client_certificate.version', - type: 'alias', - }, - 'tls.client_certificate.serial_number': { - category: 'tls', - name: 'tls.client_certificate.serial_number', - type: 'alias', - }, - 'tls.client_certificate.not_before': { - category: 'tls', - name: 'tls.client_certificate.not_before', - type: 'alias', - }, - 'tls.client_certificate.not_after': { - category: 'tls', - name: 'tls.client_certificate.not_after', - type: 'alias', - }, - 'tls.client_certificate.public_key_algorithm': { - category: 'tls', - name: 'tls.client_certificate.public_key_algorithm', - type: 'alias', - }, - 'tls.client_certificate.public_key_size': { - category: 'tls', - name: 'tls.client_certificate.public_key_size', - type: 'alias', - }, - 'tls.client_certificate.signature_algorithm': { - category: 'tls', - name: 'tls.client_certificate.signature_algorithm', - type: 'alias', - }, - 'tls.client_certificate.alternative_names': { - category: 'tls', - name: 'tls.client_certificate.alternative_names', - type: 'alias', - }, - 'tls.client_certificate.subject.country': { - category: 'tls', - name: 'tls.client_certificate.subject.country', - type: 'alias', - }, - 'tls.client_certificate.subject.organization': { - category: 'tls', - name: 'tls.client_certificate.subject.organization', - type: 'alias', - }, - 'tls.client_certificate.subject.organizational_unit': { - category: 'tls', - name: 'tls.client_certificate.subject.organizational_unit', - type: 'alias', - }, - 'tls.client_certificate.subject.province': { - category: 'tls', - name: 'tls.client_certificate.subject.province', - type: 'alias', - }, - 'tls.client_certificate.subject.common_name': { - category: 'tls', - name: 'tls.client_certificate.subject.common_name', - type: 'alias', - }, - 'tls.client_certificate.subject.locality': { - category: 'tls', - name: 'tls.client_certificate.subject.locality', - type: 'alias', - }, - 'tls.client_certificate.issuer.country': { - category: 'tls', - name: 'tls.client_certificate.issuer.country', - type: 'alias', - }, - 'tls.client_certificate.issuer.organization': { - category: 'tls', - name: 'tls.client_certificate.issuer.organization', - type: 'alias', - }, - 'tls.client_certificate.issuer.organizational_unit': { - category: 'tls', - name: 'tls.client_certificate.issuer.organizational_unit', - type: 'alias', - }, - 'tls.client_certificate.issuer.province': { - category: 'tls', - name: 'tls.client_certificate.issuer.province', - type: 'alias', - }, - 'tls.client_certificate.issuer.common_name': { - category: 'tls', - name: 'tls.client_certificate.issuer.common_name', - type: 'alias', - }, - 'tls.client_certificate.issuer.locality': { - category: 'tls', - name: 'tls.client_certificate.issuer.locality', - type: 'alias', - }, - 'tls.server_certificate.version': { - category: 'tls', - name: 'tls.server_certificate.version', - type: 'alias', - }, - 'tls.server_certificate.serial_number': { - category: 'tls', - name: 'tls.server_certificate.serial_number', - type: 'alias', - }, - 'tls.server_certificate.not_before': { - category: 'tls', - name: 'tls.server_certificate.not_before', - type: 'alias', - }, - 'tls.server_certificate.not_after': { - category: 'tls', - name: 'tls.server_certificate.not_after', - type: 'alias', - }, - 'tls.server_certificate.public_key_algorithm': { - category: 'tls', - name: 'tls.server_certificate.public_key_algorithm', - type: 'alias', - }, - 'tls.server_certificate.public_key_size': { - category: 'tls', - name: 'tls.server_certificate.public_key_size', - type: 'alias', - }, - 'tls.server_certificate.signature_algorithm': { - category: 'tls', - name: 'tls.server_certificate.signature_algorithm', - type: 'alias', - }, - 'tls.server_certificate.alternative_names': { - category: 'tls', - name: 'tls.server_certificate.alternative_names', - type: 'alias', - }, - 'tls.server_certificate.subject.country': { - category: 'tls', - name: 'tls.server_certificate.subject.country', - type: 'alias', - }, - 'tls.server_certificate.subject.organization': { - category: 'tls', - name: 'tls.server_certificate.subject.organization', - type: 'alias', - }, - 'tls.server_certificate.subject.organizational_unit': { - category: 'tls', - name: 'tls.server_certificate.subject.organizational_unit', - type: 'alias', - }, - 'tls.server_certificate.subject.province': { - category: 'tls', - name: 'tls.server_certificate.subject.province', - type: 'alias', - }, - 'tls.server_certificate.subject.common_name': { - category: 'tls', - name: 'tls.server_certificate.subject.common_name', - type: 'alias', - }, - 'tls.server_certificate.subject.locality': { - category: 'tls', - name: 'tls.server_certificate.subject.locality', - type: 'alias', - }, - 'tls.server_certificate.issuer.country': { - category: 'tls', - name: 'tls.server_certificate.issuer.country', - type: 'alias', - }, - 'tls.server_certificate.issuer.organization': { - category: 'tls', - name: 'tls.server_certificate.issuer.organization', - type: 'alias', - }, - 'tls.server_certificate.issuer.organizational_unit': { - category: 'tls', - name: 'tls.server_certificate.issuer.organizational_unit', - type: 'alias', - }, - 'tls.server_certificate.issuer.province': { - category: 'tls', - name: 'tls.server_certificate.issuer.province', - type: 'alias', - }, - 'tls.server_certificate.issuer.common_name': { - category: 'tls', - name: 'tls.server_certificate.issuer.common_name', - type: 'alias', - }, - 'tls.server_certificate.issuer.locality': { - category: 'tls', - name: 'tls.server_certificate.issuer.locality', - type: 'alias', - }, - 'tls.alert_types': { - category: 'tls', - name: 'tls.alert_types', - type: 'alias', - }, 'winlog.api': { category: 'winlog', description: - 'The event log API type used to read the record. The possible values are "wineventlog" for the Windows Event Log API or "eventlogging" for the Event Logging API. The Event Logging API was designed for Windows Server 2003 or Windows 2000 operating systems. In Windows Vista, the event logging infrastructure was redesigned. On Windows Vista or later operating systems, the Windows Event Log API is used. Winlogbeat automatically detects which API to use for reading event logs. ', + 'The event log API type used to read the record. The possible values are "wineventlog" for the Windows Event Log API or "wineventlog-experimental" for its experimental implementation. ', name: 'winlog.api', }, 'winlog.activity_id': { @@ -35763,6 +48956,12 @@ export const fieldsBeat: BeatFields = { name: 'winlog.task', type: 'keyword', }, + 'winlog.time_created': { + category: 'winlog', + description: 'The event creation time. ', + name: 'winlog.time_created', + type: 'date', + }, 'winlog.process.thread.id': { category: 'winlog', name: 'winlog.process.thread.id', diff --git a/x-pack/plugins/transform/common/api_schemas/common.ts b/x-pack/plugins/transform/common/api_schemas/common.ts index d29059864a7dd0..285f3879681c71 100644 --- a/x-pack/plugins/transform/common/api_schemas/common.ts +++ b/x-pack/plugins/transform/common/api_schemas/common.ts @@ -6,8 +6,9 @@ */ import { schema, TypeOf } from '@kbn/config-schema'; - +import { i18n } from '@kbn/i18n'; import { TRANSFORM_STATE } from '../constants'; +import { isRuntimeField } from '../shared_imports'; export const transformIdsSchema = schema.arrayOf( schema.object({ @@ -57,26 +58,17 @@ export interface CommonResponseStatusSchema { } export const runtimeMappingsSchema = schema.maybe( - schema.recordOf( - schema.string(), - schema.object({ - type: schema.oneOf([ - schema.literal('keyword'), - schema.literal('long'), - schema.literal('double'), - schema.literal('date'), - schema.literal('ip'), - schema.literal('boolean'), - schema.literal('geo_point'), - ]), - script: schema.maybe( - schema.oneOf([ - schema.string(), - schema.object({ - source: schema.string(), - }), - ]) - ), - }) + schema.object( + {}, + { + unknowns: 'allow', + validate: (v: object) => { + if (Object.values(v).some((o) => !isRuntimeField(o))) { + return i18n.translate('xpack.transform.invalidRuntimeFieldMessage', { + defaultMessage: 'Invalid runtime field', + }); + } + }, + } ) ); diff --git a/x-pack/plugins/transform/common/shared_imports.ts b/x-pack/plugins/transform/common/shared_imports.ts index 22201cf7c0757d..2cc01a0dbfa57d 100644 --- a/x-pack/plugins/transform/common/shared_imports.ts +++ b/x-pack/plugins/transform/common/shared_imports.ts @@ -11,6 +11,7 @@ export { isPopulatedObject, isRuntimeMappings, patternValidator, + isRuntimeField, } from '../../ml/common'; export { RUNTIME_FIELD_TYPES } from '../../../../src/plugins/data/common'; diff --git a/x-pack/plugins/transform/public/app/common/managed_transforms_utils.ts b/x-pack/plugins/transform/public/app/common/managed_transforms_utils.ts new file mode 100644 index 00000000000000..5164245646d6ee --- /dev/null +++ b/x-pack/plugins/transform/public/app/common/managed_transforms_utils.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { TransformListRow } from './transform_list'; + +export const isManagedTransform = (transform: Partial) => { + return transform.config?._meta?.managed; +}; diff --git a/x-pack/plugins/transform/public/app/common/transform.ts b/x-pack/plugins/transform/public/app/common/transform.ts index c1f8f58657d5e7..09fc1c24303d89 100644 --- a/x-pack/plugins/transform/public/app/common/transform.ts +++ b/x-pack/plugins/transform/public/app/common/transform.ts @@ -9,8 +9,8 @@ import { useEffect } from 'react'; import { BehaviorSubject } from 'rxjs'; import { filter, distinctUntilChanged } from 'rxjs/operators'; import { Subscription } from 'rxjs'; - -import { TransformId } from '../../../common/types/transform'; +import { cloneDeep } from 'lodash'; +import type { TransformConfigUnion, TransformId } from '../../../common/types/transform'; // Via https://github.com/elastic/elasticsearch/blob/master/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/utils/TransformStrings.java#L24 // Matches a string that contains lowercase characters, digits, hyphens, underscores or dots. @@ -78,3 +78,11 @@ export const useRefreshTransformList = ( }, }; }; + +export const overrideTransformForCloning = (originalConfig: TransformConfigUnion) => { + // 'Managed' means job is preconfigured and deployed by other solutions + // we should not clone this setting + const clonedConfig = cloneDeep(originalConfig); + delete clonedConfig._meta?.managed; + return clonedConfig; +}; diff --git a/x-pack/plugins/transform/public/app/sections/clone_transform/clone_transform_section.tsx b/x-pack/plugins/transform/public/app/sections/clone_transform/clone_transform_section.tsx index 76a3b06ef5574c..c84f7cb97c9598 100644 --- a/x-pack/plugins/transform/public/app/sections/clone_transform/clone_transform_section.tsx +++ b/x-pack/plugins/transform/public/app/sections/clone_transform/clone_transform_section.tsx @@ -19,7 +19,6 @@ import { EuiPageHeader, EuiSpacer, } from '@elastic/eui'; - import { APP_CREATE_TRANSFORM_CLUSTER_PRIVILEGES } from '../../../../common/constants'; import { TransformConfigUnion } from '../../../../common/types/transform'; @@ -32,8 +31,10 @@ import { breadcrumbService, docTitleService, BREADCRUMB_SECTION } from '../../se import { PrivilegesWrapper } from '../../lib/authorization'; import { Wizard } from '../create_transform/components/wizard'; +import { overrideTransformForCloning } from '../../common/transform'; type Props = RouteComponentProps<{ transformId: string }>; + export const CloneTransformSection: FC = ({ match, location }) => { const { indexPatternId }: Record = parse(location.search, { sort: false, @@ -82,7 +83,7 @@ export const CloneTransformSection: FC = ({ match, location }) => { setSavedObjectId(indexPatternId); - setTransformConfig(transformConfigs.transforms[0]); + setTransformConfig(overrideTransformForCloning(transformConfigs.transforms[0])); setErrorMessage(undefined); setIsInitialized(true); } catch (e) { diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_delete/delete_action_modal.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_delete/delete_action_modal.tsx index 2986fcce554e81..d5436d51c218bb 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_delete/delete_action_modal.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_delete/delete_action_modal.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { FC } from 'react'; +import React, { FC, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { EUI_MODAL_CONFIRM_BUTTON, @@ -15,8 +15,9 @@ import { EuiSpacer, EuiSwitch, } from '@elastic/eui'; - import { DeleteAction } from './use_delete_action'; +import { isManagedTransform } from '../../../../common/managed_transforms_utils'; +import { ManagedTransformsWarningCallout } from '../managed_transforms_callout/managed_transforms_callout'; export const DeleteActionModal: FC = ({ closeModal, @@ -31,6 +32,7 @@ export const DeleteActionModal: FC = ({ userCanDeleteIndex, userCanDeleteDataView, }) => { + const hasManagedTransforms = useMemo(() => items.some((t) => isManagedTransform(t)), [items]); const isBulkAction = items.length > 1; const bulkDeleteModalTitle = i18n.translate( @@ -47,6 +49,19 @@ export const DeleteActionModal: FC = ({ const bulkDeleteModalContent = ( <> + {hasManagedTransforms ? ( + <> + + + + ) : null} + { = ({ const deleteModalContent = ( <> + {hasManagedTransforms ? ( + <> + + + + ) : null} + {userCanDeleteIndex && ( { }; const openModal = (newItems: TransformListRow[]) => { - // EUI issue: Might trigger twice, one time as an array, - // one time as a single object. See https://github.com/elastic/eui/issues/3679 if (Array.isArray(newItems)) { setItems(newItems); setModalVisible(true); diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/start_action_modal.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/start_action_modal.tsx index fb4fee986f6e08..7ad6897034e105 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/start_action_modal.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/start_action_modal.tsx @@ -8,7 +8,6 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiConfirmModal, EUI_MODAL_CONFIRM_BUTTON } from '@elastic/eui'; - import { StartAction } from './use_start_action'; export const StartActionModal: FC = ({ closeModal, items, startAndCloseModal }) => { diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/use_start_action.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/use_start_action.tsx index 2c45da45509e59..20910cf5fa0a56 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/use_start_action.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_start/use_start_action.tsx @@ -32,8 +32,6 @@ export const useStartAction = (forceDisable: boolean, transformNodes: number) => }; const openModal = (newItems: TransformListRow[]) => { - // EUI issue: Might trigger twice, one time as an array, - // one time as a single object. See https://github.com/elastic/eui/issues/3679 if (Array.isArray(newItems)) { setItems(newItems); setModalVisible(true); diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/stop_action_modal.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/stop_action_modal.tsx new file mode 100644 index 00000000000000..ed53bb3b8d936c --- /dev/null +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/stop_action_modal.tsx @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { FC, useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiConfirmModal, EUI_MODAL_CONFIRM_BUTTON } from '@elastic/eui'; +import { StopAction } from './use_stop_action'; +import { isManagedTransform } from '../../../../common/managed_transforms_utils'; +import { ManagedTransformsWarningCallout } from '../managed_transforms_callout/managed_transforms_callout'; + +export const StopActionModal: FC = ({ closeModal, items, stopAndCloseModal }) => { + const hasManagedTransforms = useMemo(() => items.some((t) => isManagedTransform(t)), [items]); + + const isBulkAction = items.length > 1; + + const bulkStopModalTitle = i18n.translate('xpack.transform.transformList.bulkStopModalTitle', { + defaultMessage: 'Stop {count} {count, plural, one {transform} other {transforms}}?', + values: { count: items && items.length }, + }); + const stopModalTitle = i18n.translate('xpack.transform.transformList.stopModalTitle', { + defaultMessage: 'Stop {transformId}?', + values: { transformId: items[0] && items[0].config.id }, + }); + + return ( + stopAndCloseModal(items)} + cancelButtonText={i18n.translate('xpack.transform.transformList.startModalCancelButton', { + defaultMessage: 'Cancel', + })} + confirmButtonText={i18n.translate('xpack.transform.transformList.startModalStopButton', { + defaultMessage: 'Stop', + })} + defaultFocusedButton={EUI_MODAL_CONFIRM_BUTTON} + buttonColor="primary" + > + {hasManagedTransforms ? ( + + ) : null} + + ); +}; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/use_stop_action.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/use_stop_action.tsx index f498008bfd5596..ac53ee83f6f655 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/use_stop_action.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/action_stop/use_stop_action.tsx @@ -5,21 +5,39 @@ * 2.0. */ -import React, { useCallback, useContext, useMemo } from 'react'; - +import React, { useCallback, useContext, useMemo, useState } from 'react'; import { TRANSFORM_STATE } from '../../../../../../common/constants'; - import { AuthorizationContext } from '../../../../lib/authorization'; import { TransformListAction, TransformListRow } from '../../../../common'; import { useStopTransforms } from '../../../../hooks'; - import { isStopActionDisabled, stopActionNameText, StopActionName } from './stop_action_name'; +import { isManagedTransform } from '../../../../common/managed_transforms_utils'; export type StopAction = ReturnType; + export const useStopAction = (forceDisable: boolean) => { const { canStartStopTransform } = useContext(AuthorizationContext).capabilities; const stopTransforms = useStopTransforms(); + const [isModalVisible, setModalVisible] = useState(false); + const [items, setItems] = useState([]); + + const closeModal = () => setModalVisible(false); + + const openModal = (newItems: TransformListRow[]) => { + if (Array.isArray(newItems)) { + setItems(newItems); + setModalVisible(true); + } + }; + + const stopAndCloseModal = useCallback( + (transformSelection: TransformListRow[]) => { + setModalVisible(false); + stopTransforms(transformSelection.map((t) => ({ id: t.id, state: t.stats.state }))); + }, + [stopTransforms] + ); const clickHandler = useCallback( (i: TransformListRow) => stopTransforms([{ id: i.id, state: i.stats.state }]), @@ -37,11 +55,17 @@ export const useStopAction = (forceDisable: boolean) => { description: stopActionNameText, icon: 'stop', type: 'icon', - onClick: clickHandler, + onClick: (item: TransformListRow) => { + if (isManagedTransform(item)) { + openModal([item]); + } else { + clickHandler(item); + } + }, 'data-test-subj': 'transformActionStop', }), - [canStartStopTransform, forceDisable, clickHandler] + [canStartStopTransform, clickHandler, forceDisable] ); - return { action }; + return { action, closeModal, openModal, isModalVisible, items, stopAndCloseModal }; }; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/edit_transform_flyout/edit_transform_flyout.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/edit_transform_flyout/edit_transform_flyout.tsx index 55225e0ff45c03..fd8360d02eca02 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/edit_transform_flyout/edit_transform_flyout.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/edit_transform_flyout/edit_transform_flyout.tsx @@ -38,6 +38,8 @@ import { applyFormFieldsToTransformConfig, useEditTransformFlyout, } from './use_edit_transform_flyout'; +import { ManagedTransformsWarningCallout } from '../managed_transforms_callout/managed_transforms_callout'; +import { isManagedTransform } from '../../../../common/managed_transforms_utils'; interface EditTransformFlyoutProps { closeFlyout: () => void; @@ -99,6 +101,14 @@ export const EditTransformFlyout: FC = ({
+ {isManagedTransform({ config }) ? ( + + ) : null} }> { + return ( + <> + + + + + + ); +}; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.tsx index 8b7aaf1cf8fd24..cdf0c14409fdd0 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.tsx @@ -31,7 +31,6 @@ import { TransformListRow, TRANSFORM_LIST_COLUMN, } from '../../../../common'; -import { useStopTransforms } from '../../../../hooks'; import { AuthorizationContext } from '../../../../lib/authorization'; import { CreateTransformButton } from '../create_transform_button'; @@ -43,7 +42,7 @@ import { DeleteActionModal, } from '../action_delete'; import { useStartAction, StartActionName, StartActionModal } from '../action_start'; -import { StopActionName } from '../action_stop'; +import { StopActionName, useStopAction } from '../action_stop'; import { ItemIdToExpandedRowMap } from './common'; import { useColumns } from './use_columns'; @@ -52,6 +51,7 @@ import { transformFilters, filterTransforms } from './transform_search_bar_filte import { useTableSettings } from './use_table_settings'; import { useAlertRuleFlyout } from '../../../../../alerting/transform_alerting_flyout'; import { TransformHealthAlertRule } from '../../../../../../common/types/alerting'; +import { StopActionModal } from '../action_stop/stop_action_modal'; function getItemIdToExpandedRowMap( itemIds: TransformId[], @@ -92,9 +92,9 @@ export const TransformList: FC = ({ const [isActionsMenuOpen, setIsActionsMenuOpen] = useState(false); const bulkStartAction = useStartAction(false, transformNodes); const bulkDeleteAction = useDeleteAction(false); + const bulkStopAction = useStopAction(false); const [searchError, setSearchError] = useState(undefined); - const stopTransforms = useStopTransforms(); const { capabilities } = useContext(AuthorizationContext); const disabled = @@ -189,9 +189,9 @@ export const TransformList: FC = ({
,
- stopTransforms(transformSelection.map((t) => ({ id: t.id, state: t.stats.state }))) - } + onClick={() => { + bulkStopAction.openModal(transformSelection); + }} > @@ -283,6 +283,7 @@ export const TransformList: FC = ({ {/* Bulk Action Modals */} {bulkStartAction.isModalVisible && } {bulkDeleteAction.isModalVisible && } + {bulkStopAction.isModalVisible && } {/* Single Action Modals */} {singleActionModals} diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_actions.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_actions.tsx index 40b40cfa8c7ba3..853c839a096faa 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_actions.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_actions.tsx @@ -19,6 +19,7 @@ import { useEditAction } from '../action_edit'; import { useStartAction, StartActionModal } from '../action_start'; import { useStopAction } from '../action_stop'; import { useCreateAlertRuleAction } from '../action_create_alert'; +import { StopActionModal } from '../action_stop/stop_action_modal'; export const useActions = ({ forceDisable, @@ -42,6 +43,8 @@ export const useActions = ({ modals: ( <> {startAction.isModalVisible && } + {stopAction.isModalVisible && } + {editAction.config && editAction.isFlyoutVisible && ( { - if (item.config?._meta?.managed !== true) return transformId; + if (!isManagedTransform(item)) return transformId; return ( <> {transformId}   - - {i18n.translate('xpack.transform.transformList.managedBadgeLabel', { - defaultMessage: 'Managed', + + > + + {i18n.translate('xpack.transform.transformList.managedBadgeLabel', { + defaultMessage: 'Managed', + })} + + ); }, diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 36f16182b17e9a..e17ed6f278acd3 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -6231,7 +6231,6 @@ "xpack.apm.transactionsTable.cardinalityWarning.body": "一意のトランザクション名の数が構成された値{bucketSize}を超えています。エージェントを再構成し、類似したトランザクションをグループ化するか、{codeBlock}の値を増やしてください。", "xpack.apm.transactionsTable.cardinalityWarning.docsLink": "詳細はドキュメントをご覧ください", "xpack.apm.transactionsTable.cardinalityWarning.title": "このビューには、報告されたトランザクションのサブセットが表示されます。", - "xpack.apm.transactionsTable.errorMessage": "取得できませんでした", "xpack.apm.transactionsTable.linkText": "トランザクションを表示", "xpack.apm.transactionsTable.loading": "読み込み中...", "xpack.apm.transactionsTable.noResults": "トランザクショングループが見つかりません", @@ -7695,7 +7694,6 @@ "xpack.cases.containers.markInProgressCases": "{totalCases, plural, =1 {\"{caseTitle}\"} other {{totalCases}件のケース}}を進行中に設定しました", "xpack.cases.containers.pushToExternalService": "{ serviceName }への送信が正常に完了しました", "xpack.cases.containers.reopenedCases": "{totalCases, plural, =1 {\"{caseTitle}\"} other {{totalCases}件のケース}}をオープンしました", - "xpack.cases.containers.statusChangeToasterText": "このケースのアラートはステータスが更新されました", "xpack.cases.containers.syncCase": "\"{caseTitle}\"のアラートが同期されました", "xpack.cases.containers.updatedCase": "\"{caseTitle}\"を更新しました", "xpack.cases.create.stepOneTitle": "ケースフィールド", @@ -14911,12 +14909,10 @@ "xpack.maps.embeddableDisplayName": "マップ", "xpack.maps.emsFileSelect.selectPlaceholder": "EMSレイヤーを選択", "xpack.maps.emsSource.tooltipsTitle": "ツールチップフィールド", - "xpack.maps.es_geo_utils.convert.invalidGeometryCollectionErrorMessage": "GeometryCollectionを convertESShapeToGeojsonGeometryに渡さないでください", "xpack.maps.es_geo_utils.convert.unsupportedGeometryTypeErrorMessage": "{geometryType} ジオメトリから Geojson に変換できません。サポートされていません", "xpack.maps.es_geo_utils.distanceFilterAlias": "{pointLabel}の{distanceKm} km以内", "xpack.maps.es_geo_utils.unsupportedFieldTypeErrorMessage": "サポートされていないフィールドタイプ、期待値:{expectedTypes}、提供された値:{fieldType}", "xpack.maps.es_geo_utils.unsupportedGeometryTypeErrorMessage": "サポートされていないジオメトリタイプ、期待値:{expectedTypes}、提供された値:{geometryType}", - "xpack.maps.es_geo_utils.wkt.invalidWKTErrorMessage": "{wkt} を Geojson に変換できません。有効な WKT が必要です。", "xpack.maps.esGeoLine.areEntitiesTrimmedMsg": "結果は ~{totalEntities} 中最初の {entityCount} トラックに制限されます。", "xpack.maps.esGeoLine.tracksCountMsg": "{entityCount} 個のトラックが見つかりました。", "xpack.maps.esGeoLine.tracksTrimmedMsg": "{entityCount} 中 {numTrimmedTracks} 個のトラックが不完全です。", @@ -15628,7 +15624,6 @@ "xpack.ml.anomalyChartsEmbeddable.setupModal.title": "異常エクスプローラーグラフ構成", "xpack.ml.anomalyChartsEmbeddable.title": "{jobIds}のML異常グラフ", "xpack.ml.anomalyDetection.anomalyExplorerLabel": "異常エクスプローラー", - "xpack.ml.anomalyDetection.jobManagementLabel": "ジョブ管理", "xpack.ml.anomalyDetection.singleMetricViewerLabel": "シングルメトリックビューアー", "xpack.ml.anomalyDetectionAlert.actionGroupName": "異常スコアが条件と一致しました", "xpack.ml.anomalyDetectionAlert.advancedSettingsLabel": "高度な設定", @@ -16204,9 +16199,6 @@ "xpack.ml.dataframe.stepDetailsForm.destinationIndexInvalidErrorLink": "インデックス名の制限に関する詳細。", "xpack.ml.dataFrameAnalyticsBreadcrumbs.analyticsMapLabel": "分析マップ", "xpack.ml.dataFrameAnalyticsBreadcrumbs.dataFrameExplorationLabel": "探索", - "xpack.ml.dataFrameAnalyticsBreadcrumbs.dataFrameListLabel": "ジョブ管理", - "xpack.ml.dataFrameAnalyticsBreadcrumbs.dataFrameManagementLabel": "データフレーム分析", - "xpack.ml.dataFrameAnalyticsBreadcrumbs.indexLabel": "インデックス", "xpack.ml.dataFrameAnalyticsLabel": "データフレーム分析", "xpack.ml.dataFrameAnalyticsTabLabel": "データフレーム分析", "xpack.ml.dataGrid.CcsWarningCalloutBody": "インデックスパターンのデータの取得中に問題が発生しました。ソースプレビューとクラスター横断検索を組み合わせることは、バージョン7.10以上ではサポートされていません。変換を構成して作成することはできます。", @@ -16310,10 +16302,7 @@ "xpack.ml.explorer.charts.viewLabel": "表示", "xpack.ml.explorer.clearSelectionLabel": "選択した項目をクリア", "xpack.ml.explorer.createNewJobLinkText": "ジョブを作成", - "xpack.ml.explorer.dashboardsTable.addAndEditDashboardLabel": "ダッシュボードの追加と編集", - "xpack.ml.explorer.dashboardsTable.addToDashboardLabel": "ダッシュボードに追加", "xpack.ml.explorer.dashboardsTable.descriptionColumnHeader": "説明", - "xpack.ml.explorer.dashboardsTable.savedSuccessfullyTitle": "ダッシュボード「{dashboardTitle}」は正常に更新されました", "xpack.ml.explorer.dashboardsTable.titleColumnHeader": "タイトル", "xpack.ml.explorer.distributionChart.anomalyScoreLabel": "異常スコア", "xpack.ml.explorer.distributionChart.entityLabel": "エンティティ", @@ -16471,7 +16460,6 @@ "xpack.ml.jobsBreadcrumbs.multiMetricLabel": "マルチメトリック", "xpack.ml.jobsBreadcrumbs.populationLabel": "集団", "xpack.ml.jobsBreadcrumbs.rareLabel": "ほとんどない", - "xpack.ml.jobsBreadcrumbs.selectIndexOrSearchLabel": "ジョブを作成", "xpack.ml.jobsBreadcrumbs.selectIndexOrSearchLabelRecognize": "認識されたインデックス", "xpack.ml.jobsBreadcrumbs.selectJobType": "ジョブを作成", "xpack.ml.jobsBreadcrumbs.singleMetricLabel": "シングルメトリック", @@ -23648,7 +23636,6 @@ "xpack.securitySolution.timeline.failSearchDescription": "検索を実行できませんでした", "xpack.securitySolution.timeline.fieldTooltip": "フィールド", "xpack.securitySolution.timeline.file.fromOriginalPathDescription": "元のパスから", - "xpack.securitySolution.timeline.flyout.header.closeTimelineButtonLabel": "タイムラインを閉じる", "xpack.securitySolution.timeline.flyout.pane.removeColumnButtonLabel": "列を削除", "xpack.securitySolution.timeline.flyout.pane.timelinePropertiesAriaLabel": "タイムラインのプロパティ", "xpack.securitySolution.timeline.flyoutTimelineTemplateLabel": "タイムラインテンプレート", @@ -25030,7 +25017,6 @@ "xpack.timelines.footer.rowsPerPageLabel": "ページごとの行:{rowsPerPage}", "xpack.timelines.footer.totalCountOfEvents": "イベント", "xpack.timelines.hoverActions.addToTimeline": "タイムライン調査に追加", - "xpack.timelines.hoverActions.addToTimeline.addedFieldMessage": "{fieldOrValue}をタイムラインに追加しました", "xpack.timelines.hoverActions.columnToggleLabel": "表の{field}列を切り替える", "xpack.timelines.hoverActions.fieldLabel": "フィールド", "xpack.timelines.hoverActions.filterIn": "フィルタリング", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 4ec36c767a5d35..7850bfaba35c2b 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -6275,7 +6275,6 @@ "xpack.apm.transactionsTable.cardinalityWarning.body": "唯一事务名称的数目超过 {bucketSize} 的已配置值。尝试重新配置您的代理以对类似的事务分组或增大 {codeBlock} 的值", "xpack.apm.transactionsTable.cardinalityWarning.docsLink": "在文档中了解详情", "xpack.apm.transactionsTable.cardinalityWarning.title": "此视图显示已报告事务的子集。", - "xpack.apm.transactionsTable.errorMessage": "无法提取", "xpack.apm.transactionsTable.linkText": "查看事务", "xpack.apm.transactionsTable.loading": "正在加载……", "xpack.apm.transactionsTable.noResults": "未找到事务组", @@ -7754,7 +7753,6 @@ "xpack.cases.containers.markInProgressCases": "已将{totalCases, plural, =1 {“{caseTitle}”} other { {totalCases} 个案例}}标记为进行中", "xpack.cases.containers.pushToExternalService": "已成功发送到 { serviceName }", "xpack.cases.containers.reopenedCases": "已打开{totalCases, plural, =1 {“{caseTitle}”} other { {totalCases} 个案例}}", - "xpack.cases.containers.statusChangeToasterText": "此案例中的告警也更新了状态", "xpack.cases.containers.syncCase": "“{caseTitle}”中的告警已同步", "xpack.cases.containers.updatedCase": "已更新“{caseTitle}”", "xpack.cases.create.stepOneTitle": "案例字段", @@ -15106,12 +15104,10 @@ "xpack.maps.embeddableDisplayName": "地图", "xpack.maps.emsFileSelect.selectPlaceholder": "选择 EMS 图层", "xpack.maps.emsSource.tooltipsTitle": "工具提示字段", - "xpack.maps.es_geo_utils.convert.invalidGeometryCollectionErrorMessage": "不应将 GeometryCollection 传递给 convertESShapeToGeojsonGeometry", "xpack.maps.es_geo_utils.convert.unsupportedGeometryTypeErrorMessage": "无法将 {geometryType} 几何图形转换成 geojson,不支持", "xpack.maps.es_geo_utils.distanceFilterAlias": "{pointLabel} {distanceKm}km 内", "xpack.maps.es_geo_utils.unsupportedFieldTypeErrorMessage": "字段类型不受支持,应为 {expectedTypes},而提供的是 {fieldType}", "xpack.maps.es_geo_utils.unsupportedGeometryTypeErrorMessage": "几何类型不受支持,应为 {expectedTypes},而提供的是 {geometryType}", - "xpack.maps.es_geo_utils.wkt.invalidWKTErrorMessage": "无法将 {wkt} 转换成 geojson。需要有效的 WKT。", "xpack.maps.esGeoLine.areEntitiesTrimmedMsg": "结果限制为 ~{totalEntities} 条轨迹中的前 {entityCount} 条。", "xpack.maps.esGeoLine.tracksCountMsg": "找到 {entityCount} 条轨迹。", "xpack.maps.esGeoLine.tracksTrimmedMsg": "{entityCount} 条轨迹中有 {numTrimmedTracks} 条不完整。", @@ -15831,7 +15827,6 @@ "xpack.ml.anomalyChartsEmbeddable.setupModal.title": "异常浏览器图表配置", "xpack.ml.anomalyChartsEmbeddable.title": "{jobIds} 的 ML 异常图表", "xpack.ml.anomalyDetection.anomalyExplorerLabel": "Anomaly Explorer", - "xpack.ml.anomalyDetection.jobManagementLabel": "作业管理", "xpack.ml.anomalyDetection.singleMetricViewerLabel": "Single Metric Viewer", "xpack.ml.anomalyDetectionAlert.actionGroupName": "异常分数匹配条件", "xpack.ml.anomalyDetectionAlert.advancedSettingsLabel": "高级设置", @@ -16415,9 +16410,6 @@ "xpack.ml.dataframe.stepDetailsForm.destinationIndexInvalidErrorLink": "详细了解索引名称限制。", "xpack.ml.dataFrameAnalyticsBreadcrumbs.analyticsMapLabel": "分析地图", "xpack.ml.dataFrameAnalyticsBreadcrumbs.dataFrameExplorationLabel": "探查", - "xpack.ml.dataFrameAnalyticsBreadcrumbs.dataFrameListLabel": "作业管理", - "xpack.ml.dataFrameAnalyticsBreadcrumbs.dataFrameManagementLabel": "数据帧分析", - "xpack.ml.dataFrameAnalyticsBreadcrumbs.indexLabel": "索引", "xpack.ml.dataFrameAnalyticsLabel": "数据帧分析", "xpack.ml.dataFrameAnalyticsTabLabel": "数据帧分析", "xpack.ml.dataGrid.CcsWarningCalloutBody": "检索索引模式的数据时有问题。源预览和跨集群搜索仅在 7.10 及以上版本上受支持。可能需要配置和创建转换。", @@ -16523,10 +16515,7 @@ "xpack.ml.explorer.charts.viewLabel": "查看", "xpack.ml.explorer.clearSelectionLabel": "清除所选内容", "xpack.ml.explorer.createNewJobLinkText": "创建作业", - "xpack.ml.explorer.dashboardsTable.addAndEditDashboardLabel": "添加并编辑仪表板", - "xpack.ml.explorer.dashboardsTable.addToDashboardLabel": "添加到仪表板", "xpack.ml.explorer.dashboardsTable.descriptionColumnHeader": "描述", - "xpack.ml.explorer.dashboardsTable.savedSuccessfullyTitle": "仪表板“{dashboardTitle}”已成功更新", "xpack.ml.explorer.dashboardsTable.titleColumnHeader": "标题", "xpack.ml.explorer.distributionChart.anomalyScoreLabel": "异常分数", "xpack.ml.explorer.distributionChart.entityLabel": "实体", @@ -16703,7 +16692,6 @@ "xpack.ml.jobsBreadcrumbs.multiMetricLabel": "多指标", "xpack.ml.jobsBreadcrumbs.populationLabel": "填充", "xpack.ml.jobsBreadcrumbs.rareLabel": "极少", - "xpack.ml.jobsBreadcrumbs.selectIndexOrSearchLabel": "创建作业", "xpack.ml.jobsBreadcrumbs.selectIndexOrSearchLabelRecognize": "识别的索引", "xpack.ml.jobsBreadcrumbs.selectJobType": "创建作业", "xpack.ml.jobsBreadcrumbs.singleMetricLabel": "单一指标", @@ -24043,7 +24031,6 @@ "xpack.securitySolution.timeline.failSearchDescription": "无法运行搜索", "xpack.securitySolution.timeline.fieldTooltip": "字段", "xpack.securitySolution.timeline.file.fromOriginalPathDescription": "从其原始路径", - "xpack.securitySolution.timeline.flyout.header.closeTimelineButtonLabel": "关闭时间线", "xpack.securitySolution.timeline.flyout.pane.removeColumnButtonLabel": "移除列", "xpack.securitySolution.timeline.flyout.pane.timelinePropertiesAriaLabel": "时间线属性", "xpack.securitySolution.timeline.flyoutTimelineTemplateLabel": "时间线模板", @@ -25461,7 +25448,6 @@ "xpack.timelines.footer.rowsPerPageLabel": "每页行数:{rowsPerPage}", "xpack.timelines.footer.totalCountOfEvents": "事件", "xpack.timelines.hoverActions.addToTimeline": "添加到时间线调查", - "xpack.timelines.hoverActions.addToTimeline.addedFieldMessage": "已将 {fieldOrValue} 添加到时间线", "xpack.timelines.hoverActions.columnToggleLabel": "在表中切换 {field} 列", "xpack.timelines.hoverActions.fieldLabel": "字段", "xpack.timelines.hoverActions.filterIn": "筛选", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/monitoring_utils.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/monitoring_utils.test.ts new file mode 100644 index 00000000000000..291a786c1590fe --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/monitoring_utils.test.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { getFormattedSuccessRatio } from './monitoring_utils'; + +describe('monitoring_utils', () => { + it('should return a decimal as a percent', () => { + expect(getFormattedSuccessRatio(0.66)).toEqual('66%'); + expect(getFormattedSuccessRatio(0.75345345345345)).toEqual('75%'); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/monitoring_utils.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/monitoring_utils.ts new file mode 100644 index 00000000000000..412a0ece3fbec7 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/monitoring_utils.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import numeral from '@elastic/numeral'; + +export function getFormattedSuccessRatio(successRatio: number) { + const formatted = numeral(successRatio! * 100).format('0,0'); + return `${formatted}%`; +} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.test.tsx index c8e1f5d05ecc0c..352fd76b098360 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.test.tsx @@ -176,6 +176,14 @@ describe('alerts_list component with items', () => { lastExecutionDate: new Date('2020-08-20T19:23:38Z'), error: null, }, + monitoring: { + execution: { + history: [{ success: true }, { success: true }, { success: false }], + calculated_metrics: { + success_ratio: 0.66, + }, + }, + }, }, { id: '2', @@ -199,6 +207,14 @@ describe('alerts_list component with items', () => { lastExecutionDate: new Date('2020-08-20T19:23:38Z'), error: null, }, + monitoring: { + execution: { + history: [{ success: true }, { success: true }], + calculated_metrics: { + success_ratio: 1, + }, + }, + }, }, { id: '3', @@ -222,6 +238,14 @@ describe('alerts_list component with items', () => { lastExecutionDate: new Date('2020-08-20T19:23:38Z'), error: null, }, + monitoring: { + execution: { + history: [{ success: false }], + calculated_metrics: { + success_ratio: 0, + }, + }, + }, }, { id: '4', @@ -433,6 +457,23 @@ describe('alerts_list component with items', () => { 'License Error' ); + // Monitoring column + expect( + wrapper.find('EuiTableRowCell[data-test-subj="alertsTableCell-successRatio"]').length + ).toEqual(mockedAlertsData.length); + const ratios = wrapper.find( + 'EuiTableRowCell[data-test-subj="alertsTableCell-successRatio"] span[data-test-subj="successRatio"]' + ); + mockedAlertsData.forEach((rule, index) => { + if (rule.monitoring) { + expect(ratios.at(index).text()).toEqual( + `${rule.monitoring.execution.calculated_metrics.success_ratio * 100}%` + ); + } else { + expect(ratios.at(index).text()).toEqual(`N/A`); + } + }); + // Clearing all mocks will also reset fake timers. jest.clearAllMocks(); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.tsx index 6c146680e94764..60929d8fd3ac67 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.tsx @@ -85,6 +85,7 @@ import { formatMillisForDisplay, shouldShowDurationWarning, } from '../../../lib/execution_duration_utils'; +import { getFormattedSuccessRatio } from '../../../lib/monitoring_utils'; const ENTER_KEY = 13; @@ -583,6 +584,36 @@ export const AlertsList: React.FunctionComponent = () => { ); }, }, + { + field: 'monitoring.execution.calculated_metrics.success_ratio', + width: '12%', + name: ( + + + Success ratio{' '} + + + + ), + sortable: true, + truncateText: false, + 'data-test-subj': 'alertsTableCell-successRatio', + render: (value: number) => { + return ( + + {value !== undefined ? getFormattedSuccessRatio(value) : 'N/A'} + + ); + }, + }, { field: 'executionStatus.status', name: i18n.translate( diff --git a/x-pack/plugins/uptime/common/config.ts b/x-pack/plugins/uptime/common/config.ts index e9ea061fcf1600..3e8c6cc0092076 100644 --- a/x-pack/plugins/uptime/common/config.ts +++ b/x-pack/plugins/uptime/common/config.ts @@ -24,22 +24,14 @@ const uptimeConfig = schema.object({ index: schema.maybe(schema.string()), ui: schema.maybe( schema.object({ - unsafe: schema.maybe( + monitorManagement: schema.maybe( schema.object({ - monitorManagement: schema.maybe( - schema.object({ - enabled: schema.boolean(), - }) - ), + enabled: schema.boolean(), }) ), }) ), - unsafe: schema.maybe( - schema.object({ - service: serviceConfig, - }) - ), + service: schema.maybe(serviceConfig), }); export const config: PluginConfigDescriptor = { diff --git a/x-pack/plugins/uptime/common/constants/client_defaults.ts b/x-pack/plugins/uptime/common/constants/client_defaults.ts index 42521a1166bde3..a8860dcca4a1a1 100644 --- a/x-pack/plugins/uptime/common/constants/client_defaults.ts +++ b/x-pack/plugins/uptime/common/constants/client_defaults.ts @@ -41,3 +41,5 @@ export const CLIENT_DEFAULTS = { SEARCH: '', STATUS_FILTER: '', }; + +export const EXCLUDE_RUN_ONCE_FILTER = { bool: { must_not: { exists: { field: 'run_once' } } } }; diff --git a/x-pack/plugins/uptime/common/constants/rest_api.ts b/x-pack/plugins/uptime/common/constants/rest_api.ts index f2359e4f1fb1ee..2c369579b01500 100644 --- a/x-pack/plugins/uptime/common/constants/rest_api.ts +++ b/x-pack/plugins/uptime/common/constants/rest_api.ts @@ -40,4 +40,5 @@ export enum API_URLS { INDEX_TEMPLATES = '/internal/uptime/service/index_templates', SERVICE_LOCATIONS = '/internal/uptime/service/locations', SYNTHETICS_MONITORS = '/internal/uptime/service/monitors', + RUN_ONCE_MONITOR = '/internal/uptime/service/monitors/run_once', } diff --git a/x-pack/plugins/uptime/common/constants/ui.ts b/x-pack/plugins/uptime/common/constants/ui.ts index 7a9cd4943bc579..155c6ea80242fc 100644 --- a/x-pack/plugins/uptime/common/constants/ui.ts +++ b/x-pack/plugins/uptime/common/constants/ui.ts @@ -11,7 +11,7 @@ export const MONITOR_ADD_ROUTE = '/add-monitor'; export const MONITOR_EDIT_ROUTE = '/edit-monitor/:monitorId'; -export const MONITOR_MANAGEMENT = '/manage-monitors'; +export const MONITOR_MANAGEMENT_ROUTE = '/manage-monitors'; export const OVERVIEW_ROUTE = '/'; diff --git a/x-pack/plugins/uptime/e2e/config.ts b/x-pack/plugins/uptime/e2e/config.ts index d2c7a691e0a49f..4e265d948ffef3 100644 --- a/x-pack/plugins/uptime/e2e/config.ts +++ b/x-pack/plugins/uptime/e2e/config.ts @@ -44,6 +44,11 @@ async function config({ readConfigFile }: FtrConfigProviderContext) { `--elasticsearch.username=kibana_system`, `--elasticsearch.password=changeme`, '--xpack.reporting.enabled=false', + `--xpack.uptime.service.manifestUrl=${process.env.SYNTHETICS_SERVICE_MANIFEST}`, + `--xpack.uptime.service.username=${process.env.SYNTHETICS_SERVICE_USERNAME}`, + `--xpack.uptime.service.password=${process.env.SYNTHETICS_SERVICE_PASSWORD}`, + '--xpack.uptime.service.enabled=true', + '--xpack.uptime.ui.monitorManagement.enabled=true', ], }, }; diff --git a/x-pack/plugins/uptime/e2e/journeys/data_view_permissions.ts b/x-pack/plugins/uptime/e2e/journeys/data_view_permissions.ts new file mode 100644 index 00000000000000..cf50e0d6b58ae4 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/journeys/data_view_permissions.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { journey, step, expect, before } from '@elastic/synthetics'; +import { loginToKibana, waitForLoadingToFinish } from './utils'; +import { byTestId } from './uptime.journey'; +import { callKibana } from '../../../apm/scripts/create_apm_users_and_roles/helpers/call_kibana'; + +journey('DataViewPermissions', async ({ page, params }) => { + before(async () => { + await waitForLoadingToFinish({ page }); + try { + await callKibana({ + elasticsearch: { username: 'elastic', password: 'changeme' }, + kibana: { hostname: params.kibanaUrl, roleSuffix: '' }, + options: { + method: 'DELETE', + url: '/api/saved_objects/index-pattern/synthetics_static_index_pattern_id_heartbeat_?force=false', + }, + }); + // eslint-disable-next-line no-empty + } catch (e) {} + }); + + const queryParams = new URLSearchParams({ + dateRangeStart: '2021-11-21T22:06:06.502Z', + dateRangeEnd: '2021-11-21T22:10:08.203Z', + }).toString(); + + const baseUrl = `${params.kibanaUrl}/app/uptime`; + + step('Go to uptime', async () => { + await page.goto(`${baseUrl}?${queryParams}`, { + waitUntil: 'networkidle', + }); + await loginToKibana({ page, user: { username: 'obs_read_user', password: 'changeme' } }); + }); + + step('Click explore data button', async () => { + await page.click(byTestId('uptimeExploreDataButton')); + await waitForLoadingToFinish({ page }); + await page.waitForSelector(`text=${permissionError}`); + expect(await page.$(`text=${permissionError}`)).toBeTruthy(); + }); +}); + +const permissionError = + "Unable to create Data View. You don't have the required permission, please contact your admin."; diff --git a/x-pack/plugins/uptime/e2e/journeys/index.ts b/x-pack/plugins/uptime/e2e/journeys/index.ts index 6bdea1beb016b9..941adf378ab29f 100644 --- a/x-pack/plugins/uptime/e2e/journeys/index.ts +++ b/x-pack/plugins/uptime/e2e/journeys/index.ts @@ -5,6 +5,8 @@ * 2.0. */ +export * from './data_view_permissions'; export * from './uptime.journey'; +export * from './monitor_management.journey'; export * from './step_duration.journey'; export * from './alerts'; diff --git a/x-pack/plugins/uptime/e2e/journeys/monitor_management.journey.ts b/x-pack/plugins/uptime/e2e/journeys/monitor_management.journey.ts new file mode 100644 index 00000000000000..e5b0cd352ac5bf --- /dev/null +++ b/x-pack/plugins/uptime/e2e/journeys/monitor_management.journey.ts @@ -0,0 +1,196 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { journey, step, expect, before, Page } from '@elastic/synthetics'; +import { monitorManagementPageProvider } from '../page_objects/monitor_management'; + +journey('Monitor Management', async ({ page, params }: { page: Page; params: any }) => { + const uptime = monitorManagementPageProvider({ page, kibanaUrl: params.kibanaUrl }); + const basicMonitorDetails = { + name: 'Sample monitor', + location: 'US Central', + schedule: '@every 3m', + apmServiceName: 'service', + }; + + const deleteMonitor = async () => { + const isSuccessful = await uptime.deleteMonitor(); + expect(isSuccessful).toBeTruthy(); + }; + + before(async () => { + await uptime.waitForLoadingToFinish(); + }); + + step('Go to monitor-management', async () => { + await uptime.navigateToMonitorManagement(); + }); + + step('login to Kibana', async () => { + await uptime.loginToKibana(); + }); + + step('create monitor http monitor', async () => { + const monitorDetails = { + ...basicMonitorDetails, + url: 'https://elastic.co', + locations: [basicMonitorDetails.location], + }; + await uptime.clickAddMonitor(); + await uptime.createBasicHTTPMonitorDetails(monitorDetails); + const isSuccessful = await uptime.confirmAndSave(); + expect(isSuccessful).toBeTruthy(); + }); + + step('view HTTP details in monitor management UI', async () => { + const monitorDetails = { + ...basicMonitorDetails, + url: 'https://elastic.co', + }; + await uptime.clickAddMonitor(); + await uptime.findMonitorConfiguration(monitorDetails); + }); + + step('delete http monitor', async () => { + await deleteMonitor(); + }); + + step('create monitor tcp monitor', async () => { + const monitorDetails = { + ...basicMonitorDetails, + host: 'smtp.gmail.com:587', + locations: [basicMonitorDetails.location], + }; + await uptime.clickAddMonitor(); + await uptime.createBasicTCPMonitorDetails(monitorDetails); + const isSuccessful = await uptime.confirmAndSave(); + expect(isSuccessful).toBeTruthy(); + }); + + step('view TCP details in monitor management UI', async () => { + const monitorDetails = { + ...basicMonitorDetails, + host: 'smtp.gmail.com:587', + }; + await uptime.clickAddMonitor(); + await uptime.findMonitorConfiguration(monitorDetails); + }); + + step('delete tcp monitor', async () => { + await deleteMonitor(); + }); + + step('create basic ICMP monitor', async () => { + const monitorDetails = { + ...basicMonitorDetails, + host: '1.1.1.1', + locations: [basicMonitorDetails.location], + }; + await uptime.clickAddMonitor(); + await uptime.createBasicICMPMonitorDetails(monitorDetails); + const isSuccessful = await uptime.confirmAndSave(); + expect(isSuccessful).toBeTruthy(); + }); + + step('view ICMP details in monitor management UI', async () => { + const monitorDetails = { + ...basicMonitorDetails, + host: '1.1.1.1', + }; + await uptime.clickAddMonitor(); + await uptime.findMonitorConfiguration(monitorDetails); + }); + + step('delete ICMP monitor', async () => { + await deleteMonitor(); + }); + + step('create basic Browser monitor', async () => { + const monitorDetails = { + ...basicMonitorDetails, + inlineScript: 'step("test step", () => {})', + locations: [basicMonitorDetails.location], + }; + await uptime.clickAddMonitor(); + await uptime.createBasicBrowserMonitorDetails(monitorDetails, true); + const isSuccessful = await uptime.confirmAndSave(); + expect(isSuccessful).toBeTruthy(); + }); + + step('view ICMP details in monitor management UI', async () => { + const monitorDetails = { + ...basicMonitorDetails, + host: '1.1.1.1', + }; + await uptime.clickAddMonitor(); + await uptime.findMonitorConfiguration(monitorDetails); + }); + + step('delete ICMP monitor', async () => { + await deleteMonitor(); + }); +}); + +journey('Monitor Management breadcrumbs', async ({ page, params }: { page: Page; params: any }) => { + const uptime = monitorManagementPageProvider({ page, kibanaUrl: params.kibanaUrl }); + const basicMonitorDetails = { + name: 'Sample monitor', + location: 'US Central', + schedule: '@every 3m', + apmServiceName: 'service', + }; + + before(async () => { + await uptime.waitForLoadingToFinish(); + }); + + step('Go to monitor-management', async () => { + await uptime.navigateToMonitorManagement(); + }); + + step('login to Kibana', async () => { + await uptime.loginToKibana(); + }); + + step('Check breadcrumb', async () => { + const lastBreadcrumb = await (await uptime.findByTestSubj('"breadcrumb last"')).textContent(); + expect(lastBreadcrumb).toEqual('Monitor management'); + }); + + step('check breadcrumbs', async () => { + await uptime.clickAddMonitor(); + const breadcrumbs = await page.$$('[data-test-subj="breadcrumb"]'); + expect(await breadcrumbs[1].textContent()).toEqual('Monitor management'); + const lastBreadcrumb = await (await uptime.findByTestSubj('"breadcrumb last"')).textContent(); + expect(lastBreadcrumb).toEqual('Add monitor'); + }); + + step('create monitor http monitor', async () => { + const monitorDetails = { + ...basicMonitorDetails, + url: 'https://elastic.co', + locations: [basicMonitorDetails.location], + }; + await uptime.createBasicHTTPMonitorDetails(monitorDetails); + const isSuccessful = await uptime.confirmAndSave(); + expect(isSuccessful).toBeTruthy(); + }); + + step('edit http monitor and check breadcrumb', async () => { + await uptime.editMonitor(); + const breadcrumbs = await page.$$('[data-test-subj=breadcrumb]'); + expect(await breadcrumbs[1].textContent()).toEqual('Monitor management'); + const lastBreadcrumb = await (await uptime.findByTestSubj('"breadcrumb last"')).textContent(); + expect(lastBreadcrumb).toEqual('Edit monitor'); + }); + + step('delete monitor', async () => { + await uptime.navigateToMonitorManagement(); + const isSuccessful = await uptime.deleteMonitor(); + expect(isSuccessful).toBeTruthy(); + }); +}); diff --git a/x-pack/plugins/uptime/e2e/journeys/utils.ts b/x-pack/plugins/uptime/e2e/journeys/utils.ts index 6d2f1dd5541086..a1bc7eea29ffed 100644 --- a/x-pack/plugins/uptime/e2e/journeys/utils.ts +++ b/x-pack/plugins/uptime/e2e/journeys/utils.ts @@ -14,11 +14,18 @@ export async function waitForLoadingToFinish({ page }: { page: Page }) { } } -export async function loginToKibana({ page }: { page: Page }) { - await page.fill('[data-test-subj=loginUsername]', 'elastic', { +export async function loginToKibana({ + page, + user, +}: { + page: Page; + user?: { username: string; password: string }; +}) { + await page.fill('[data-test-subj=loginUsername]', user?.username ?? 'elastic', { timeout: 60 * 1000, }); - await page.fill('[data-test-subj=loginPassword]', 'changeme'); + + await page.fill('[data-test-subj=loginPassword]', user?.password ?? 'changeme'); await page.click('[data-test-subj=loginSubmit]'); diff --git a/x-pack/plugins/uptime/e2e/page_objects/login.tsx b/x-pack/plugins/uptime/e2e/page_objects/login.tsx new file mode 100644 index 00000000000000..82062a0a710e7f --- /dev/null +++ b/x-pack/plugins/uptime/e2e/page_objects/login.tsx @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { Page } from '@elastic/synthetics'; + +export function loginPageProvider({ page }: { page: Page; kibanaUrl: string }) { + return { + async waitForLoadingToFinish() { + while (true) { + if ((await page.$('[data-test-subj=kbnLoadingMessage]')) === null) break; + await page.waitForTimeout(5 * 1000); + } + }, + async loginToKibana() { + await page.fill('[data-test-subj=loginUsername]', 'elastic', { + timeout: 60 * 1000, + }); + await page.fill('[data-test-subj=loginPassword]', 'changeme'); + + await page.click('[data-test-subj=loginSubmit]'); + + await this.waitForLoadingToFinish(); + }, + }; +} diff --git a/x-pack/plugins/uptime/e2e/page_objects/monitor_management.tsx b/x-pack/plugins/uptime/e2e/page_objects/monitor_management.tsx new file mode 100644 index 00000000000000..e12b7fdf40bc37 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/page_objects/monitor_management.tsx @@ -0,0 +1,187 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Page } from '@elastic/synthetics'; +import { loginPageProvider } from './login'; +import { utilsPageProvider } from './utils'; + +export function monitorManagementPageProvider({ + page, + kibanaUrl, +}: { + page: Page; + kibanaUrl: string; +}) { + const monitorManagement = `${kibanaUrl}/app/uptime/manage-monitors`; + const addMonitor = `${kibanaUrl}/app/uptime/add-monitor`; + + return { + ...loginPageProvider({ page, kibanaUrl }), + ...utilsPageProvider({ page }), + + async navigateToMonitorManagement() { + await page.goto(monitorManagement, { + waitUntil: 'networkidle', + }); + }, + + async navigateToAddMonitor() { + await page.goto(addMonitor, { + waitUntil: 'networkidle', + }); + }, + + async clickAddMonitor() { + await page.click('text=Add monitor'); + }, + + async deleteMonitor() { + await this.clickByTestSubj('monitorManagementDeleteMonitor'); + return await this.findByTestSubj('uptimeDeleteMonitorSuccess'); + }, + + async editMonitor() { + await this.clickByTestSubj('monitorManagementEditMonitor'); + }, + + async findMonitorConfiguration(monitorConfig: Record) { + const values = Object.values(monitorConfig); + + for (let i = 0; i < values.length; i++) { + await this.findByText(values[i]); + } + }, + + async selectMonitorType(monitorType: string) { + await this.selectByTestSubj('syntheticsMonitorTypeField', monitorType); + }, + + async ensureIsOnMonitorConfigPage() { + await page.isVisible('[data-test-subj=monitorSettingsSection]'); + }, + + async confirmAndSave(isEditPage?: boolean) { + await this.ensureIsOnMonitorConfigPage(); + if (isEditPage) { + await page.click('text=Update monitor'); + } else { + await page.click('text=Save monitor'); + } + return await this.findByTestSubj('uptimeAddMonitorSuccess'); + }, + + async fillCodeEditor(value: string) { + await page.fill('[data-test-subj=codeEditorContainer] textarea', value); + }, + + async selectLocations({ locations }: { locations: string[] }) { + await this.clickByTestSubj('syntheticsServiceLocationsComboBox'); + for (let i = 0; i < locations.length; i++) { + await page.click(`text=${locations[i]}`); + } + }, + + async createBasicMonitorDetails({ + name, + apmServiceName, + locations, + }: { + name: string; + apmServiceName: string; + locations: string[]; + }) { + await this.fillByTestSubj('monitorManagementMonitorName', name); + await this.fillByTestSubj('syntheticsAPMServiceName', apmServiceName); + await this.selectLocations({ locations }); + }, + + async createBasicHTTPMonitorDetails({ + name, + url, + apmServiceName, + locations, + }: { + name: string; + url: string; + apmServiceName: string; + locations: string[]; + }) { + await this.createBasicMonitorDetails({ name, apmServiceName, locations }); + await this.fillByTestSubj('syntheticsUrlField', url); + }, + + async createBasicTCPMonitorDetails({ + name, + host, + apmServiceName, + locations, + }: { + name: string; + host: string; + apmServiceName: string; + locations: string[]; + }) { + await this.selectMonitorType('tcp'); + await this.createBasicMonitorDetails({ name, apmServiceName, locations }); + await this.fillByTestSubj('syntheticsTCPHostField', host); + }, + + async createBasicICMPMonitorDetails({ + name, + host, + apmServiceName, + locations, + }: { + name: string; + host: string; + apmServiceName: string; + locations: string[]; + }) { + await this.selectMonitorType('icmp'); + await this.createBasicMonitorDetails({ name, apmServiceName, locations }); + await this.fillByTestSubj('syntheticsICMPHostField', host); + }, + + async createBasicBrowserMonitorDetails( + { + name, + inlineScript, + zipUrl, + folder, + params, + username, + password, + apmServiceName, + locations, + }: { + name: string; + inlineScript?: string; + zipUrl?: string; + folder?: string; + params?: string; + username?: string; + password?: string; + apmServiceName: string; + locations: string[]; + }, + isInline: boolean = false + ) { + await this.selectMonitorType('browser'); + await this.createBasicMonitorDetails({ name, apmServiceName, locations }); + if (isInline && inlineScript) { + await this.clickByTestSubj('syntheticsSourceTab__inline'); + await this.fillCodeEditor(inlineScript); + return; + } + await this.fillByTestSubj('syntheticsBrowserZipUrl', zipUrl || ''); + await this.fillByTestSubj('syntheticsBrowserZipUrlFolder', folder || ''); + await this.fillByTestSubj('syntheticsBrowserZipUrlUsername', username || ''); + await this.fillByTestSubj('syntheticsBrowserZipUrlPassword', password || ''); + await this.fillCodeEditor(params || ''); + }, + }; +} diff --git a/x-pack/plugins/uptime/e2e/page_objects/utils.tsx b/x-pack/plugins/uptime/e2e/page_objects/utils.tsx new file mode 100644 index 00000000000000..d6b54bd7dd737c --- /dev/null +++ b/x-pack/plugins/uptime/e2e/page_objects/utils.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { expect, Page } from '@elastic/synthetics'; + +export function utilsPageProvider({ page }: { page: Page }) { + return { + byTestId(testId: string) { + return `[data-test-subj=${testId}]`; + }, + + async waitForLoadingToFinish() { + while (true) { + if ((await page.$(this.byTestId('kbnLoadingMessage'))) === null) break; + await page.waitForTimeout(5 * 1000); + } + }, + + async assertText({ text }: { text: string }) { + await page.waitForSelector(`text=${text}`); + expect(await page.$(`text=${text}`)).toBeTruthy(); + }, + + async fillByTestSubj(dataTestSubj: string, value: string) { + await page.fill(`[data-test-subj=${dataTestSubj}]`, value); + }, + + async selectByTestSubj(dataTestSubj: string, value: string) { + await page.selectOption(`[data-test-subj=${dataTestSubj}]`, value); + }, + + async clickByTestSubj(dataTestSubj: string) { + await page.click(`[data-test-subj=${dataTestSubj}]`); + }, + + async findByTestSubj(dataTestSubj: string) { + return await page.locator(`[data-test-subj=${dataTestSubj}]`); + }, + + async findByText(text: string) { + return await page.locator(`text=${text}`); + }, + }; +} diff --git a/x-pack/plugins/uptime/e2e/playwright_start.ts b/x-pack/plugins/uptime/e2e/playwright_start.ts index 0581692e0e278f..8d208ed6873c6c 100644 --- a/x-pack/plugins/uptime/e2e/playwright_start.ts +++ b/x-pack/plugins/uptime/e2e/playwright_start.ts @@ -12,6 +12,7 @@ import { run as playwrightRun } from '@elastic/synthetics'; import { esArchiverLoad, esArchiverUnload } from './tasks/es_archiver'; import './journeys'; +import { createApmAndObsUsersAndRoles } from '../../apm/scripts/create_apm_users_and_roles/create_apm_users_and_roles'; const listOfJourneys = [ 'uptime', @@ -49,6 +50,11 @@ async function playwrightStart(getService: any, headless = true, match?: string) port: config.get('servers.kibana.port'), }); + await createApmAndObsUsersAndRoles({ + elasticsearch: { username: 'elastic', password: 'changeme' }, + kibana: { roleSuffix: 'e2e', hostname: kibanaUrl }, + }); + const res = await playwrightRun({ params: { kibanaUrl }, playwrightOptions: { headless, chromiumSandbox: false, timeout: 60 * 1000 }, diff --git a/x-pack/plugins/uptime/e2e/tsconfig.json b/x-pack/plugins/uptime/e2e/tsconfig.json index a9ec63a92fef80..7d5fdc316e8ee5 100644 --- a/x-pack/plugins/uptime/e2e/tsconfig.json +++ b/x-pack/plugins/uptime/e2e/tsconfig.json @@ -5,5 +5,10 @@ "compilerOptions": { "outDir": "target/types", "types": [ "node"], - } + }, + "references": [ + { + "path": "../../apm/tsconfig.json", + }, + ] } diff --git a/x-pack/plugins/uptime/public/components/common/header/action_menu_content.tsx b/x-pack/plugins/uptime/public/components/common/header/action_menu_content.tsx index b0fe387613f40e..985b1ae9146f24 100644 --- a/x-pack/plugins/uptime/public/components/common/header/action_menu_content.tsx +++ b/x-pack/plugins/uptime/public/components/common/header/action_menu_content.tsx @@ -16,7 +16,11 @@ import { useKibana } from '../../../../../../../src/plugins/kibana_react/public' import { useUptimeSettingsContext } from '../../../contexts/uptime_settings_context'; import { useGetUrlParams } from '../../../hooks'; import { ToggleAlertFlyoutButton } from '../../overview/alerts/alerts_containers'; -import { MONITOR_MANAGEMENT, MONITOR_ROUTE, SETTINGS_ROUTE } from '../../../../common/constants'; +import { + MONITOR_MANAGEMENT_ROUTE, + MONITOR_ROUTE, + SETTINGS_ROUTE, +} from '../../../../common/constants'; import { stringifyUrlParams } from '../../../lib/helper/stringify_url_params'; import { InspectorHeaderLink } from './inspector_header_link'; import { monitorStatusSelector } from '../../../state/selectors'; @@ -73,7 +77,7 @@ export function ActionMenuContent({ config }: { config: UptimeConfig }): React.R return ( - {config.ui?.unsafe?.monitorManagement?.enabled && ( + {config.ui?.monitorManagement?.enabled && ( {ANALYZE_DATA} diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/ping_list.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/ping_list.tsx index 06c7ab7bff843c..27141aa436d675 100644 --- a/x-pack/plugins/uptime/public/components/monitor/ping_list/ping_list.tsx +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/ping_list.tsx @@ -5,31 +5,15 @@ * 2.0. */ -import { EuiBasicTable, EuiPanel, EuiSpacer } from '@elastic/eui'; +import { EuiPanel, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import React, { useCallback, useState, useEffect, MouseEvent } from 'react'; +import React, { useState } from 'react'; import styled from 'styled-components'; -import { useHistory } from 'react-router-dom'; -import moment from 'moment'; -import { useDispatch } from 'react-redux'; -import { Ping } from '../../../../common/runtime_types'; import { convertMicrosecondsToMilliseconds as microsToMillis } from '../../../lib/helper'; -import { LocationName } from './location_name'; import { Pagination } from '../../overview/monitor_list'; -import { pruneJourneyState } from '../../../state/actions/journey'; -import { PingStatusColumn } from './columns/ping_status'; -import * as I18LABELS from './translations'; -import { MONITOR_TYPES } from '../../../../common/constants'; -import { ResponseCodeColumn } from './columns/response_code'; -import { ERROR_LABEL, LOCATION_LABEL, RES_CODE_LABEL, TIMESTAMP_LABEL } from './translations'; -import { ExpandRowColumn } from './columns/expand_row'; -import { PingErrorCol } from './columns/ping_error'; -import { PingTimestamp } from './columns/ping_timestamp'; -import { FailedStep } from './columns/failed_step'; import { usePingsList } from './use_pings'; import { PingListHeader } from './ping_list_header'; -import { clearPings } from '../../../state/actions'; -import { getShortTimeStamp } from '../../overview/monitor_list/columns/monitor_status_column'; +import { PingListTable } from './ping_list_table'; export const SpanWithMargin = styled.span` margin-right: 16px; @@ -52,7 +36,7 @@ export const formatDuration = (durationMicros: number) => { } const seconds = (durationMicros / ONE_SECOND_AS_MICROS).toFixed(0); - // we format seconds with correct pulralization here and not for `ms` because it is much more likely users + // we format seconds with correct pluralization here and not for `ms` because it is much more likely users // will encounter times of exactly '1' second. if (seconds === '1') { return i18n.translate('xpack.uptime.pingist.durationSecondsColumnFormatting.singular', { @@ -70,178 +54,11 @@ export const PingList = () => { const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE); const [pageIndex, setPageIndex] = useState(0); - const dispatch = useDispatch(); - - const history = useHistory(); - - const pruneJourneysCallback = useCallback( - (checkGroups: string[]) => dispatch(pruneJourneyState(checkGroups)), - [dispatch] - ); - const { error, loading, pings, total, failedSteps } = usePingsList({ pageSize, pageIndex, }); - const [expandedRows, setExpandedRows] = useState>({}); - - const expandedIdsToRemove = JSON.stringify( - Object.keys(expandedRows).filter((e) => !pings.some(({ docId }) => docId === e)) - ); - - useEffect(() => { - return () => { - dispatch(clearPings()); - }; - }, [dispatch]); - - useEffect(() => { - const parsed = JSON.parse(expandedIdsToRemove); - if (parsed.length) { - parsed.forEach((docId: string) => { - delete expandedRows[docId]; - }); - setExpandedRows(expandedRows); - } - }, [expandedIdsToRemove, expandedRows]); - - const expandedCheckGroups = pings - .filter((p: Ping) => Object.keys(expandedRows).some((f) => p.docId === f)) - .map(({ monitor: { check_group: cg } }) => cg); - - const expandedCheckGroupsStr = JSON.stringify(expandedCheckGroups); - - useEffect(() => { - pruneJourneysCallback(JSON.parse(expandedCheckGroupsStr)); - }, [pruneJourneysCallback, expandedCheckGroupsStr]); - - const hasStatus = pings.reduce( - (hasHttpStatus: boolean, currentPing) => - hasHttpStatus || !!currentPing.http?.response?.status_code, - false - ); - - const monitorType = pings?.[0]?.monitor.type; - - const columns: any[] = [ - { - field: 'monitor.status', - name: I18LABELS.STATUS_LABEL, - render: (pingStatus: string, item: Ping) => ( - - ), - }, - { - align: 'left', - field: 'observer.geo.name', - name: LOCATION_LABEL, - render: (location: string) => , - }, - ...(monitorType === MONITOR_TYPES.BROWSER - ? [ - { - align: 'left', - field: 'timestamp', - name: TIMESTAMP_LABEL, - render: (timestamp: string, item: Ping) => ( - - ), - }, - ] - : []), - // ip column not needed for browser type - ...(monitorType !== MONITOR_TYPES.BROWSER - ? [ - { - align: 'right', - dataType: 'number', - field: 'monitor.ip', - name: i18n.translate('xpack.uptime.pingList.ipAddressColumnLabel', { - defaultMessage: 'IP', - }), - }, - ] - : []), - { - align: 'center', - field: 'monitor.duration.us', - name: i18n.translate('xpack.uptime.pingList.durationMsColumnLabel', { - defaultMessage: 'Duration', - }), - render: (duration: number) => formatDuration(duration), - }, - { - field: 'error.type', - name: ERROR_LABEL, - width: '30%', - render: (errorType: string, item: Ping) => , - }, - ...(monitorType === MONITOR_TYPES.BROWSER - ? [ - { - field: 'monitor.status', - align: 'left', - name: i18n.translate('xpack.uptime.pingList.columns.failedStep', { - defaultMessage: 'Failed step', - }), - render: (_timestamp: string, item: Ping) => ( - - ), - }, - ] - : []), - // Only add this column is there is any status present in list - ...(hasStatus - ? [ - { - field: 'http.response.status_code', - align: 'right', - name: {RES_CODE_LABEL}, - render: (statusCode: string) => , - }, - ] - : []), - ...(monitorType !== MONITOR_TYPES.BROWSER - ? [ - { - align: 'right', - width: '24px', - isExpander: true, - render: (item: Ping) => ( - - ), - }, - ] - : []), - ]; - - const getRowProps = (item: Ping) => { - if (monitorType !== MONITOR_TYPES.BROWSER) { - return {}; - } - const { monitor } = item; - return { - height: '85px', - 'data-test-subj': `row-${monitor.check_group}`, - onClick: (evt: MouseEvent) => { - const targetElem = evt.target as HTMLElement; - - // we dont want to capture image click event - if (targetElem.tagName !== 'IMG' && targetElem.tagName !== 'path') { - history.push(`/journey/${monitor.check_group}/steps`); - } - }, - }; - }; - const pagination: Pagination = { initialPageSize: DEFAULT_PAGE_SIZE, pageIndex, @@ -254,31 +71,16 @@ export const PingList = () => { - { setPageSize(criteria.page!.size); setPageIndex(criteria.page!.index); }} - tableLayout={'auto'} - rowProps={getRowProps} + error={error} + pings={pings} + loading={loading} + pagination={pagination} + failedSteps={failedSteps} /> ); diff --git a/x-pack/plugins/uptime/public/components/monitor/ping_list/ping_list_table.tsx b/x-pack/plugins/uptime/public/components/monitor/ping_list/ping_list_table.tsx new file mode 100644 index 00000000000000..84a2d6a5d6a315 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor/ping_list/ping_list_table.tsx @@ -0,0 +1,244 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { MouseEvent, useCallback, useEffect, useState } from 'react'; +import { EuiBasicTable } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import moment from 'moment'; +import { useHistory } from 'react-router-dom'; +import { useDispatch } from 'react-redux'; +import * as I18LABELS from './translations'; +import { FailedStepsApiResponse, Ping } from '../../../../common/runtime_types'; +import { PingStatusColumn } from './columns/ping_status'; +import { ERROR_LABEL, LOCATION_LABEL, RES_CODE_LABEL, TIMESTAMP_LABEL } from './translations'; +import { LocationName } from './location_name'; +import { MONITOR_TYPES } from '../../../../common/constants'; +import { PingTimestamp } from './columns/ping_timestamp'; +import { getShortTimeStamp } from '../../overview/monitor_list/columns/monitor_status_column'; +import { PingErrorCol } from './columns/ping_error'; +import { FailedStep } from './columns/failed_step'; +import { ResponseCodeColumn } from './columns/response_code'; +import { ExpandRowColumn } from './columns/expand_row'; +import { formatDuration, SpanWithMargin } from './ping_list'; +import { clearPings } from '../../../state/actions'; +import { pruneJourneyState } from '../../../state/actions/journey'; +import { Pagination } from '../../overview'; + +interface Props { + loading?: boolean; + pings: Ping[]; + error?: Error; + onChange?: (criteria: any) => void; + pagination?: Pagination; + failedSteps?: FailedStepsApiResponse; +} + +export function PingListTable({ loading, error, pings, pagination, onChange, failedSteps }: Props) { + const history = useHistory(); + + const [expandedRows, setExpandedRows] = useState>({}); + + const expandedIdsToRemove = JSON.stringify( + Object.keys(expandedRows).filter((e) => !pings.some(({ docId }) => docId === e)) + ); + + const dispatch = useDispatch(); + + const pruneJourneysCallback = useCallback( + (checkGroups: string[]) => dispatch(pruneJourneyState(checkGroups)), + [dispatch] + ); + + useEffect(() => { + return () => { + dispatch(clearPings()); + }; + }, [dispatch]); + + useEffect(() => { + const parsed = JSON.parse(expandedIdsToRemove); + if (parsed.length) { + parsed.forEach((docId: string) => { + delete expandedRows[docId]; + }); + setExpandedRows(expandedRows); + } + }, [expandedIdsToRemove, expandedRows]); + + const expandedCheckGroups = pings + .filter((p: Ping) => Object.keys(expandedRows).some((f) => p.docId === f)) + .map(({ monitor: { check_group: cg } }) => cg); + + const expandedCheckGroupsStr = JSON.stringify(expandedCheckGroups); + + useEffect(() => { + pruneJourneysCallback(JSON.parse(expandedCheckGroupsStr)); + }, [pruneJourneysCallback, expandedCheckGroupsStr]); + + const hasStatus = pings.reduce( + (hasHttpStatus: boolean, currentPing) => + hasHttpStatus || !!currentPing.http?.response?.status_code, + false + ); + + const hasError = pings.reduce( + (errorType: boolean, currentPing) => errorType || !!currentPing.error?.type, + false + ); + + const monitorType = pings?.[0]?.monitor.type; + + const columns: any[] = [ + { + field: 'monitor.status', + name: I18LABELS.STATUS_LABEL, + render: (pingStatus: string, item: Ping) => ( + + ), + }, + { + align: 'left', + field: 'observer.geo.name', + name: LOCATION_LABEL, + render: (location: string) => , + }, + ...(monitorType === MONITOR_TYPES.BROWSER + ? [ + { + align: 'left', + field: 'timestamp', + name: TIMESTAMP_LABEL, + render: (timestamp: string, item: Ping) => ( + + ), + }, + ] + : []), + // ip column not needed for browser type + ...(monitorType !== MONITOR_TYPES.BROWSER + ? [ + { + align: 'right', + dataType: 'number', + field: 'monitor.ip', + name: i18n.translate('xpack.uptime.pingList.ipAddressColumnLabel', { + defaultMessage: 'IP', + }), + }, + ] + : []), + { + align: 'center', + field: 'monitor.duration.us', + name: i18n.translate('xpack.uptime.pingList.durationMsColumnLabel', { + defaultMessage: 'Duration', + }), + render: (duration: number) => formatDuration(duration), + }, + ...(hasError + ? [ + { + field: 'error.type', + name: ERROR_LABEL, + width: '30%', + render: (errorType: string, item: Ping) => ( + + ), + }, + ] + : []), + ...(monitorType === MONITOR_TYPES.BROWSER + ? [ + { + field: 'monitor.status', + align: 'left', + name: i18n.translate('xpack.uptime.pingList.columns.failedStep', { + defaultMessage: 'Failed step', + }), + render: (_timestamp: string, item: Ping) => ( + + ), + }, + ] + : []), + // Only add this column is there is any status present in list + ...(hasStatus + ? [ + { + field: 'http.response.status_code', + align: 'right', + name: {RES_CODE_LABEL}, + render: (statusCode: string) => , + }, + ] + : []), + ...(monitorType !== MONITOR_TYPES.BROWSER + ? [ + { + align: 'right', + width: '24px', + isExpander: true, + render: (item: Ping) => ( + + ), + }, + ] + : []), + ]; + + const getRowProps = (item: Ping) => { + if (monitorType !== MONITOR_TYPES.BROWSER) { + return {}; + } + const { monitor } = item; + return { + height: '85px', + 'data-test-subj': `row-${monitor.check_group}`, + onClick: (evt: MouseEvent) => { + const targetElem = evt.target as HTMLElement; + + // we dont want to capture image click event + if (targetElem.tagName !== 'IMG' && targetElem.tagName !== 'path') { + history.push(`/journey/${monitor.check_group}/steps`); + } + }, + }; + }; + + return ( + + ); +} diff --git a/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar.tsx b/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar.tsx index cb5aff6ecd6973..6321688d92c4cb 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar.tsx +++ b/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar.tsx @@ -7,25 +7,36 @@ import React, { useCallback, useContext, useState, useEffect } from 'react'; import { useParams, Redirect } from 'react-router-dom'; -import { EuiFlexGroup, EuiFlexItem, EuiButton, EuiButtonEmpty } from '@elastic/eui'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiButton, + EuiButtonEmpty, + EuiText, + EuiToolTip, +} from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FETCH_STATUS, useFetcher } from '../../../../../observability/public'; import { useKibana } from '../../../../../../../src/plugins/kibana_react/public'; -import { MONITOR_MANAGEMENT } from '../../../../common/constants'; +import { MONITOR_MANAGEMENT_ROUTE } from '../../../../common/constants'; import { UptimeSettingsContext } from '../../../contexts'; import { setMonitor } from '../../../state/api'; import { SyntheticsMonitor } from '../../../../common/runtime_types'; +import { euiStyled } from '../../../../../../../src/plugins/kibana_react/common'; +import { TestRun } from '../test_now_mode/test_now_mode'; -interface Props { +export interface ActionBarProps { monitor: SyntheticsMonitor; isValid: boolean; + testRun?: TestRun; onSave?: () => void; + onTestNow?: () => void; } -export const ActionBar = ({ monitor, isValid, onSave }: Props) => { +export const ActionBar = ({ monitor, isValid, onSave, onTestNow, testRun }: ActionBarProps) => { const { monitorId } = useParams<{ monitorId: string }>(); const { basePath } = useContext(UptimeSettingsContext); @@ -81,22 +92,42 @@ export const ActionBar = ({ monitor, isValid, onSave }: Props) => { }, [data, status, notifications.toasts, isSaving, isValid, monitorId]); return status === FETCH_STATUS.SUCCESS ? ( - + ) : ( - {!isValid && hasBeenSubmitted && VALIDATION_ERROR_LABEL} + + {!isValid && hasBeenSubmitted && VALIDATION_ERROR_LABEL} + + {onTestNow && ( + + + onTestNow()} + disabled={!isValid} + > + {testRun ? RE_RUN_TEST_LABEL : RUN_TEST_LABEL} + + + + )} + {DISCARD_LABEL} + { ); }; +const WarningText = euiStyled(EuiText)` + box-shadow: -4px 0 ${(props) => props.theme.eui.euiColorWarning}; + padding-left: 8px; +`; + const DISCARD_LABEL = i18n.translate('xpack.uptime.monitorManagement.discardLabel', { defaultMessage: 'Discard', }); @@ -128,6 +164,14 @@ const UPDATE_MONITOR_LABEL = i18n.translate('xpack.uptime.monitorManagement.upda defaultMessage: 'Update monitor', }); +const RUN_TEST_LABEL = i18n.translate('xpack.uptime.monitorManagement.runTest', { + defaultMessage: 'Run test', +}); + +const RE_RUN_TEST_LABEL = i18n.translate('xpack.uptime.monitorManagement.reRunTest', { + defaultMessage: 'Re-run test', +}); + const VALIDATION_ERROR_LABEL = i18n.translate('xpack.uptime.monitorManagement.validationError', { defaultMessage: 'Your monitor has errors. Please fix them before saving.', }); @@ -153,3 +197,7 @@ const MONITOR_FAILURE_LABEL = i18n.translate( defaultMessage: 'Monitor was unable to be saved. Please try again later.', } ); + +const TEST_NOW_DESCRIPTION = i18n.translate('xpack.uptime.testRun.description', { + defaultMessage: 'Test your monitor and verify the results before saving', +}); diff --git a/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar_portal.tsx b/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar_portal.tsx index 097bd48e966b16..b6a80ec90893c1 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar_portal.tsx +++ b/x-pack/plugins/uptime/public/components/monitor_management/action_bar/action_bar_portal.tsx @@ -9,17 +9,9 @@ import React from 'react'; import { InPortal } from 'react-reverse-portal'; import { ActionBarPortalNode } from '../../../pages/monitor_management/action_bar_portal_node'; -import { SyntheticsMonitor } from '../../../../common/runtime_types'; +import { ActionBar, ActionBarProps } from './action_bar'; -import { ActionBar } from './action_bar'; - -interface Props { - monitor: SyntheticsMonitor; - isValid: boolean; - onSave?: () => void; -} - -export const ActionBarPortal = (props: Props) => { +export const ActionBarPortal = (props: ActionBarProps) => { return ( diff --git a/x-pack/plugins/uptime/public/components/monitor_management/monitor_config/monitor_config.tsx b/x-pack/plugins/uptime/public/components/monitor_management/monitor_config/monitor_config.tsx index 7536a76b315a87..bcade36929805c 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/monitor_config/monitor_config.tsx +++ b/x-pack/plugins/uptime/public/components/monitor_management/monitor_config/monitor_config.tsx @@ -5,8 +5,10 @@ * 2.0. */ -import React from 'react'; +import React, { useState } from 'react'; +import { EuiResizableContainer } from '@elastic/eui'; +import { v4 as uuidv4 } from 'uuid'; import { defaultConfig, usePolicyConfigContext } from '../../fleet_package/contexts'; import { usePolicy } from '../../fleet_package/hooks/use_policy'; @@ -14,11 +16,11 @@ import { validate } from '../validation'; import { ActionBarPortal } from '../action_bar/action_bar_portal'; import { useFormatMonitor } from '../hooks/use_format_monitor'; import { MonitorFields } from './monitor_fields'; +import { TestNowMode, TestRun } from '../test_now_mode/test_now_mode'; +import { MonitorFields as MonitorFieldsType } from '../../../../common/runtime_types'; export const MonitorConfig = () => { const { monitorType } = usePolicyConfigContext(); - /* TODO - Use Effect to make sure the package/index templates are loaded. Wait for it to load before showing view - * then show error message if it fails */ /* raw policy config compatible with the UI. Save this to saved objects */ const policyConfig = usePolicy(); @@ -27,18 +29,54 @@ export const MonitorConfig = () => { This type of helper should ideally be moved to task manager where we are syncing the config. We can process validation (isValid) and formatting for heartbeat (formattedMonitor) separately We don't need to save the heartbeat compatible version in saved objects */ - const { isValid } = useFormatMonitor({ + const { isValid, config } = useFormatMonitor({ monitorType, validate, config: policyConfig[monitorType], defaultConfig: defaultConfig[monitorType], }); + const [testRun, setTestRun] = useState(); + + const onTestNow = () => { + if (config) { + setTestRun({ id: uuidv4(), monitor: config as MonitorFieldsType }); + } + }; + return ( <> - + + {(EuiResizablePanel, EuiResizableButton) => ( + <> + + + + + + + + {config && } + + + )} + - + ); }; diff --git a/x-pack/plugins/uptime/public/components/monitor_management/monitor_config/monitor_name_location.tsx b/x-pack/plugins/uptime/public/components/monitor_management/monitor_config/monitor_name_location.tsx index f3e04a0040418e..11c7862b32cc5a 100644 --- a/x-pack/plugins/uptime/public/components/monitor_management/monitor_config/monitor_name_location.tsx +++ b/x-pack/plugins/uptime/public/components/monitor_management/monitor_config/monitor_name_location.tsx @@ -50,6 +50,7 @@ export const MonitorNameAndLocation = ({ validate }: Props) => { fullWidth={true} name="name" onChange={(event) => setName(event.target.value)} + data-test-subj="monitorManagementMonitorName" /> { } if (status === FETCH_STATUS.FAILURE) { notifications.toasts.danger({ - title:

{MONITOR_DELETE_FAILURE_LABEL}

, + title:

{MONITOR_DELETE_FAILURE_LABEL}

, toastLifeTimeMs: 3000, }); } else if (status === FETCH_STATUS.SUCCESS) { setRefresh(true); notifications.toasts.success({ - title:

{MONITOR_DELETE_SUCCESS_LABEL}

, + title:

{MONITOR_DELETE_SUCCESS_LABEL}

, toastLifeTimeMs: 3000, }); } @@ -61,6 +61,7 @@ export const Actions = ({ id, setRefresh }: Props) => { iconType="pencil" href={`${basePath}/app/uptime/edit-monitor/${Buffer.from(id, 'utf8').toString('base64')}`} aria-label={EDIT_MONITOR_LABEL} + data-test-subj="monitorManagementEditMonitor" />
@@ -71,6 +72,7 @@ export const Actions = ({ id, setRefresh }: Props) => { iconType="trash" onClick={handleDelete} aria-label={DELETE_MONITOR_LABEL} + data-test-subj="monitorManagementDeleteMonitor" /> )} diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/browser_test_results.test.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/browser_test_results.test.tsx new file mode 100644 index 00000000000000..727dfa4b9ec31a --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/browser_test_results.test.tsx @@ -0,0 +1,236 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { screen } from '@testing-library/react'; +import { render } from '../../../../lib/helper/rtl_helpers'; +import { kibanaService } from '../../../../state/kibana_service'; +import * as runOnceHooks from './use_browser_run_once_monitors'; +import { BrowserTestRunResult } from './browser_test_results'; +import { fireEvent } from '@testing-library/dom'; + +describe('BrowserTestRunResult', function () { + it('should render properly', async function () { + render(); + expect(await screen.findByText('Test result')).toBeInTheDocument(); + expect(await screen.findByText('0 steps completed')).toBeInTheDocument(); + const dataApi = (kibanaService.core as any).data.search; + + expect(dataApi.search).toHaveBeenCalledTimes(1); + expect(dataApi.search).toHaveBeenLastCalledWith( + { + params: { + body: { + query: { + bool: { + filter: [ + { term: { config_id: 'test-id' } }, + { + terms: { + 'synthetics.type': ['heartbeat/summary', 'journey/start'], + }, + }, + ], + }, + }, + sort: [{ '@timestamp': 'desc' }], + }, + index: 'heartbeat-8*,heartbeat-7*,synthetics-*', + size: 10, + }, + }, + {} + ); + }); + + it('should displays results', async function () { + jest.spyOn(runOnceHooks, 'useBrowserRunOnceMonitors').mockReturnValue({ + data, + stepListData: { steps: [stepEndDoc._source] } as any, + loading: false, + journeyStarted: true, + summaryDoc: summaryDoc._source, + stepEnds: [stepEndDoc._source], + }); + + render(); + + expect(await screen.findByText('Test result')).toBeInTheDocument(); + + expect(await screen.findByText('COMPLETED')).toBeInTheDocument(); + expect(await screen.findByText('Took 22 seconds')).toBeInTheDocument(); + expect(await screen.findByText('1 step completed')).toBeInTheDocument(); + + fireEvent.click(await screen.findByTestId('expandResults')); + + expect(await screen.findByText('Go to https://www.elastic.co/')).toBeInTheDocument(); + expect(await screen.findByText('21.8 seconds')).toBeInTheDocument(); + }); +}); + +const journeyStartDoc = { + _index: '.ds-synthetics-browser-default-2022.01.11-000002', + _id: 'J1pLU34B6BrWThBwS4Fb', + _score: null, + _source: { + agent: { + name: 'job-78df368e085a796b-x9cbm', + id: 'df497635-644b-43ba-97a6-2f4dce1ea93b', + type: 'heartbeat', + ephemeral_id: 'e24d9e65-ae5f-4088-9a79-01dd504a1403', + version: '8.0.0', + }, + package: { name: '@elastic/synthetics', version: '1.0.0-beta.17' }, + os: { platform: 'linux' }, + synthetics: { + package_version: '1.0.0-beta.17', + journey: { name: 'inline', id: 'inline' }, + payload: { + source: + 'async ({ page, context, browser, params }) => {\n scriptFn.apply(null, [core_1.step, page, context, browser, params, expect_1.expect]);\n }', + params: {}, + }, + index: 0, + type: 'journey/start', + }, + monitor: { + name: 'Test Browser monitor - inline', + id: '3e11e70a-41b9-472c-a465-7c9b76b1a085-inline', + timespan: { lt: '2022-01-13T11:58:49.463Z', gte: '2022-01-13T11:55:49.463Z' }, + check_group: 'c01406bf-7467-11ec-9858-aa31996e0afe', + type: 'browser', + }, + '@timestamp': '2022-01-13T11:55:49.462Z', + ecs: { version: '8.0.0' }, + config_id: '3e11e70a-41b9-472c-a465-7c9b76b1a085', + data_stream: { namespace: 'default', type: 'synthetics', dataset: 'browser' }, + run_once: true, + event: { + agent_id_status: 'auth_metadata_missing', + ingested: '2022-01-13T11:55:50Z', + dataset: 'browser', + }, + }, + sort: [1642074949462], +}; + +const summaryDoc: any = { + _index: '.ds-synthetics-browser-default-2022.01.11-000002', + _id: 'Ix5LU34BPllLwAMpqlfi', + _score: null, + _source: { + summary: { up: 1, down: 0 }, + agent: { + name: 'job-78df368e085a796b-x9cbm', + id: 'df497635-644b-43ba-97a6-2f4dce1ea93b', + type: 'heartbeat', + ephemeral_id: 'e24d9e65-ae5f-4088-9a79-01dd504a1403', + version: '8.0.0', + }, + synthetics: { + journey: { name: 'inline', id: 'inline', tags: null }, + type: 'heartbeat/summary', + }, + monitor: { + duration: { us: 21754383 }, + name: 'Test Browser monitor - inline', + check_group: 'c01406bf-7467-11ec-9858-aa31996e0afe', + id: '3e11e70a-41b9-472c-a465-7c9b76b1a085-inline', + timespan: { lt: '2022-01-13T11:59:13.567Z', gte: '2022-01-13T11:56:13.567Z' }, + type: 'browser', + status: 'up', + }, + url: { + path: '/', + scheme: 'https', + port: 443, + domain: 'www.elastic.co', + full: 'https://www.elastic.co/', + }, + '@timestamp': '2022-01-13T11:56:11.217Z', + ecs: { version: '8.0.0' }, + config_id: '3e11e70a-41b9-472c-a465-7c9b76b1a085', + data_stream: { namespace: 'default', type: 'synthetics', dataset: 'browser' }, + run_once: true, + event: { + agent_id_status: 'auth_metadata_missing', + ingested: '2022-01-13T11:56:14Z', + dataset: 'browser', + }, + }, + sort: [1642074971217], +}; + +const stepEndDoc: any = { + _index: '.ds-synthetics-browser-default-2022.01.11-000002', + _id: 'M1pLU34B6BrWThBwoIGk', + _score: null, + _source: { + agent: { + name: 'job-78df368e085a796b-x9cbm', + id: 'df497635-644b-43ba-97a6-2f4dce1ea93b', + ephemeral_id: 'e24d9e65-ae5f-4088-9a79-01dd504a1403', + type: 'heartbeat', + version: '8.0.0', + }, + package: { name: '@elastic/synthetics', version: '1.0.0-beta.17' }, + os: { platform: 'linux' }, + synthetics: { + package_version: '1.0.0-beta.17', + journey: { name: 'inline', id: 'inline' }, + payload: { + source: "async () => {\n await page.goto('https://www.elastic.co/');\n}", + url: 'https://www.elastic.co/', + status: 'succeeded', + }, + index: 12, + step: { + duration: { us: 21751370 }, + name: 'Go to https://www.elastic.co/', + index: 1, + status: 'succeeded', + }, + type: 'step/end', + }, + monitor: { + name: 'Test Browser monitor - inline', + id: '3e11e70a-41b9-472c-a465-7c9b76b1a085-inline', + timespan: { lt: '2022-01-13T11:59:11.250Z', gte: '2022-01-13T11:56:11.250Z' }, + check_group: 'c01406bf-7467-11ec-9858-aa31996e0afe', + type: 'browser', + }, + url: { + path: '/', + scheme: 'https', + port: 443, + domain: 'www.elastic.co', + full: 'https://www.elastic.co/', + }, + '@timestamp': '2022-01-13T11:56:11.216Z', + ecs: { version: '8.0.0' }, + config_id: '3e11e70a-41b9-472c-a465-7c9b76b1a085', + data_stream: { namespace: 'default', type: 'synthetics', dataset: 'browser' }, + run_once: true, + event: { + agent_id_status: 'auth_metadata_missing', + ingested: '2022-01-13T11:56:12Z', + dataset: 'browser', + }, + }, + sort: [1642074971216], +}; + +const data: any = { + took: 4, + timed_out: false, + _shards: { total: 8, successful: 8, skipped: 2, failed: 0 }, + hits: { + total: 3, + max_score: null, + hits: [journeyStartDoc, stepEndDoc, summaryDoc], + }, +}; diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/browser_test_results.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/browser_test_results.tsx new file mode 100644 index 00000000000000..d5dd333f7f6c70 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/browser_test_results.tsx @@ -0,0 +1,89 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as React from 'react'; +import { EuiAccordion, EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import styled from 'styled-components'; +import { StepsList } from '../../../synthetics/check_steps/steps_list'; +import { JourneyStep } from '../../../../../common/runtime_types'; +import { useBrowserRunOnceMonitors } from './use_browser_run_once_monitors'; +import { TestResultHeader } from '../test_result_header'; + +interface Props { + monitorId: string; +} +export const BrowserTestRunResult = ({ monitorId }: Props) => { + const { data, loading, stepEnds, journeyStarted, summaryDoc, stepListData } = + useBrowserRunOnceMonitors({ + monitorId, + }); + + const hits = data?.hits.hits; + const doc = hits?.[0]?._source as JourneyStep; + + const buttonContent = ( +
+ + +

+ + {i18n.translate('xpack.uptime.monitorManagement.stepCompleted', { + defaultMessage: + '{stepCount, number} {stepCount, plural, one {step} other {steps}} completed', + values: { + stepCount: stepEnds.length, + }, + })} + +

+
+
+ ); + + return ( + + {summaryDoc && stepEnds.length === 0 && {FAILED_TO_RUN}} + {!summaryDoc && journeyStarted && stepEnds.length === 0 && {LOADING_STEPS}} + {stepEnds.length > 0 && stepListData?.steps && ( + + )} + + ); +}; + +const AccordionWrapper = styled(EuiAccordion)` + .euiAccordion__buttonContent { + width: 100%; + } +`; + +const FAILED_TO_RUN = i18n.translate('xpack.uptime.monitorManagement.failedRun', { + defaultMessage: 'Failed to run steps', +}); + +const LOADING_STEPS = i18n.translate('xpack.uptime.monitorManagement.loadingSteps', { + defaultMessage: 'Loading steps...', +}); diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/use_browser_run_once_monitors.test.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/use_browser_run_once_monitors.test.tsx new file mode 100644 index 00000000000000..3a126e6f69e999 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/use_browser_run_once_monitors.test.tsx @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react-hooks'; +import { useBrowserRunOnceMonitors } from './use_browser_run_once_monitors'; +import * as resultHook from './use_browser_run_once_monitors'; +import { WrappedHelper } from '../../../../lib/helper/rtl_helpers'; + +describe('useBrowserRunOnceMonitors', function () { + it('should return results as expected', function () { + jest.spyOn(resultHook, 'useBrowserEsResults').mockReturnValue({ + loading: false, + data: { + took: 4, + timed_out: false, + _shards: { total: 8, successful: 8, skipped: 2, failed: 0 }, + hits: { + total: { value: 3, relation: 'eq' }, + max_score: null, + hits: [], + }, + }, + }); + + const { result } = renderHook(() => useBrowserRunOnceMonitors({ monitorId: 'test-id' }), { + wrapper: WrappedHelper, + }); + + expect(result.current).toEqual({ + data: undefined, + journeyStarted: false, + loading: true, + stepEnds: [], + stepListData: undefined, + summaryDoc: undefined, + }); + }); +}); diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/use_browser_run_once_monitors.ts b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/use_browser_run_once_monitors.ts new file mode 100644 index 00000000000000..41f2b1cbe11f81 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/browser/use_browser_run_once_monitors.ts @@ -0,0 +1,108 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useSelector } from 'react-redux'; +import { useEffect, useState } from 'react'; +import { selectDynamicSettings } from '../../../../state/selectors'; +import { JourneyStep } from '../../../../../common/runtime_types'; +import { createEsParams, useEsSearch, useFetcher } from '../../../../../../observability/public'; +import { useTickTick } from '../use_tick_tick'; +import { fetchJourneySteps } from '../../../../state/api/journey'; +import { isStepEnd } from '../../../synthetics/check_steps/steps_list'; + +export const useBrowserEsResults = ({ + monitorId, + lastRefresh, +}: { + monitorId: string; + lastRefresh: number; +}) => { + const { settings } = useSelector(selectDynamicSettings); + + return useEsSearch( + createEsParams({ + index: settings?.heartbeatIndices, + body: { + sort: [ + { + '@timestamp': 'desc', + }, + ], + query: { + bool: { + filter: [ + { + term: { + config_id: monitorId, + }, + }, + { + terms: { + 'synthetics.type': ['heartbeat/summary', 'journey/start'], + }, + }, + ], + }, + }, + }, + size: 10, + }), + [monitorId, settings?.heartbeatIndices, lastRefresh], + { name: 'TestRunData' } + ); +}; + +export const useBrowserRunOnceMonitors = ({ monitorId }: { monitorId: string }) => { + const { refreshTimer, lastRefresh } = useTickTick(); + + const [checkGroupId, setCheckGroupId] = useState(''); + const [stepEnds, setStepEnds] = useState([]); + const [summary, setSummary] = useState(); + + const { data, loading } = useBrowserEsResults({ monitorId, lastRefresh }); + + const { data: stepListData } = useFetcher(() => { + if (checkGroupId) { + return fetchJourneySteps({ + checkGroup: checkGroupId, + }); + } + return Promise.resolve(null); + }, [lastRefresh]); + + useEffect(() => { + const hits = data?.hits.hits; + + if (hits && hits.length > 0) { + hits?.forEach((hit) => { + const doc = hit._source as JourneyStep; + if (doc.synthetics?.type === 'journey/start') { + setCheckGroupId(doc.monitor.check_group); + } + if (doc.synthetics?.type === 'heartbeat/summary') { + setSummary(doc); + clearInterval(refreshTimer); + } + }); + } + }, [data, refreshTimer]); + + useEffect(() => { + if (stepListData?.steps && stepListData?.steps.length > 0) { + setStepEnds(stepListData.steps.filter(isStepEnd)); + } + }, [stepListData]); + + return { + data, + stepEnds, + loading, + stepListData, + summaryDoc: summary, + journeyStarted: Boolean(checkGroupId), + }; +}; diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/simple_test_results.test.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/simple_test_results.test.tsx new file mode 100644 index 00000000000000..99ed9ac43db1b2 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/simple_test_results.test.tsx @@ -0,0 +1,203 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { screen } from '@testing-library/react'; +import { render } from '../../../../lib/helper/rtl_helpers'; +import { SimpleTestResults } from './simple_test_results'; +import { kibanaService } from '../../../../state/kibana_service'; +import * as runOnceHooks from './use_simple_run_once_monitors'; +import { Ping } from '../../../../../common/runtime_types'; + +describe('SimpleTestResults', function () { + it('should render properly', async function () { + render(); + expect(await screen.findByText('Test result')).toBeInTheDocument(); + const dataApi = (kibanaService.core as any).data.search; + + expect(dataApi.search).toHaveBeenCalledTimes(1); + expect(dataApi.search).toHaveBeenLastCalledWith( + { + params: { + body: { + query: { + bool: { + filter: [{ term: { config_id: 'test-id' } }, { exists: { field: 'summary' } }], + }, + }, + sort: [{ '@timestamp': 'desc' }], + }, + index: 'heartbeat-8*,heartbeat-7*,synthetics-*', + size: 10, + }, + }, + {} + ); + }); + + it('should displays results', async function () { + const doc = data.hits.hits[0]; + jest.spyOn(runOnceHooks, 'useSimpleRunOnceMonitors').mockReturnValue({ + data: data as any, + summaryDoc: { + ...(doc._source as unknown as Ping), + timestamp: (doc._source as unknown as Record)?.['@timestamp'], + docId: doc._id, + }, + loading: false, + }); + + render(); + + expect(await screen.findByText('Test result')).toBeInTheDocument(); + + expect(await screen.findByText('COMPLETED')).toBeInTheDocument(); + expect(await screen.findByText('191 ms')).toBeInTheDocument(); + expect(await screen.findByText('151.101.2.217')).toBeInTheDocument(); + expect(await screen.findByText('Checked Jan 12, 2022 11:54:27 AM')).toBeInTheDocument(); + expect(await screen.findByText('Took 191 ms')).toBeInTheDocument(); + + screen.debug(); + }); +}); + +const data = { + took: 201, + timed_out: false, + _shards: { total: 8, successful: 8, skipped: 0, failed: 0 }, + hits: { + total: 1, + max_score: null, + hits: [ + { + _index: '.ds-synthetics-http-default-2022.01.11-000002', + _id: '6h42T34BPllLwAMpWCjo', + _score: null, + _source: { + tcp: { rtt: { connect: { us: 11480 } } }, + summary: { up: 1, down: 0 }, + agent: { + name: 'job-2b730ffa8811ff-knvmz', + id: 'a3ed3007-4261-40a9-ad08-7a8384cce7f5', + type: 'heartbeat', + ephemeral_id: '7ffe97e3-15a3-4d76-960e-8f0488998e3c', + version: '8.0.0', + }, + resolve: { rtt: { us: 46753 }, ip: '151.101.2.217' }, + monitor: { + duration: { us: 191528 }, + ip: '151.101.2.217', + name: 'Elastic HTTP', + check_group: '4d7fd600-73c8-11ec-b035-2621090844ff', + id: 'e5a3a871-b5c3-49cf-a798-3860028e7a6b', + timespan: { lt: '2022-01-12T16:57:27.443Z', gte: '2022-01-12T16:54:27.443Z' }, + type: 'http', + status: 'up', + }, + url: { + scheme: 'https', + port: 443, + domain: 'www.elastic.co', + full: 'https://www.elastic.co', + }, + '@timestamp': '2022-01-12T16:54:27.252Z', + ecs: { version: '8.0.0' }, + config_id: 'e5a3a871-b5c3-49cf-a798-3860028e7a6b', + data_stream: { namespace: 'default', type: 'synthetics', dataset: 'http' }, + run_once: true, + http: { + rtt: { + response_header: { us: 61231 }, + total: { us: 144630 }, + write_request: { us: 93 }, + content: { us: 25234 }, + validate: { us: 86466 }, + }, + response: { + headers: { + 'X-Dns-Prefetch-Control': 'off', + Server: 'my-server', + 'Access-Control-Allow-Origin': '*', + 'X-Timer': 'S1642006467.362040,VS0,VE51', + 'Referrer-Policy': 'strict-origin-when-cross-origin', + 'X-Frame-Options': 'SAMEORIGIN', + 'Strict-Transport-Security': 'max-age=0', + Etag: '"29d46-xv8YFxCD32Ncbzip9bXU5q9QSvg"', + 'X-Served-By': 'cache-sea4462-SEA, cache-pwk4941-PWK', + 'Content-Security-Policy': + "frame-ancestors 'self' https://*.elastic.co https://elasticsandbox.docebosaas.com https://elastic.docebosaas.com https://www.gather.town;", + 'Set-Cookie': + 'euid=2b70f3d5-56bc-49f1-a64f-50d352914207; Expires=Tuesday, 19 January 2038 01:00:00 GMT; Path=/; Domain=.elastic.co;', + 'X-Change-Language': 'true', + 'Content-Length': '171334', + Age: '1591', + 'Content-Type': 'text/html; charset=utf-8', + 'X-Powered-By': 'Next.js', + 'X-Cache': 'HIT, MISS', + 'X-Content-Type-Options': 'nosniff', + 'X-Download-Options': 'noopen', + Date: 'Wed, 12 Jan 2022 16:54:27 GMT', + Via: '1.1 varnish, 1.1 varnish', + 'Accept-Ranges': 'bytes', + 'Cache-Control': 'max-age=86400', + 'X-Xss-Protection': '1; mode=block', + Vary: 'Accept-Language, X-Change-Language, Accept-Encoding', + 'Elastic-Vi': '2b70f3d5-56bc-49f1-a64f-50d352914207', + 'X-Cache-Hits': '425, 0', + }, + status_code: 200, + mime_type: 'text/html; charset=utf-8', + body: { + bytes: 171334, + hash: '29e5b1a1949dc4d253399874b161049030639d70c5164a5235e039bb4b95f9fd', + }, + }, + }, + tls: { + established: true, + cipher: 'ECDHE-RSA-AES-128-GCM-SHA256', + certificate_not_valid_before: '2021-11-26T19:42:12.000Z', + server: { + x509: { + not_after: '2022-12-28T19:42:11.000Z', + public_key_exponent: 65537, + not_before: '2021-11-26T19:42:12.000Z', + subject: { + distinguished_name: 'CN=www.elastic.co', + common_name: 'www.elastic.co', + }, + public_key_algorithm: 'RSA', + signature_algorithm: 'SHA256-RSA', + public_key_size: 2048, + serial_number: '2487880865947729006738430997169012636', + issuer: { + distinguished_name: + 'CN=GlobalSign Atlas R3 DV TLS CA H2 2021,O=GlobalSign nv-sa,C=BE', + common_name: 'GlobalSign Atlas R3 DV TLS CA H2 2021', + }, + }, + hash: { + sha1: '21099729d121d9707ca6c1b642032a97ea2dcb74', + sha256: '55715c58c7e0939aa9b8989df59082ce33c1b274678e7913fd0c269f33103b02', + }, + }, + rtt: { handshake: { us: 46409 } }, + version: '1.2', + certificate_not_valid_after: '2022-12-28T19:42:11.000Z', + version_protocol: 'tls', + }, + event: { + agent_id_status: 'auth_metadata_missing', + ingested: '2022-01-12T16:54:28Z', + dataset: 'http', + }, + }, + sort: [1642006467252], + }, + ], + }, +}; diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/simple_test_results.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/simple_test_results.tsx new file mode 100644 index 00000000000000..97097285d0bbc9 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/simple_test_results.tsx @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useEffect, useState } from 'react'; +import { useSimpleRunOnceMonitors } from './use_simple_run_once_monitors'; +import { Ping } from '../../../../../common/runtime_types'; +import { PingListTable } from '../../../monitor/ping_list/ping_list_table'; +import { TestResultHeader } from '../test_result_header'; + +interface Props { + monitorId: string; +} +export function SimpleTestResults({ monitorId }: Props) { + const [summaryDocs, setSummaryDocs] = useState([]); + const { summaryDoc, loading } = useSimpleRunOnceMonitors({ monitorId }); + + useEffect(() => { + if (summaryDoc) { + setSummaryDocs((prevState) => [summaryDoc, ...prevState]); + } + }, [summaryDoc]); + + return ( + <> + + {summaryDoc && } + + ); +} diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/use_simple_run_once_monitors.ts b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/use_simple_run_once_monitors.ts new file mode 100644 index 00000000000000..816f9b019c45a9 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/simple/use_simple_run_once_monitors.ts @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useSelector } from 'react-redux'; +import { useMemo } from 'react'; +import { selectDynamicSettings } from '../../../../state/selectors'; +import { Ping } from '../../../../../common/runtime_types'; +import { createEsParams, useEsSearch } from '../../../../../../observability/public'; +import { useTickTick } from '../use_tick_tick'; + +export const useSimpleRunOnceMonitors = ({ monitorId }: { monitorId: string }) => { + const { refreshTimer, lastRefresh } = useTickTick(); + + const { settings } = useSelector(selectDynamicSettings); + + const { data, loading } = useEsSearch( + createEsParams({ + index: settings?.heartbeatIndices, + body: { + sort: [ + { + '@timestamp': 'desc', + }, + ], + query: { + bool: { + filter: [ + { + term: { + config_id: monitorId, + }, + }, + { + exists: { + field: 'summary', + }, + }, + ], + }, + }, + }, + size: 10, + }), + [monitorId, settings?.heartbeatIndices, lastRefresh], + { name: 'TestRunData' } + ); + + return useMemo(() => { + const doc = data?.hits.hits?.[0]; + + if (doc) { + clearInterval(refreshTimer); + return { + data, + loading, + summaryDoc: { + ...(doc._source as Ping), + timestamp: (doc._source as Record)?.['@timestamp'], + docId: doc._id, + }, + }; + } + + return { + data, + loading, + summaryDoc: null, + }; + }, [data, loading, refreshTimer]); +}; diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_now_mode.test.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_now_mode.test.tsx new file mode 100644 index 00000000000000..849f1215614d06 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_now_mode.test.tsx @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { screen } from '@testing-library/react'; +import { render } from '../../../lib/helper/rtl_helpers'; +import { TestNowMode } from './test_now_mode'; +import { kibanaService } from '../../../state/kibana_service'; +import { MonitorFields } from '../../../../common/runtime_types'; + +describe('TestNowMode', function () { + it('should render properly', async function () { + render( + + ); + expect(await screen.findByText('Test result')).toBeInTheDocument(); + expect(await screen.findByText('PENDING')).toBeInTheDocument(); + + expect(await screen.findByText('0 steps completed')).toBeInTheDocument(); + + expect(kibanaService.core.http.post).toHaveBeenCalledTimes(1); + + expect(kibanaService.core.http.post).toHaveBeenLastCalledWith( + expect.stringContaining('/internal/uptime/service/monitors/run_once/'), + { body: '{"type":"browser"}', method: 'POST' } + ); + }); +}); diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_now_mode.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_now_mode.tsx new file mode 100644 index 00000000000000..43d4e0e6e9d2a7 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_now_mode.tsx @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useEffect } from 'react'; +import { i18n } from '@kbn/i18n'; +import { + EuiCallOut, + EuiFlexGroup, + EuiFlexItem, + EuiLoadingSpinner, + EuiPanel, + EuiSpacer, +} from '@elastic/eui'; +import { TestRunResult } from './test_run_results'; +import { MonitorFields } from '../../../../common/runtime_types'; +import { useFetcher } from '../../../../../observability/public'; +import { runOnceMonitor } from '../../../state/api'; +import { kibanaService } from '../../../state/kibana_service'; + +export interface TestRun { + id: string; + monitor: MonitorFields; +} + +export function TestNowMode({ testRun }: { testRun?: TestRun }) { + const { data, loading: isPushing } = useFetcher(() => { + if (testRun) { + return runOnceMonitor({ + monitor: testRun.monitor, + id: testRun.id, + }); + } + return new Promise((resolve) => resolve(null)); + }, [testRun]); + + useEffect(() => { + const errors = (data as { errors: Array<{ error: Error }> })?.errors; + + if (errors?.length > 0) { + errors.forEach(({ error }) => { + kibanaService.toasts.addError(error, { title: PushErrorLabel }); + }); + } + }, [data]); + + const errors = (data as { errors?: Array<{ error: Error }> })?.errors; + + const hasErrors = errors && errors?.length > 0; + + if (!testRun) { + return null; + } + + return ( + + {isPushing && ( + + {PushingLabel} + + )} + + {hasErrors && !isPushing && } + + {testRun && !hasErrors && !isPushing && ( + + + + + + )} + + + ); +} + +const PushingLabel = i18n.translate('xpack.uptime.testRun.pushing.description', { + defaultMessage: 'Pushing the monitor to service...', +}); + +const PushError = i18n.translate('xpack.uptime.testRun.pushError', { + defaultMessage: 'Failed to push the monitor to service.', +}); + +const PushErrorLabel = i18n.translate('xpack.uptime.testRun.pushErrorLabel', { + defaultMessage: 'Push error', +}); diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_result_header.test.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_result_header.test.tsx new file mode 100644 index 00000000000000..07b2d59e0751f8 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_result_header.test.tsx @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { screen } from '@testing-library/react'; +import { render } from '../../../lib/helper/rtl_helpers'; +import { TestResultHeader } from './test_result_header'; + +describe('TestResultHeader', function () { + it('should render properly', async function () { + render(); + expect(await screen.findByText('Test result')).toBeInTheDocument(); + expect(await screen.findByText('PENDING')).toBeInTheDocument(); + }); + + it('should render in progress state', async function () { + render(); + + expect(await screen.findByText('Test result')).toBeInTheDocument(); + expect(await screen.findByText('IN PROGRESS')).toBeInTheDocument(); + }); + + it('should render completed state', async function () { + render( + + ); + expect(await screen.findByText('Test result')).toBeInTheDocument(); + expect(await screen.findByText('COMPLETED')).toBeInTheDocument(); + expect(await screen.findByText('Took 1 ms')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_result_header.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_result_header.tsx new file mode 100644 index 00000000000000..51b120c3c7e5ed --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_result_header.tsx @@ -0,0 +1,107 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiBadge, + EuiFlexGroup, + EuiFlexItem, + EuiLink, + EuiLoadingSpinner, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import * as React from 'react'; +import { formatDuration } from '../../monitor/ping_list/ping_list'; +import { JourneyStep, Ping } from '../../../../common/runtime_types'; +import { useUptimeSettingsContext } from '../../../contexts/uptime_settings_context'; + +interface Props { + doc?: JourneyStep; + summaryDocs?: Ping[] | JourneyStep[] | null; + journeyStarted?: boolean; + title?: string; + isCompleted: boolean; +} + +export function TestResultHeader({ doc, title, summaryDocs, journeyStarted, isCompleted }: Props) { + const { basePath } = useUptimeSettingsContext(); + let duration = 0; + if (summaryDocs && summaryDocs.length > 0) { + summaryDocs.forEach((sDoc) => { + duration += sDoc.monitor.duration!.us; + }); + } + + return ( + + + +

{title ?? TEST_RESULT}

+
+
+ + {isCompleted ? ( + + + {COMPLETED_LABEL} + + + + {i18n.translate('xpack.uptime.monitorManagement.timeTaken', { + defaultMessage: 'Took {timeTaken}', + values: { timeTaken: formatDuration(duration) }, + })} + + + + ) : ( + + + + {journeyStarted ? IN_PROGRESS : PENDING_LABEL} + + + + + + + )} + + {doc && ( + + + {VIEW_DETAILS} + + + )} +
+ ); +} + +const PENDING_LABEL = i18n.translate('xpack.uptime.monitorManagement.pending', { + defaultMessage: 'PENDING', +}); + +const TEST_RESULT = i18n.translate('xpack.uptime.monitorManagement.testResult', { + defaultMessage: 'Test result', +}); + +const COMPLETED_LABEL = i18n.translate('xpack.uptime.monitorManagement.completed', { + defaultMessage: 'COMPLETED', +}); + +const IN_PROGRESS = i18n.translate('xpack.uptime.monitorManagement.inProgress', { + defaultMessage: 'IN PROGRESS', +}); + +const VIEW_DETAILS = i18n.translate('xpack.uptime.monitorManagement.viewTestRunDetails', { + defaultMessage: 'View test result details', +}); diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_run_results.tsx b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_run_results.tsx new file mode 100644 index 00000000000000..4b261815e99498 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/test_run_results.tsx @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as React from 'react'; +import { SyntheticsMonitor } from '../../../../common/runtime_types'; +import { BrowserTestRunResult } from './browser/browser_test_results'; +import { SimpleTestResults } from './simple/simple_test_results'; + +interface Props { + monitorId: string; + monitor: SyntheticsMonitor; +} +export const TestRunResult = ({ monitorId, monitor }: Props) => { + return monitor.type === 'browser' ? ( + + ) : ( + + ); +}; diff --git a/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/use_tick_tick.ts b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/use_tick_tick.ts new file mode 100644 index 00000000000000..ff9b9f3f6154d0 --- /dev/null +++ b/x-pack/plugins/uptime/public/components/monitor_management/test_now_mode/use_tick_tick.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEffect, useState, useContext } from 'react'; +import { UptimeRefreshContext } from '../../../contexts'; + +export function useTickTick() { + const { refreshApp, lastRefresh } = useContext(UptimeRefreshContext); + + const [tickTick] = useState(() => + setInterval(() => { + refreshApp(); + }, 5 * 1000) + ); + + useEffect(() => { + return () => { + clearInterval(tickTick); + }; + }, [tickTick]); + + return { refreshTimer: tickTick, lastRefresh }; +} diff --git a/x-pack/plugins/uptime/public/components/overview/filter_group/filter_group.tsx b/x-pack/plugins/uptime/public/components/overview/filter_group/filter_group.tsx index 835cbb80601429..06c080cc659fcb 100644 --- a/x-pack/plugins/uptime/public/components/overview/filter_group/filter_group.tsx +++ b/x-pack/plugins/uptime/public/components/overview/filter_group/filter_group.tsx @@ -15,6 +15,7 @@ import { FieldValueSuggestions, useInspectorContext } from '../../../../../obser import { SelectedFilters } from './selected_filters'; import { useIndexPattern } from '../../../contexts/uptime_index_pattern_context'; import { useGetUrlParams } from '../../../hooks'; +import { EXCLUDE_RUN_ONCE_FILTER } from '../../../../common/constants/client_defaults'; const Container = styled(EuiFilterGroup)` margin-bottom: 10px; @@ -67,7 +68,14 @@ export const FilterGroup = () => { asCombobox={false} asFilterButton={true} forceOpen={false} - filters={[]} + filters={[ + { + exists: { + field: 'summary', + }, + }, + EXCLUDE_RUN_ONCE_FILTER, + ]} cardinalityField="monitor.id" time={{ from: dateRangeStart, to: dateRangeEnd }} inspector={{ diff --git a/x-pack/plugins/uptime/public/components/synthetics/check_steps/step_duration.tsx b/x-pack/plugins/uptime/public/components/synthetics/check_steps/step_duration.tsx index 6f995665d7ce53..a9697a8969f656 100644 --- a/x-pack/plugins/uptime/public/components/synthetics/check_steps/step_duration.tsx +++ b/x-pack/plugins/uptime/public/components/synthetics/check_steps/step_duration.tsx @@ -16,6 +16,7 @@ import { StepFieldTrend } from './step_field_trend'; import { microToSec } from '../../../lib/formatting'; interface Props { + compactView?: boolean; step: JourneyStep; durationPopoverOpenIndex: number | null; setDurationPopoverOpenIndex: (val: number | null) => void; @@ -25,6 +26,7 @@ export const StepDuration = ({ step, durationPopoverOpenIndex, setDurationPopoverOpenIndex, + compactView = false, }: Props) => { const component = useMemo( () => ( @@ -44,7 +46,7 @@ export const StepDuration = ({ const button = ( setDurationPopoverOpenIndex(step.synthetics.step?.index ?? null)} - iconType="visArea" + iconType={compactView ? undefined : 'visArea'} > {i18n.translate('xpack.uptime.synthetics.step.duration', { defaultMessage: '{value} seconds', diff --git a/x-pack/plugins/uptime/public/components/synthetics/check_steps/step_image.tsx b/x-pack/plugins/uptime/public/components/synthetics/check_steps/step_image.tsx index e39a83599380b3..d08614fb0b3586 100644 --- a/x-pack/plugins/uptime/public/components/synthetics/check_steps/step_image.tsx +++ b/x-pack/plugins/uptime/public/components/synthetics/check_steps/step_image.tsx @@ -12,9 +12,10 @@ import { PingTimestamp } from '../../monitor/ping_list/columns/ping_timestamp'; interface Props { step: JourneyStep; + compactView?: boolean; } -export const StepImage = ({ step }: Props) => { +export const StepImage = ({ step, compactView }: Props) => { return ( @@ -24,7 +25,7 @@ export const StepImage = ({ step }: Props) => { /> - {step.synthetics?.step?.name} + {step.synthetics?.step?.name} ); diff --git a/x-pack/plugins/uptime/public/components/synthetics/check_steps/steps_list.tsx b/x-pack/plugins/uptime/public/components/synthetics/check_steps/steps_list.tsx index da061215155813..d635d76fc3f894 100644 --- a/x-pack/plugins/uptime/public/components/synthetics/check_steps/steps_list.tsx +++ b/x-pack/plugins/uptime/public/components/synthetics/check_steps/steps_list.tsx @@ -26,6 +26,7 @@ import { VIEW_PERFORMANCE } from '../../monitor/synthetics/translations'; import { StepImage } from './step_image'; import { useExpandedRow } from './use_expanded_row'; import { StepDuration } from './step_duration'; +import { useUptimeSettingsContext } from '../../../contexts/uptime_settings_context'; export const SpanWithMargin = styled.span` margin-right: 16px; @@ -35,6 +36,7 @@ interface Props { data: JourneyStep[]; error?: Error; loading: boolean; + compactView?: boolean; } interface StepStatusCount { @@ -43,7 +45,7 @@ interface StepStatusCount { succeeded: number; } -function isStepEnd(step: JourneyStep) { +export function isStepEnd(step: JourneyStep) { return step.synthetics?.type === 'step/end'; } @@ -83,12 +85,13 @@ function reduceStepStatus(prev: StepStatusCount, cur: JourneyStep): StepStatusCo return prev; } -export const StepsList = ({ data, error, loading }: Props) => { +export const StepsList = ({ data, error, loading, compactView = false }: Props) => { const steps: JourneyStep[] = data.filter(isStepEnd); const { expandedRows, toggleExpand } = useExpandedRow({ steps, allSteps: data, loading }); const [durationPopoverOpenIndex, setDurationPopoverOpenIndex] = useState(null); + const { basePath } = useUptimeSettingsContext(); const columns: Array> = [ { @@ -116,7 +119,7 @@ export const StepsList = ({ data, error, loading }: Props) => { align: 'left', field: 'timestamp', name: STEP_NAME_LABEL, - render: (_timestamp: string, item) => , + render: (_timestamp: string, item) => , mobileOptions: { render: (item: JourneyStep) => ( @@ -137,6 +140,7 @@ export const StepsList = ({ data, error, loading }: Props) => { step={item} durationPopoverOpenIndex={durationPopoverOpenIndex} setDurationPopoverOpenIndex={setDurationPopoverOpenIndex} + compactView={compactView} /> ); }, @@ -151,17 +155,23 @@ export const StepsList = ({ data, error, loading }: Props) => { align: 'left', field: 'timestamp', name: '', - render: (_val: string, item) => ( - - {VIEW_PERFORMANCE} - - ), mobileOptions: { show: false }, + render: (_val: string, item) => + compactView ? ( + + ) : ( + + {VIEW_PERFORMANCE} + + ), }, - { width: '40px', align: RIGHT_ALIGNMENT, @@ -203,15 +213,18 @@ export const StepsList = ({ data, error, loading }: Props) => { return ( <> - -

- {statusMessage( - steps.reduce(reduceStepStatus, { failed: 0, skipped: 0, succeeded: 0 }), - loading - )} -

-
+ {!compactView && ( + +

+ {statusMessage( + steps.reduce(reduceStepStatus, { failed: 0, skipped: 0, succeeded: 0 }), + loading + )} +

+
+ )} { const { checkGroupId } = useParams<{ checkGroupId: string }>(); + const dispatch = useDispatch(); - const { data, status, error } = useFetcher(() => { - return fetchJourneySteps({ - checkGroup: checkGroupId, - }); - }, [checkGroupId]); + useEffect(() => { + dispatch( + getJourneySteps({ + checkGroup: checkGroupId, + }) + ); + }, [checkGroupId, dispatch]); + + const checkGroup = useSelector((state: AppState) => { + return state.journeys[checkGroupId]; + }); return { - error, checkGroup: checkGroupId, - steps: data?.steps ?? [], - details: data?.details, - loading: status === FETCH_STATUS.LOADING || status === FETCH_STATUS.PENDING, + steps: checkGroup?.steps ?? [], + details: checkGroup?.details, + loading: checkGroup?.loading ?? false, + error: checkGroup?.error, }; }; diff --git a/x-pack/plugins/uptime/public/components/synthetics/status_badge.tsx b/x-pack/plugins/uptime/public/components/synthetics/status_badge.tsx index dbdeebac4d721b..f97c0eab32b558 100644 --- a/x-pack/plugins/uptime/public/components/synthetics/status_badge.tsx +++ b/x-pack/plugins/uptime/public/components/synthetics/status_badge.tsx @@ -53,7 +53,7 @@ export const StatusBadge: FC = ({ status, stepNo, isMobile }) {!isMobile && ( - + {stepNo}. diff --git a/x-pack/plugins/uptime/public/components/synthetics/step_screenshot_display.tsx b/x-pack/plugins/uptime/public/components/synthetics/step_screenshot_display.tsx index 7fde4033c04093..7dfc86575205b2 100644 --- a/x-pack/plugins/uptime/public/components/synthetics/step_screenshot_display.tsx +++ b/x-pack/plugins/uptime/public/components/synthetics/step_screenshot_display.tsx @@ -22,7 +22,7 @@ import { isScreenshotRef as isAScreenshotRef, ScreenshotRefImageData, } from '../../../common/runtime_types'; -import { UptimeSettingsContext, UptimeThemeContext } from '../../contexts'; +import { UptimeRefreshContext, UptimeSettingsContext, UptimeThemeContext } from '../../contexts'; import { useFetcher } from '../../../../observability/public'; import { getJourneyScreenshot } from '../../state/api/journey'; import { useCompositeImage } from '../../hooks'; @@ -114,6 +114,7 @@ export const StepScreenshotDisplay: FC = ({ rootMargin: '0px', threshold: 1, }); + const { lastRefresh } = useContext(UptimeRefreshContext); const [hasIntersected, setHasIntersected] = useState(false); const isIntersecting = intersection?.isIntersecting; @@ -134,7 +135,7 @@ export const StepScreenshotDisplay: FC = ({ if (isScreenshotRef) { return getJourneyScreenshot(imgSrc); } - }, [basePath, checkGroup, imgSrc, stepIndex, isScreenshotRef]); + }, [basePath, checkGroup, imgSrc, stepIndex, isScreenshotRef, lastRefresh]); const refDimensions = useMemo(() => { if (isAScreenshotRef(screenshotRef)) { diff --git a/x-pack/plugins/uptime/public/lib/helper/helper_with_redux.tsx b/x-pack/plugins/uptime/public/lib/helper/helper_with_redux.tsx index 8c4ec2fa611fc9..8602ff81dec447 100644 --- a/x-pack/plugins/uptime/public/lib/helper/helper_with_redux.tsx +++ b/x-pack/plugins/uptime/public/lib/helper/helper_with_redux.tsx @@ -6,19 +6,37 @@ */ import React from 'react'; +import type { Store } from 'redux'; +import { createStore as createReduxStore, applyMiddleware } from 'redux'; + import { Provider as ReduxProvider } from 'react-redux'; +import createSagaMiddleware from 'redux-saga'; + import { AppState } from '../../state'; +import { rootReducer } from '../../state/reducers'; +import { rootEffect } from '../../state/effects'; + +const createRealStore = (): Store => { + const sagaMW = createSagaMiddleware(); + const store = createReduxStore(rootReducer, applyMiddleware(sagaMW)); + sagaMW.run(rootEffect); + return store; +}; + +export const MountWithReduxProvider: React.FC<{ state?: AppState; useRealStore?: boolean }> = ({ + children, + state, + useRealStore, +}) => { + const store = useRealStore + ? createRealStore() + : { + dispatch: jest.fn(), + getState: jest.fn().mockReturnValue(state || { selectedFilters: null }), + subscribe: jest.fn(), + replaceReducer: jest.fn(), + [Symbol.observable]: jest.fn(), + }; -export const MountWithReduxProvider: React.FC<{ state?: AppState }> = ({ children, state }) => ( - - {children} - -); + return {children}; +}; diff --git a/x-pack/plugins/uptime/public/lib/helper/rtl_helpers.tsx b/x-pack/plugins/uptime/public/lib/helper/rtl_helpers.tsx index a0de792c40d72e..b0c8f61477d286 100644 --- a/x-pack/plugins/uptime/public/lib/helper/rtl_helpers.tsx +++ b/x-pack/plugins/uptime/public/lib/helper/rtl_helpers.tsx @@ -14,7 +14,7 @@ import { RenderOptions, Nullish, } from '@testing-library/react'; -import { Router } from 'react-router-dom'; +import { Router, Route } from 'react-router-dom'; import { merge } from 'lodash'; import { createMemoryHistory, History } from 'history'; import { CoreStart } from 'kibana/public'; @@ -37,6 +37,7 @@ import { ClientPluginsStart } from '../../apps/plugin'; import { triggersActionsUiMock } from '../../../../triggers_actions_ui/public/mocks'; import { dataPluginMock } from '../../../../../../src/plugins/data/public/mocks'; import { UptimeRefreshContextProvider, UptimeStartupPluginsContextProvider } from '../../contexts'; +import { kibanaService } from '../../state/kibana_service'; type DeepPartial = { [P in keyof T]?: DeepPartial; @@ -57,6 +58,7 @@ interface MockKibanaProviderProps extends KibanaProviderOptions extends MockKibanaProviderProps { history?: History; + path?: string; } type Url = @@ -71,6 +73,7 @@ interface RenderRouterOptions extends KibanaProviderOptions; state?: Partial | DeepPartial; url?: Url; + path?: string; } function getSetting(key: string): T { @@ -121,6 +124,9 @@ const mockCore: () => Partial = () => { get: getSetting, get$: setSetting$, }, + usageCollection: { + reportUiCounter: () => {}, + }, triggersActionsUi: triggersActionsUiMock.createStart(), storage: createMockStore(), data: dataPluginMock.createStartContract(), @@ -144,6 +150,8 @@ export function MockKibanaProvider({ }: MockKibanaProviderProps) { const coreOptions = merge({}, mockCore(), core); + kibanaService.core = coreOptions as any; + return ( @@ -163,13 +171,14 @@ export function MockKibanaProvider({ export function MockRouter({ children, core, + path, history = createMemoryHistory(), kibanaProps, }: MockRouterProps) { return ( - {children} + {children} ); @@ -180,10 +189,13 @@ export const MockRedux = ({ state, history = createMemoryHistory(), children, + path, }: { state: Partial; history?: History; children: React.ReactNode; + path?: string; + useRealStore?: boolean; }) => { const testState: AppState = { ...mockState, @@ -192,11 +204,34 @@ export const MockRedux = ({ return ( - {children} + + {children} + ); }; +export function WrappedHelper({ + children, + core, + kibanaProps, + state, + url, + useRealStore, + path, + history = createMemoryHistory(), +}: RenderRouterOptions & { children: ReactElement; useRealStore?: boolean }) { + const testState: AppState = merge({}, mockState, state); + + return ( + + + {children} + + + ); +} + /* Custom react testing library render */ export function render( ui: ReactElement, @@ -207,21 +242,27 @@ export function render( renderOptions, state, url, - }: RenderRouterOptions = {} + path, + useRealStore, + }: RenderRouterOptions & { useRealStore?: boolean } = {} ) { - const testState: AppState = merge({}, mockState, state); - if (url) { history = getHistoryFromUrl(url); } return { ...reactTestLibRender( - - - {ui} - - , + + {ui} + , renderOptions ), history, diff --git a/x-pack/plugins/uptime/public/pages/monitor_management/add_monitor.tsx b/x-pack/plugins/uptime/public/pages/monitor_management/add_monitor.tsx index 749a109dffda2b..cc474b06546439 100644 --- a/x-pack/plugins/uptime/public/pages/monitor_management/add_monitor.tsx +++ b/x-pack/plugins/uptime/public/pages/monitor_management/add_monitor.tsx @@ -13,6 +13,7 @@ import { SyntheticsProviders } from '../../components/fleet_package/contexts'; import { Loader } from '../../components/monitor_management/loader/loader'; import { MonitorConfig } from '../../components/monitor_management/monitor_config/monitor_config'; import { useLocations } from '../../components/monitor_management/hooks/use_locations'; +import { useMonitorManagementBreadcrumbs } from './use_monitor_management_breadcrumbs'; export const AddMonitorPage: React.FC = () => { useTrackPageview({ app: 'uptime', path: 'add-monitor' }); @@ -20,6 +21,8 @@ export const AddMonitorPage: React.FC = () => { const { error, loading } = useLocations(); + useMonitorManagementBreadcrumbs({ isAddMonitor: true }); + return ( { useTrackPageview({ app: 'uptime', path: 'edit-monitor' }); useTrackPageview({ app: 'uptime', path: 'edit-monitor', delay: 15000 }); + useMonitorManagementBreadcrumbs({ isEditMonitor: true }); const { monitorId } = useParams<{ monitorId: string }>(); const { data, status } = useFetcher>(() => { diff --git a/x-pack/plugins/uptime/public/pages/monitor_management/monitor_management.tsx b/x-pack/plugins/uptime/public/pages/monitor_management/monitor_management.tsx index 0619f4d4bed1cf..aa4a9ca995b1b4 100644 --- a/x-pack/plugins/uptime/public/pages/monitor_management/monitor_management.tsx +++ b/x-pack/plugins/uptime/public/pages/monitor_management/monitor_management.tsx @@ -11,6 +11,7 @@ import { useTrackPageview } from '../../../../observability/public'; import { getMonitors } from '../../state/actions'; import { monitorManagementListSelector } from '../../state/selectors'; import { MonitorManagementList } from '../../components/monitor_management/monitor_list/monitor_list'; +import { useMonitorManagementBreadcrumbs } from './use_monitor_management_breadcrumbs'; export const MonitorManagementPage: React.FC = () => { const [refresh, setRefresh] = useState(true); @@ -18,13 +19,14 @@ export const MonitorManagementPage: React.FC = () => { const [pageSize, setPageSize] = useState(10); // saved objects page index is base 1 useTrackPageview({ app: 'uptime', path: 'manage-monitors' }); useTrackPageview({ app: 'uptime', path: 'manage-monitors', delay: 15000 }); + useMonitorManagementBreadcrumbs(); const dispatch = useDispatch(); const monitorList = useSelector(monitorManagementListSelector); useEffect(() => { if (refresh) { dispatch(getMonitors({ page: pageIndex, perPage: pageSize })); - setRefresh(false); // TODO: avoid extra re-rendering when `refresh` turn to false (pass down the handler instead) + setRefresh(false); } }, [dispatch, refresh, pageIndex, pageSize]); diff --git a/x-pack/plugins/uptime/public/pages/monitor_management/use_monitor_management_breadcrumbs.tsx b/x-pack/plugins/uptime/public/pages/monitor_management/use_monitor_management_breadcrumbs.tsx new file mode 100644 index 00000000000000..e5784591a00fc4 --- /dev/null +++ b/x-pack/plugins/uptime/public/pages/monitor_management/use_monitor_management_breadcrumbs.tsx @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; +import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; +import { useBreadcrumbs } from '../../hooks/use_breadcrumbs'; +import { MONITOR_MANAGEMENT_ROUTE } from '../../../common/constants'; +import { PLUGIN } from '../../../common/constants/plugin'; + +export const useMonitorManagementBreadcrumbs = ({ + isAddMonitor, + isEditMonitor, + monitorId, +}: { + isAddMonitor?: boolean; + isEditMonitor?: boolean; + monitorId?: string; +} = {}) => { + const kibana = useKibana(); + const appPath = kibana.services.application?.getUrlForApp(PLUGIN.ID) ?? ''; + + useBreadcrumbs([ + { + text: MONITOR_MANAGEMENT_CRUMB, + href: isAddMonitor || isEditMonitor ? `${appPath}/${MONITOR_MANAGEMENT_ROUTE}` : undefined, + }, + ...(isAddMonitor + ? [ + { + text: ADD_MONITOR_CRUMB, + }, + ] + : []), + ...(isEditMonitor + ? [ + { + text: EDIT_MONITOR_CRUMB, + }, + ] + : []), + ]); +}; + +export const MONITOR_MANAGEMENT_CRUMB = i18n.translate( + 'xpack.uptime.monitorManagement.monitorManagementCrumb', + { + defaultMessage: 'Monitor management', + } +); + +export const ADD_MONITOR_CRUMB = i18n.translate('xpack.uptime.monitorManagement.addMonitorCrumb', { + defaultMessage: 'Add monitor', +}); + +export const EDIT_MONITOR_CRUMB = i18n.translate( + 'xpack.uptime.monitorManagement.editMonitorCrumb', + { + defaultMessage: 'Edit monitor', + } +); diff --git a/x-pack/plugins/uptime/public/pages/synthetics/synthetics_checks.test.tsx b/x-pack/plugins/uptime/public/pages/synthetics/synthetics_checks.test.tsx index fda203f3ff14bf..cfe1b03e6305cc 100644 --- a/x-pack/plugins/uptime/public/pages/synthetics/synthetics_checks.test.tsx +++ b/x-pack/plugins/uptime/public/pages/synthetics/synthetics_checks.test.tsx @@ -7,53 +7,95 @@ import React from 'react'; import { render } from '../../lib/helper/rtl_helpers'; -import { spyOnUseFetcher } from '../../lib/helper/spy_use_fetcher'; import { SyntheticsCheckSteps, SyntheticsCheckStepsPageHeader, SyntheticsCheckStepsPageRightSideItem, } from './synthetics_checks'; +import { fetchJourneySteps } from '../../state/api/journey'; +import { createMemoryHistory } from 'history'; +import { SYNTHETIC_CHECK_STEPS_ROUTE } from '../../../common/constants'; + +jest.mock('../../state/api/journey', () => ({ + fetchJourneySteps: jest.fn(), +})); + +// We must mock all other API calls because we're using the real store +// in this test. Using the real store causes actions and effects to actually +// run, which could trigger API calls. +jest.mock('../../state/api/utils.ts', () => ({ + apiService: { get: jest.fn().mockResolvedValue([]) }, +})); + +const getRelevantPageHistory = () => { + const history = createMemoryHistory(); + const checkStepsHistoryFrame = SYNTHETIC_CHECK_STEPS_ROUTE.replace( + /:checkGroupId/g, + 'my-check-group-id' + ); + + history.push(checkStepsHistoryFrame); + + return history; +}; describe('SyntheticsCheckStepsPageHeader component', () => { - it('returns the monitor name', () => { - spyOnUseFetcher({ + afterAll(() => { + jest.restoreAllMocks(); + }); + + it('returns the monitor name', async () => { + (fetchJourneySteps as jest.Mock).mockResolvedValueOnce({ + checkGroup: 'my-check-group-id', details: { journey: { - monitor: { - name: 'test-name', - id: 'test-id', - }, + monitor: { name: 'test-name' }, }, }, }); - const { getByText } = render(); - expect(getByText('test-name')); + + const { findByText } = render(, { + history: getRelevantPageHistory(), + path: SYNTHETIC_CHECK_STEPS_ROUTE, + useRealStore: true, + }); + + expect(await findByText('test-name')); }); - it('returns the monitor ID when no name is provided', () => { - spyOnUseFetcher({ + it('returns the monitor ID when no name is provided', async () => { + (fetchJourneySteps as jest.Mock).mockResolvedValueOnce({ + checkGroup: 'my-check-group-id', details: { journey: { - monitor: { - id: 'test-id', - }, + monitor: { name: 'test-id' }, }, }, }); - const { getByText } = render(); - expect(getByText('test-id')); + + const { findByText } = render(, { + history: getRelevantPageHistory(), + path: SYNTHETIC_CHECK_STEPS_ROUTE, + useRealStore: true, + }); + expect(await findByText('test-id')); }); }); describe('SyntheticsCheckStepsPageRightSideItem component', () => { it('returns null when there are no details', () => { - spyOnUseFetcher(null); - const { container } = render(); + (fetchJourneySteps as jest.Mock).mockResolvedValueOnce(null); + const { container } = render(, { + history: getRelevantPageHistory(), + path: SYNTHETIC_CHECK_STEPS_ROUTE, + useRealStore: true, + }); expect(container.firstChild).toBeNull(); }); - it('renders navigation element if details exist', () => { - spyOnUseFetcher({ + it('renders navigation element if details exist', async () => { + (fetchJourneySteps as jest.Mock).mockResolvedValueOnce({ + checkGroup: 'my-check-group-id', details: { timestamp: '20031104', journey: { @@ -64,22 +106,54 @@ describe('SyntheticsCheckStepsPageRightSideItem component', () => { }, }, }); - const { getByText } = render(); - expect(getByText('Nov 4, 2003 12:00:00 AM')); - expect(getByText('Next check')); - expect(getByText('Previous check')); + + const { findByText } = render(, { + history: getRelevantPageHistory(), + path: SYNTHETIC_CHECK_STEPS_ROUTE, + useRealStore: true, + }); + expect(await findByText('Nov 4, 2003 12:00:00 AM')); + expect(await findByText('Next check')); + expect(await findByText('Previous check')); }); }); describe('SyntheticsCheckSteps component', () => { - it('renders empty steps list', () => { - const { getByText } = render(); - expect(getByText('0 Steps - all failed or skipped')); - expect(getByText('This journey did not contain any steps.')); + it('renders empty steps list', async () => { + (fetchJourneySteps as jest.Mock).mockResolvedValueOnce({ + checkGroup: 'my-check-group-id', + details: { + timestamp: '20031104', + journey: { + monitor: { + name: 'test-name', + id: 'test-id', + }, + }, + }, + }); + + const { findByText } = render(, { + history: getRelevantPageHistory(), + path: SYNTHETIC_CHECK_STEPS_ROUTE, + useRealStore: true, + }); + expect(await findByText('0 Steps - all failed or skipped')); + expect(await findByText('This journey did not contain any steps.')); }); - it('renders steps', () => { - spyOnUseFetcher({ + it('renders steps', async () => { + (fetchJourneySteps as jest.Mock).mockResolvedValueOnce({ + checkGroup: 'my-check-group-id', + details: { + timestamp: '20031104', + journey: { + monitor: { + name: 'test-name', + id: 'test-id', + }, + }, + }, steps: [ { _id: 'step-1', @@ -94,7 +168,12 @@ describe('SyntheticsCheckSteps component', () => { }, ], }); - const { getByText } = render(); - expect(getByText('1 Steps - all failed or skipped')); + + const { findByText } = render(, { + history: getRelevantPageHistory(), + path: SYNTHETIC_CHECK_STEPS_ROUTE, + useRealStore: true, + }); + expect(await findByText('1 Steps - all failed or skipped')); }); }); diff --git a/x-pack/plugins/uptime/public/routes.test.tsx b/x-pack/plugins/uptime/public/routes.test.tsx index 5b7815610fe628..ed4b3bed6cbbaa 100644 --- a/x-pack/plugins/uptime/public/routes.test.tsx +++ b/x-pack/plugins/uptime/public/routes.test.tsx @@ -38,7 +38,7 @@ describe('PageRouter', () => { ])('hides ui monitor management pages when feature flag is not enabled', (page, heading) => { const history = createMemoryHistory(); history.push(page); - render(, { + render(, { history, }); diff --git a/x-pack/plugins/uptime/public/routes.tsx b/x-pack/plugins/uptime/public/routes.tsx index d099d608ae8536..aa7bf22593abe6 100644 --- a/x-pack/plugins/uptime/public/routes.tsx +++ b/x-pack/plugins/uptime/public/routes.tsx @@ -16,7 +16,7 @@ import { MONITOR_ROUTE, MONITOR_ADD_ROUTE, MONITOR_EDIT_ROUTE, - MONITOR_MANAGEMENT, + MONITOR_MANAGEMENT_ROUTE, OVERVIEW_ROUTE, SETTINGS_ROUTE, STEP_DETAIL_ROUTE, @@ -186,7 +186,7 @@ const getRoutes = (config: UptimeConfig): RouteProps[] => { rightSideItems: [], }, }, - ...(config.ui?.unsafe?.monitorManagement?.enabled + ...(config.ui?.monitorManagement?.enabled ? [ { title: i18n.translate('xpack.uptime.addMonitorRoute.title', { @@ -206,6 +206,7 @@ const getRoutes = (config: UptimeConfig): RouteProps[] => { ), }, bottomBar: , + bottomBarProps: { paddingSize: 'm' as const }, }, { title: i18n.translate('xpack.uptime.editMonitorRoute.title', { @@ -225,13 +226,14 @@ const getRoutes = (config: UptimeConfig): RouteProps[] => { ), }, bottomBar: , + bottomBarProps: { paddingSize: 'm' as const }, }, { title: i18n.translate('xpack.uptime.monitorManagementRoute.title', { defaultMessage: 'Manage Monitors | {baseTitle}', values: { baseTitle }, }), - path: MONITOR_MANAGEMENT, + path: MONITOR_MANAGEMENT_ROUTE, component: MonitorManagementPage, dataTestSubj: 'uptimeMonitorManagementListPage', telemetryId: UptimePage.MonitorManagement, diff --git a/x-pack/plugins/uptime/public/state/api/monitor_management.ts b/x-pack/plugins/uptime/public/state/api/monitor_management.ts index 5f18869257386c..ee2e376990d2d4 100644 --- a/x-pack/plugins/uptime/public/state/api/monitor_management.ts +++ b/x-pack/plugins/uptime/public/state/api/monitor_management.ts @@ -17,6 +17,7 @@ import { import { SyntheticsMonitorSavedObject } from '../../../common/types'; import { apiService } from './utils'; +// TODO: Type the return type from runtime types export const setMonitor = async ({ monitor, id, @@ -31,6 +32,7 @@ export const setMonitor = async ({ } }; +// TODO, change to monitor runtime type export const getMonitor = async ({ id }: { id: string }): Promise => { return await apiService.get(`${API_URLS.SYNTHETICS_MONITORS}/${id}`); }; @@ -57,3 +59,13 @@ export const fetchServiceLocations = async (): Promise => { ); return locations; }; + +export const runOnceMonitor = async ({ + monitor, + id, +}: { + monitor: SyntheticsMonitor; + id: string; +}): Promise<{ errors: Array<{ error: Error }> }> => { + return await apiService.post(API_URLS.RUN_ONCE_MONITOR + `/${id}`, monitor); +}; diff --git a/x-pack/plugins/uptime/public/state/effects/journey.test.ts b/x-pack/plugins/uptime/public/state/effects/journey.test.ts new file mode 100644 index 00000000000000..cbf5fc72a07169 --- /dev/null +++ b/x-pack/plugins/uptime/public/state/effects/journey.test.ts @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Store } from 'redux'; +import createSagaMiddleware from 'redux-saga'; +import { createStore as createReduxStore, applyMiddleware } from 'redux'; + +import { rootReducer } from '../reducers'; +import { fetchJourneyStepsEffect } from '../effects/journey'; + +import { getJourneySteps } from '../actions/journey'; + +import { fetchJourneySteps } from '../api/journey'; + +jest.mock('../api/journey', () => ({ + fetchJourneySteps: jest.fn(), +})); + +const createTestStore = (): Store => { + const sagaMW = createSagaMiddleware(); + const store = createReduxStore(rootReducer, applyMiddleware(sagaMW)); + sagaMW.run(fetchJourneyStepsEffect); + return store; +}; + +describe('journey effect', () => { + afterEach(() => jest.resetAllMocks()); + afterAll(() => jest.restoreAllMocks()); + + it('fetches only once when dispatching multiple getJourneySteps for a particular ID', () => { + (fetchJourneySteps as jest.Mock).mockResolvedValue({ + checkGroup: 'saga-test', + details: { + journey: { + monitor: { name: 'test-name' }, + }, + }, + }); + + const store = createTestStore(); + + // Actually dispatched + store.dispatch(getJourneySteps({ checkGroup: 'saga-test' })); + + // Skipped + store.dispatch(getJourneySteps({ checkGroup: 'saga-test' })); + + expect(fetchJourneySteps).toHaveBeenCalledTimes(1); + }); + + it('fetches multiple times for different IDs', () => { + (fetchJourneySteps as jest.Mock).mockResolvedValue({ + checkGroup: 'saga-test', + details: { + journey: { + monitor: { name: 'test-name' }, + }, + }, + }); + + const store = createTestStore(); + + // Actually dispatched + store.dispatch(getJourneySteps({ checkGroup: 'saga-test' })); + + // Skipped + store.dispatch(getJourneySteps({ checkGroup: 'saga-test' })); + + // Actually dispatched because it has a different ID + store.dispatch(getJourneySteps({ checkGroup: 'saga-test-second' })); + + expect(fetchJourneySteps).toHaveBeenCalledTimes(2); + }); + + it('can re-fetch after an ID is fetched', async () => { + (fetchJourneySteps as jest.Mock).mockResolvedValue({ + checkGroup: 'saga-test', + details: { + journey: { + monitor: { name: 'test-name' }, + }, + }, + }); + + const store = createTestStore(); + + const waitForStateUpdate = (): Promise => + new Promise((resolve) => store.subscribe(() => resolve())); + + // Actually dispatched + store.dispatch(getJourneySteps({ checkGroup: 'saga-test' })); + + await waitForStateUpdate(); + + // Also dispatched given its initial request is not in-flight anymore + store.dispatch(getJourneySteps({ checkGroup: 'saga-test' })); + + expect(fetchJourneySteps).toHaveBeenCalledTimes(2); + }); +}); diff --git a/x-pack/plugins/uptime/public/state/effects/journey.ts b/x-pack/plugins/uptime/public/state/effects/journey.ts index 8898eb0e5c5219..f7c1e23742e69c 100644 --- a/x-pack/plugins/uptime/public/state/effects/journey.ts +++ b/x-pack/plugins/uptime/public/state/effects/journey.ts @@ -6,7 +6,7 @@ */ import { Action } from 'redux-actions'; -import { call, put, takeLatest } from 'redux-saga/effects'; +import { call, put, takeEvery } from 'redux-saga/effects'; import { getJourneySteps, getJourneyStepsSuccess, @@ -16,9 +16,14 @@ import { import { fetchJourneySteps } from '../api/journey'; import type { SyntheticsJourneyApiResponse } from '../../../common/runtime_types'; +const inFlightStepRequests: Record = {}; + export function* fetchJourneyStepsEffect(): Generator { - yield takeLatest(getJourneySteps, function* (action: Action) { + yield takeEvery(getJourneySteps, function* (action: Action) { + if (inFlightStepRequests[action.payload.checkGroup]) return; + try { + inFlightStepRequests[action.payload.checkGroup] = true; const response = (yield call( fetchJourneySteps, action.payload @@ -26,6 +31,8 @@ export function* fetchJourneyStepsEffect(): Generator { yield put(getJourneyStepsSuccess(response)); } catch (e) { yield put(getJourneyStepsFail({ checkGroup: action.payload.checkGroup, error: e })); + } finally { + delete inFlightStepRequests[action.payload.checkGroup]; } }); } diff --git a/x-pack/plugins/uptime/server/lib/requests/get_ping_histogram.ts b/x-pack/plugins/uptime/server/lib/requests/get_ping_histogram.ts index a8d722b4e059d7..8fedd926b8371b 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_ping_histogram.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_ping_histogram.ts @@ -11,6 +11,7 @@ import { QUERY } from '../../../common/constants'; import { UMElasticsearchQueryFn } from '../adapters/framework'; import { createEsQuery } from '../../../common/utils/es_search'; import { getHistogramInterval } from '../../../common/lib/get_histogram_interval'; +import { EXCLUDE_RUN_ONCE_FILTER } from '../../../common/constants/client_defaults'; export const getPingHistogram: UMElasticsearchQueryFn< GetPingHistogramParams, @@ -47,6 +48,7 @@ export const getPingHistogram: UMElasticsearchQueryFn< field: 'summary', }, }, + EXCLUDE_RUN_ONCE_FILTER, ], ...(query ? { diff --git a/x-pack/plugins/uptime/server/lib/requests/get_snapshot_counts.ts b/x-pack/plugins/uptime/server/lib/requests/get_snapshot_counts.ts index ee4e3eb96eb5af..2a43d539125bef 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_snapshot_counts.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_snapshot_counts.ts @@ -10,6 +10,7 @@ import { CONTEXT_DEFAULTS } from '../../../common/constants'; import { Snapshot } from '../../../common/runtime_types'; import { QueryContext } from './search'; import { ESFilter } from '../../../../../../src/core/types/elasticsearch'; +import { EXCLUDE_RUN_ONCE_FILTER } from '../../../common/constants/client_defaults'; export interface GetSnapshotCountParams { dateRangeStart: string; @@ -84,7 +85,7 @@ const statusCountBody = (filters: ESFilter[], context: QueryContext) => { field: 'summary', }, }, - + EXCLUDE_RUN_ONCE_FILTER, ...filters, ], }, diff --git a/x-pack/plugins/uptime/server/lib/requests/search/find_potential_matches.ts b/x-pack/plugins/uptime/server/lib/requests/search/find_potential_matches.ts index d0d8e61d02181a..1963afaf89a34c 100644 --- a/x-pack/plugins/uptime/server/lib/requests/search/find_potential_matches.ts +++ b/x-pack/plugins/uptime/server/lib/requests/search/find_potential_matches.ts @@ -7,6 +7,7 @@ import { set } from '@elastic/safer-lodash-set'; import { QueryContext } from './query_context'; +import { EXCLUDE_RUN_ONCE_FILTER } from '../../../../common/constants/client_defaults'; /** * This is the first phase of the query. In it, we find all monitor IDs that have ever matched the given filters. @@ -51,6 +52,8 @@ const queryBody = async (queryContext: QueryContext, searchAfter: any, size: num filters.push({ match: { 'monitor.status': queryContext.statusFilter } }); } + filters.push(EXCLUDE_RUN_ONCE_FILTER); + const body = { size: 0, query: { diff --git a/x-pack/plugins/uptime/server/lib/saved_objects/saved_objects.ts b/x-pack/plugins/uptime/server/lib/saved_objects/saved_objects.ts index 5fc99816df006a..1f2dbc98edd1b3 100644 --- a/x-pack/plugins/uptime/server/lib/saved_objects/saved_objects.ts +++ b/x-pack/plugins/uptime/server/lib/saved_objects/saved_objects.ts @@ -26,7 +26,7 @@ export const registerUptimeSavedObjects = ( ) => { savedObjectsService.registerType(umDynamicSettings); - if (config?.unsafe?.service.enabled) { + if (config?.service?.enabled) { savedObjectsService.registerType(syntheticsMonitor); savedObjectsService.registerType(syntheticsServiceApiKey); diff --git a/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/browser.ts b/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/browser.ts index c72f3598533b04..7eb89f17b44ada 100644 --- a/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/browser.ts +++ b/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/browser.ts @@ -22,7 +22,7 @@ export const browserFormatters: BrowserFormatMap = { [ConfigKey.SOURCE_INLINE]: null, [ConfigKey.PARAMS]: null, [ConfigKey.SCREENSHOTS]: null, - [ConfigKey.SYNTHETICS_ARGS]: (fields) => null, + [ConfigKey.SYNTHETICS_ARGS]: (fields) => arrayFormatter(fields[ConfigKey.SYNTHETICS_ARGS]), [ConfigKey.ZIP_URL_TLS_CERTIFICATE_AUTHORITIES]: null, [ConfigKey.ZIP_URL_TLS_CERTIFICATE]: null, [ConfigKey.ZIP_URL_TLS_KEY]: null, diff --git a/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/convert_to_data_stream.ts b/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/convert_to_data_stream.ts index bcddd6fffba95a..a7597c7c3ef341 100644 --- a/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/convert_to_data_stream.ts +++ b/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/convert_to_data_stream.ts @@ -31,7 +31,7 @@ export function convertToDataStreamFormat(monitor: Record): DataStr id: monitor.id, // Schedule is needed by service at root level as well schedule: monitor.schedule, - enabled: monitor.enabled, + enabled: monitor.enabled ?? true, data_stream: { namespace: monitor.namespace ?? 'default', }, diff --git a/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/format_configs.test.ts b/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/format_configs.test.ts index afb12ae5059578..815a02b9d4b3aa 100644 --- a/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/format_configs.test.ts +++ b/x-pack/plugins/uptime/server/lib/synthetics_service/formatters/format_configs.test.ts @@ -95,7 +95,7 @@ describe('formatMonitorConfig', () => { "step('Go to https://www.google.com/', async () => {\n await page.goto('https://www.google.com/');\n});", params: '', screenshots: 'on', - synthetics_args: [], + synthetics_args: ['--hasTouch true'], 'filter_journeys.match': '', 'filter_journeys.tags': ['dev'], ignore_https_errors: false, @@ -119,6 +119,7 @@ describe('formatMonitorConfig', () => { throttling: '5d/3u/20l', timeout: '16s', type: 'browser', + synthetics_args: ['--hasTouch true'], }; }); diff --git a/x-pack/plugins/uptime/server/lib/synthetics_service/service_api_client.ts b/x-pack/plugins/uptime/server/lib/synthetics_service/service_api_client.ts index 1c55b8812d64fd..40759e64eb6bab 100644 --- a/x-pack/plugins/uptime/server/lib/synthetics_service/service_api_client.ts +++ b/x-pack/plugins/uptime/server/lib/synthetics_service/service_api_client.ts @@ -24,6 +24,7 @@ export interface ServiceData { hosts: string[]; api_key: string; }; + runOnce?: boolean; } export class ServiceAPIClient { @@ -79,7 +80,14 @@ export class ServiceAPIClient { return this.callAPI('DELETE', data); } - async callAPI(method: 'POST' | 'PUT' | 'DELETE', { monitors: allMonitors, output }: ServiceData) { + async runOnce(data: ServiceData) { + return this.callAPI('POST', { ...data, runOnce: true }); + } + + async callAPI( + method: 'POST' | 'PUT' | 'DELETE', + { monitors: allMonitors, output, runOnce }: ServiceData + ) { if (this.username === TEST_SERVICE_USERNAME) { // we don't want to call service while local integration tests are running return; @@ -93,7 +101,7 @@ export class ServiceAPIClient { return axios({ method, - url: (this.devUrl ?? url) + '/monitors', + url: (this.devUrl ?? url) + (runOnce ? '/run' : '/monitors'), data: { monitors: monitorsStreams, output }, headers: this.authorization ? { diff --git a/x-pack/plugins/uptime/server/lib/synthetics_service/synthetics_service.ts b/x-pack/plugins/uptime/server/lib/synthetics_service/synthetics_service.ts index d6fe86453a1c00..43adfabddad989 100644 --- a/x-pack/plugins/uptime/server/lib/synthetics_service/synthetics_service.ts +++ b/x-pack/plugins/uptime/server/lib/synthetics_service/synthetics_service.ts @@ -189,6 +189,32 @@ export class SyntheticsService { } } + async runOnceConfigs( + request?: KibanaRequest, + configs?: Array< + SyntheticsMonitorWithId & { + fields_under_root?: boolean; + fields?: { run_once: boolean; config_id: string }; + } + > + ) { + const monitors = this.formatConfigs(configs || (await this.getMonitorConfigs())); + if (monitors.length === 0) { + return; + } + const data = { + monitors, + output: await this.getOutput(request), + }; + + try { + return await this.apiClient.runOnce(data); + } catch (e) { + this.logger.error(e); + throw e; + } + } + async deleteConfigs(request: KibanaRequest, configs: SyntheticsMonitorWithId[]) { const data = { monitors: this.formatConfigs(configs), @@ -211,6 +237,8 @@ export class SyntheticsService { return (findResult.saved_objects ?? []).map(({ attributes, id }) => ({ ...attributes, id, + fields_under_root: true, + fields: { config_id: id }, })) as SyntheticsMonitorWithId[]; } diff --git a/x-pack/plugins/uptime/server/plugin.ts b/x-pack/plugins/uptime/server/plugin.ts index 4c076db0255ef2..2a7cc9c385b7af 100644 --- a/x-pack/plugins/uptime/server/plugin.ts +++ b/x-pack/plugins/uptime/server/plugin.ts @@ -73,11 +73,11 @@ export class Plugin implements PluginType { cloud: plugins.cloud, } as UptimeServerSetup; - if (this.server?.config?.unsafe?.service.enabled) { + if (this.server?.config?.service?.enabled) { this.syntheticService = new SyntheticsService( this.logger, this.server, - this.server.config.unsafe.service + this.server.config.service ); this.syntheticService.registerSyncTask(plugins.taskManager); @@ -98,7 +98,7 @@ export class Plugin implements PluginType { } public start(coreStart: CoreStart, plugins: UptimeCorePluginsStart) { - if (this.server?.config?.unsafe?.service.enabled) { + if (this.server?.config?.service?.enabled) { this.savedObjectsClient = new SavedObjectsClient( coreStart.savedObjects.createInternalRepository([syntheticsServiceApiKey.name]) ); @@ -115,7 +115,7 @@ export class Plugin implements PluginType { this.server.savedObjectsClient = this.savedObjectsClient; } - if (this.server?.config?.unsafe?.service?.enabled) { + if (this.server?.config?.service?.enabled) { this.syntheticService?.init(); this.syntheticService?.scheduleSyncTask(plugins.taskManager); if (this.server && this.syntheticService) { diff --git a/x-pack/plugins/uptime/server/rest_api/index.ts b/x-pack/plugins/uptime/server/rest_api/index.ts index 905af60961d9a1..383d999f29cc68 100644 --- a/x-pack/plugins/uptime/server/rest_api/index.ts +++ b/x-pack/plugins/uptime/server/rest_api/index.ts @@ -36,6 +36,7 @@ import { import { addSyntheticsMonitorRoute } from './synthetics_service/add_monitor'; import { editSyntheticsMonitorRoute } from './synthetics_service/edit_monitor'; import { deleteSyntheticsMonitorRoute } from './synthetics_service/delete_monitor'; +import { runOnceSyntheticsMonitorRoute } from './synthetics_service/run_once_monitor'; export * from './types'; export { createRouteWithAuth } from './create_route_with_auth'; @@ -67,4 +68,5 @@ export const restApiRoutes: UMRestApiRouteFactory[] = [ addSyntheticsMonitorRoute, editSyntheticsMonitorRoute, deleteSyntheticsMonitorRoute, + runOnceSyntheticsMonitorRoute, ]; diff --git a/x-pack/plugins/uptime/server/rest_api/synthetics_service/add_monitor.ts b/x-pack/plugins/uptime/server/rest_api/synthetics_service/add_monitor.ts index 319d68d1b6e8b2..1750466b6c3e68 100644 --- a/x-pack/plugins/uptime/server/rest_api/synthetics_service/add_monitor.ts +++ b/x-pack/plugins/uptime/server/rest_api/synthetics_service/add_monitor.ts @@ -35,7 +35,10 @@ export const addSyntheticsMonitorRoute: UMRestApiRouteFactory = () => ({ const { syntheticsService } = server; const errors = await syntheticsService.pushConfigs(request, [ - { ...newMonitor.attributes, id: newMonitor.id }, + { + ...newMonitor.attributes, + id: newMonitor.id, + }, ]); if (errors) { diff --git a/x-pack/plugins/uptime/server/rest_api/synthetics_service/get_service_locations.ts b/x-pack/plugins/uptime/server/rest_api/synthetics_service/get_service_locations.ts index dfd0dcd1a9107c..0c51a53e8fd03c 100644 --- a/x-pack/plugins/uptime/server/rest_api/synthetics_service/get_service_locations.ts +++ b/x-pack/plugins/uptime/server/rest_api/synthetics_service/get_service_locations.ts @@ -14,5 +14,5 @@ export const getServiceLocationsRoute: UMRestApiRouteFactory = () => ({ path: API_URLS.SERVICE_LOCATIONS, validate: {}, handler: async ({ server }): Promise => - getServiceLocations({ manifestUrl: server.config.unsafe!.service.manifestUrl }), + getServiceLocations({ manifestUrl: server.config.service!.manifestUrl }), }); diff --git a/x-pack/plugins/uptime/server/rest_api/synthetics_service/run_once_monitor.ts b/x-pack/plugins/uptime/server/rest_api/synthetics_service/run_once_monitor.ts new file mode 100644 index 00000000000000..409990a12fcf03 --- /dev/null +++ b/x-pack/plugins/uptime/server/rest_api/synthetics_service/run_once_monitor.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { schema } from '@kbn/config-schema'; +import { MonitorFields } from '../../../common/runtime_types'; +import { UMRestApiRouteFactory } from '../types'; +import { API_URLS } from '../../../common/constants'; +import { validateMonitor } from './monitor_validation'; + +export const runOnceSyntheticsMonitorRoute: UMRestApiRouteFactory = () => ({ + method: 'POST', + path: API_URLS.RUN_ONCE_MONITOR + '/{monitorId}', + validate: { + body: schema.any(), + params: schema.object({ + monitorId: schema.string({ minLength: 1, maxLength: 1024 }), + }), + }, + handler: async ({ request, response, server }): Promise => { + const monitor = request.body as MonitorFields; + const { monitorId } = request.params; + + const validationResult = validateMonitor(monitor); + + if (!validationResult.valid) { + const { reason: message, details, payload } = validationResult; + return response.badRequest({ body: { message, attributes: { details, ...payload } } }); + } + + const { syntheticsService } = server; + + const errors = await syntheticsService.runOnceConfigs(request, [ + { + ...monitor, + id: monitorId, + fields_under_root: true, + fields: { run_once: true, config_id: monitorId }, + }, + ]); + + if (errors) { + return { errors }; + } + + return monitor; + }, +}); diff --git a/x-pack/plugins/uptime/server/rest_api/uptime_route_wrapper.ts b/x-pack/plugins/uptime/server/rest_api/uptime_route_wrapper.ts index 47c25bca6f900b..4e40ce934a32e0 100644 --- a/x-pack/plugins/uptime/server/rest_api/uptime_route_wrapper.ts +++ b/x-pack/plugins/uptime/server/rest_api/uptime_route_wrapper.ts @@ -22,7 +22,7 @@ export const uptimeRouteWrapper: UMKibanaRouteWrapper = (uptimeRoute, server) => handler: async (context, request, response) => { const { client: esClient } = context.core.elasticsearch; let savedObjectsClient: SavedObjectsClientContract; - if (server.config?.unsafe?.service?.enabled) { + if (server.config?.service?.enabled) { savedObjectsClient = context.core.savedObjects.getClient({ includedHiddenTypes: [syntheticsServiceApiKey.name], }); diff --git a/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/alert_types.ts b/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/alert_types.ts index 1a93ee375d9b60..a99de22181766e 100644 --- a/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/alert_types.ts +++ b/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/alert_types.ts @@ -465,6 +465,45 @@ function getPatternFiringAlertType() { return result; } +function getPatternSuccessOrFailureAlertType() { + const paramsSchema = schema.object({ + pattern: schema.arrayOf(schema.oneOf([schema.boolean(), schema.string()])), + }); + type ParamsType = TypeOf; + interface State extends AlertTypeState { + patternIndex?: number; + } + const result: RuleType = { + id: 'test.patternSuccessOrFailure', + name: 'Test: Succeeding or failing on a Pattern', + actionGroups: [{ id: 'default', name: 'Default' }], + producer: 'alertsFixture', + defaultActionGroupId: 'default', + minimumLicenseRequired: 'basic', + isExportable: true, + async executor(alertExecutorOptions) { + const { state, params } = alertExecutorOptions; + const pattern = params.pattern; + if (!Array.isArray(pattern)) throw new Error('pattern is not an array'); + + // get the pattern index, return if past it + const patternIndex = state.patternIndex ?? 0; + if (patternIndex >= pattern.length) { + return { patternIndex }; + } + + if (!pattern[patternIndex]) { + throw new Error('Failed to execute alert type'); + } + + return { + patternIndex: patternIndex + 1, + }; + }, + }; + return result; +} + function getLongRunningPatternRuleType(cancelAlertsOnRuleTimeout: boolean = true) { let globalPatternIndex = 0; const paramsSchema = schema.object({ @@ -685,4 +724,5 @@ export function defineAlertTypes( alerting.registerType(getLongRunningPatternRuleType()); alerting.registerType(getLongRunningPatternRuleType(false)); alerting.registerType(getCancellableRuleType()); + alerting.registerType(getPatternSuccessOrFailureAlertType()); } diff --git a/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/plugin.ts b/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/plugin.ts index 5674e644f9c21f..7937a9a2db92c6 100644 --- a/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/plugin.ts +++ b/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/plugin.ts @@ -59,6 +59,7 @@ export class FixturePlugin implements Plugin { + const badEmailConnector = await supertest.get( + `${getUrlPrefix(``)}/api/actions/connector/0f8f2810-0a59-11ec-9a7c-fd0c2b83ff7d` + ); + + expect(badEmailConnector.status).to.eql(200); + expect(badEmailConnector.body.secrets).to.eql(undefined); + + const response = await supertest + .post( + `${getUrlPrefix(``)}/api/actions/connector/0f8f2810-0a59-11ec-9a7c-fd0c2b83ff7d/_execute` + ) + .set('kbn-xsrf', 'foo') + .send({ + params: { + message: 'am i working?', + to: ['user@test.com'], + subject: 'test', + }, + }); + + expect(response.status).to.eql(200); + expect(response.body).to.eql({ + connector_id: '0f8f2810-0a59-11ec-9a7c-fd0c2b83ff7d', + status: 'error', + message: `error validating action type connector: secrets must be defined`, + retry: false, + }); + }); }); } diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts index 7eb7cf5efc7d35..dc438fa1e329dd 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/create.ts @@ -94,6 +94,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { created_at: response.body.created_at, updated_at: response.body.updated_at, execution_status: response.body.execution_status, + monitoring: response.body.monitoring, }); expect(Date.parse(response.body.created_at)).to.be.greaterThan(0); expect(Date.parse(response.body.updated_at)).to.be.greaterThan(0); @@ -188,6 +189,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { created_at: response.body.created_at, updated_at: response.body.updated_at, execution_status: response.body.execution_status, + monitoring: response.body.monitoring, }); const esResponse = await es.get>( @@ -435,6 +437,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { createdAt: response.body.createdAt, updatedAt: response.body.updatedAt, executionStatus: response.body.executionStatus, + monitoring: response.body.monitoring, }); expect(Date.parse(response.body.createdAt)).to.be.greaterThan(0); expect(Date.parse(response.body.updatedAt)).to.be.greaterThan(0); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/find.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/find.ts index 191bcb1bb52f0c..729bf42817bd77 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/find.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/find.ts @@ -69,6 +69,7 @@ export default function createFindTests({ getService }: FtrProviderContext) { created_at: match.created_at, updated_at: match.updated_at, execution_status: match.execution_status, + monitoring: match.monitoring, }); expect(Date.parse(match.created_at)).to.be.greaterThan(0); expect(Date.parse(match.updated_at)).to.be.greaterThan(0); @@ -155,6 +156,7 @@ export default function createFindTests({ getService }: FtrProviderContext) { createdAt: match.createdAt, updatedAt: match.updatedAt, executionStatus: match.executionStatus, + monitoring: match.monitoring, }); expect(Date.parse(match.createdAt)).to.be.greaterThan(0); expect(Date.parse(match.updatedAt)).to.be.greaterThan(0); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get.ts index 5245488dcb7b43..4c2ff47e82b7fe 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/get.ts @@ -53,6 +53,7 @@ export default function createGetTests({ getService }: FtrProviderContext) { created_at: response.body.created_at, updated_at: response.body.updated_at, execution_status: response.body.execution_status, + monitoring: response.body.monitoring, }); expect(Date.parse(response.body.created_at)).to.be.greaterThan(0); expect(Date.parse(response.body.updated_at)).to.be.greaterThan(0); @@ -118,6 +119,7 @@ export default function createGetTests({ getService }: FtrProviderContext) { createdAt: response.body.createdAt, updatedAt: response.body.updatedAt, executionStatus: response.body.executionStatus, + monitoring: response.body.monitoring, }); expect(Date.parse(response.body.createdAt)).to.be.greaterThan(0); expect(Date.parse(response.body.updatedAt)).to.be.greaterThan(0); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts index c364b1f054a9dc..242c6ffcba10f4 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts @@ -26,6 +26,7 @@ export default function alertingTests({ loadTestFile, getService }: FtrProviderC loadTestFile(require.resolve('./rule_types')); loadTestFile(require.resolve('./event_log')); loadTestFile(require.resolve('./execution_status')); + loadTestFile(require.resolve('./monitoring')); loadTestFile(require.resolve('./mute_all')); loadTestFile(require.resolve('./mute_instance')); loadTestFile(require.resolve('./unmute_all')); @@ -42,6 +43,7 @@ export default function alertingTests({ loadTestFile, getService }: FtrProviderC loadTestFile(require.resolve('./ephemeral')); loadTestFile(require.resolve('./event_log_alerts')); loadTestFile(require.resolve('./scheduled_task_id')); + // Do not place test files here, due to https://github.com/elastic/kibana/issues/123059 // note that this test will destroy existing spaces loadTestFile(require.resolve('./migrations')); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/monitoring.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/monitoring.ts new file mode 100644 index 00000000000000..aa3f50eb0e4bed --- /dev/null +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/monitoring.ts @@ -0,0 +1,127 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { Spaces } from '../../scenarios'; +import { getUrlPrefix, getTestAlertData, ObjectRemover } from '../../../common/lib'; +import { FtrProviderContext } from '../../../common/ftr_provider_context'; + +// eslint-disable-next-line import/no-default-export +export default function monitoringAlertTests({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + describe('monitoring', () => { + const objectRemover = new ObjectRemover(supertest); + + after(async () => await objectRemover.removeAll()); + + it('should return an accurate history for a single success', async () => { + const createResponse = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send(getTestAlertData({ schedule: { interval: '3s' } })); + expect(createResponse.status).to.eql(200); + objectRemover.add(Spaces.space1.id, createResponse.body.id, 'rule', 'alerting'); + + // Allow at least one execution + await waitForExecutionCount(1, createResponse.body.id); + + const getResponse = await supertest.get( + `${getUrlPrefix(Spaces.space1.id)}/api/alerting/rule/${createResponse.body.id}` + ); + expect(getResponse.status).to.eql(200); + + expect(getResponse.body.monitoring.execution.history.length).to.be(1); + expect(getResponse.body.monitoring.execution.history[0].success).to.be(true); + expect(getResponse.body.monitoring.execution.calculated_metrics.success_ratio).to.be(1); + }); + + it('should return an accurate history for multiple success', async () => { + const createResponse = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send(getTestAlertData({ schedule: { interval: '3s' } })); + expect(createResponse.status).to.eql(200); + objectRemover.add(Spaces.space1.id, createResponse.body.id, 'rule', 'alerting'); + + // Allow at least three executions + await waitForExecutionCount(3, createResponse.body.id); + + const getResponse = await supertest.get( + `${getUrlPrefix(Spaces.space1.id)}/api/alerting/rule/${createResponse.body.id}` + ); + expect(getResponse.status).to.eql(200); + + expect(getResponse.body.monitoring.execution.history.length).to.be(3); + expect(getResponse.body.monitoring.execution.history[0].success).to.be(true); + expect(getResponse.body.monitoring.execution.history[1].success).to.be(true); + expect(getResponse.body.monitoring.execution.history[2].success).to.be(true); + expect(getResponse.body.monitoring.execution.calculated_metrics.success_ratio).to.be(1); + }); + + it('should return an accurate history for some successes and some failures', async () => { + const pattern = [true, true, true, false, false]; // Once we start failing, the rule type doesn't update state so the failures have to be at the end + const createResponse = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestAlertData({ + rule_type_id: 'test.patternSuccessOrFailure', + schedule: { interval: '3s' }, + params: { + pattern, + }, + }) + ); + expect(createResponse.status).to.eql(200); + objectRemover.add(Spaces.space1.id, createResponse.body.id, 'rule', 'alerting'); + + // Allow at least three executions + await waitForExecutionCount(5, createResponse.body.id); + + const getResponse = await supertest.get( + `${getUrlPrefix(Spaces.space1.id)}/api/alerting/rule/${createResponse.body.id}` + ); + expect(getResponse.status).to.eql(200); + + expect(getResponse.body.monitoring.execution.history.length).to.be(5); + expect(getResponse.body.monitoring.execution.history[0].success).to.be(true); + expect(getResponse.body.monitoring.execution.history[1].success).to.be(true); + expect(getResponse.body.monitoring.execution.history[2].success).to.be(true); + expect(getResponse.body.monitoring.execution.history[3].success).to.be(false); + expect(getResponse.body.monitoring.execution.history[4].success).to.be(false); + expect(getResponse.body.monitoring.execution.calculated_metrics.success_ratio).to.be(0.6); + }); + }); + + const MAX_ATTEMPTS = 25; + let attempts = 0; + async function waitForExecutionCount(count: number, id: string): Promise { + if (attempts++ >= MAX_ATTEMPTS) { + expect().fail(`waiting for execution of alert ${id} to hit ${count}`); + return true; + } + const getResponse = await supertest.get( + `${getUrlPrefix(Spaces.space1.id)}/api/alerting/rule/${id}` + ); + expect(getResponse.status).to.eql(200); + if (getResponse.body.monitoring.execution.history.length >= count) { + attempts = 0; + return true; + } + // eslint-disable-next-line no-console + console.log( + `found ${getResponse.body.monitoring.execution.history.length} and looking for ${count}, waiting 3s then retrying` + ); + await delay(3000); + return waitForExecutionCount(count, id); + } + + async function delay(millis: number): Promise { + await new Promise((resolve) => setTimeout(resolve, millis)); + } +} diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/update.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/update.ts index 326fb0bfac4656..f6d5ed99d36bf3 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/update.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/update.ts @@ -61,6 +61,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { created_at: response.body.created_at, updated_at: response.body.updated_at, execution_status: response.body.execution_status, + monitoring: response.body.monitoring, }); expect(Date.parse(response.body.created_at)).to.be.greaterThan(0); expect(Date.parse(response.body.updated_at)).to.be.greaterThan(0); @@ -149,6 +150,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { createdAt: response.body.createdAt, updatedAt: response.body.updatedAt, executionStatus: response.body.executionStatus, + monitoring: response.body.monitoring, }); expect(Date.parse(response.body.createdAt)).to.be.greaterThan(0); expect(Date.parse(response.body.updatedAt)).to.be.greaterThan(0); diff --git a/x-pack/test/api_integration/apis/metrics_ui/metric_threshold_alert.ts b/x-pack/test/api_integration/apis/metrics_ui/metric_threshold_alert.ts index ecefef2fe930c4..d0fac5a7bd170f 100644 --- a/x-pack/test/api_integration/apis/metrics_ui/metric_threshold_alert.ts +++ b/x-pack/test/api_integration/apis/metrics_ui/metric_threshold_alert.ts @@ -100,7 +100,7 @@ export default function ({ getService }: FtrProviderContext) { }; const timeFrame = { end: DATES.ten_thousand_plus.max }; const kbnClient = convertToKibanaClient(esClient); - const results = await evaluateRule(kbnClient, params, config, [], timeFrame); + const results = await evaluateRule(kbnClient, params, config, [], 10000, timeFrame); expect(results).to.eql([ { '*': { @@ -142,7 +142,7 @@ export default function ({ getService }: FtrProviderContext) { }; const timeFrame = { end: DATES.ten_thousand_plus.max }; const kbnClient = convertToKibanaClient(esClient); - const results = await evaluateRule(kbnClient, params, config, [], timeFrame); + const results = await evaluateRule(kbnClient, params, config, [], 10000, timeFrame); expect(results).to.eql([ { web: { @@ -184,7 +184,14 @@ export default function ({ getService }: FtrProviderContext) { }; const timeFrame = { end: gauge.max }; const kbnClient = convertToKibanaClient(esClient); - const results = await evaluateRule(kbnClient, params, configuration, [], timeFrame); + const results = await evaluateRule( + kbnClient, + params, + configuration, + [], + 10000, + timeFrame + ); expect(results).to.eql([ { '*': { @@ -208,7 +215,14 @@ export default function ({ getService }: FtrProviderContext) { const params = { ...baseParams }; const timeFrame = { end: gauge.max }; const kbnClient = convertToKibanaClient(esClient); - const results = await evaluateRule(kbnClient, params, configuration, [], timeFrame); + const results = await evaluateRule( + kbnClient, + params, + configuration, + [], + 10000, + timeFrame + ); expect(results).to.eql([ { '*': { @@ -246,7 +260,14 @@ export default function ({ getService }: FtrProviderContext) { }; const timeFrame = { end: gauge.max }; const kbnClient = convertToKibanaClient(esClient); - const results = await evaluateRule(kbnClient, params, configuration, [], timeFrame); + const results = await evaluateRule( + kbnClient, + params, + configuration, + [], + 10000, + timeFrame + ); expect(results).to.eql([ { dev: { @@ -287,7 +308,14 @@ export default function ({ getService }: FtrProviderContext) { }; const timeFrame = { end: gauge.max }; const kbnClient = convertToKibanaClient(esClient); - const results = await evaluateRule(kbnClient, params, configuration, [], timeFrame); + const results = await evaluateRule( + kbnClient, + params, + configuration, + [], + 10000, + timeFrame + ); expect(results).to.eql([ { dev: { @@ -334,6 +362,7 @@ export default function ({ getService }: FtrProviderContext) { params, configuration, ['dev', 'prod'], + 10000, timeFrame ); expect(results).to.eql([ @@ -392,7 +421,14 @@ export default function ({ getService }: FtrProviderContext) { }; const timeFrame = { end: rate.max }; const kbnClient = convertToKibanaClient(esClient); - const results = await evaluateRule(kbnClient, params, configuration, [], timeFrame); + const results = await evaluateRule( + kbnClient, + params, + configuration, + [], + 10000, + timeFrame + ); expect(results).to.eql([ { '*': { @@ -433,7 +469,14 @@ export default function ({ getService }: FtrProviderContext) { }; const timeFrame = { end: rate.max }; const kbnClient = convertToKibanaClient(esClient); - const results = await evaluateRule(kbnClient, params, configuration, [], timeFrame); + const results = await evaluateRule( + kbnClient, + params, + configuration, + [], + 10000, + timeFrame + ); expect(results).to.eql([ { dev: { diff --git a/x-pack/test/api_integration/apis/metrics_ui/metrics_alerting.ts b/x-pack/test/api_integration/apis/metrics_ui/metrics_alerting.ts index eb8888a613dc3c..fd9767e13d9ef3 100644 --- a/x-pack/test/api_integration/apis/metrics_ui/metrics_alerting.ts +++ b/x-pack/test/api_integration/apis/metrics_ui/metrics_alerting.ts @@ -37,7 +37,7 @@ export default function ({ getService }: FtrProviderContext) { start: moment().subtract(25, 'minutes').valueOf(), end: moment().valueOf(), }; - const searchBody = getElasticsearchMetricQuery(getSearchParams(aggType), timeframe); + const searchBody = getElasticsearchMetricQuery(getSearchParams(aggType), timeframe, 100); const result = await client.search({ index, // @ts-expect-error @elastic/elasticsearch AggregationsBucketsPath is not valid @@ -58,6 +58,7 @@ export default function ({ getService }: FtrProviderContext) { const searchBody = getElasticsearchMetricQuery( getSearchParams('avg'), timeframe, + 100, undefined, '{"bool":{"should":[{"match_phrase":{"agent.hostname":"foo"}}],"minimum_should_match":1}}' ); @@ -81,6 +82,7 @@ export default function ({ getService }: FtrProviderContext) { const searchBody = getElasticsearchMetricQuery( getSearchParams(aggType), timeframe, + 100, 'agent.id' ); const result = await client.search({ @@ -101,6 +103,7 @@ export default function ({ getService }: FtrProviderContext) { const searchBody = getElasticsearchMetricQuery( getSearchParams('avg'), timeframe, + 100, 'agent.id', '{"bool":{"should":[{"match_phrase":{"agent.hostname":"foo"}}],"minimum_should_match":1}}' ); diff --git a/x-pack/test/api_integration/apis/search/search.ts b/x-pack/test/api_integration/apis/search/search.ts index d36121a102a283..e4596163048438 100644 --- a/x-pack/test/api_integration/apis/search/search.ts +++ b/x-pack/test/api_integration/apis/search/search.ts @@ -6,17 +6,53 @@ */ import expect from '@kbn/expect'; +import type { Context } from 'mocha'; import { FtrProviderContext } from '../../ftr_provider_context'; import { verifyErrorResponse } from '../../../../../test/api_integration/apis/search/verify_error'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); + const es = getService('es'); + const log = getService('log'); + const retry = getService('retry'); + + const shardDelayAgg = (delay: string) => ({ + aggs: { + delay: { + shard_delay: { + value: delay, + }, + }, + }, + }); + + async function markRequiresShardDelayAgg(testContext: Context) { + const body = await es.info(); + if (!body.version.number.includes('SNAPSHOT')) { + log.debug('Skipping because this build does not have the required shard_delay agg'); + testContext.skip(); + } + } describe('search', () => { - // https://github.com/elastic/kibana/issues/113082 - describe.skip('post', () => { - it('should return 200 with final response if wait_for_completion_timeout is long enough', async () => { + before(async () => { + // ensure es not empty + await es.index({ + index: 'search-api-test', + id: 'search-api-test-doc', + body: { message: 'test doc' }, + refresh: 'wait_for', + }); + }); + after(async () => { + await es.indices.delete({ + index: 'search-api-test', + }); + }); + + describe('post', () => { + it('should return 200 with final response without search id if wait_for_completion_timeout is long enough', async function () { const resp = await supertest .post(`/internal/search/ese`) .set('kbn-xsrf', 'foo') @@ -27,7 +63,7 @@ export default function ({ getService }: FtrProviderContext) { match_all: {}, }, }, - wait_for_completion_timeout: '1000s', + wait_for_completion_timeout: '10s', }, }) .expect(200); @@ -39,7 +75,9 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.body).to.have.property('rawResponse'); }); - it('should return 200 with partial response if wait_for_completion_timeout is not long enough', async () => { + it('should return 200 with search id and partial response if wait_for_completion_timeout is not long enough', async function () { + await markRequiresShardDelayAgg(this); + const resp = await supertest .post(`/internal/search/ese`) .set('kbn-xsrf', 'foo') @@ -49,6 +87,7 @@ export default function ({ getService }: FtrProviderContext) { query: { match_all: {}, }, + ...shardDelayAgg('3s'), }, wait_for_completion_timeout: '1ms', }, @@ -62,7 +101,9 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.body).to.have.property('rawResponse'); }); - it('should retrieve results with id', async () => { + it('should retrieve results from completed search with search id', async function () { + await markRequiresShardDelayAgg(this); + const resp = await supertest .post(`/internal/search/ese`) .set('kbn-xsrf', 'foo') @@ -72,6 +113,7 @@ export default function ({ getService }: FtrProviderContext) { query: { match_all: {}, }, + ...shardDelayAgg('3s'), }, wait_for_completion_timeout: '1ms', }, @@ -79,8 +121,50 @@ export default function ({ getService }: FtrProviderContext) { .expect(200); const { id } = resp.body; + expect(id).not.to.be(undefined); + expect(resp.body.isPartial).to.be(true); + expect(resp.body.isRunning).to.be(true); + + await new Promise((resolve) => setTimeout(resolve, 3000)); + + await retry.tryForTime(10000, async () => { + const resp2 = await supertest + .post(`/internal/search/ese/${id}`) + .set('kbn-xsrf', 'foo') + .send({}) + .expect(200); + + expect(resp2.body.id).not.to.be(undefined); + expect(resp2.body.isPartial).to.be(false); + expect(resp2.body.isRunning).to.be(false); - await new Promise((resolve) => setTimeout(resolve, 2000)); + return true; + }); + }); + + it('should retrieve results from in-progress search with search id', async function () { + await markRequiresShardDelayAgg(this); + + const resp = await supertest + .post(`/internal/search/ese`) + .set('kbn-xsrf', 'foo') + .send({ + params: { + body: { + query: { + match_all: {}, + }, + ...shardDelayAgg('10s'), + }, + wait_for_completion_timeout: '1ms', + }, + }) + .expect(200); + + const { id } = resp.body; + expect(id).not.to.be(undefined); + expect(resp.body.isPartial).to.be(true); + expect(resp.body.isRunning).to.be(true); const resp2 = await supertest .post(`/internal/search/ese/${id}`) @@ -89,8 +173,8 @@ export default function ({ getService }: FtrProviderContext) { .expect(200); expect(resp2.body.id).not.to.be(undefined); - expect(resp2.body.isPartial).to.be(false); - expect(resp2.body.isRunning).to.be(false); + expect(resp2.body.isPartial).to.be(true); + expect(resp2.body.isRunning).to.be(true); }); it('should fail without kbn-xref header', async () => { @@ -147,7 +231,7 @@ export default function ({ getService }: FtrProviderContext) { verifyErrorResponse(resp.body, 400, 'illegal_argument_exception', true); }); - it('should return 404 if unkown id is provided', async () => { + it('should return 404 if unknown id is provided', async () => { const resp = await supertest .post( `/internal/search/ese/FkxOb21iV1g2VGR1S2QzaWVtRU9fMVEbc3JWeWc1VHlUdDZ6MENxcXlYVG1Fdzo2NDg4` @@ -250,8 +334,7 @@ export default function ({ getService }: FtrProviderContext) { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/119272 - describe.skip('delete', () => { + describe('delete', () => { it('should return 404 when no search id provided', async () => { await supertest.delete(`/internal/search/ese`).set('kbn-xsrf', 'foo').send().expect(404); }); @@ -265,7 +348,47 @@ export default function ({ getService }: FtrProviderContext) { verifyErrorResponse(resp.body, 400, 'illegal_argument_exception', true); }); - it('should delete a search', async () => { + it('should delete an in-progress search', async function () { + await markRequiresShardDelayAgg(this); + + const resp = await supertest + .post(`/internal/search/ese`) + .set('kbn-xsrf', 'foo') + .send({ + params: { + body: { + query: { + match_all: {}, + }, + ...shardDelayAgg('10s'), + }, + wait_for_completion_timeout: '1ms', + }, + }) + .expect(200); + + const { id } = resp.body; + expect(id).not.to.be(undefined); + expect(resp.body.isPartial).to.be(true); + expect(resp.body.isRunning).to.be(true); + + await supertest + .delete(`/internal/search/ese/${id}`) + .set('kbn-xsrf', 'foo') + .send() + .expect(200); + + // try to re-fetch + await supertest + .post(`/internal/search/ese/${id}`) + .set('kbn-xsrf', 'foo') + .send({}) + .expect(404); + }); + + it('should delete a completed search', async function () { + await markRequiresShardDelayAgg(this); + const resp = await supertest .post(`/internal/search/ese`) .set('kbn-xsrf', 'foo') @@ -275,6 +398,7 @@ export default function ({ getService }: FtrProviderContext) { query: { match_all: {}, }, + ...shardDelayAgg('3s'), }, wait_for_completion_timeout: '1ms', }, @@ -282,6 +406,26 @@ export default function ({ getService }: FtrProviderContext) { .expect(200); const { id } = resp.body; + expect(id).not.to.be(undefined); + expect(resp.body.isPartial).to.be(true); + expect(resp.body.isRunning).to.be(true); + + await new Promise((resolve) => setTimeout(resolve, 3000)); + + await retry.tryForTime(10000, async () => { + const resp2 = await supertest + .post(`/internal/search/ese/${id}`) + .set('kbn-xsrf', 'foo') + .send({}) + .expect(200); + + expect(resp2.body.id).not.to.be(undefined); + expect(resp2.body.isPartial).to.be(false); + expect(resp2.body.isRunning).to.be(false); + + return true; + }); + await supertest .delete(`/internal/search/ese/${id}`) .set('kbn-xsrf', 'foo') diff --git a/x-pack/test/api_integration/apis/upgrade_assistant/cloud_backup_status.ts b/x-pack/test/api_integration/apis/upgrade_assistant/cloud_backup_status.ts index 0652911839742d..680b51d55ebd06 100644 --- a/x-pack/test/api_integration/apis/upgrade_assistant/cloud_backup_status.ts +++ b/x-pack/test/api_integration/apis/upgrade_assistant/cloud_backup_status.ts @@ -12,6 +12,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const es = getService('es'); + const deployment = getService('deployment'); const CLOUD_SNAPSHOT_REPOSITORY = 'found-snapshots'; @@ -50,16 +51,16 @@ export default function ({ getService }: FtrProviderContext) { }; describe('Cloud backup status', function () { - // file system repositories are not supported in cloud - this.tags(['skipCloud']); - describe('get', () => { describe('with backups present', () => { // Needs SnapshotInfo type https://github.com/elastic/elasticsearch-specification/issues/685 let mostRecentSnapshot: any; before(async () => { - await createCloudRepository(); + const isCloud = await deployment.isCloud(); + if (!isCloud) { + await createCloudRepository(); + } await createCloudSnapshot('test_snapshot_1'); mostRecentSnapshot = (await createCloudSnapshot('test_snapshot_2')).snapshot; }); @@ -81,6 +82,8 @@ export default function ({ getService }: FtrProviderContext) { }); describe('without backups present', () => { + // snapshot repository on Cloud always has a snapshot so the status is returned as backed up + this.tags(['skipCloud']); it('returns not-backed-up status', async () => { const { body: cloudBackupStatus } = await supertest .get('/api/upgrade_assistant/cloud_backup_status') diff --git a/x-pack/test/api_integration/config.ts b/x-pack/test/api_integration/config.ts index dde3b827bcdae2..87306e78b0edc1 100644 --- a/x-pack/test/api_integration/config.ts +++ b/x-pack/test/api_integration/config.ts @@ -35,10 +35,10 @@ export async function getApiIntegrationConfig({ readConfigFile }: FtrConfigProvi '--xpack.ruleRegistry.write.enabled=true', '--xpack.ruleRegistry.write.enabled=true', '--xpack.ruleRegistry.write.cache.enabled=false', - '--xpack.uptime.unsafe.service.enabled=true', - '--xpack.uptime.unsafe.service.password=test', - '--xpack.uptime.unsafe.service.manifestUrl=http://test.com', - '--xpack.uptime.unsafe.service.username=localKibanaIntegrationTestsUser', + '--xpack.uptime.service.enabled=true', + '--xpack.uptime.service.password=test', + '--xpack.uptime.service.manifestUrl=http://test.com', + '--xpack.uptime.service.username=localKibanaIntegrationTestsUser', `--xpack.securitySolution.enableExperimental=${JSON.stringify(['ruleRegistryEnabled'])}`, ], }, diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/migrations.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/migrations.ts index 67e30987fabaca..0711b78159d077 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/migrations.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/comments/migrations.ts @@ -11,12 +11,15 @@ import { CASES_URL, SECURITY_SOLUTION_OWNER, } from '../../../../../../plugins/cases/common/constants'; -import { getComment } from '../../../../common/lib/utils'; +import { deleteAllCaseItems, getComment } from '../../../../common/lib/utils'; +import { CommentResponseAlertsType } from '../../../../../../plugins/cases/common/api'; // eslint-disable-next-line import/no-default-export export default function createGetTests({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); + const es = getService('es'); + const kibanaServer = getService('kibanaServer'); describe('migrations', () => { describe('7.11.0', () => { @@ -59,5 +62,42 @@ export default function createGetTests({ getService }: FtrProviderContext) { expect(comment.owner).to.be(SECURITY_SOLUTION_OWNER); }); }); + + describe('8.0.0', () => { + before(async () => { + await kibanaServer.importExport.load( + 'x-pack/test/functional/fixtures/kbn_archiver/cases/7.13.2/alerts.json' + ); + }); + + after(async () => { + await kibanaServer.importExport.unload( + 'x-pack/test/functional/fixtures/kbn_archiver/cases/7.13.2/alerts.json' + ); + await deleteAllCaseItems(es); + }); + + it('removes the rule information from alert attachments', async () => { + const comment = (await getComment({ + supertest, + caseId: 'e49ad6e0-cf9d-11eb-a603-13e7747d215c', + commentId: 'ee59cdd0-cf9d-11eb-a603-13e7747d215c', + })) as CommentResponseAlertsType; + + expect(comment).to.have.property('rule'); + expect(comment.rule.id).to.be(null); + expect(comment.rule.name).to.be(null); + }); + + it('does not modify non-alert attachments', async () => { + const comment = (await getComment({ + supertest, + caseId: 'e49ad6e0-cf9d-11eb-a603-13e7747d215c', + commentId: 'ae59cdd0-cf9d-11eb-a603-13e7747d215c', + })) as CommentResponseAlertsType; + + expect(comment).to.not.have.property('rule'); + }); + }); }); } diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts index 66fbd96d8f62dc..74b9401904d8c7 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts @@ -42,6 +42,7 @@ export default ({ loadTestFile }: FtrProviderContext): void => { loadTestFile(require.resolve('./metrics/get_case_metrics')); loadTestFile(require.resolve('./metrics/get_case_metrics_alerts')); loadTestFile(require.resolve('./metrics/get_case_metrics_actions')); + loadTestFile(require.resolve('./metrics/get_case_metrics_connectors')); // NOTE: Migrations are not included because they can inadvertently remove the .kibana indices which removes the users and spaces // which causes errors in any tests after them that relies on those diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/metrics/get_case_metrics_connectors.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/metrics/get_case_metrics_connectors.ts new file mode 100644 index 00000000000000..adfb22d3cf145f --- /dev/null +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/metrics/get_case_metrics_connectors.ts @@ -0,0 +1,138 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { getPostCaseRequest } from '../../../../common/lib/mock'; +import { ObjectRemover as ActionsRemover } from '../../../../../alerting_api_integration/common/lib'; + +import { FtrProviderContext } from '../../../../common/ftr_provider_context'; +import { + createCase, + deleteAllCaseItems, + getCaseMetrics, + updateCase, +} from '../../../../common/lib/utils'; +import { ConnectorTypes } from '../../../../../../plugins/cases/common/api'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const supertest = getService('supertest'); + const es = getService('es'); + + describe('case connector metrics', () => { + const actionsRemover = new ActionsRemover(supertest); + const jiraConnector = { + id: 'jira', + name: 'Jira', + type: ConnectorTypes.jira as const, + fields: { issueType: 'Task', priority: 'High', parent: null }, + }; + + const snConnector = { + id: 'sn', + name: 'SN', + type: ConnectorTypes.serviceNowITSM as const, + fields: { + urgency: '2', + impact: '2', + severity: '2', + category: 'software', + subcategory: 'os', + }, + }; + + afterEach(async () => { + await deleteAllCaseItems(es); + await actionsRemover.removeAll(); + }); + + describe('total connectors', () => { + const expectConnectorsToBe = async (caseId: string, expectedConnectors: number) => { + const metrics = await getCaseMetrics({ + supertest, + caseId, + features: ['connectors'], + }); + + expect(metrics).to.eql({ + connectors: { + total: expectedConnectors, + }, + }); + }; + + it('returns zero total connectors for a case with no connectors attached', async () => { + const theCase = await createCase(supertest, getPostCaseRequest()); + await expectConnectorsToBe(theCase.id, 0); + }); + + it('takes into account the connector from the create_case user action', async () => { + const theCase = await createCase( + supertest, + getPostCaseRequest({ + connector: jiraConnector, + }) + ); + await expectConnectorsToBe(theCase.id, 1); + }); + + it('returns the correct total number of connectors', async () => { + const theCase = await createCase(supertest, getPostCaseRequest()); + + /** + * We update the case three times to create three user actions + * Each user action created is of type connector. + * Although we have three user actions the metric + * should return two total connectors + * as the third update changes the fields + * of the Jira connector and does not adds + * a new connector. + */ + let patchedCases = await updateCase({ + supertest, + params: { + cases: [ + { + id: theCase.id, + version: theCase.version, + connector: jiraConnector, + }, + ], + }, + }); + + patchedCases = await updateCase({ + supertest, + params: { + cases: [ + { + id: theCase.id, + version: patchedCases[0].version, + connector: snConnector, + }, + ], + }, + }); + + await updateCase({ + supertest, + params: { + cases: [ + { + id: theCase.id, + version: patchedCases[0].version, + connector: { ...jiraConnector, fields: { ...jiraConnector.fields, urgency: '1' } }, + }, + ], + }, + }); + + await expectConnectorsToBe(theCase.id, 2); + }); + }); + }); +}; diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/user_actions/migrations.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/user_actions/migrations.ts index 62d1ba17ff4db2..782af13ca6b5f7 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/user_actions/migrations.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/user_actions/migrations.ts @@ -12,7 +12,7 @@ import { SECURITY_SOLUTION_OWNER, } from '../../../../../../plugins/cases/common/constants'; import { deleteAllCaseItems, getCaseUserActions } from '../../../../common/lib/utils'; -import { CaseUserActionsResponse } from '../../../../../../plugins/cases/common/api'; +import { CaseUserActionsResponse, CommentType } from '../../../../../../plugins/cases/common/api'; // eslint-disable-next-line import/no-default-export export default function createGetTests({ getService }: FtrProviderContext) { @@ -661,6 +661,53 @@ export default function createGetTests({ getService }: FtrProviderContext) { }); describe('8.0.0', () => { + before(async () => { + await kibanaServer.importExport.load( + 'x-pack/test/functional/fixtures/kbn_archiver/cases/7.13.2/alerts.json' + ); + }); + + after(async () => { + await kibanaServer.importExport.unload( + 'x-pack/test/functional/fixtures/kbn_archiver/cases/7.13.2/alerts.json' + ); + await deleteAllCaseItems(es); + }); + + it('removes the rule information from alert user action', async () => { + const userActions = await getCaseUserActions({ + supertest, + caseID: 'e49ad6e0-cf9d-11eb-a603-13e7747d215c', + }); + + const userAction = getUserActionById(userActions, 'a5509250-cf9d-11eb-a603-13e7747d215c')!; + + expect(userAction.payload.comment.type).to.be(CommentType.alert); + expect(userAction.payload.comment.alertId).to.be( + '4eb4cd05b85bc65c7b9f22b776e0136f970f7538eb0d1b2e6e8c7d35b2e875cb' + ); + expect(userAction.payload.comment.index).to.be( + '.internal.alerts-security.alerts-default-000001' + ); + expect(userAction.payload.comment.rule.id).to.be(null); + expect(userAction.payload.comment.rule.name).to.be(null); + }); + + it('does not modify non-alert attachments', async () => { + const userActions = await getCaseUserActions({ + supertest, + caseID: 'e49ad6e0-cf9d-11eb-a603-13e7747d215c', + }); + + const userAction = getUserActionById(userActions, 'e5509250-cf9d-11eb-a603-13e7747d215c')!; + + expect(userAction.payload).to.not.have.property('rule'); + expect(userAction.payload.status).to.be('open'); + expect(userAction.payload.title).to.be('A case'); + }); + }); + + describe('8.1.0', () => { const CASE_ID = '5257a000-5e7d-11ec-9ee9-cd64f0b77b3c'; before(async () => { diff --git a/x-pack/test/detection_engine_api_integration/basic/tests/query_signals.ts b/x-pack/test/detection_engine_api_integration/basic/tests/query_signals.ts index 1c0c222c38bebb..3ef0a12cf70dc8 100644 --- a/x-pack/test/detection_engine_api_integration/basic/tests/query_signals.ts +++ b/x-pack/test/detection_engine_api_integration/basic/tests/query_signals.ts @@ -106,6 +106,41 @@ export default ({ getService }: FtrProviderContext) => { }); }); + describe('runtime fields', () => { + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/endpoint/resolver/signals'); + await createSignalsIndex(supertest, log); + }); + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/endpoint/resolver/signals'); + await deleteSignalsIndex(supertest, log); + }); + + it('should be able to filter using a runtime field defined in the request', async () => { + const query = { + query: { + bool: { + should: [{ match_phrase: { signal_status_querytime: 'open' } }], + }, + }, + runtime_mappings: { + signal_status_querytime: { + type: 'keyword', + script: { + source: `emit(doc['signal.status'].value)`, + }, + }, + }, + }; + const { body } = await supertest + .post(DETECTION_ENGINE_QUERY_SIGNALS_URL) + .set('kbn-xsrf', 'true') + .send(query) + .expect(200); + expect(body.hits.total.value).to.eql(3); + }); + }); + describe('find_alerts_route', () => { describe('validation checks', () => { it('should not give errors when querying and the signals index does not exist yet', async () => { diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/create_index.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/create_index.ts index fabc964692c7d7..17d6b3957637ae 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/create_index.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/create_index.ts @@ -11,6 +11,8 @@ import { DETECTION_ENGINE_INDEX_URL, } from '../../../../plugins/security_solution/common/constants'; +import { SIGNALS_FIELD_ALIASES_VERSION } from '../../../../plugins/security_solution/server/lib/detection_engine/routes/index/get_signals_template'; + import { FtrProviderContext } from '../../common/ftr_provider_context'; import { deleteSignalsIndex } from '../../utils'; @@ -81,7 +83,7 @@ export default ({ getService }: FtrProviderContext) => { }); // Make sure that aliases_version has been updated on the existing index expect(mappings['.siem-signals-default-000001'].mappings?._meta?.aliases_version).to.eql( - 1 + SIGNALS_FIELD_ALIASES_VERSION ); }); }); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/README.md b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/README.md index cfcf13e1d9f707..2760001a20626a 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/README.md +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/README.md @@ -1,8 +1,6 @@ These are tests for the telemetry rules within "security_solution/server/usage" * detection_rules -* legacy_notifications -Detection rules are tests around each of the rule types to affirm they work such as query, eql, etc... -Legacy notifications are tests around the legacy notification telemetry. Once legacy notifications are removed, -these tests can be removed too. +Detection rules are tests around each of the rule types to affirm they work such as query, eql, etc... This includes +legacy notifications. Once legacy notifications are moved, those tests can be removed too. diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/detection_rules.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/detection_rules.ts index bafc36c329eab3..f4228ed31f2796 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/detection_rules.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/detection_rules.ts @@ -8,26 +8,30 @@ import expect from '@kbn/expect'; import { DetectionMetrics } from '../../../../../plugins/security_solution/server/usage/detections/types'; import { - EqlCreateSchema, - QueryCreateSchema, ThreatMatchCreateSchema, ThresholdCreateSchema, } from '../../../../../plugins/security_solution/common/detection_engine/schemas/request'; import { FtrProviderContext } from '../../../common/ftr_provider_context'; import { + createLegacyRuleAction, + createNewAction, createRule, createSignalsIndex, deleteAllAlerts, deleteSignalsIndex, getEqlRuleForSignalTesting, + getRule, getRuleForSignalTesting, + getRuleWithWebHookAction, getSimpleMlRule, + getSimpleRule, getSimpleThreatMatch, getStats, getThresholdRuleForSignalTesting, installPrePackagedRules, waitForRuleSuccessOrStatus, waitForSignalsToBePresent, + updateRule, } from '../../../utils'; import { getInitialDetectionMetrics } from '../../../../../plugins/security_solution/server/usage/detections/detection_rule_helpers'; @@ -64,11 +68,769 @@ export default ({ getService }: FtrProviderContext) => { }); describe('"kql" rule type', () => { - it('should show stats for active rule', async () => { - const rule: QueryCreateSchema = getRuleForSignalTesting(['telemetry']); + it('should show "notifications_enabled", "notifications_disabled" "legacy_notifications_enabled", "legacy_notifications_disabled", all to be "0" for "disabled"/"in-active" rule that does not have any actions', async () => { + const rule = getRuleForSignalTesting(['telemetry'], 'rule-1', false); + await createRule(supertest, log, rule); + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + query: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + disabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + disabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_enabled", "notifications_disabled" "legacy_notifications_enabled", "legacy_notifications_disabled", all to be "0" for "enabled"/"active" rule that does not have any actions', async () => { + const rule = getRuleForSignalTesting(['telemetry']); + const { id } = await createRule(supertest, log, rule); + await waitForRuleSuccessOrStatus(supertest, log, id); + await waitForSignalsToBePresent(supertest, log, 4, [id]); + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + query: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + enabled: 1, + alerts: 4, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + enabled: 1, + alerts: 4, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_disabled" to be "1" for rule that has at least "1" action(s) and the alert is "disabled"/"in-active"', async () => { + const rule = getRuleForSignalTesting(['telemetry']); + const hookAction = await createNewAction(supertest, log); + const ruleToCreate = getRuleWithWebHookAction(hookAction.id, false, rule); + await createRule(supertest, log, ruleToCreate); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + query: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + notifications_disabled: 1, + disabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + notifications_disabled: 1, + disabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_enabled" to be "1" for rule that has at least "1" action(s) and the alert is "enabled"/"active"', async () => { + const rule = getRuleForSignalTesting(['telemetry']); + const hookAction = await createNewAction(supertest, log); + const ruleToCreate = getRuleWithWebHookAction(hookAction.id, true, rule); + const { id } = await createRule(supertest, log, ruleToCreate); + await waitForRuleSuccessOrStatus(supertest, log, id); + await waitForSignalsToBePresent(supertest, log, 4, [id]); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + query: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + enabled: 1, + alerts: 4, + notifications_enabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + enabled: 1, + alerts: 4, + notifications_enabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "legacy_notifications_disabled" to be "1" for rule that has at least "1" legacy action(s) and the alert is "disabled"/"in-active"', async () => { + const rule = getRuleForSignalTesting(['telemetry'], 'rule-1', false); + const { id } = await createRule(supertest, log, rule); + const hookAction = await createNewAction(supertest, log); + await createLegacyRuleAction(supertest, id, hookAction.id); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + query: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + disabled: 1, + legacy_notifications_disabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + disabled: 1, + legacy_notifications_disabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "legacy_notifications_enabled" to be "1" for rule that has at least "1" legacy action(s) and the alert is "enabled"/"active"', async () => { + const rule = getRuleForSignalTesting(['telemetry']); + const { id } = await createRule(supertest, log, rule); + const hookAction = await createNewAction(supertest, log); + await createLegacyRuleAction(supertest, id, hookAction.id); + await waitForRuleSuccessOrStatus(supertest, log, id); + await waitForSignalsToBePresent(supertest, log, 4, [id]); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + query: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + alerts: 4, + enabled: 1, + legacy_notifications_enabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + alerts: 4, + enabled: 1, + legacy_notifications_enabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + }); + + describe('"eql" rule type', () => { + it('should show "notifications_enabled", "notifications_disabled" "legacy_notifications_enabled", "legacy_notifications_disabled", all to be "0" for "disabled"/"in-active" rule that does not have any actions', async () => { + const rule = getEqlRuleForSignalTesting(['telemetry'], 'rule-1', false); + await createRule(supertest, log, rule); + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + eql: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.eql, + disabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + disabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_enabled", "notifications_disabled" "legacy_notifications_enabled", "legacy_notifications_disabled", all to be "0" for "enabled"/"active" rule that does not have any actions', async () => { + const rule = getEqlRuleForSignalTesting(['telemetry']); + const { id } = await createRule(supertest, log, rule); + await waitForRuleSuccessOrStatus(supertest, log, id); + await waitForSignalsToBePresent(supertest, log, 4, [id]); + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + eql: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.eql, + enabled: 1, + alerts: 4, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + enabled: 1, + alerts: 4, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_disabled" to be "1" for rule that has at least "1" action(s) and the alert is "disabled"/"in-active"', async () => { + const rule = getEqlRuleForSignalTesting(['telemetry']); + const hookAction = await createNewAction(supertest, log); + const ruleToCreate = getRuleWithWebHookAction(hookAction.id, false, rule); + await createRule(supertest, log, ruleToCreate); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + eql: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.eql, + notifications_disabled: 1, + disabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + notifications_disabled: 1, + disabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_enabled" to be "1" for rule that has at least "1" action(s) and the alert is "enabled"/"active"', async () => { + const rule = getEqlRuleForSignalTesting(['telemetry']); + const hookAction = await createNewAction(supertest, log); + const ruleToCreate = getRuleWithWebHookAction(hookAction.id, true, rule); + const { id } = await createRule(supertest, log, ruleToCreate); + await waitForRuleSuccessOrStatus(supertest, log, id); + await waitForSignalsToBePresent(supertest, log, 4, [id]); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + eql: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.eql, + enabled: 1, + alerts: 4, + notifications_enabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + enabled: 1, + alerts: 4, + notifications_enabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "legacy_notifications_disabled" to be "1" for rule that has at least "1" legacy action(s) and the alert is "disabled"/"in-active"', async () => { + const rule = getEqlRuleForSignalTesting(['telemetry'], 'rule-1', false); + const { id } = await createRule(supertest, log, rule); + const hookAction = await createNewAction(supertest, log); + await createLegacyRuleAction(supertest, id, hookAction.id); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + eql: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.eql, + disabled: 1, + legacy_notifications_disabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + disabled: 1, + legacy_notifications_disabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "legacy_notifications_enabled" to be "1" for rule that has at least "1" legacy action(s) and the alert is "enabled"/"active"', async () => { + const rule = getEqlRuleForSignalTesting(['telemetry']); + const { id } = await createRule(supertest, log, rule); + const hookAction = await createNewAction(supertest, log); + await createLegacyRuleAction(supertest, id, hookAction.id); + await waitForRuleSuccessOrStatus(supertest, log, id); + await waitForSignalsToBePresent(supertest, log, 4, [id]); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + eql: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.eql, + alerts: 4, + enabled: 1, + legacy_notifications_enabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + alerts: 4, + enabled: 1, + legacy_notifications_enabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + }); + + describe('"threshold" rule type', () => { + it('should show "notifications_enabled", "notifications_disabled" "legacy_notifications_enabled", "legacy_notifications_disabled", all to be "0" for "disabled"/"in-active" rule that does not have any actions', async () => { + const rule: ThresholdCreateSchema = { + ...getThresholdRuleForSignalTesting(['telemetry'], 'rule-1', false), + threshold: { + field: 'keyword', + value: 1, + }, + }; + await createRule(supertest, log, rule); + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + threshold: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threshold, + disabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + disabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_enabled", "notifications_disabled" "legacy_notifications_enabled", "legacy_notifications_disabled", all to be "0" for "enabled"/"active" rule that does not have any actions', async () => { + const rule: ThresholdCreateSchema = { + ...getThresholdRuleForSignalTesting(['telemetry']), + threshold: { + field: 'keyword', + value: 1, + }, + }; + const { id } = await createRule(supertest, log, rule); + await waitForRuleSuccessOrStatus(supertest, log, id); + await waitForSignalsToBePresent(supertest, log, 4, [id]); + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + threshold: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threshold, + enabled: 1, + alerts: 4, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + enabled: 1, + alerts: 4, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_disabled" to be "1" for rule that has at least "1" action(s) and the alert is "disabled"/"in-active"', async () => { + const rule: ThresholdCreateSchema = { + ...getThresholdRuleForSignalTesting(['telemetry'], 'rule-1', false), + threshold: { + field: 'keyword', + value: 1, + }, + }; + const hookAction = await createNewAction(supertest, log); + const ruleToCreate = getRuleWithWebHookAction(hookAction.id, false, rule); + await createRule(supertest, log, ruleToCreate); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + threshold: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threshold, + notifications_disabled: 1, + disabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + notifications_disabled: 1, + disabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_enabled" to be "1" for rule that has at least "1" action(s) and the alert is "enabled"/"active"', async () => { + const rule: ThresholdCreateSchema = { + ...getThresholdRuleForSignalTesting(['telemetry']), + threshold: { + field: 'keyword', + value: 1, + }, + }; + const hookAction = await createNewAction(supertest, log); + const ruleToCreate = getRuleWithWebHookAction(hookAction.id, true, rule); + const { id } = await createRule(supertest, log, ruleToCreate); + await waitForRuleSuccessOrStatus(supertest, log, id); + await waitForSignalsToBePresent(supertest, log, 4, [id]); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + threshold: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threshold, + enabled: 1, + alerts: 4, + notifications_enabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + enabled: 1, + alerts: 4, + notifications_enabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "legacy_notifications_disabled" to be "1" for rule that has at least "1" legacy action(s) and the alert is "disabled"/"in-active"', async () => { + const rule: ThresholdCreateSchema = { + ...getThresholdRuleForSignalTesting(['telemetry'], 'rule-1', false), + threshold: { + field: 'keyword', + value: 1, + }, + }; + const { id } = await createRule(supertest, log, rule); + const hookAction = await createNewAction(supertest, log); + await createLegacyRuleAction(supertest, id, hookAction.id); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + threshold: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threshold, + disabled: 1, + legacy_notifications_disabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + disabled: 1, + legacy_notifications_disabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "legacy_notifications_enabled" to be "1" for rule that has at least "1" legacy action(s) and the alert is "enabled"/"active"', async () => { + const rule: ThresholdCreateSchema = { + ...getThresholdRuleForSignalTesting(['telemetry']), + threshold: { + field: 'keyword', + value: 1, + }, + }; const { id } = await createRule(supertest, log, rule); + const hookAction = await createNewAction(supertest, log); + await createLegacyRuleAction(supertest, id, hookAction.id); await waitForRuleSuccessOrStatus(supertest, log, id); await waitForSignalsToBePresent(supertest, log, 4, [id]); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + threshold: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threshold, + alerts: 4, + enabled: 1, + legacy_notifications_enabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + alerts: 4, + enabled: 1, + legacy_notifications_enabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + }); + + // Note: We don't actually find signals with these tests as we don't have a good way of signal finding with ML rules. + describe('"ml" rule type', () => { + it('should show "notifications_enabled", "notifications_disabled" "legacy_notifications_enabled", "legacy_notifications_disabled", all to be "0" for "disabled"/"in-active" rule that does not have any actions', async () => { + const rule = getSimpleMlRule(); + await createRule(supertest, log, rule); + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + machine_learning: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage + .machine_learning, + disabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + disabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_enabled", "notifications_disabled" "legacy_notifications_enabled", "legacy_notifications_disabled", all to be "0" for "enabled"/"active" rule that does not have any actions', async () => { + const rule = getSimpleMlRule('rule-1', true); + await createRule(supertest, log, rule); + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + machine_learning: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage + .machine_learning, + enabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + enabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_disabled" to be "1" for rule that has at least "1" action(s) and the alert is "disabled"/"in-active"', async () => { + const rule = getSimpleMlRule(); + const hookAction = await createNewAction(supertest, log); + const ruleToCreate = getRuleWithWebHookAction(hookAction.id, false, rule); + await createRule(supertest, log, ruleToCreate); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + const expected: DetectionMetrics = { + ...getInitialDetectionMetrics(), + detection_rules: { + ...getInitialDetectionMetrics().detection_rules, + detection_rule_usage: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, + machine_learning: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage + .machine_learning, + notifications_disabled: 1, + disabled: 1, + }, + custom_total: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + notifications_disabled: 1, + disabled: 1, + }, + }, + }, + }; + expect(stats).to.eql(expected); + }); + }); + + it('should show "notifications_enabled" to be "1" for rule that has at least "1" action(s) and the alert is "enabled"/"active"', async () => { + const rule = getSimpleMlRule('rule-1', true); + const hookAction = await createNewAction(supertest, log); + const ruleToCreate = getRuleWithWebHookAction(hookAction.id, true, rule); + await createRule(supertest, log, ruleToCreate); + await retry.try(async () => { const stats = await getStats(supertest, log); const expected: DetectionMetrics = { @@ -77,15 +839,16 @@ export default ({ getService }: FtrProviderContext) => { ...getInitialDetectionMetrics().detection_rules, detection_rule_usage: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, - query: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + machine_learning: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage + .machine_learning, enabled: 1, - alerts: 4, + notifications_enabled: 1, }, custom_total: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, enabled: 1, - alerts: 4, + notifications_enabled: 1, }, }, }, @@ -94,9 +857,12 @@ export default ({ getService }: FtrProviderContext) => { }); }); - it('should show stats for in-active rule', async () => { - const rule: QueryCreateSchema = getRuleForSignalTesting(['telemetry'], 'rule-1', false); - await createRule(supertest, log, rule); + it('should show "legacy_notifications_disabled" to be "1" for rule that has at least "1" legacy action(s) and the alert is "disabled"/"in-active"', async () => { + const rule = getSimpleMlRule(); + const { id } = await createRule(supertest, log, rule); + const hookAction = await createNewAction(supertest, log); + await createLegacyRuleAction(supertest, id, hookAction.id); + await retry.try(async () => { const stats = await getStats(supertest, log); const expected: DetectionMetrics = { @@ -105,13 +871,16 @@ export default ({ getService }: FtrProviderContext) => { ...getInitialDetectionMetrics().detection_rules, detection_rule_usage: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, - query: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + machine_learning: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage + .machine_learning, disabled: 1, + legacy_notifications_disabled: 1, }, custom_total: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, disabled: 1, + legacy_notifications_disabled: 1, }, }, }, @@ -119,14 +888,13 @@ export default ({ getService }: FtrProviderContext) => { expect(stats).to.eql(expected); }); }); - }); - describe('"eql" rule type', () => { - it('should show stats for active rule', async () => { - const rule: EqlCreateSchema = getEqlRuleForSignalTesting(['telemetry']); + it('should show "legacy_notifications_enabled" to be "1" for rule that has at least "1" legacy action(s) and the alert is "enabled"/"active"', async () => { + const rule = getSimpleMlRule('rule-1', true); const { id } = await createRule(supertest, log, rule); - await waitForRuleSuccessOrStatus(supertest, log, id); - await waitForSignalsToBePresent(supertest, log, 4, [id]); + const hookAction = await createNewAction(supertest, log); + await createLegacyRuleAction(supertest, id, hookAction.id); + await retry.try(async () => { const stats = await getStats(supertest, log); const expected: DetectionMetrics = { @@ -135,15 +903,16 @@ export default ({ getService }: FtrProviderContext) => { ...getInitialDetectionMetrics().detection_rules, detection_rule_usage: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, - eql: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + machine_learning: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage + .machine_learning, enabled: 1, - alerts: 4, + legacy_notifications_enabled: 1, }, custom_total: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, enabled: 1, - alerts: 4, + legacy_notifications_enabled: 1, }, }, }, @@ -151,9 +920,11 @@ export default ({ getService }: FtrProviderContext) => { expect(stats).to.eql(expected); }); }); + }); - it('should show stats for in-active rule', async () => { - const rule: EqlCreateSchema = getEqlRuleForSignalTesting(['telemetry'], 'rule-1', false); + describe('"indicator_match/threat_match" rule type', () => { + it('should show "notifications_enabled", "notifications_disabled" "legacy_notifications_enabled", "legacy_notifications_disabled", all to be "0" for "disabled"/"in-active" rule that does not have any actions', async () => { + const rule = getSimpleThreatMatch(); await createRule(supertest, log, rule); await retry.try(async () => { const stats = await getStats(supertest, log); @@ -163,13 +934,21 @@ export default ({ getService }: FtrProviderContext) => { ...getInitialDetectionMetrics().detection_rules, detection_rule_usage: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, - eql: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + threat_match: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threat_match, disabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, }, custom_total: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, disabled: 1, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, }, }, }, @@ -177,16 +956,23 @@ export default ({ getService }: FtrProviderContext) => { expect(stats).to.eql(expected); }); }); - }); - describe('"threshold" rule type', () => { - it('should show stats for active rule', async () => { - const rule: ThresholdCreateSchema = { - ...getThresholdRuleForSignalTesting(['telemetry']), - threshold: { - field: 'keyword', - value: 1, - }, + it('should show "notifications_enabled", "notifications_disabled" "legacy_notifications_enabled", "legacy_notifications_disabled", all to be "0" for "enabled"/"active" rule that does not have any actions', async () => { + const rule: ThreatMatchCreateSchema = { + ...getSimpleThreatMatch('rule-1', true), + index: ['telemetry'], + threat_index: ['telemetry'], + threat_mapping: [ + { + entries: [ + { + field: 'keyword', + value: 'keyword', + type: 'mapping', + }, + ], + }, + ], }; const { id } = await createRule(supertest, log, rule); await waitForRuleSuccessOrStatus(supertest, log, id); @@ -199,15 +985,23 @@ export default ({ getService }: FtrProviderContext) => { ...getInitialDetectionMetrics().detection_rules, detection_rule_usage: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, - threshold: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + threat_match: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threat_match, enabled: 1, alerts: 4, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, }, custom_total: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, enabled: 1, alerts: 4, + notifications_enabled: 0, + notifications_disabled: 0, + legacy_notifications_disabled: 0, + legacy_notifications_enabled: 0, }, }, }, @@ -216,15 +1010,12 @@ export default ({ getService }: FtrProviderContext) => { }); }); - it('should show stats for in-active rule', async () => { - const rule: ThresholdCreateSchema = { - ...getThresholdRuleForSignalTesting(['telemetry'], 'rule-1', false), - threshold: { - field: 'keyword', - value: 1, - }, - }; - await createRule(supertest, log, rule); + it('should show "notifications_disabled" to be "1" for rule that has at least "1" action(s) and the alert is "disabled"/"in-active"', async () => { + const rule = getSimpleThreatMatch(); + const hookAction = await createNewAction(supertest, log); + const ruleToCreate = getRuleWithWebHookAction(hookAction.id, false, rule); + await createRule(supertest, log, ruleToCreate); + await retry.try(async () => { const stats = await getStats(supertest, log); const expected: DetectionMetrics = { @@ -233,12 +1024,14 @@ export default ({ getService }: FtrProviderContext) => { ...getInitialDetectionMetrics().detection_rules, detection_rule_usage: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, - threshold: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + threat_match: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threat_match, + notifications_disabled: 1, disabled: 1, }, custom_total: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, + notifications_disabled: 1, disabled: 1, }, }, @@ -247,13 +1040,30 @@ export default ({ getService }: FtrProviderContext) => { expect(stats).to.eql(expected); }); }); - }); - describe('"ml" rule type', () => { - // Note: We don't actually find signals with this test as we don't have a good way of signal finding with ML rules. - it('should show stats for active rule', async () => { - const rule = getSimpleMlRule('rule-1', true); - await createRule(supertest, log, rule); + it('should show "notifications_enabled" to be "1" for rule that has at least "1" action(s) and the alert is "enabled"/"active"', async () => { + const rule: ThreatMatchCreateSchema = { + ...getSimpleThreatMatch('rule-1', true), + index: ['telemetry'], + threat_index: ['telemetry'], + threat_mapping: [ + { + entries: [ + { + field: 'keyword', + value: 'keyword', + type: 'mapping', + }, + ], + }, + ], + }; + const hookAction = await createNewAction(supertest, log); + const ruleToCreate = getRuleWithWebHookAction(hookAction.id, true, rule); + const { id } = await createRule(supertest, log, ruleToCreate); + await waitForRuleSuccessOrStatus(supertest, log, id); + await waitForSignalsToBePresent(supertest, log, 4, [id]); + await retry.try(async () => { const stats = await getStats(supertest, log); const expected: DetectionMetrics = { @@ -262,13 +1072,17 @@ export default ({ getService }: FtrProviderContext) => { ...getInitialDetectionMetrics().detection_rules, detection_rule_usage: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, - machine_learning: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + threat_match: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threat_match, enabled: 1, + alerts: 4, + notifications_enabled: 1, }, custom_total: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, enabled: 1, + alerts: 4, + notifications_enabled: 1, }, }, }, @@ -277,9 +1091,12 @@ export default ({ getService }: FtrProviderContext) => { }); }); - it('should show stats for in-active rule', async () => { - const rule = getSimpleMlRule(); - await createRule(supertest, log, rule); + it('should show "legacy_notifications_disabled" to be "1" for rule that has at least "1" legacy action(s) and the alert is "disabled"/"in-active"', async () => { + const rule = getSimpleThreatMatch(); + const { id } = await createRule(supertest, log, rule); + const hookAction = await createNewAction(supertest, log); + await createLegacyRuleAction(supertest, id, hookAction.id); + await retry.try(async () => { const stats = await getStats(supertest, log); const expected: DetectionMetrics = { @@ -288,13 +1105,15 @@ export default ({ getService }: FtrProviderContext) => { ...getInitialDetectionMetrics().detection_rules, detection_rule_usage: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, - machine_learning: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, + threat_match: { + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threat_match, disabled: 1, + legacy_notifications_disabled: 1, }, custom_total: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, disabled: 1, + legacy_notifications_disabled: 1, }, }, }, @@ -302,10 +1121,8 @@ export default ({ getService }: FtrProviderContext) => { expect(stats).to.eql(expected); }); }); - }); - describe('"indicator_match/threat_match" rule type', () => { - it('should show stats for active rule', async () => { + it('should show "legacy_notifications_enabled" to be "1" for rule that has at least "1" legacy action(s) and the alert is "enabled"/"active"', async () => { const rule: ThreatMatchCreateSchema = { ...getSimpleThreatMatch('rule-1', true), index: ['telemetry'], @@ -323,8 +1140,11 @@ export default ({ getService }: FtrProviderContext) => { ], }; const { id } = await createRule(supertest, log, rule); + const hookAction = await createNewAction(supertest, log); + await createLegacyRuleAction(supertest, id, hookAction.id); await waitForRuleSuccessOrStatus(supertest, log, id); await waitForSignalsToBePresent(supertest, log, 4, [id]); + await retry.try(async () => { const stats = await getStats(supertest, log); const expected: DetectionMetrics = { @@ -334,40 +1154,16 @@ export default ({ getService }: FtrProviderContext) => { detection_rule_usage: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, threat_match: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, - enabled: 1, + ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.threat_match, alerts: 4, - }, - custom_total: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, enabled: 1, - alerts: 4, - }, - }, - }, - }; - expect(stats).to.eql(expected); - }); - }); - - it('should show stats for in-active rule', async () => { - const rule = getSimpleThreatMatch(); - await createRule(supertest, log, rule); - await retry.try(async () => { - const stats = await getStats(supertest, log); - const expected: DetectionMetrics = { - ...getInitialDetectionMetrics(), - detection_rules: { - ...getInitialDetectionMetrics().detection_rules, - detection_rule_usage: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage, - threat_match: { - ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.query, - disabled: 1, + legacy_notifications_enabled: 1, }, custom_total: { ...getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total, - disabled: 1, + alerts: 4, + enabled: 1, + legacy_notifications_enabled: 1, }, }, }, @@ -377,7 +1173,7 @@ export default ({ getService }: FtrProviderContext) => { }); }); - describe('"pre-packaged" rules', async () => { + describe('"pre-packaged"/"immutable" rules', async () => { it('should show stats for totals for in-active pre-packaged rules', async () => { await installPrePackagedRules(supertest, log); await retry.try(async () => { @@ -385,12 +1181,33 @@ export default ({ getService }: FtrProviderContext) => { expect(stats.detection_rules.detection_rule_usage.elastic_total.enabled).above(0); expect(stats.detection_rules.detection_rule_usage.elastic_total.disabled).above(0); expect(stats.detection_rules.detection_rule_usage.elastic_total.enabled).above(0); - expect(stats.detection_rules.detection_rule_usage.custom_total.enabled).equal(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.legacy_notifications_enabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.legacy_notifications_disabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.notifications_enabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.notifications_disabled + ).to.eql(0); expect(stats.detection_rules.detection_rule_detail.length).above(0); + expect(stats.detection_rules.detection_rule_usage.custom_total).to.eql({ + enabled: 0, + disabled: 0, + alerts: 0, + cases: 0, + legacy_notifications_enabled: 0, + legacy_notifications_disabled: 0, + notifications_enabled: 0, + notifications_disabled: 0, + }); }); }); - it('should show stats for the detection_rule_details for pre-packaged rules', async () => { + it('should show stats for the detection_rule_details for a specific pre-packaged rule', async () => { await installPrePackagedRules(supertest, log); await retry.try(async () => { const stats = await getStats(supertest, log); @@ -402,7 +1219,7 @@ export default ({ getService }: FtrProviderContext) => { (rule) => rule.rule_id === '9a1a2dae-0b5f-4c3d-8305-a268d404c306' ); if (foundRule == null) { - throw new Error('Found rule should not be null'); + throw new Error('Found rule should not be null. Please change this end to end test.'); } const { created_on: createdOn, @@ -418,7 +1235,227 @@ export default ({ getService }: FtrProviderContext) => { elastic_rule: true, alert_count_daily: 0, cases_count_total: 0, + has_notification: false, + has_legacy_notification: false, + }); + }); + }); + + it('should show "notifications_disabled" to be "1", "has_notification" to be "true, "has_legacy_notification" to be "false" for rule that has at least "1" action(s) and the alert is "disabled"/"in-active"', async () => { + await installPrePackagedRules(supertest, log); + // Rule id of "9a1a2dae-0b5f-4c3d-8305-a268d404c306" is from the file: + // x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/elastic_endpoint_security.json + const immutableRule = await getRule(supertest, log, '9a1a2dae-0b5f-4c3d-8305-a268d404c306'); + const hookAction = await createNewAction(supertest, log); + const newRuleToUpdate = getSimpleRule(immutableRule.rule_id); + const ruleToUpdate = getRuleWithWebHookAction(hookAction.id, false, newRuleToUpdate); + await updateRule(supertest, log, ruleToUpdate); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + + // We have to search by "rule_name" since the "rule_id" it is storing is the Saved Object ID and not the rule_id + const foundRule = stats.detection_rules.detection_rule_detail.find( + (rule) => rule.rule_id === '9a1a2dae-0b5f-4c3d-8305-a268d404c306' + ); + if (foundRule == null) { + throw new Error('Found rule should not be null. Please change this end to end test.'); + } + const { + created_on: createdOn, + updated_on: updatedOn, + rule_id: ruleId, + ...omittedFields + } = foundRule; + expect(omittedFields).to.eql({ + rule_name: 'Simple Rule Query', + rule_type: 'query', + rule_version: 3, + enabled: false, + elastic_rule: true, + alert_count_daily: 0, + cases_count_total: 0, + has_notification: true, + has_legacy_notification: false, + }); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.notifications_disabled + ).to.eql(1); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.legacy_notifications_enabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.legacy_notifications_disabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.notifications_enabled + ).to.eql(0); + expect(stats.detection_rules.detection_rule_usage.custom_total).to.eql( + getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total + ); + }); + }); + + it('should show "notifications_enabled" to be "1", "has_notification" to be "true, "has_legacy_notification" to be "false" for rule that has at least "1" action(s) and the alert is "enabled"/"active"', async () => { + await installPrePackagedRules(supertest, log); + // Rule id of "9a1a2dae-0b5f-4c3d-8305-a268d404c306" is from the file: + // x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/elastic_endpoint_security.json + const immutableRule = await getRule(supertest, log, '9a1a2dae-0b5f-4c3d-8305-a268d404c306'); + const hookAction = await createNewAction(supertest, log); + const newRuleToUpdate = getSimpleRule(immutableRule.rule_id); + const ruleToUpdate = getRuleWithWebHookAction(hookAction.id, true, newRuleToUpdate); + await updateRule(supertest, log, ruleToUpdate); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + + // We have to search by "rule_name" since the "rule_id" it is storing is the Saved Object ID and not the rule_id + const foundRule = stats.detection_rules.detection_rule_detail.find( + (rule) => rule.rule_id === '9a1a2dae-0b5f-4c3d-8305-a268d404c306' + ); + if (foundRule == null) { + throw new Error('Found rule should not be null. Please change this end to end test.'); + } + const { + created_on: createdOn, + updated_on: updatedOn, + rule_id: ruleId, + ...omittedFields + } = foundRule; + expect(omittedFields).to.eql({ + rule_name: 'Simple Rule Query', + rule_type: 'query', + rule_version: 3, + enabled: true, + elastic_rule: true, + alert_count_daily: 0, + cases_count_total: 0, + has_notification: true, + has_legacy_notification: false, + }); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.notifications_disabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.legacy_notifications_enabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.legacy_notifications_disabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.notifications_enabled + ).to.eql(1); + expect(stats.detection_rules.detection_rule_usage.custom_total).to.eql( + getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total + ); + }); + }); + + it('should show "legacy_notifications_disabled" to be "1", "has_notification" to be "false, "has_legacy_notification" to be "true" for rule that has at least "1" action(s) and the alert is "disabled"/"in-active"', async () => { + await installPrePackagedRules(supertest, log); + // Rule id of "9a1a2dae-0b5f-4c3d-8305-a268d404c306" is from the file: + // x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/elastic_endpoint_security.json + const immutableRule = await getRule(supertest, log, '9a1a2dae-0b5f-4c3d-8305-a268d404c306'); + const hookAction = await createNewAction(supertest, log); + const newRuleToUpdate = getSimpleRule(immutableRule.rule_id, false); + await updateRule(supertest, log, newRuleToUpdate); + await createLegacyRuleAction(supertest, immutableRule.id, hookAction.id); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + // We have to search by "rule_name" since the "rule_id" it is storing is the Saved Object ID and not the rule_id + const foundRule = stats.detection_rules.detection_rule_detail.find( + (rule) => rule.rule_id === '9a1a2dae-0b5f-4c3d-8305-a268d404c306' + ); + if (foundRule == null) { + throw new Error('Found rule should not be null. Please change this end to end test.'); + } + const { + created_on: createdOn, + updated_on: updatedOn, + rule_id: ruleId, + ...omittedFields + } = foundRule; + expect(omittedFields).to.eql({ + rule_name: 'Simple Rule Query', + rule_type: 'query', + rule_version: 3, + enabled: false, + elastic_rule: true, + alert_count_daily: 0, + cases_count_total: 0, + has_notification: false, + has_legacy_notification: true, + }); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.notifications_disabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.legacy_notifications_enabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.legacy_notifications_disabled + ).to.eql(1); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.notifications_enabled + ).to.eql(0); + expect(stats.detection_rules.detection_rule_usage.custom_total).to.eql( + getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total + ); + }); + }); + + it('should show "legacy_notifications_enabled" to be "1", "has_notification" to be "false, "has_legacy_notification" to be "true" for rule that has at least "1" action(s) and the alert is "enabled"/"active"', async () => { + await installPrePackagedRules(supertest, log); + // Rule id of "9a1a2dae-0b5f-4c3d-8305-a268d404c306" is from the file: + // x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules/elastic_endpoint_security.json + const immutableRule = await getRule(supertest, log, '9a1a2dae-0b5f-4c3d-8305-a268d404c306'); + const hookAction = await createNewAction(supertest, log); + const newRuleToUpdate = getSimpleRule(immutableRule.rule_id, true); + await updateRule(supertest, log, newRuleToUpdate); + await createLegacyRuleAction(supertest, immutableRule.id, hookAction.id); + + await retry.try(async () => { + const stats = await getStats(supertest, log); + // We have to search by "rule_name" since the "rule_id" it is storing is the Saved Object ID and not the rule_id + const foundRule = stats.detection_rules.detection_rule_detail.find( + (rule) => rule.rule_id === '9a1a2dae-0b5f-4c3d-8305-a268d404c306' + ); + if (foundRule == null) { + throw new Error('Found rule should not be null. Please change this end to end test.'); + } + const { + created_on: createdOn, + updated_on: updatedOn, + rule_id: ruleId, + ...omittedFields + } = foundRule; + expect(omittedFields).to.eql({ + rule_name: 'Simple Rule Query', + rule_type: 'query', + rule_version: 3, + enabled: true, + elastic_rule: true, + alert_count_daily: 0, + cases_count_total: 0, + has_notification: false, + has_legacy_notification: true, }); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.notifications_disabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.legacy_notifications_enabled + ).to.eql(1); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.legacy_notifications_disabled + ).to.eql(0); + expect( + stats.detection_rules.detection_rule_usage.elastic_total.notifications_enabled + ).to.eql(0); + expect(stats.detection_rules.detection_rule_usage.custom_total).to.eql( + getInitialDetectionMetrics().detection_rules.detection_rule_usage.custom_total + ); }); }); }); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/index.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/index.ts index 21676d614bb206..cf9db6373033af 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/index.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/index.ts @@ -13,7 +13,6 @@ export default ({ loadTestFile }: FtrProviderContext): void => { describe('', function () { this.tags('ciGroup11'); loadTestFile(require.resolve('./detection_rules')); - loadTestFile(require.resolve('./legacy_notifications')); }); }); }; diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/legacy_notifications.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/legacy_notifications.ts deleted file mode 100644 index aa406519e24439..00000000000000 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/tests/telemetry/legacy_notifications.ts +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../../common/ftr_provider_context'; -import { - createRule, - createSignalsIndex, - deleteAllAlerts, - deleteSignalsIndex, - getSimpleRule, - getStats, - getWebHookAction, -} from '../../../utils'; - -// eslint-disable-next-line import/no-default-export -export default ({ getService }: FtrProviderContext) => { - const supertest = getService('supertest'); - const log = getService('log'); - const retry = getService('retry'); - - describe('legacy notification telemetry', async () => { - beforeEach(async () => { - await createSignalsIndex(supertest, log); - }); - - afterEach(async () => { - await deleteSignalsIndex(supertest, log); - await deleteAllAlerts(supertest, log); - }); - - it('should have 1 legacy notification when there is a rule on the default', async () => { - // create an connector/action - const { body: hookAction } = await supertest - .post('/api/actions/action') - .set('kbn-xsrf', 'true') - .send(getWebHookAction()) - .expect(200); - - // create a rule without actions - const createRuleBody = await createRule(supertest, log, getSimpleRule('rule-1')); - - // attach the legacy notification - await supertest - .post(`/internal/api/detection/legacy/notifications?alert_id=${createRuleBody.id}`) - .set('kbn-xsrf', 'true') - .send({ - name: 'Legacy notification with one action', - interval: '1h', - actions: [ - { - id: hookAction.id, - group: 'default', - params: { - message: - 'Hourly\nRule {{context.rule.name}} generated {{state.signals_count}} alerts', - }, - actionTypeId: hookAction.actionTypeId, - }, - ], - }) - .expect(200); - - await retry.try(async () => { - const stats = await getStats(supertest, log); - // NOTE: We have to do "above 0" until this bug is fixed: https://github.com/elastic/kibana/issues/122456 because other tests are accumulating non-cleaned up legacy actions/notifications and this number isn't reliable at the moment - expect(stats.detection_rules.detection_rule_usage.legacy_notifications.total).to.above(0); - }); - }); - }); -}; diff --git a/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts b/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts index 1c584315a1871a..a628add1de8388 100644 --- a/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts @@ -92,14 +92,16 @@ export default function (providerContext: FtrProviderContext) { .expect(400); }); - it('should return a 400 if the fleet admin user is modifed outside of Fleet', async () => { - await supertest + it('should return a 400 if the policy_id is not a valid policy', async () => { + const { body: apiResponse } = await supertest .post(`/api/fleet/enrollment_api_keys`) .set('kbn-xsrf', 'xxx') .send({ - raoul: 'raoul', + policy_id: 'idonotexists', }) .expect(400); + + expect(apiResponse.message).to.be('Agent policy "idonotexists" not found'); }); it('should allow to create an enrollment api key with only an agent policy', async () => { diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/agent/stream/stream.yml.hbs b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/agent/stream/stream.yml.hbs new file mode 100644 index 00000000000000..2870385f21f959 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/agent/stream/stream.yml.hbs @@ -0,0 +1 @@ +config.version: "2" diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/fields/fields.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/fields/fields.yml new file mode 100644 index 00000000000000..6e003ed0ad1476 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/fields/fields.yml @@ -0,0 +1,16 @@ +- name: data_stream.type + type: constant_keyword + description: > + Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: > + Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: > + Data stream namespace. +- name: '@timestamp' + type: date + description: > + Event timestamp. diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/manifest.yml new file mode 100644 index 00000000000000..0b1ae9c6cb9959 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/manifest.yml @@ -0,0 +1,15 @@ +title: Test stream +type: logs +streams: + - input: test_input + vars: + - name: test_var_required + type: string + title: Test Var + required: true + show_user: true + - name: test_var + type: string + title: Test Var + required: false + show_user: true diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/docs/README.md b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/docs/README.md new file mode 100644 index 00000000000000..d6cfcce90527cb --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/docs/README.md @@ -0,0 +1,5 @@ +# filetest + +This package contains randomly collected files from other packages to be used in API integration tests. + +It also serves as an example how to serve a package from the fixtures directory with the package registry docker container. For this, also see the `x-pack/test/fleet_api_integration/config.ts` how the `test_packages` directory is mounted into the docker container, and `x-pack/test/fleet_api_integration/apis/fixtures/package_registry_config.yml` how to pass the directory to the registry. diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/img/logo.svg b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/img/logo.svg new file mode 100644 index 00000000000000..15b49bcf28aec2 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/img/logo.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/img/screenshots/metricbeat_dashboard.png b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/img/screenshots/metricbeat_dashboard.png new file mode 100644 index 00000000000000..76d414b86c4ab4 Binary files /dev/null and b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/img/screenshots/metricbeat_dashboard.png differ diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/manifest.yml new file mode 100644 index 00000000000000..f1ed5a8a5a78ba --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/manifest.yml @@ -0,0 +1,41 @@ +format_version: 1.0.0 +name: with_required_variables +title: Package with variables +description: This is a package. +version: 0.1.0 +categories: [] +# Options are experimental, beta, ga +release: beta +# The package type. The options for now are [integration, solution], more type might be added in the future. +# The default type is integration and will be set if empty. +type: integration +license: basic +# This package can be removed +removable: true + +requirement: + elasticsearch: + versions: ">7.7.0" + kibana: + versions: ">7.7.0" + +screenshots: +- src: "/img/screenshots/metricbeat_dashboard.png" + title: "metricbeat dashboard" + size: "1855x949" + type: "image/png" +icons: + - src: "/img/logo.svg" + size: "16x16" + type: "image/svg+xml" + + +policy_templates: + - name: with_required_variables + title: Package Policy Upgrade + description: Test Package for Upgrading Package Policies + inputs: + - type: test_input + title: Test Input + description: Test Input + enabled: true \ No newline at end of file diff --git a/x-pack/test/fleet_api_integration/apis/package_policy/create.ts b/x-pack/test/fleet_api_integration/apis/package_policy/create.ts index 1815ab91b53165..75d5c58d8e3759 100644 --- a/x-pack/test/fleet_api_integration/apis/package_policy/create.ts +++ b/x-pack/test/fleet_api_integration/apis/package_policy/create.ts @@ -324,5 +324,80 @@ export default function (providerContext: FtrProviderContext) { }) .expect(400); }); + + it('should return a 400 with required variables not provided', async function () { + const { body } = await supertest + .post(`/api/fleet/package_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'pacakge-policy-required-variables-test-456', + description: '', + namespace: 'default', + policy_id: agentPolicyId, + enabled: true, + output_id: '', + inputs: [ + { + enabled: true, + streams: [ + { + data_stream: { + dataset: 'with_required_variables.log', + type: 'logs', + }, + enabled: true, + vars: {}, + }, + ], + type: 'test_input', + }, + ], + package: { + name: 'with_required_variables', + version: '0.1.0', + }, + }) + .expect(400); + expect(body.message).contain('Package policy is invalid'); + }); + + it('should work with required variables provided', async function () { + await supertest + .post(`/api/fleet/package_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'pacakge-policy-required-variables-test-123', + description: '', + namespace: 'default', + policy_id: agentPolicyId, + enabled: true, + output_id: '', + inputs: [ + { + enabled: true, + streams: [ + { + data_stream: { + dataset: 'with_required_variables.log', + type: 'logs', + }, + enabled: true, + vars: { + test_var_required: { + value: 'I am required', + }, + }, + }, + ], + type: 'test_input', + }, + ], + package: { + name: 'with_required_variables', + version: '0.1.0', + }, + }) + .expect(200); + }); }); } diff --git a/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts b/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts index 727a779178bb35..0ccbb913f0d10c 100644 --- a/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts +++ b/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts @@ -841,6 +841,7 @@ export default function (providerContext: FtrProviderContext) { policy_template: 'package_policy_upgrade', type: 'test_input_new_2', enabled: true, + vars: {}, streams: [ { id: 'test-package_policy_upgrade-xxxx', @@ -850,6 +851,12 @@ export default function (providerContext: FtrProviderContext) { dataset: 'package_policy_upgrade.test_stream_new_2', }, vars: { + test_input_new_2_var_1: { + value: 'Test input value 1', + }, + test_input_new_2_var_2: { + value: 'Test input value 2', + }, test_var_new_2_var_1: { value: 'Test value 1', }, @@ -867,7 +874,6 @@ export default function (providerContext: FtrProviderContext) { version: '0.5.0-restructure-inputs', }, }); - packagePolicyId = packagePolicyResponse.item.id; }); diff --git a/x-pack/test/functional/apps/lens/drag_and_drop.ts b/x-pack/test/functional/apps/lens/drag_and_drop.ts index e7b7ba18d62fbf..2858ff1588f7cb 100644 --- a/x-pack/test/functional/apps/lens/drag_and_drop.ts +++ b/x-pack/test/functional/apps/lens/drag_and_drop.ts @@ -162,6 +162,65 @@ export default function ({ getPageObjects }: FtrProviderContext) { 'Top values of @message.raw' ); }); + + it('should combine breakdown dimension with the horizontal one', async () => { + await PageObjects.lens.removeLayer(); + await PageObjects.lens.dragFieldToWorkspace('clientip'); + await PageObjects.lens.dragFieldToWorkspace('@message.raw'); + + await PageObjects.lens.dragDimensionToExtraDropType( + 'lnsXY_splitDimensionPanel > lns-dimensionTrigger', + 'lnsXY_xDimensionPanel', + 'combine' + ); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( + 'Top values of clientip + 1 other' + ); + }); + + it('should combine field to existing horizontal dimension', async () => { + await PageObjects.lens.removeLayer(); + await PageObjects.lens.dragFieldToWorkspace('clientip'); + + await PageObjects.lens.dragFieldToExtraDropType( + '@message.raw', + 'lnsXY_xDimensionPanel', + 'combine' + ); + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( + 'Top values of clientip + 1 other' + ); + }); + + it('should combine two multi terms dimensions', async () => { + await PageObjects.lens.removeLayer(); + await PageObjects.lens.dragFieldToWorkspace('clientip'); + + await PageObjects.lens.dragFieldToExtraDropType( + '@message.raw', + 'lnsXY_xDimensionPanel', + 'combine' + ); + + await PageObjects.lens.dragFieldToDimensionTrigger( + '@message.raw', + 'lnsXY_splitDimensionPanel > lns-empty-dimension' + ); + await PageObjects.lens.dragFieldToExtraDropType( + 'geo.src', + 'lnsXY_splitDimensionPanel', + 'combine' + ); + await PageObjects.lens.dragDimensionToExtraDropType( + 'lnsXY_splitDimensionPanel > lns-dimensionTrigger', + 'lnsXY_xDimensionPanel', + 'combine' + ); + + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel')).to.eql( + 'Top values of clientip + 2 others' + ); + }); }); describe('keyboard drag and drop', () => { diff --git a/x-pack/test/functional/apps/maps/mvt_scaling.js b/x-pack/test/functional/apps/maps/mvt_scaling.js index 3e0e8924a6417e..2be9606d11dea5 100644 --- a/x-pack/test/functional/apps/maps/mvt_scaling.js +++ b/x-pack/test/functional/apps/maps/mvt_scaling.js @@ -52,7 +52,7 @@ export default function ({ getPageObjects, getService }) { geometryFieldName: 'geometry', index: 'geo_shapes*', requestBody: - '(_source:!(geometry),docvalue_fields:!(prop1),query:(bool:(filter:!(),must:!(),must_not:!(),should:!())),runtime_mappings:(),script_fields:(),size:10001,stored_fields:!(geometry,prop1))', + '(_source:!f,docvalue_fields:!(prop1),query:(bool:(filter:!(),must:!(),must_not:!(),should:!())),runtime_mappings:(),script_fields:(),size:10001,stored_fields:!(geometry,prop1))', }); }); diff --git a/x-pack/test/functional/apps/ml/anomaly_detection/anomaly_explorer.ts b/x-pack/test/functional/apps/ml/anomaly_detection/anomaly_explorer.ts index ad933ae8f86feb..93907743d144d4 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection/anomaly_explorer.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection/anomaly_explorer.ts @@ -337,7 +337,7 @@ export default function ({ getService }: FtrProviderContext) { it('adds swim lane embeddable to a dashboard', async () => { // should be the last step because it navigates away from the Anomaly Explorer page await ml.testExecution.logTestStep( - 'should allow to attach anomaly swimlane embeddable to the dashboard' + 'should allow to attach anomaly swim lane embeddable to the dashboard' ); await ml.anomalyExplorer.openAddToDashboardControl(); await ml.anomalyExplorer.addAndEditSwimlaneInDashboard('ML Test'); diff --git a/x-pack/test/functional/es_archives/actions/data.json b/x-pack/test/functional/es_archives/actions/data.json index 31d10005c0939f..79e7920872ab02 100644 --- a/x-pack/test/functional/es_archives/actions/data.json +++ b/x-pack/test/functional/es_archives/actions/data.json @@ -174,3 +174,35 @@ } } } + +{ + "type": "doc", + "value": { + "id": "action:0f8f2810-0a59-11ec-9a7c-fd0c2b83ff7d", + "index": ".kibana_1", + "source": { + "action": { + "actionTypeId" : ".email", + "name" : "test email connector cant decrypt", + "isMissingSecrets" : false, + "config" : { + "hasAuth" : true, + "from" : "me@test.com", + "host" : "some.non.existent.com", + "port" : 465, + "service" : "other", + "secure" : true + }, + "secrets" : "V2EJEtTv3yTFi1kdglhNahasdfnKYWCS+J7aWCJQU+eEqGPZEz6n7G1NsBWoh7IY0FteLTilTteQXyY/Eg3k/7bb0G8Mz+WBZ1mRvUggGTFqgoOptyUsvHoBhv0R/1bCTCabN3Pe88AfnC+VDXqwuMifpmgKEEsKF3H8VONv7TYO02FW" + }, + "migrationVersion": { + "action": "7.14.0" + }, + "coreMigrationVersion" : "7.15.0", + "references": [ + ], + "type": "action", + "updated_at": "2021-08-31T12:43:37.117Z" + } + } +} \ No newline at end of file diff --git a/x-pack/test/functional/fixtures/kbn_archiver/cases/7.13.2/alerts.json b/x-pack/test/functional/fixtures/kbn_archiver/cases/7.13.2/alerts.json new file mode 100644 index 00000000000000..e7976cb49938dc --- /dev/null +++ b/x-pack/test/functional/fixtures/kbn_archiver/cases/7.13.2/alerts.json @@ -0,0 +1,202 @@ +{ + "attributes": { + "closed_at": null, + "closed_by": null, + "connector": { + "fields": [ + { + "key": "issueType", + "value": "10002" + }, + { + "key": "parent", + "value": null + }, + { + "key": "priority", + "value": null + } + ], + "id": "d68508f0-cf9d-11eb-a603-13e7747d215c", + "name": "Test Jira", + "type": ".jira" + }, + "created_at": "2021-06-17T18:57:41.682Z", + "created_by": { + "email": null, + "full_name": "j@j.com", + "username": "711621466" + }, + "description": "asdf", + "external_service": { + "connector_id": "d68508f0-cf9d-11eb-a603-13e7747d215c", + "connector_name": "Test Jira", + "external_id": "10106", + "external_title": "TPN-99", + "external_url": "https://cases-testing.atlassian.net/browse/TPN-99", + "pushed_at": "2021-06-17T18:57:45.524Z", + "pushed_by": { + "email": null, + "full_name": "j@j.com", + "username": "711621466" + } + }, + "settings": { + "syncAlerts": true + }, + "status": "open", + "tags": [ + "some tag" + ], + "title": "A case", + "type": "individual", + "updated_at": "2021-06-17T18:57:58.037Z", + "updated_by": { + "email": null, + "full_name": "j@j.com", + "username": "711621466" + } + }, + "id": "e49ad6e0-cf9d-11eb-a603-13e7747d215c", + "coreMigrationVersion": "7.13.2", + "migrationVersion": { + "cases": "7.12.0" + }, + "references": [ + ], + "type": "cases", + "updated_at": "2021-06-17T18:57:58.076Z" +} + +{ + "attributes": { + "associationType": "case", + "alertId": "123", + "index": "index", + "rule": {"id": "id", "name": "name"}, + "created_at": "2021-06-17T18:57:58.037Z", + "created_by": { + "email": null, + "full_name": "j@j.com", + "username": "711621466" + }, + "pushed_at": null, + "pushed_by": null, + "type": "alert", + "updated_at": null, + "updated_by": null + }, + "coreMigrationVersion": "7.13.2", + "migrationVersion": { + "cases-comments": "7.12.0" + }, + "id": "ee59cdd0-cf9d-11eb-a603-13e7747d215c", + "references": [ + { + "id": "e49ad6e0-cf9d-11eb-a603-13e7747d215c", + "name": "associated-cases", + "type": "cases" + } + ], + "type": "cases-comments", + "updated_at": "2021-06-17T18:57:58.087Z" +} + +{ + "attributes": { + "associationType": "case", + "comment": "a comment", + "created_at": "2021-06-17T18:57:58.037Z", + "created_by": { + "email": null, + "full_name": "j@j.com", + "username": "711621466" + }, + "pushed_at": null, + "pushed_by": null, + "type": "user", + "updated_at": null, + "updated_by": null + }, + "coreMigrationVersion": "7.13.2", + "migrationVersion": { + "cases-comments": "7.12.0" + }, + "id": "ae59cdd0-cf9d-11eb-a603-13e7747d215c", + "references": [ + { + "id": "e49ad6e0-cf9d-11eb-a603-13e7747d215c", + "name": "associated-cases", + "type": "cases" + } + ], + "type": "cases-comments", + "updated_at": "2021-06-17T18:57:58.087Z" +} + +{ + "attributes": { + "action": "create", + "action_at": "2021-06-17T18:57:41.682Z", + "action_by": { + "email": null, + "full_name": "j@j.com", + "username": "711621466" + }, + "action_field": [ + "description", + "status", + "tags", + "title", + "connector", + "settings" + ], + "new_value": "{\"type\":\"individual\",\"title\":\"A case\",\"tags\":[\"some tag\"],\"description\":\"asdf\",\"connector\":{\"id\":\"d68508f0-cf9d-11eb-a603-13e7747d215c\",\"name\":\"Test Jira\",\"type\":\".jira\",\"fields\":{\"issueType\":\"10002\",\"parent\":null,\"priority\":null}},\"settings\":{\"syncAlerts\":true}}", + "old_value": null + }, + "coreMigrationVersion": "7.13.2", + "migrationVersion": { + "cases-user-actions": "7.10.0" + }, + "id": "e5509250-cf9d-11eb-a603-13e7747d215c", + "references": [ + { + "id": "e49ad6e0-cf9d-11eb-a603-13e7747d215c", + "name": "associated-cases", + "type": "cases" + } + ], + "type": "cases-user-actions", + "updated_at": "2021-06-17T18:57:42.925Z" +} + +{ + "attributes": { + "action": "create", + "action_at": "2021-06-17T18:57:41.682Z", + "action_by": { + "email": null, + "full_name": "j@j.com", + "username": "711621466" + }, + "action_field": [ + "comment" + ], + "new_value": "{\"type\":\"alert\",\"alertId\":\"4eb4cd05b85bc65c7b9f22b776e0136f970f7538eb0d1b2e6e8c7d35b2e875cb\",\"index\":\".internal.alerts-security.alerts-default-000001\",\"rule\":{\"id\":\"43104810-7875-11ec-abc6-6f72e72f6004\",\"name\":\"A rule\"}}", + "old_value": null + }, + "coreMigrationVersion": "7.13.2", + "migrationVersion": { + "cases-user-actions": "7.10.0" + }, + "id": "a5509250-cf9d-11eb-a603-13e7747d215c", + "references": [ + { + "id": "e49ad6e0-cf9d-11eb-a603-13e7747d215c", + "name": "associated-cases", + "type": "cases" + } + ], + "type": "cases-user-actions", + "updated_at": "2021-06-17T18:57:42.925Z" +} diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 0a892e96381cb5..6f402ac4426484 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -289,6 +289,30 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }); }, + async pressMetaKey(metaKey: 'shift' | 'alt' | 'ctrl') { + const metaToAction = { + shift: 'duplicate', + alt: 'swap', + ctrl: 'combine', + }; + const waitTime = 1000; + log.debug(`Wait ${waitTime}ms for the extra dop options to show up`); + await setTimeoutAsync(waitTime); + const browserKey = + metaKey === 'shift' + ? browser.keys.SHIFT + : metaKey === 'alt' + ? browser.keys.ALT + : browser.keys.COMMAND; + log.debug(`Press ${metaKey} with keyboard`); + await retry.try(async () => { + await browser.pressKeys(browserKey); + await find.existsByCssSelector( + `.lnsDragDrop__extraDrop > [data-test-subj="lnsDragDrop-${metaToAction[metaKey]}"].lnsDragDrop-isActiveDropTarget` + ); + }); + }, + /** * Copies field to chosen destination that is defined by distance of `steps` * (right arrow presses) from it @@ -297,7 +321,12 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont * @param steps - number of steps user has to press right * @param reverse - defines the direction of going through drops * */ - async dragFieldWithKeyboard(fieldName: string, steps = 1, reverse = false) { + async dragFieldWithKeyboard( + fieldName: string, + steps = 1, + reverse = false, + metaKey?: 'shift' | 'alt' | 'ctrl' + ) { const field = await find.byCssSelector( `[data-test-subj="lnsDragDrop_draggable-${fieldName}"] [data-test-subj="lnsDragDrop-keyboardHandler"]` ); @@ -309,6 +338,9 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont for (let i = 0; i < steps; i++) { await browser.pressKeys(reverse ? browser.keys.LEFT : browser.keys.RIGHT); } + if (metaKey) { + this.pressMetaKey(metaKey); + } await browser.pressKeys(browser.keys.ENTER); await this.waitForLensDragDropToFinish(); @@ -323,7 +355,13 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont * @param steps - number of steps of presses right or left * @param reverse - defines the direction of going through drops * */ - async dimensionKeyboardDragDrop(group: string, index = 0, steps = 1, reverse = false) { + async dimensionKeyboardDragDrop( + group: string, + index = 0, + steps = 1, + reverse = false, + metaKey?: 'shift' | 'alt' | 'ctrl' + ) { const elements = await find.allByCssSelector( `[data-test-subj="${group}"] [data-test-subj="lnsDragDrop-keyboardHandler"]` ); @@ -333,6 +371,9 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont for (let i = 0; i < steps; i++) { await browser.pressKeys(reverse ? browser.keys.LEFT : browser.keys.RIGHT); } + if (metaKey) { + this.pressMetaKey(metaKey); + } await browser.pressKeys(browser.keys.ENTER); await this.waitForLensDragDropToFinish(); @@ -389,7 +430,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }, /** - * Drags field to dimension trigger + * Drags from a dimension to another dimension trigger * * @param from - the selector of the dimension being moved * @param to - the selector of the dimension being dropped to @@ -1196,13 +1237,38 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }, /** - * Drags field to dimension trigger to extra drop type + * Drags from a dimension to another dimension trigger to extra drop type * * @param from - the selector of the dimension being moved * @param to - the selector of the main drop type of dimension being dropped to * @param type - extra drop type * */ - async dragDimensionToExtraDropType(from: string, to: string, type: 'duplicate' | 'swap') { + async dragFieldToExtraDropType( + field: string, + to: string, + type: 'duplicate' | 'swap' | 'combine' + ) { + const from = `lnsFieldListPanelField-${field}`; + await this.dragEnterDrop( + testSubjects.getCssSelector(from), + testSubjects.getCssSelector(`${to} > lnsDragDrop`), + testSubjects.getCssSelector(`${to} > lnsDragDrop-${type}`) + ); + await PageObjects.header.waitUntilLoadingHasFinished(); + }, + + /** + * Drags from a dimension to another dimension trigger to extra drop type + * + * @param from - the selector of the dimension being moved + * @param to - the selector of the main drop type of dimension being dropped to + * @param type - extra drop type + * */ + async dragDimensionToExtraDropType( + from: string, + to: string, + type: 'duplicate' | 'swap' | 'combine' + ) { await this.dragEnterDrop( testSubjects.getCssSelector(from), testSubjects.getCssSelector(`${to} > lnsDragDrop`), diff --git a/x-pack/test/functional/services/ml/anomaly_explorer.ts b/x-pack/test/functional/services/ml/anomaly_explorer.ts index aa85ee7145d07d..08b026bbb308fc 100644 --- a/x-pack/test/functional/services/ml/anomaly_explorer.ts +++ b/x-pack/test/functional/services/ml/anomaly_explorer.ts @@ -89,9 +89,7 @@ export function MachineLearningAnomalyExplorerProvider({ async addAndEditSwimlaneInDashboard(dashboardTitle: string) { await retry.tryForTime(30 * 1000, async () => { await this.filterDashboardSearchWithSearchString(dashboardTitle); - await this.selectAllDashboards(); - await this.waitForAddAndEditDashboardButtonEnabled(); - await testSubjects.clickWhenNotDisabled('mlAddAndEditDashboardButton'); + await testSubjects.clickWhenNotDisabled('~mlEmbeddableAddAndEditDashboard'); // make sure the dashboard page actually loaded const dashboardItemCount = await dashboardPage.getSharedItemsCount(); @@ -102,7 +100,7 @@ export function MachineLearningAnomalyExplorerProvider({ const swimlane = await embeddable.findByClassName('mlSwimLaneContainer'); expect(await swimlane.isDisplayed()).to.eql( true, - 'Anomaly swimlane should be displayed in dashboard' + 'Anomaly swim lane should be displayed in dashboard' ); }, @@ -114,13 +112,6 @@ export function MachineLearningAnomalyExplorerProvider({ await testSubjects.existOrFail('mlDashboardSelectionTable loaded', { timeout: 60 * 1000 }); }, - async waitForAddAndEditDashboardButtonEnabled() { - await retry.tryForTime(3000, async () => { - const isEnabled = await testSubjects.isEnabled('mlAddAndEditDashboardButton'); - expect(isEnabled).to.eql(true, 'Button to add and edit dashboard should be enabled'); - }); - }, - async filterDashboardSearchWithSearchString(filter: string, expectedRowCount: number = 1) { await retry.tryForTime(20 * 1000, async () => { await this.waitForDashboardsToLoad(); @@ -147,17 +138,6 @@ export function MachineLearningAnomalyExplorerProvider({ ); }, - async selectAllDashboards() { - await retry.tryForTime(3000, async () => { - await testSubjects.clickWhenNotDisabled( - 'mlDashboardSelectionTable loaded > checkboxSelectAll' - ); - expect( - await testSubjects.isChecked('mlDashboardSelectionTable loaded > checkboxSelectAll') - ).to.eql(true, 'Checkbox to select all dashboards should be selected'); - }); - }, - async assertClearSelectionButtonVisible(expectVisible: boolean) { if (expectVisible) { await testSubjects.existOrFail('mlAnomalyTimelineClearSelection'); diff --git a/x-pack/test/lists_api_integration/security_and_spaces/tests/delete_lists.ts b/x-pack/test/lists_api_integration/security_and_spaces/tests/delete_lists.ts index 939291d1e4a5dd..cecb4510be9c3b 100644 --- a/x-pack/test/lists_api_integration/security_and_spaces/tests/delete_lists.ts +++ b/x-pack/test/lists_api_integration/security_and_spaces/tests/delete_lists.ts @@ -166,8 +166,7 @@ export default ({ getService }: FtrProviderContext) => { .expect(200); }); - // Tests in development - it.skip('should delete a single list referenced within an exception list item if ignoreReferences=true', async () => { + it('should delete a single list referenced within an exception list item if ignoreReferences=true', async () => { // create a list const { body: valueListBody } = await supertest .post(LIST_URL) @@ -207,8 +206,7 @@ export default ({ getService }: FtrProviderContext) => { .expect(409); }); - // Tests in development - it.skip('should delete a single list referenced within an exception list item and referenced exception list items if deleteReferences=true', async () => { + it('should delete a single list referenced within an exception list item and referenced exception list items if deleteReferences=true', async () => { // create a list const { body: valueListBody } = await supertest .post(LIST_URL) @@ -241,6 +239,13 @@ export default ({ getService }: FtrProviderContext) => { }) .expect(200); + // sanity check + await supertest + .get(`${LIST_ITEM_URL}/_find?list_id=${LIST_ID}`) + .set('kbn-xsrf', 'true') + .send() + .expect(200); + // delete that list by its auto-generated id and delete referenced list items const deleteListBody = await supertest .delete(`${LIST_URL}?id=${valueListBody.id}&ignoreReferences=true`) @@ -253,7 +258,7 @@ export default ({ getService }: FtrProviderContext) => { .get(`${LIST_ITEM_URL}/_find?list_id=${LIST_ID}`) .set('kbn-xsrf', 'true') .send() - .expect(200); + .expect(404); }); }); }); diff --git a/x-pack/test/lists_api_integration/security_and_spaces/tests/read_list_privileges.ts b/x-pack/test/lists_api_integration/security_and_spaces/tests/read_list_privileges.ts index b90a3f86a290d1..e2633eea08e12c 100644 --- a/x-pack/test/lists_api_integration/security_and_spaces/tests/read_list_privileges.ts +++ b/x-pack/test/lists_api_integration/security_and_spaces/tests/read_list_privileges.ts @@ -18,8 +18,7 @@ export default ({ getService }: FtrProviderContext) => { const spacesService = getService('spaces'); const supertestWithoutAuth = getService('supertestWithoutAuth'); - // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/88302 - describe.skip('read_list_privileges', () => { + describe('read_list_privileges', () => { const space1Id = 'space_1'; const user1 = { diff --git a/x-pack/test/security_solution_cypress/es_archives/risky_hosts/data.json b/x-pack/test/security_solution_cypress/es_archives/risky_hosts/data.json index f9972f21eeb642..cde819a836b0a3 100644 --- a/x-pack/test/security_solution_cypress/es_archives/risky_hosts/data.json +++ b/x-pack/test/security_solution_cypress/es_archives/risky_hosts/data.json @@ -22,3 +22,28 @@ } } } + +{ + "type":"doc", + "value":{ + "id":"a4cf452c1e0375c3d4412cb550bd1783358468a3b3b777da4829d72c7d6fb74f", + "index":"ml_host_risk_score_default", + "source":{ + "@timestamp":"2021-03-10T14:51:05.766Z", + "risk_stats": { + "risk_score": 21, + "rule_risks": [ + { + "rule_name": "Unusual Linux Username", + "rule_risk": 42 + } + ] + }, + "host":{ + "name":"siem-kibana" + }, + "ingest_timestamp":"2021-03-09T18:02:08.319296053Z", + "risk":"Low" + } + } +} diff --git a/x-pack/test/security_solution_cypress/es_archives/risky_hosts/mappings.json b/x-pack/test/security_solution_cypress/es_archives/risky_hosts/mappings.json index 97d3288bf07b69..02ceb5b5ebcccc 100644 --- a/x-pack/test/security_solution_cypress/es_archives/risky_hosts/mappings.json +++ b/x-pack/test/security_solution_cypress/es_archives/risky_hosts/mappings.json @@ -54,3 +54,61 @@ } } } + + +{ + "type": "index", + "value": { + "index": "ml_host_risk_score_default", + "mappings": { + "properties": { + "@timestamp": { + "type": "date" + }, + "host": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "ingest_timestamp": { + "type": "date" + }, + "risk": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "risk_stats": { + "properties": { + "risk_score": { + "type": "long" + } + } + } + } + }, + "settings": { + "index": { + "lifecycle": { + "name": "ml_host_risk_score_latest_default", + "rollover_alias": "ml_host_risk_score_latest_default" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "max_docvalue_fields_search": "200", + "number_of_replicas": "1", + "number_of_shards": "1", + "refresh_interval": "5s" + } + } + } +} diff --git a/yarn.lock b/yarn.lock index 802e94f30ea6c6..369c5edf179d2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10311,15 +10311,6 @@ concat-stream@1.6.2, concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^ readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@~1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" - integrity sha1-cIl4Yk2FavQaWnQd790mHadSwmY= - dependencies: - inherits "~2.0.1" - readable-stream "~2.0.0" - typedarray "~0.0.5" - concat-stream@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" @@ -12539,10 +12530,10 @@ elastic-apm-http-client@^10.3.0: readable-stream "^3.4.0" stream-chopper "^3.0.1" -elastic-apm-node@^3.26.0: - version "3.26.0" - resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-3.26.0.tgz#551eb425eb85bf16c6ce9567fe92013b038018ab" - integrity sha512-MwYFlBTlcHI8GGQXLnnEm70JJ4RRFkHCY1D3Wt2027l8T/Ye5tgssMSiKyRbjb9bVdibbte73Xn8HF8i35UaxA== +elastic-apm-node@^3.27.0: + version "3.27.0" + resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-3.27.0.tgz#0de441e36519e7384e66f6d420ec9a00a2669a1a" + integrity sha512-x8rWjGBgwKYcYN9IQWUv3dzq88RxEVnVIC6KMXQpFkRBG6XtWG4FeMvLaDSeTdXVnDBKTDVGCF9np5HdGhYbBw== dependencies: "@elastic/ecs-pino-format" "^1.2.0" after-all-results "^2.0.0" @@ -22651,11 +22642,6 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= - process-on-spawn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" @@ -24032,18 +24018,6 @@ readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@~2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - readdir-glob@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" @@ -27877,7 +27851,7 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedarray@^0.0.6, typedarray@~0.0.5: +typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= @@ -29518,14 +29492,6 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -wellknown@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/wellknown/-/wellknown-0.5.0.tgz#09ae9871fa826cf0a6ec1537ef00c379d78d7101" - integrity sha1-Ca6YcfqCbPCm7BU37wDDedeNcQE= - dependencies: - concat-stream "~1.5.0" - minimist "~1.2.0" - wgs84@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76"