diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index cce839293f4..be2001edb9b 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -573,6 +573,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d *Metricbeat* - Deprecate tags config parameter in cloudwatch metricset. {pull}16733[16733] +- Deprecate tags.resource_type_filter config parameter and replace with resource_type. {pull}19688[19688] *Packetbeat* diff --git a/metricbeat/docs/modules/aws.asciidoc b/metricbeat/docs/modules/aws.asciidoc index 4dbc9432dce..add39a7cbbb 100644 --- a/metricbeat/docs/modules/aws.asciidoc +++ b/metricbeat/docs/modules/aws.asciidoc @@ -315,7 +315,7 @@ metricbeat.modules: value: i-0686946e22cf9494a - namespace: AWS/EBS - namespace: AWS/ELB - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing tags: - key: "Organization" value: "Engineering" diff --git a/x-pack/elastic-agent/docs/elastic-agent_configuration_example.yml b/x-pack/elastic-agent/docs/elastic-agent_configuration_example.yml index 261862e7e7f..235576691d0 100644 --- a/x-pack/elastic-agent/docs/elastic-agent_configuration_example.yml +++ b/x-pack/elastic-agent/docs/elastic-agent_configuration_example.yml @@ -350,7 +350,7 @@ inputs: dataset.name: aws.cloudwatch period: 5m name: ["CPUUtilization", "DiskWriteOps"] - tags.resource_type_filter: ec2:instance + resource_type: ec2:instance #dimensions: # - name: InstanceId # value: i-0686946e22cf9494a diff --git a/x-pack/metricbeat/metricbeat.reference.yml b/x-pack/metricbeat/metricbeat.reference.yml index 2fd0a28aa22..0242e23f7c9 100644 --- a/x-pack/metricbeat/metricbeat.reference.yml +++ b/x-pack/metricbeat/metricbeat.reference.yml @@ -219,7 +219,7 @@ metricbeat.modules: value: i-0686946e22cf9494a - namespace: AWS/EBS - namespace: AWS/ELB - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing tags: - key: "Organization" value: "Engineering" diff --git a/x-pack/metricbeat/module/aws/_meta/config.epr.yml b/x-pack/metricbeat/module/aws/_meta/config.epr.yml index 9cc299673b2..b03051de36b 100644 --- a/x-pack/metricbeat/module/aws/_meta/config.epr.yml +++ b/x-pack/metricbeat/module/aws/_meta/config.epr.yml @@ -79,7 +79,7 @@ metrics: - namespace: AWS/EC2 name: [""] - tags.resource_type_filter: "" + resource_type: "" dimensions: - name: "" value: "" diff --git a/x-pack/metricbeat/module/aws/_meta/config.reference.yml b/x-pack/metricbeat/module/aws/_meta/config.reference.yml index 2684e7056ed..de3f9f1ed34 100644 --- a/x-pack/metricbeat/module/aws/_meta/config.reference.yml +++ b/x-pack/metricbeat/module/aws/_meta/config.reference.yml @@ -34,7 +34,7 @@ value: i-0686946e22cf9494a - namespace: AWS/EBS - namespace: AWS/ELB - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing tags: - key: "Organization" value: "Engineering" diff --git a/x-pack/metricbeat/module/aws/_meta/config.yml b/x-pack/metricbeat/module/aws/_meta/config.yml index 06c782fec18..34d2d9f5c55 100644 --- a/x-pack/metricbeat/module/aws/_meta/config.yml +++ b/x-pack/metricbeat/module/aws/_meta/config.yml @@ -14,7 +14,7 @@ metrics: - namespace: AWS/EC2 #name: ["CPUUtilization", "DiskWriteOps"] - tags.resource_type_filter: ec2:instance + resource_type: ec2:instance #dimensions: # - name: InstanceId # value: i-0686946e22cf9494a diff --git a/x-pack/metricbeat/module/aws/cloudwatch/_meta/docs.asciidoc b/x-pack/metricbeat/module/aws/cloudwatch/_meta/docs.asciidoc index faa47f24893..a66f13acd6a 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/_meta/docs.asciidoc +++ b/x-pack/metricbeat/module/aws/cloudwatch/_meta/docs.asciidoc @@ -20,9 +20,8 @@ iam:ListAccountAliases For example, AWS/EC2, AWS/S3. If wildcard * is given for namespace, metrics from all namespaces will be collected automatically. * *name*: The name of the metric to filter against. For example, CPUUtilization for EC2 instance. -* *dimensions*: The dimensions to filter against. For example, InstanceId=i-123. Dimension value -could be wildcard `*` to match any value. -* *tags.resource_type_filter*: The constraints on the resources that you want returned. +* *dimensions*: The dimensions to filter against. For example, InstanceId=i-123. +* *resource_type*: The constraints on the resources that you want returned. The format of each resource type is service[:resourceType]. For example, specifying a resource type of ec2 returns all Amazon EC2 resources (which includes EC2 instances). Specifying a resource type of ec2:instance returns @@ -53,7 +52,7 @@ in configurations in order for this metricset to make proper AWS API calls. metrics: - namespace: AWS/EBS <1> - namespace: AWS/ELB <2> - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing tags: - key: "Organization" value: "Engineering" @@ -69,9 +68,9 @@ in configurations in order for this metricset to make proper AWS API calls. specific namespace, such as `AWS/EBS`. <2> `cloudwatch` metricset also has the ability to collect tags from AWS resources. -If user specify `tags.resource_type_filter`, then tags will be collected and stored +If user specify `resource_type`, then tags will be collected and stored as a part of the event. Please see https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html[AWS API GetResources] -for more details about `tags.resource_type_filter`. +for more details about `resource_type`. <3> If users knows exactly what are the cloudwatch metrics they want to collect, this configuration format can be used. `namespace` and `metricname` need to be @@ -128,11 +127,11 @@ from EBS, ELB and EC2 with tags from these services. - cloudwatch metrics: - namespace: AWS/EBS - tags.resource_type_filter: ebs + resource_type: ebs - namespace: AWS/ELB - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing - namespace: AWS/EC2 - tags.resource_type_filter: ec2:instance + resource_type: ec2:instance ---- With the configuration below, users will be able to collect specific cloudwatch @@ -147,7 +146,7 @@ metric(average) from EC2 instance i-456. metrics: - namespace: AWS/EC2 name: ["CPUUtilization"] - tags.resource_type_filter: ec2:instance + resource_type: ec2:instance dimensions: - name: InstanceId value: i-123 diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go index 57aa99913b8..509d32eb3c5 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go @@ -68,7 +68,8 @@ type Config struct { Namespace string `config:"namespace" validate:"nonzero,required"` MetricName []string `config:"name"` Dimensions []Dimension `config:"dimensions"` - ResourceTypeFilter string `config:"tags.resource_type_filter"` + ResourceTypeFilter string `config:"tags.resource_type_filter"` // Deprecated. + ResourceType string `config:"resource_type"` Statistic []string `config:"statistic"` Tags []aws.Tag `config:"tags"` // Deprecated. } @@ -78,6 +79,10 @@ func (c Config) Validate() error { if c.Tags != nil { cfgwarn.Deprecate("8.0.0", "tags is deprecated. Use tags_filter instead") } + + if c.ResourceTypeFilter != "" { + cfgwarn.Deprecate("8.0.0", "tags.resource_type_filter is deprecated. Use resource_type instead") + } return nil } @@ -350,11 +355,11 @@ func (m *MetricSet) readCloudwatchConfig() (listMetricWithDetail, map[string][]n metricsWithStatsTotal = append(metricsWithStatsTotal, metricsWithStats) } - if config.ResourceTypeFilter != "" { - if _, ok := resourceTypesWithTags[config.ResourceTypeFilter]; ok { - resourceTypesWithTags[config.ResourceTypeFilter] = tagsFilter + if config.ResourceType != "" { + if _, ok := resourceTypesWithTags[config.ResourceType]; ok { + resourceTypesWithTags[config.ResourceType] = tagsFilter } else { - resourceTypesWithTags[config.ResourceTypeFilter] = append(resourceTypesWithTags[config.ResourceTypeFilter], tagsFilter...) + resourceTypesWithTags[config.ResourceType] = append(resourceTypesWithTags[config.ResourceType], tagsFilter...) } } continue @@ -364,7 +369,7 @@ func (m *MetricSet) readCloudwatchConfig() (listMetricWithDetail, map[string][]n names: config.MetricName, tags: tagsFilter, statistics: config.Statistic, - resourceTypeFilter: config.ResourceTypeFilter, + resourceTypeFilter: config.ResourceType, dimensions: cloudwatchDimensions, } @@ -494,7 +499,7 @@ func (m *MetricSet) createEvents(svcCloudwatch cloudwatchiface.ClientAPI, svcRes // Find a timestamp for all metrics in output timestamp := aws.FindTimestamp(metricDataResults) - // Create events when there is no tags_filter or tags.resource_type_filter specified. + // Create events when there is no tags_filter or resource_type specified. if len(resourceTypeTagFilters) == 0 { if !timestamp.IsZero() { for _, output := range metricDataResults { diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go index a141bd342ed..353ffd0e236 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go @@ -446,8 +446,8 @@ func TestReadCloudwatchConfig(t *testing.T) { Value: "i-1", }, }, - ResourceTypeFilter: "ec2:instance", - Statistic: []string{"Average"}, + ResourceType: "ec2:instance", + Statistic: []string{"Average"}, }, }, nil, @@ -466,8 +466,8 @@ func TestReadCloudwatchConfig(t *testing.T) { Value: "i-1", }, }, - ResourceTypeFilter: "ec2:instance", - Statistic: []string{"Average"}, + ResourceType: "ec2:instance", + Statistic: []string{"Average"}, }, { Namespace: "AWS/S3", @@ -489,8 +489,8 @@ func TestReadCloudwatchConfig(t *testing.T) { Value: "i-1", }, }, - Statistic: []string{"Average"}, - ResourceTypeFilter: "ec2:instance", + Statistic: []string{"Average"}, + ResourceType: "ec2:instance", }, { Namespace: "AWS/Lambda", @@ -508,8 +508,8 @@ func TestReadCloudwatchConfig(t *testing.T) { Value: "READER", }, }, - Statistic: []string{"Average"}, - ResourceTypeFilter: "rds", + Statistic: []string{"Average"}, + ResourceType: "rds", }, }, nil, @@ -520,13 +520,13 @@ func TestReadCloudwatchConfig(t *testing.T) { "Test a specific metric (only with metric name) and a namespace", []Config{ { - Namespace: "AWS/EC2", - MetricName: []string{"CPUUtilization"}, - ResourceTypeFilter: resourceTypeEC2, + Namespace: "AWS/EC2", + MetricName: []string{"CPUUtilization"}, + ResourceType: resourceTypeEC2, }, { - Namespace: "AWS/S3", - ResourceTypeFilter: "s3", + Namespace: "AWS/S3", + ResourceType: "s3", }, }, nil, @@ -539,8 +539,8 @@ func TestReadCloudwatchConfig(t *testing.T) { "test EBS namespace", []Config{ { - Namespace: "AWS/EBS", - ResourceTypeFilter: "ec2", + Namespace: "AWS/EBS", + ResourceType: "ec2", }, }, nil, @@ -553,10 +553,10 @@ func TestReadCloudwatchConfig(t *testing.T) { "test with two metrics and no dimension", []Config{ { - Namespace: "AWS/EC2", - MetricName: []string{"CPUUtilization", "StatusCheckFailed"}, - ResourceTypeFilter: resourceTypeEC2, - Statistic: []string{"Average", "Maximum"}, + Namespace: "AWS/EC2", + MetricName: []string{"CPUUtilization", "StatusCheckFailed"}, + ResourceType: resourceTypeEC2, + Statistic: []string{"Average", "Maximum"}, }, }, nil, @@ -583,21 +583,21 @@ func TestReadCloudwatchConfig(t *testing.T) { "Test with different statistics", []Config{ { - Namespace: "AWS/EC2", - MetricName: []string{"CPUUtilization"}, - ResourceTypeFilter: resourceTypeEC2, + Namespace: "AWS/EC2", + MetricName: []string{"CPUUtilization"}, + ResourceType: resourceTypeEC2, }, { - Namespace: "AWS/ELB", - MetricName: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, - Statistic: []string{"Sum"}, - ResourceTypeFilter: "elasticloadbalancing", + Namespace: "AWS/ELB", + MetricName: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, + Statistic: []string{"Sum"}, + ResourceType: "elasticloadbalancing", }, { - Namespace: "AWS/ELB", - MetricName: []string{"HealthyHostCount", "SurgeQueueLength", "UnHealthyHostCount"}, - Statistic: []string{"Maximum"}, - ResourceTypeFilter: "elasticloadbalancing", + Namespace: "AWS/ELB", + MetricName: []string{"HealthyHostCount", "SurgeQueueLength", "UnHealthyHostCount"}, + Statistic: []string{"Maximum"}, + ResourceType: "elasticloadbalancing", }, }, []aws.Tag{ @@ -615,16 +615,16 @@ func TestReadCloudwatchConfig(t *testing.T) { "Test with different statistics and a specific metric", []Config{ { - Namespace: "AWS/ELB", - MetricName: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, - Statistic: []string{"Sum"}, - ResourceTypeFilter: "elasticloadbalancing", + Namespace: "AWS/ELB", + MetricName: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, + Statistic: []string{"Sum"}, + ResourceType: "elasticloadbalancing", }, { - Namespace: "AWS/ELB", - MetricName: []string{"HealthyHostCount", "SurgeQueueLength", "UnHealthyHostCount"}, - Statistic: []string{"Maximum"}, - ResourceTypeFilter: "elasticloadbalancing", + Namespace: "AWS/ELB", + MetricName: []string{"HealthyHostCount", "SurgeQueueLength", "UnHealthyHostCount"}, + Statistic: []string{"Maximum"}, + ResourceType: "elasticloadbalancing", }, { Namespace: "AWS/Lambda", @@ -638,8 +638,8 @@ func TestReadCloudwatchConfig(t *testing.T) { Value: "i-1", }, }, - Statistic: []string{"Average"}, - ResourceTypeFilter: "ec2:instance", + Statistic: []string{"Average"}, + ResourceType: "ec2:instance", }, { Namespace: "AWS/RDS", @@ -654,8 +654,8 @@ func TestReadCloudwatchConfig(t *testing.T) { Value: "READER", }, }, - Statistic: []string{"Average"}, - ResourceTypeFilter: "rds", + Statistic: []string{"Average"}, + ResourceType: "rds", }, }, []aws.Tag{ @@ -678,8 +678,8 @@ func TestReadCloudwatchConfig(t *testing.T) { Value: "i-1", }, }, - Statistic: []string{"Average"}, - ResourceTypeFilter: "ec2:instance", + Statistic: []string{"Average"}, + ResourceType: "ec2:instance", }, }, nil, @@ -700,8 +700,8 @@ func TestReadCloudwatchConfig(t *testing.T) { Value: "i-1", }, }, - ResourceTypeFilter: "ec2:instance", - Statistic: []string{"Average"}, + ResourceType: "ec2:instance", + Statistic: []string{"Average"}, }, }, nil, diff --git a/x-pack/metricbeat/module/aws/dynamodb/manifest.yml b/x-pack/metricbeat/module/aws/dynamodb/manifest.yml index 49a03c61efc..5f658f8f7ee 100644 --- a/x-pack/metricbeat/module/aws/dynamodb/manifest.yml +++ b/x-pack/metricbeat/module/aws/dynamodb/manifest.yml @@ -5,7 +5,7 @@ input: defaults: metrics: - namespace: AWS/DynamoDB - tags.resource_type_filter: dynamodb + resource_type: dynamodb statistic: ["Average"] name: - SuccessfulRequestLatency @@ -19,7 +19,7 @@ input: - AccountProvisionedReadCapacityUtilization - AccountProvisionedWriteCapacityUtilization - namespace: AWS/DynamoDB - tags.resource_type_filter: dynamodb + resource_type: dynamodb statistic: ["Sum"] name: - SystemErrors @@ -32,7 +32,7 @@ input: - ThrottledRequests - WriteThrottleEvents - namespace: AWS/DynamoDB - tags.resource_type_filter: dynamodb + resource_type: dynamodb statistic: ["Maximum"] name: - SuccessfulRequestLatency diff --git a/x-pack/metricbeat/module/aws/ebs/manifest.yml b/x-pack/metricbeat/module/aws/ebs/manifest.yml index eb532300fdc..5e6dcef99f0 100644 --- a/x-pack/metricbeat/module/aws/ebs/manifest.yml +++ b/x-pack/metricbeat/module/aws/ebs/manifest.yml @@ -7,8 +7,8 @@ input: - namespace: AWS/EBS statistic: ["Average"] name: ["VolumeReadBytes", "VolumeWriteBytes", "VolumeReadOps", "VolumeWriteOps", "VolumeQueueLength", "VolumeThroughputPercentage", "VolumeConsumedReadWriteOps", "BurstBalance"] - tags.resource_type_filter: ec2 + resource_type: ec2 - namespace: AWS/EBS statistic: ["Sum"] name: ["VolumeTotalReadTime", "VolumeTotalWriteTime", "VolumeIdleTime"] - tags.resource_type_filter: ec2 + resource_type: ec2 diff --git a/x-pack/metricbeat/module/aws/elb/manifest.yml b/x-pack/metricbeat/module/aws/elb/manifest.yml index daa6a34fffd..dcfe4d5433a 100644 --- a/x-pack/metricbeat/module/aws/elb/manifest.yml +++ b/x-pack/metricbeat/module/aws/elb/manifest.yml @@ -7,15 +7,15 @@ input: - namespace: AWS/ELB statistic: ["Sum"] name: ["BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX", "HTTPCode_Backend_4XX", "HTTPCode_Backend_5XX", "HTTPCode_ELB_4XX", "HTTPCode_ELB_5XX", "RequestCount", "SpilloverCount"] - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing - namespace: AWS/ELB statistic: ["Maximum"] name: ["HealthyHostCount", "SurgeQueueLength", "UnHealthyHostCount"] - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing - namespace: AWS/ELB statistic: ["Average"] name: ["Latency", "EstimatedALBActiveConnectionCount", "EstimatedALBConsumedLCUs", "EstimatedALBNewConnectionCount", "EstimatedProcessedBytes"] - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing - namespace: AWS/ApplicationELB statistic: ["Sum"] name: ["ActiveConnectionCount", "ClientTLSNegotiationErrorCount", "HTTP_Fixed_Response_Count", @@ -25,22 +25,22 @@ input: "HTTPCode_ELB_504_Count", "IPv6ProcessedBytes", "IPv6RequestCount", "NewConnectionCount", "ProcessedBytes", "RejectedConnectionCount", "RequestCount", "RuleEvaluations"] - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing - namespace: AWS/ApplicationELB statistic: ["Average"] name: ["ConsumedLCUs"] - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing - namespace: AWS/NetworkELB statistic: ["Average"] name: ["ActiveFlowCount", "ActiveFlowCount_TCP", "ActiveFlowCount_TLS", "ActiveFlowCount_UDP", "ConsumedLCUs", "ConsumedLCUs_TCP", "ConsumedLCUs_TLS", "ConsumedLCUs_UDP"] - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing - namespace: AWS/NetworkELB statistic: ["Sum"] name: ["ClientTLSNegotiationErrorCount", "NewFlowCount", "NewFlowCount_TLS", "NewFlowCount_TCP", "NewFlowCount_UDP", "ProcessedBytes", "ProcessedBytes_TCP", "ProcessedBytes_TLS", "ProcessedBytes_UDP", "TargetTLSNegotiationErrorCount", "TCP_Client_Reset_Count", "TCP_ELB_Reset_Count", "TCP_Target_Reset_Count"] - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing - namespace: AWS/NetworkELB statistic: ["Maximum"] name: ["HealthyHostCount", "UnHealthyHostCount"] - tags.resource_type_filter: elasticloadbalancing + resource_type: elasticloadbalancing diff --git a/x-pack/metricbeat/module/aws/lambda/manifest.yml b/x-pack/metricbeat/module/aws/lambda/manifest.yml index f1f18fd8783..c77e5fea20a 100644 --- a/x-pack/metricbeat/module/aws/lambda/manifest.yml +++ b/x-pack/metricbeat/module/aws/lambda/manifest.yml @@ -9,12 +9,12 @@ input: name: ["Invocations", "Errors", "DeadLetterErrors", "DestinationDeliveryFailures", "Duration", "Throttles", "IteratorAge", "ConcurrentExecutions", "UnreservedConcurrentExecutions"] - tags.resource_type_filter: lambda + resource_type: lambda - namespace: AWS/Lambda statistic: ["Maximum"] name: ["ProvisionedConcurrentExecutions", "ProvisionedConcurrencyUtilization"] - tags.resource_type_filter: lambda + resource_type: lambda - namespace: AWS/Lambda statistic: ["Sum"] name: ["ProvisionedConcurrencyInvocations", "ProvisionedConcurrencySpilloverInvocations"] - tags.resource_type_filter: lambda + resource_type: lambda diff --git a/x-pack/metricbeat/module/aws/sns/manifest.yml b/x-pack/metricbeat/module/aws/sns/manifest.yml index 62d9ce44c45..c8d96514826 100644 --- a/x-pack/metricbeat/module/aws/sns/manifest.yml +++ b/x-pack/metricbeat/module/aws/sns/manifest.yml @@ -5,13 +5,13 @@ input: defaults: metrics: - namespace: AWS/SNS - tags.resource_type_filter: sns + resource_type: sns statistic: ["Average"] name: - PublishSize - SMSSuccessRate - namespace: AWS/SNS - tags.resource_type_filter: sns + resource_type: sns statistic: ["Sum"] name: - NumberOfMessagesPublished diff --git a/x-pack/metricbeat/modules.d/aws.yml.disabled b/x-pack/metricbeat/modules.d/aws.yml.disabled index 6ae9c880b0f..8ddb3333f70 100644 --- a/x-pack/metricbeat/modules.d/aws.yml.disabled +++ b/x-pack/metricbeat/modules.d/aws.yml.disabled @@ -17,7 +17,7 @@ metrics: - namespace: AWS/EC2 #name: ["CPUUtilization", "DiskWriteOps"] - tags.resource_type_filter: ec2:instance + resource_type: ec2:instance #dimensions: # - name: InstanceId # value: i-0686946e22cf9494a