fluent-plugin-ec2-metadata 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +27 -7
- data/fluent-plugin-ec2-metadata.gemspec +4 -3
- data/lib/fluent/plugin/out_ec2_metadata.rb +29 -8
- data/test/plugin/test_out_ec2_metadata.rb +7 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e775b4cdc0695590d02f3933c3ae964da6075b2a
|
4
|
+
data.tar.gz: c00a2053b3cefd22f1526486eb380a5807a4b05e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a1bc7aef728a460b519d695641f1683dd6b738bbc66ba948df8b3a21aca1d0b79e951ee6d9f0577773c078995f6a276bc76fa524bcfc80d2a33e2163f63d80d
|
7
|
+
data.tar.gz: 778cc3e7bf5233862971030ee5023264fc7f42057199ab296b5d091469eebd3452a971accdb25826ee825dbbb75cda7d677f0bc479461818daa454d84bb2fa4b
|
data/README.md
CHANGED
@@ -12,11 +12,18 @@ Use RubyGems:
|
|
12
12
|
Example:
|
13
13
|
|
14
14
|
<match foo.**>
|
15
|
-
type
|
16
|
-
|
15
|
+
type ec2_metadata
|
16
|
+
|
17
|
+
aws_key_id YOUR_AWS_KEY_ID
|
18
|
+
aws_sec_key YOUR_AWS_SECRET/KEY
|
17
19
|
|
20
|
+
output_tag ${instance_id}.${tag}
|
18
21
|
<record>
|
19
|
-
hostname
|
22
|
+
hostname ${tagset_name}
|
23
|
+
instance_id ${instance_id}
|
24
|
+
instance_type ${instance_type}
|
25
|
+
az ${availability_zone}
|
26
|
+
vpc_id ${vpc_id}
|
20
27
|
</record>
|
21
28
|
</match>
|
22
29
|
|
@@ -30,18 +37,31 @@ then output becomes as below (indented):
|
|
30
37
|
|
31
38
|
```js
|
32
39
|
i-28b5ee77.foo.bar {
|
33
|
-
"hostname"
|
34
|
-
"
|
40
|
+
"hostname" : "web0001",
|
41
|
+
"instance_id" : "i-28b5ee77",
|
42
|
+
"instance_type" : "m1.large",
|
43
|
+
"az" : "us-west-1b",
|
44
|
+
"vpc_id" : "vpc-25dab194",
|
45
|
+
"message" : "hello ec2!"
|
35
46
|
}
|
36
47
|
```
|
37
48
|
|
38
49
|
### Placeholders
|
39
50
|
|
40
|
-
The following placeholders are available:
|
51
|
+
The following placeholders are always available:
|
41
52
|
|
42
|
-
* ${instance_id} instance id
|
43
53
|
* ${tag} input tag
|
44
54
|
* ${tag_parts} input tag splitted by '.'. you can use it like `${tag_parts[0]}` or `${tag_parts[-1]}`
|
55
|
+
* ${instance_id} instance id
|
56
|
+
* ${instance_type} instance type
|
57
|
+
* ${availability_zone} availability zone
|
58
|
+
* ${region} region
|
59
|
+
|
60
|
+
The followings are available when you define `aws_key_id` and `aws_sec_key`:
|
61
|
+
|
62
|
+
* ${vpc_id} vpc id
|
63
|
+
* ${subnet_id} subnet id
|
64
|
+
* ${tagset_xxx} EC2 tag (e.g. tagset_name is replaced by the value of Key = Name)
|
45
65
|
|
46
66
|
## Contributing
|
47
67
|
|
@@ -4,11 +4,11 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "fluent-plugin-ec2-metadata"
|
7
|
-
spec.version = "0.0.
|
7
|
+
spec.version = "0.0.3"
|
8
8
|
spec.authors = ["SAKAMOTO Takumi"]
|
9
9
|
spec.email = ["takumi.saka@gmail.com"]
|
10
|
-
spec.description = %q{
|
11
|
-
spec.summary = %q{
|
10
|
+
spec.description = %q{Fluentd output plugin to add ec2 metadata fields to a event record}
|
11
|
+
spec.summary = %q{Fluentd output plugin to add ec2 metadata fields to a event record}
|
12
12
|
spec.homepage = "https://github.com/takus/fluent-plugin-ec2-metadata"
|
13
13
|
spec.license = "APLv2"
|
14
14
|
|
@@ -19,4 +19,5 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_development_dependency "rake"
|
21
21
|
spec.add_runtime_dependency "fluentd"
|
22
|
+
spec.add_runtime_dependency "aws-sdk"
|
22
23
|
end
|
@@ -7,7 +7,10 @@ module Fluent
|
|
7
7
|
require 'net/http'
|
8
8
|
end
|
9
9
|
|
10
|
-
config_param :output_tag,
|
10
|
+
config_param :output_tag, :string
|
11
|
+
|
12
|
+
config_param :aws_key_id, :string, :default => ENV['AWS_ACCESS_KEY_ID']
|
13
|
+
config_param :aws_sec_key, :string, :default => ENV['AWS_SECRET_ACCESS_KEY']
|
11
14
|
|
12
15
|
def configure(conf)
|
13
16
|
super
|
@@ -25,7 +28,27 @@ module Fluent
|
|
25
28
|
|
26
29
|
# get ec2 metadata
|
27
30
|
@ec2_metadata = {}
|
28
|
-
@ec2_metadata['instance_id']
|
31
|
+
@ec2_metadata['instance_id'] = get_metadata('instance-id')
|
32
|
+
@ec2_metadata['instance_type'] = get_metadata('instance-type')
|
33
|
+
@ec2_metadata['availability_zone'] = get_metadata('placement/availability-zone')
|
34
|
+
@ec2_metadata['region'] = @ec2_metadata['availability_zone'].chop
|
35
|
+
|
36
|
+
if @aws_key_id and @aws_sec_key then
|
37
|
+
require 'aws-sdk'
|
38
|
+
|
39
|
+
AWS.config(access_key_id: @aws_key_id, secret_access_key: @aws_sec_key, region: @ec2_metadata['region'])
|
40
|
+
|
41
|
+
response = AWS.ec2.client.describe_instances( { :instance_ids => [ @ec2_metadata['instance_id'] ] })
|
42
|
+
instance = response[:reservation_set].first[:instances_set].first
|
43
|
+
raise Fluent::ConfigError, "ec2-metadata: failed to get instance data #{response.pretty_inspect}" if instance.nil?
|
44
|
+
|
45
|
+
@ec2_metadata['vpc_id'] = instance[:vpc_id]
|
46
|
+
@ec2_metadata['subnet_id'] = instance[:subnet_id]
|
47
|
+
|
48
|
+
instance[:tag_set].each { |tag|
|
49
|
+
@ec2_metadata["tagset_#{tag[:key].downcase}"] = tag[:value]
|
50
|
+
}
|
51
|
+
end
|
29
52
|
end
|
30
53
|
|
31
54
|
def emit(tag, es, chain)
|
@@ -41,10 +64,9 @@ module Fluent
|
|
41
64
|
|
42
65
|
private
|
43
66
|
|
44
|
-
def
|
45
|
-
res = Net::HTTP.get_response("169.254.169.254", "/latest/meta-data
|
46
|
-
raise Fluent::ConfigError, "ec2-metadata: failed to get
|
47
|
-
raise Fluent::ConfigError, "ec2-metadata: invalid instance-id #{res.body}" unless res.body =~ /^i-\h{8}$/
|
67
|
+
def get_metadata(f)
|
68
|
+
res = Net::HTTP.get_response("169.254.169.254", "/latest/meta-data/#{f}")
|
69
|
+
raise Fluent::ConfigError, "ec2-metadata: failed to get #{f}" unless res.is_a?(Net::HTTPSuccess)
|
48
70
|
res.body
|
49
71
|
end
|
50
72
|
|
@@ -83,8 +105,7 @@ module Fluent
|
|
83
105
|
end
|
84
106
|
|
85
107
|
def expand(str)
|
86
|
-
str.gsub(/(\${[a-z_]+(\[-?[0-9]+\])?}|__[A-Z_]+__)/) {
|
87
|
-
$log.warn "ec2-metadata: unknown placeholder `#{$1}` found in a tag `#{tag}`" unless @placeholders.include?($1)
|
108
|
+
str.gsub(/(\${[a-z_]+(\[-?[0-9]+\])?}|__[A-Z_]+__)/) { $log.warn "ec2-metadata: unknown placeholder `#{$1}` found in a tag `#{tag}`" unless @placeholders.include?($1)
|
88
109
|
@placeholders[$1]
|
89
110
|
}
|
90
111
|
end
|
@@ -9,6 +9,7 @@ class EC2MetadataOutputTest < Test::Unit::TestCase
|
|
9
9
|
output_tag ${instance_id}.${tag}
|
10
10
|
<record>
|
11
11
|
instance_id ${instance_id}
|
12
|
+
az ${availability_zone}
|
12
13
|
</record>
|
13
14
|
]
|
14
15
|
|
@@ -20,6 +21,10 @@ class EC2MetadataOutputTest < Test::Unit::TestCase
|
|
20
21
|
Net::HTTP.get_response('169.254.169.254', '/latest/meta-data/instance-id').body
|
21
22
|
end
|
22
23
|
|
24
|
+
def get_avaivality_zone
|
25
|
+
Net::HTTP.get_response('169.254.169.254', '/latest/meta-data/placement/availability-zone').body
|
26
|
+
end
|
27
|
+
|
23
28
|
def test_emit
|
24
29
|
d = create_driver(CONFIG, 'foo.bar')
|
25
30
|
|
@@ -29,13 +34,14 @@ class EC2MetadataOutputTest < Test::Unit::TestCase
|
|
29
34
|
end
|
30
35
|
|
31
36
|
instance_id = get_instance_id
|
37
|
+
availability_zone = get_avaivality_zone
|
32
38
|
|
33
39
|
# tag
|
34
40
|
assert_equal "#{instance_id}.foo.bar", d.emits[0][0]
|
35
41
|
assert_equal "#{instance_id}.foo.bar", d.emits[1][0]
|
36
42
|
|
37
43
|
# record
|
38
|
-
mapped = { 'instance_id' => instance_id }
|
44
|
+
mapped = { 'instance_id' => instance_id, 'az' => availability_zone }
|
39
45
|
assert_equal [
|
40
46
|
{"a" => 1}.merge(mapped),
|
41
47
|
{"a" => 2}.merge(mapped),
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-ec2-metadata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SAKAMOTO Takumi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -38,7 +38,21 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aws-sdk
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Fluentd output plugin to add ec2 metadata fields to a event record
|
42
56
|
email:
|
43
57
|
- takumi.saka@gmail.com
|
44
58
|
executables: []
|
@@ -78,7 +92,7 @@ rubyforge_project:
|
|
78
92
|
rubygems_version: 2.0.3
|
79
93
|
signing_key:
|
80
94
|
specification_version: 4
|
81
|
-
summary:
|
95
|
+
summary: Fluentd output plugin to add ec2 metadata fields to a event record
|
82
96
|
test_files:
|
83
97
|
- test/helper.rb
|
84
98
|
- test/plugin/test_out_ec2_metadata.rb
|