Git Product home page Git Product logo

chef-td-agent's Introduction

Build Status

DESCRIPTION

Chef cookbook for td-agent (Treasure Data Agent). The release log of td-agent is available here.

NOTE: td-agent is open-sourced as the Fluentd project. If you want to use a stable version of Fluentd, using this cookbook is recommended.

INSTALLATION

Installing with Berkshelf

This cookbook is released on Chef Supermarket. You can install the cookbook using Berkshelf.

$ echo 'cookbook "td-agent"' >> Berksfile
$ berks install

Installing with knife-github-cookbooks

The knife-github-cookbooks gem is a plugin for knife that supports installing cookbooks directly from a GitHub repository. To install with this plugin, please follow these steps:

$ gem install knife-github-cookbooks
$ cd chef-repo
$ knife cookbook github install treasure-data/chef-td-agent

NOTICE

This cookbook may be used on Amazon Linux but we cannot guarantee if td-agent will work properly because AWS doesn't guarantee binary compatibility with RHEL (they aim to be "as compatible as possible"). If users encounter any compatibility issues with td-agent on Amazon Linux, they should contact AWS.

REQUIREMENTS

This cookbook has these external dependencies.

  • apt cookbook
  • yum cookbook

ATTRIBUTES

api_key

API Key, and the Secret Key are required.

  • node[:td_agent][:api_key] (required)

plugins

A list of fluentd plugins to install. The fluent-plugin- prefix is automatically added. Additional variables can be passed.

  • node[:td_agent][:plugins]

Example

This installs the latest version of fluent-plugin-flowcounter and version 0.0.9 of fluent-plugin-rewrite.

node[:td_agent][:plugins] = [
  "flowcounter",
  { "rewrite" => { "version" => "0.0.9" } }
]

version

You can install the latest td-agent 2 using the version attribute and major version.

node[:td_agent][:version] = '2'

You can also specify the full version.

node[:td_agent][:version] = '2.0.4'

pinning_version and version

If pinning_version is true, then version's td-agent will be installed. The default version is the latest version.

  • node[:td_agent][:pinning_version]
  • node[:td_agent][:version]

In this case, you should set the full version in node[:td_agent][:version].

uid

UID of td-agent user. Automatically assigned by default.

gid

GID of td-agent group. Automatically assigned by default.

RESOURCES / PROVIDERS

td_agent_gem

Installs a gem or fluentd plugin using the embedded fluent-gem

Actions

Action Description
install Install the gem, optinally with a specific version. Default.
upgrade Upgrade to the latest gem
remove Remove the gem
purge Purge the gem

Attributes

Attribute Description
package_name Gem name. Defaults to name
version Gem version. Installs the latest if none specified
source Local .gem file
options Options passed to the gem command
gem_binary Override path to the gem command
response_file Not supported
plugin If true, no need to prefix the gem name w/ "fluent-plugin-". Defaults to false

Examples

This installs fluent-plugin-datacounter (v0.2.0)

td_agent_gem "datacounter" do
  version "0.2.0"
  plugin true
end

This installs the latest version of aws-sdk

td_agent_gem "aws-sdk" do
  plugin false
end

td_agent_source

Create file with source definition in /etc/td-agent/conf.d directory. It works only if node[:td_agent][:includes] is true

Notice: If you use some plugins in your sources, you should install it before you call lwrp.

Actions

Action Description
:create Create a file
:delete Delete a file

Attributes

Attribute Description
source_name File name. To its value will be added .conf. Defaults to name
type Type of source. This is name of input plugin.
tag Tag, what uses in fluentd routing.
parameters Parameters of source. Hash.

Example

This example creates the source with tail type and syslog tag which reads from /var/log/messages and parses it as syslog.

td_agent_source 'test_in_tail' do
  type 'tail'
  tag 'syslog'
  parameters(format: 'syslog',
         path: '/var/log/messages')
end

td_agent_match

Create file with match definition in /etc/td-agent/conf.d directory. It works only if node[:td_agent][:includes] is true

Notice: Notice: If you use some plugins in your matches, you should install it before you call lwrp.

Actions

Action Description
:create Create a file
:delete Delete a file

Attributes

Attribute Description
match_name File name. To its value will be added .conf. Defaults to name
type Type of match. This is name of output plugin.
tag Tag, what uses in fluentd routing.
parameters Parameters of match. Hash.

Example

This example creates the match with type copy and tag webserver.* which sends log data to local graylog2 server.

td_agent_match 'test_gelf_match' do
  type 'copy'
  tag 'webserver.*'
  parameters( store: [{ type: 'gelf',
                   host: '127.0.0.1',
                   port: 12201,
                   flush_interval: '5s'},
                   { type: 'stdout' }])
end

td_agent_filter

Create file with filter definition in /etc/td-agent/conf.d directory. It works only if node[:td_agent][:includes] is true

Notice: Notice: If you use some plugins for your filters, you should install them before you call lwrp.

Actions

Action Description
:create Create a filter
:delete Delete a filter

Attributes

Attribute Description
filter_name File name. To its value will be added .conf. Defaults to name
type Type of filter. This is name of output plugin.
tag Tag, what uses in fluentd routing.
parameters Parameters of filter. Hash.

Example

This example creates the filter with type record_transformer and tag webserver.* which adds the hostname field with the server's hostname as its value:

td_agent_filter 'filter_webserver' do
  type 'record_transformer'
  tag 'webserver.*'
  parameters(
    record: [ { host_param: %Q|"#{Socket.gethostname}"| } ]
  )
end

td_agent_plugin

Install plugin from url to /etc/td-agent/plugin dir.

Actions

Action Description
:create Install plugin
:delete Uninstall plugin

Attributes

Attribute Description
plugin_name File name. To its value will be added .rb. Defaults to name
url Url what contains plugin file. Value of this attribute may be the same as remote_file resource.

Example

Install plugin gelf.rb from url https://raw.githubusercontent.com/emsearcy/fluent-plugin-gelf/master/lib/fluent/plugin/out_gelf.rb

td_agent_plugin 'gelf' do
  url 'https://raw.githubusercontent.com/emsearcy/fluent-plugin-gelf/master/lib/fluent/plugin/out_gelf.rb'
end

includes

Optionally include /etc/td-agent/conf.d/*.conf files (i.e. symlinks, other recipes, etc.)

  • node[:td_agent][:includes] = false

default_config

Optionally prevent /etc/td-agent/td-agent.conf from including default config.

  • node[:td_agent][:default_config] = true

USAGE

This is an example role file.

name "base"
description "base server role."
run_list(
  "recipe[apt]",
  "recipe[yum]",
  "recipe[td-agent]",
)
override_attributes(
  # for td-agent
  :td_agent => {
    :api_key => 'foo_bar_buz',
    :plugins => [
      'rewrite'
    ]
  }
)

HTTP API Options

  • node[:td_agent][:in_http][:enable_api] = true

Access to the API may be disabled by setting enable_api to false. This may be of particular use when td-agent is being used on endpoint systems that are forwarding logs to a centralized td-agent server.

License

Copyright 2014-today Treasure Data, Inc.

The code is licensed under the Apache License 2.0 (see LICENSE for details).

chef-td-agent's People

Contributors

abe4tawa8 avatar aki77 avatar darklore avatar dependabot[bot] avatar eightbitraptor avatar ephemeralsnow avatar fenrirunbound avatar ijin avatar imkira avatar jdoss avatar jperville avatar jro avatar kzk avatar makimoto avatar markslemko avatar muratayusuke avatar nikushi avatar raboo avatar raphaelcm avatar repeatedly avatar rmoriz avatar rune-chan avatar ryotarai avatar sandstrom avatar scalp42 avatar tagomoris avatar tatsuru avatar waderobson avatar watanabe-kyohei avatar yyuu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chef-td-agent's Issues

packages.teasuredata.com s3 bucket 404

Hi there, while not specifically a chef-td-agent problem, anybody using this chef recipe will run into issues with the update or install action, because the http://packages.treasuredata.com/2/ubuntu/bionic 404s (or rather has issues -- see chef output below). I understand the s3 bucket won't let people browse the directory.

It appears the hosting for these packages has updated to somewhere else:

For example, Ubuntu users can find repos hosted here instead:
https://td-agent-package-browser.herokuapp.com/2/ubuntu/
https://td-agent-package-browser.herokuapp.com/4/ubuntu/

While not the responsibility of this package, it would be great if the domain names resolved to the correct hosting location.

Otherwise, I suspect a change would be needed to update recipes/install.rb URI paths.

Here's my chef output of the relevant lines failing during update action:

[2022-02-17T17:36:07+00:00] INFO: Processing execute[apt-cache gencaches] action nothing (/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.18.31/lib/chef/provider/apt_repository.rb line 54)
[2022-02-17T17:36:07+00:00] INFO: Processing apt_update[treasure-data] action nothing (/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.18.31/lib/chef/provider/apt_repository.rb line 59)
[2022-02-17T17:36:07+00:00] INFO: Processing file[/etc/apt/sources.list.d/treasure-data.list] action create (/opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.18.31/lib/chef/provider/apt_repository.rb line 79)
[2022-02-17T17:36:07+00:00] INFO: Processing directory[/etc/td-agent/conf.d] action create (td-agent::install line 121)
[2022-02-17T17:36:07+00:00] INFO: Processing apt_package[td-agent] action upgrade (td-agent::install line 128)
[2022-02-17T17:36:08+00:00] INFO: Retrying execution of apt_package[td-agent], 2 attempt(s) left
[2022-02-17T17:36:18+00:00] INFO: Retrying execution of apt_package[td-agent], 1 attempt(s) left
[2022-02-17T17:36:28+00:00] INFO: Retrying execution of apt_package[td-agent], 0 attempt(s) left

================================================================================
Error executing action `upgrade` on resource 'apt_package[td-agent]'
================================================================================

Chef::Exceptions::Package
-------------------------
No candidate version available for td-agent

While I can set my attributes to use a newer td-agent, my immediate need is that we can still install td-agent 2

default['td_agent']['version'] = '2'

I run into different problems to solve if jumping to td-agent 4.


I'm technically identifying two problems:

  1. td-agent 2 has install / update issues
  2. trying to browse the packages publicly isn't possible, but is under a new domain.

Sync to chef supermarket

it seems like the latest version isn't uploaded to chef supermarket.
Could you sync the updates?

On Red Hat family, the value of the platform_family attribute is "rhel", not "redhat"

On Red Hat family, node["platform_family"] is rhel, not redhat.

def reload_available?
case node["platform_family"]
when "debian"
# td-agent's init script for debian starts supporting reload starting from 2.1.4
if node["td_agent"]["version"]
::Gem::Version.new("2.1.4") <= ::Gem::Version.new(node["td_agent"]["version"].to_s)
else
false
end
when "redhat"
# td-agent's init script for redhat is supporting reload
true
else
false
end
end

    def reload_available?
      case node["platform_family"]
      when "debian"
        # td-agent's init script for debian starts supporting reload starting from 2.1.4
        if node["td_agent"]["version"]
          ::Gem::Version.new("2.1.4") <= ::Gem::Version.new(node["td_agent"]["version"].to_s)
        else
          false
        end
      when "redhat"
        # td-agent's init script for redhat is supporting reload
        true
      else
        false
      end
    end

https://github.com/chef/ohai/blob/master/lib/ohai/plugins/linux/platform.rb#L182-L183

    when /oracle/, /centos/, /redhat/, /scientific/, /enterpriseenterprise/, /amazon/, /xenserver/, /cloudlinux/, /ibm_powerkvm/, /parallels/, /nexus_centos/ # Note that 'enterpriseenterprise' is oracle's LSB "distributor ID"
      platform_family "rhel"

Alternative user to td-agent

For context, our production environment only allows an approved set of system users. We currently are utilizing the /etc/sysconfig/td-agent to have the process be started as a different user, but it does not change the permissions of various files and folders. The difference in ownership disallows the process from being restarted.

Would you be open to allowing the td-agent user to be an attribute instead of hard-coded in the recipe? We wanted to contribute with a PR, but wanted to see if the work is worth pursing if you would allow it.

Ubuntu 14.04 / sources.list / arch missing

This cookbook by default creates the following entry in the /etc/apt/sources.list.d:

deb   http://packages.treasuredata.com/2/ubuntu/trusty/ trusty contrib

Unfortunately this causes an error on ยดapt-get updateยด

STDERR: W: Failed to fetch http://packages.treasuredata.com/2/ubuntu/trusty/dists/trusty/InRelease  Unable to find expected entry 'contrib/binary-i386/Packages' in Release file (Wrong sources.list entry or malformed file)

A possible fix is to create a sources.list with hardcoded architecture:

deb   [arch=amd64] http://packages.treasuredata.com/2/ubuntu/trusty/ trusty contrib

or with the apt cookbook LWRPs:

   ...
  apt_repository "treasure-data" do
    uri source
    distribution dist
    arch 'amd64'   # this line new
    components ["contrib"]
    key "http://packages.treasuredata.com/GPG-KEY-td-agent"
    action :add
  end
   ...

cookbook installs fluentd 0.14.21

Im wondering if this is an expected behavior being that fluentd 0.14.21 is not even officially released and i would expect this to install 0.12.X.

Most of our pipeline is breaking because of this of this release.

install plugin doesn't work with version 4

Hi,
if i try to install opensearch plugin i receive an error because seems that from version 4 td-agent-gem doesn't support anymore the --no-rdoc option. I tried to find this option inside cookbook but i didn't find where is declared.

================================================================================
Error executing action `install` on resource 'td_agent_gem[opensearch]'
================================================================================
 
Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of /usr/sbin/td-agent-gem install fluent-plugin-opensearch -q --no-rdoc --no-ri -v "1.0.0" ----
STDOUT: 
STDERR: ERROR:  While executing gem ... (OptionParser::InvalidOption)
invalid option: --no-rdoc
Did you mean?  no-force
---- End output of /usr/sbin/td-agent-gem install fluent-plugin-opensearch -q --no-rdoc --no-ri -v "1.0.0" ----
Ran /usr/sbin/td-agent-gem install fluent-plugin-opensearch -q --no-rdoc --no-ri -v "1.0.0" returned 1
 
Resource Declaration:
---------------------
# In /var/chef/runs/cde65ad4-a10f-46c8-acdc-d1d048c5fca0/local-mode-cache/cache/cookbooks/td-agent/recipes/configure.rb
 
36:     td_agent_gem plugin do
37:       plugin true
38:       notifies :restart, "service[td-agent]", :delayed
39:     end
40:   end
 
Compiled Resource:
------------------
# Declared in /var/chef/runs/cde65ad4-a10f-46c8-acdc-d1d048c5fca0/local-mode-cache/cache/cookbooks/td-agent/recipes/configure.rb:36:in `block in from_file'
 
td_agent_gem("opensearch") do
package_name "fluent-plugin-opensearch"
provider Chef::Provider::Package::TdRubygems
action :install
retries 0
retry_delay 2
default_guard_interpreter :default
plugin true
gem_binary "/usr/sbin/td-agent-gem"
declared_type :td_agent_gem
cookbook_name "td-agent"
recipe_name "configure"
end
 
Platform:
---------
x86_64-linux

/etc/init.d/td-agent is missing

The log:

* service[td-agent] action restart

    ================================================================================
    Error executing action `restart` on resource 'service[td-agent]'
    ================================================================================

    Errno::ENOENT
    -------------
    No such file or directory - /etc/init.d/td-agent stop

    Resource Declaration:

Missing package for raring (upgrade action causes chef error)

While running chef-client it complains about td-agent's upgrade action. I guess the reason is that there's no package for ubuntu 13.04 'raring' dist.

* package[td-agent] action upgrade[2013-10-06T23:00:52-06:00] INFO: Processing package[td-agent] action upgrade (td-agent::default line 54)
[2013-10-06T23:00:52-06:00] DEBUG: Platform ubuntu version 13.04 found
[2013-10-06T23:00:52-06:00] DEBUG: package[td-agent] checking package status for td-agent

* No candidate version available for td-agent
===========================================================
Error executing action `upgrade` on resource 'package[td-agent]'
===========================================================


Chef::Exceptions::Package
-------------------------
No candidate version available for td-agent


Resource Declaration:
---------------------
# In /var/chef/cache/cookbooks/td-agent/recipes/default.rb

 54: package "td-agent" do
 55:   options value_for_platform(
 56:     ["ubuntu", "debian"] => {"default" => "-f --force-yes"},
 57:     "default" => nil
 58:   )
 59:   action :upgrade
 60: end

URL returns 404 when setting up yum repo

This is the log; however, following the repo to the Amazon s3 site still causes issues. Even hard coding the URL in the recipes/default.rb file will lead to continued failure.

[2015-05-07T15:59:06-04:00] DEBUG: providers that survived replacement include: [Chef::Provider::Execute]
http://packages.treasuredata.com/2/redhat/6Server/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: treasure-data. Please verify its path and try again

  ================================================================================
  Error executing action `run` on resource 'execute[yum-makecache-treasure-data]'
  ================================================================================

  Mixlib::ShellOut::ShellCommandFailed
  ------------------------------------
  Expected process to exit with [0], but received '1'
  ---- Begin output of yum -q makecache --disablerepo=* --enablerepo=treasure-data ----
  STDOUT: 
  STDERR: http://packages.treasuredata.com/2/redhat/6Server/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
  Trying other mirror.
  Error: Cannot retrieve repository metadata (repomd.xml) for repository: treasure-data. Please verify its path and try again
  ---- End output of yum -q makecache --disablerepo=* --enablerepo=treasure-data ----
  Ran yum -q makecache --disablerepo=* --enablerepo=treasure-data returned 1

  Resource Declaration:
  ---------------------
  # In /var/chef/cache/cookbooks/yum/providers/repository.rb

   61:   execute "yum-makecache-#{new_resource.repositoryid}" do
   62:     command "yum -q makecache --disablerepo=* --enablerepo=#{new_resource.repositoryid}"
   63:     action :nothing
   64:     only_if { new_resource.enabled }
   65:   end
   66: 

  Compiled Resource:
  ------------------
  # Declared in /var/chef/cache/cookbooks/yum/providers/repository.rb:61:in `block in class_from_file'

  execute("yum-makecache-treasure-data") do
    action [:nothing]
    retries 0
    retry_delay 2
    default_guard_interpreter :execute
    command "yum -q makecache --disablerepo=* --enablerepo=treasure-data"
    backup 5
    returns 0
    declared_type :execute
    cookbook_name "td-agent"
    only_if { #code block }
  end

feature label

Hi,

I just want to suggest a feature request.
Having support for labels would be amazing.
Adding @label to a source is doable using parameters . But adding <label @IPSUM> around a matcher is not possible using the resources.

td_agent_gem provider broken

Hi,

The td_agent_gem provider seems to not work as intended.
Adding this to a recipe causes an failure.

td_agent_gem "tail-multiline" do
  plugin true
end

It seems like it is not able to take the name inside the td_agent_gem and assign it to the package_name variable.
I'm running chef 10 if it helps..

[Tue, 10 Jun 2014 16:36:08 +0200] INFO: Processing td-agent_gem[tail-multiline] action install (dp_td-agent_wrapper::default line 39)

================================================================================
Error executing action `install` on resource 'td-agent_gem[tail-multiline]'
================================================================================

Chef::Exceptions::ValidationFailed
----------------------------------
Required argument package_name is missing!

Cookbook Trace:
---------------
/var/cache/chef/cookbooks/td-agent/libraries/provider_td_rubygems.rb:31:in `initialize'

Resource Declaration:
---------------------
# In /var/cache/chef/cookbooks/dp_td-agent_wrapper/recipes/default.rb

 40: td_agent_gem "tail-multiline" do
 41:   plugin true
 42: end
 43:

Compiled Resource:
------------------
# Declared in /var/cache/chef/cookbooks/dp_td-agent_wrapper/recipes/default.rb:40:in `from_file'

td_agent_gem("tail-multiline") do
  cookbook_name "dp_td-agent_wrapper"
  provider Chef::Provider::Package::TdRubygems
  action :install
  retry_delay 2
  plugin true
  recipe_name "default"
  retries 0
end

[Tue, 10 Jun 2014 16:36:08 +0200] ERROR: Running exception handlers
[Tue, 10 Jun 2014 16:36:10 +0200] FATAL: Saving node information to /var/cache/chef/failed-run-data.json
[Tue, 10 Jun 2014 16:36:10 +0200] ERROR: Exception handlers complete
[Tue, 10 Jun 2014 16:36:10 +0200] FATAL: Stacktrace dumped to /var/cache/chef/chef-stacktrace.out
[Tue, 10 Jun 2014 16:36:10 +0200] FATAL: Chef::Exceptions::ValidationFailed: td-agent_gem[tail-multiline] (dp_td-agent_wrapper::default line 40) had an error: Chef::Exceptions::ValidationFailed: Required argument package_name is missing!

Error using TD-Agent cookbooks

The relevant log.

==> app: 
==> app: 
==> app: NameError
==> app: ---------
==> app: uninitialized constant Chef::Recipe::TdAgent
==> app: 
==> app: 
==> app: Cookbook Trace:
==> app: ---------------
==> app:   /var/vagrant-chef/chef-solo-1/cookbooks/td-agent/recipes/default.rb:8:in `from_file'
==> app:   /var/vagrant-chef/chef-solo-1/cookbooks/urbanindo_common/recipes/fluentd.rb:1:in `from_file'
==> app:   /var/vagrant-chef/chef-solo-1/cookbooks/urbanindo_mobile_webserver/recipes/setup.rb:63:in `from_file'
==> app: 
==> app: 
==> app: Relevant File Content:
==> app: ----------------------
==> app: /var/vagrant-chef/chef-solo-1/cookbooks/td-agent/recipes/default.rb:
==> app: 
==> app:   1:  #
==> app:   2:  # Cookbook Name:: td-agent
==> app:   3:  # Recipe:: default
==> app:   4:  #
==> app:   5:  # Copyright 2011, Treasure Data, Inc.
==> app:   6:  #
==> app:   7:  
==> app:   8>> Chef::Recipe.send(:include, TdAgent::Version)
==> app:   9:  Chef::Provider.send(:include, TdAgent::Version)
==> app:  10:  
==> app:  11:  group 'td-agent' do
==> app:  12:    group_name 'td-agent'
==> app:  13:    gid node[:td_agent][:gid] if node[:td_agent][:gid]
==> app:  14:    system true
==> app:  15:    action     [:create]
==> app:  16:  end
==> app:  17:  
==> app: 
==> app: 
==> app: 
==> app: [2014-11-04T04:07:33+00:00] ERROR: Running exception handlers
==> app: [2014-11-04T04:07:33+00:00] ERROR: Exception handlers complete
==> app: [2014-11-04T04:07:33+00:00] FATAL: Stacktrace dumped to /vagrant/.vagrant/file_cache_path/chef-stacktrace.out
==> app: [2014-11-04T04:07:33+00:00] ERROR: uninitialized constant Chef::Recipe::TdAgent
==> app: [2014-11-04T04:07:33+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.

Cookbook incompatible with Chef 13 (deprecation warning)

When using this cookbook under Chef 12 w/ deprecation warnings as errors enabled, we get this:

Compiling Cookbooks...
[2018-02-05T16:15:08+00:00] ERROR: Property `params` of resource `td_agent_filter` overwrites an existing method. Please use a different property name. This will raise an exception in Chef 13. (CHEF-11)/opt/kitchen/cache/cookbooks/td-agent/resources/filter.rb:33:in `class_from_file'.
Please see https://docs.chef.io/deprecations_property_name_collision.html for further details and information on how to correct this problem. at /opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.21.3/lib/chef/formatters/doc.rb:419:in `deprecation'

================================================================================
Recipe Compile Error in /opt/kitchen/cache/cookbooks/td-agent/resources/filter.rb
================================================================================

Chef::Exceptions::DeprecatedFeatureError
----------------------------------------
"Property `params` of resource `td_agent_filter` overwrites an existing method. Please use a different property name. This will raise an exception in Chef 13. (CHEF-11)/opt/kitchen/cache/cookbooks/td-agent/resources/filter.rb:33:in `class_from_file'.\nPlease see https://docs.chef.io/deprecations_property_name_collision.html for further details and information on how to correct this problem. at /opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.21.3/lib/chef/formatters/doc.rb:419:in `deprecation'"

Cookbook Trace:
---------------
  /opt/kitchen/cache/cookbooks/td-agent/resources/filter.rb:33:in `class_from_file'

Relevant File Content:
----------------------
/opt/kitchen/cache/cookbooks/td-agent/resources/filter.rb:

 26:  attribute :type, :kind_of => String, :required => true
 27:  attribute :tag, :kind_of => String, :required => true
 28:  attribute :parameters, :default => {}
 29:
 30:  # Workaround for backward compatibility for Chef pre-13 (#99)
 31:  chef_major_version = ::Chef::VERSION.split(".").first.to_i
 32:  if chef_major_version < 13
 33>>   attribute :params, :default => {}
 34:  end
 35:

System Info:
------------
chef_version=12.21.3
platform=centos
platform_version=7.4.1708
ruby=ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
program_name=chef-client worker: ppid=201;start=16:14:47;
executable=/opt/chef/embedded/bin/chef-client


Running handlers:
[2018-02-05T16:15:08+00:00] ERROR: Running exception handlers
Running handlers complete
[2018-02-05T16:15:08+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 21 seconds
[2018-02-05T16:15:08+00:00] FATAL: Stacktrace dumped to /opt/kitchen/cache/chef-stacktrace.out
[2018-02-05T16:15:08+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2018-02-05T16:15:08+00:00] ERROR: "Property `params` of resource `td_agent_filter` overwrites an existing method. Please use a different property name. This will raise an exception in Chef 13. (CHEF-11)/opt/kitchen/cache/cookbooks/td-agent/resources/filter.rb:33:in `class_from_file'.\nPlease see https://docs.chef.io/deprecations_property_name_collision.html for further details and information on how to correct this problem. at /opt/chef/embedded/lib/ruby/gems/2.3.0/gems/chef-12.21.3/lib/chef/formatters/doc.rb:419:in `deprecation'"
[2018-02-05T16:15:09+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

It looks like some work was done to work around this, but I am still seeing this.

Is URL for source.list wrong?

I have debian based docker image. While installing TD/fluentd with Chef recipe I see this error:

[2016-02-25T06:57:20+00:00] INFO: Processing file[/var/lib/apt/periodic/update-success-stamp] action delete (/chef/docker-cookbooks/apt/providers/repository.rb line 187)
[2016-02-25T06:57:20+00:00] INFO: file[/var/lib/apt/periodic/update-success-stamp] backed up to /var/chef/backup/var/lib/apt/periodic/update-success-stamp.chef-20160225065720.808198
[2016-02-25T06:57:20+00:00] INFO: file[/var/lib/apt/periodic/update-success-stamp] deleted file at /var/lib/apt/periodic/update-success-stamp
[2016-02-25T06:57:20+00:00] INFO: file[/etc/apt/sources.list.d/treasure-data.list] sending run action to execute[apt-get update] (immediate)
[2016-02-25T06:57:20+00:00] INFO: Processing execute[apt-get update] action run (/chef/docker-cookbooks/apt/providers/repository.rb line 196)
[2016-02-25T06:57:20+00:00] ERROR: execute[apt-get update] (/chef/docker-cookbooks/apt/providers/repository.rb line 196) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '100'
---- Begin output of apt-get update -o Dir::Etc::sourcelist='sources.list.d/treasure-data.list' -o Dir::Etc::sourceparts='-' -o APT::Get::List-Cleanup='0' ----
STDOUT: 
STDERR: E: Malformed line 1 in source list /etc/apt/sources.list.d/treasure-data.list (dist parse)
E: The list of sources could not be read.
---- End output of apt-get update -o Dir::Etc::sourcelist='sources.list.d/treasure-data.list' -o Dir::Etc::sourceparts='-' -o APT::Get::List-Cleanup='0' ----
Ran apt-get update -o Dir::Etc::sourcelist='sources.list.d/treasure-data.list' -o Dir::Etc::sourceparts='-' -o APT::Get::List-Cleanup='0' returned 100; ignore_failure is set, continuing

After some researching I found that URL for debian contrib repo is differ from that one in recipe. For TD 2.x.x recipe URL is "http://packages.treasuredata.com/#{major}/#{platform}/#{dist}/", while actually it is "https://td-agent-package-browser.herokuapp.com/2/debian/jessie" (for Jessie). The link I found here http://packages.treasuredata.com/ . Note the domain name

Bug: Race Condition with a Bad Config

Background

Currently, the td-agent::default recipe is responsible for installing TD agent, and configuring the main config file along with starting and enabling the td-agent service.

Issue

The designated workflow suggests the recipe td-agent::default be included prior to using the custom resources (td_agent_match, etc) to setup the application based on your own requirements.

The problem is that if you incorrectly configure td-agent, Chef is unable to correct the problem due to the default recipe attempting to start the service. This causes failed Chef runs because the custom resources cannot change the offending configurations.

Solution

Split the configuration/service resources in td-agent::default into their own recipe, potentially called td-agent::configure. The default recipe logic will remain the same, and this solution will give more flexibility and reliability to the user on how to use the cookbook with custom resources.

Please create a new release for amazon linux

We have an issue trying to install td-agent 3 with the current cookbook.
This issue is fixed #122 and this is the latest commit id 7320ded
Please release new version of td-agent in supermarket to consume by end users.

Note: We were able to install td-agent 3 by referring this commit in Berksfile

cookbook "td-agent", git: "https://github.com/treasure-data/chef-td-agent.git", ref: "7320ded3b486d8f8305888ca762b9b64812c2bad"
[kitchen@a460106e3f77 ~]$ sudo yum info td-agent
Loaded plugins: ovl, priorities
Installed Packages
Name        : td-agent
Arch        : x86_64
Version     : 3.3.0
Release     : 1.amazon2018.03
Size        : 148 M
Repo        : installed
From repo   : treasure-data
Summary     : Treasure Agent: A data collector for Treasure Data
URL         : http://treasuredata.com
License     : Unspecified
Description : Treasure Agent: A data collector for Treasure Data

td-agent chef recipe fails during bootstrap due to systemd conflict

Td-agent cookbook 3.1.1, chef-client 14.13.11, CentOS 7.7.1908; fresh install, systemd 219-67.el7_7.2. Installs td-agent 3.5.1

When bootstrapping a node into chef with a command such as this:

knife bootstrap -u root -t rhel7-omnitruck u89-niclangf-01.int.vgnett.no -r "role[vgnett_base]"

the resource startup fails due to a systemd error:

[2020-01-02T08:56:14+01:00] FATAL: Stacktrace dumped to /var/cache/chef/chef-stacktrace.out
[2020-01-02T08:56:14+01:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2020-01-02T08:56:14+01:00] FATAL: Mixlib::ShellOut::ShellCommandFailed: service[td-agent] (td-agent::configure line 77) had an error: Mixlib::ShellOut::ShellComma
ndFailed: Expected process to exit with [0], but received '1'
---- Begin output of /usr/bin/systemctl --system restart td-agent ----
STDOUT: 
STDERR: Job for td-agent.service failed because the control process exited with error code. See "systemctl status td-agent.service" and "journalctl -xe" for detail
s.
---- End output of /usr/bin/systemctl --system restart td-agent ----

System log:

Jan 02 08:56:12 u89-niclangf-01 systemd[1]: Starting td-agent: Fluentd based data collector for Treasure Data...
Jan 02 08:56:12 u89-niclangf-01 systemd[75018]: Failed at step RUNTIME_DIRECTORY spawning /opt/td-agent/embedded/bin/fluentd: File exists
Jan 02 08:56:12 u89-niclangf-01 systemd[1]: td-agent.service: control process exited, code=exited status=233
Jan 02 08:56:12 u89-niclangf-01 systemd[1]: Failed to start td-agent: Fluentd based data collector for Treasure Data.
Jan 02 08:56:12 u89-niclangf-01 systemd[1]: Unit td-agent.service entered failed state.
Jan 02 08:56:12 u89-niclangf-01 systemd[1]: td-agent.service failed.
Jan 02 08:56:12 u89-niclangf-01 systemd[1]: td-agent.service holdoff time over, scheduling restart.
Jan 02 08:56:12 u89-niclangf-01 systemd[1]: Stopped td-agent: Fluentd based data collector for Treasure Data.
Jan 02 08:56:12 u89-niclangf-01 systemd[1]: Starting td-agent: Fluentd based data collector for Treasure Data...

As you can see the process starts fine at the second try, but the first failure disrupts the bootstrap process.

The RUNTIME_DIRECTORY issue crops up in web searches, most of them old. This seems recent and directly relevant: puppetlabs/puppet_metrics_dashboard#37

@sharpie quoth:

This appears to be a conflict between Puppet_metrics_dashboard::Service/Exec[Create Systemd temp Files] and systemd over who gets to create the /run/grafana directory.
...
So, we probably need to drop the logic around creating the /run/grafana directory since systemd is now handling it.

The td-agent RPM package postinstall script goes like this:

if [ ! -e "/var/run/td-agent/" ]; then
  mkdir -p /var/run/td-agent/
fi

In other tickets @poettering says that systemd should only complain if the directory exists and has the wrong owners, but I have attempted creating the directory correctly by patching the chef recipe to no avail.

Since the SPEC file for the RPM package has been hard to find I've instead tried another fix in the chef recipe (td-agent::install):

directory "/var/run/td-agent" do
  action :nothing
end

package "td-agent" do
  retries 3
  retry_delay 10
  if node["td_agent"]["pinning_version"]
    action :install
    version node["td_agent"]["version"]
  else
    action :upgrade
  end
  notifies :delete, 'directory[/var/run/td-agent]', :immediately
end

which seems to have fixed it.

So it turns out that this is a issue with interaction between the RPM file and systemd and not the chef-cookbook. Still posting here since we only experience problems with this when using chef.

Service resource not found

Chef::Exceptions::ResourceNotFound
----------------------------------
resource template[/etc/td-agent/conf.d/application.conf] is configured to notify resource service[td-agent] with action reload, but service[td-agent] cannot be found in the resource collection. template[/etc/td-agent/conf.d/application.conf] is defined in /some/path/to/cookbooks/td-agent/providers/source.rb:27:in `block in class_from_file'

I am using the td_agent_source in deploy's deployment hooks. I'm sure this was working but with new version it's now doesn't works.

How to create filter with type grep?

At the moment filter plugin only supports type record_transformer
Is it possible to create filter rule with type grep?

<filter laravel>
  type grep
  exclude1 level INFO
</filter>

URL returns 404 when setting up yum repo for Amazon Linux 2

Hi, I encountered a similar issue with #52 when trying to install td-agent V3. The error message is

    amazon-ebs:   * yum_repository[treasure-data] action add
    amazon-ebs:     * template[/etc/yum.repos.d/treasure-data.repo] action create
    amazon-ebs:       - create new file /etc/yum.repos.d/treasure-data.repo
    amazon-ebs:       - update content in file /etc/yum.repos.d/treasure-data.repo from none to d0ff95
    amazon-ebs:       --- /etc/yum.repos.d/treasure-data.repo   2022-01-18 03:59:52.513525883 +0000
    amazon-ebs:       +++ /etc/yum.repos.d/.chef-treasure-data20220118-26359-qvprw6.repo        2022-01-18 03:59:52.513525883 +0000
    amazon-ebs:       @@ -1 +1,11 @@
    amazon-ebs:       +# This file was generated by Chef
    amazon-ebs:       +# Do NOT modify this file by hand.
    amazon-ebs:       +
    amazon-ebs:       +[treasure-data]
    amazon-ebs:       +name=TreasureData
    amazon-ebs:       +baseurl=https://packages.treasuredata.com/3/amazon/2/2017.09/$basearch
    amazon-ebs:       +enabled=1
    amazon-ebs:       +fastestmirror_enabled=0
    amazon-ebs:       +gpgcheck=1
    amazon-ebs:       +gpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent
    amazon-ebs:       - change mode from '' to '0644'
    amazon-ebs:     * execute[yum clean metadata treasure-data] action run
    amazon-ebs:       - execute yum clean metadata --disablerepo=* --enablerepo=treasure-data
    amazon-ebs:     * execute[yum-makecache-treasure-data] action run
    amazon-ebs:
    amazon-ebs:       ================================================================================
    amazon-ebs:       Error executing action `run` on resource 'execute[yum-makecache-treasure-data]'
    amazon-ebs:       ================================================================================
    amazon-ebs:
    amazon-ebs:       Mixlib::ShellOut::ShellCommandFailed
    amazon-ebs:       ------------------------------------
    amazon-ebs:       Expected process to exit with [0], but received '1'
    amazon-ebs:       ---- Begin output of yum -q -y makecache --disablerepo=* --enablerepo=treasure-data ----
    amazon-ebs:       STDOUT:
    amazon-ebs:       STDERR: https://packages.treasuredata.com/3/amazon/2/2017.09/x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
    amazon-ebs:       Trying other mirror.
    amazon-ebs:        One of the configured repositories failed (TreasureData),                                                                                                                                        [215/1939]
    amazon-ebs:        and yum doesn't have enough cached data to continue. At this point the only
    amazon-ebs:        safe thing yum can do is fail. There are a few ways to work "fix" this:
    amazon-ebs:
    amazon-ebs:            1. Contact the upstream for the repository and get them to fix the problem.
    amazon-ebs:
    amazon-ebs:            2. Reconfigure the baseurl/etc. for the repository, to point to a working
    amazon-ebs:               upstream. This is most often useful if you are using a newer
    amazon-ebs:               distribution release than is supported by the repository (and the
    amazon-ebs:               packages for the previous distribution release still work).
    amazon-ebs:
    amazon-ebs:            3. Run the command with the repository temporarily disabled
    amazon-ebs:                   yum --disablerepo=treasure-data ...
    amazon-ebs:
    amazon-ebs:            4. Disable the repository permanently, so yum won't use it by default. Yum
    amazon-ebs:               will then just ignore the repository until you permanently enable it
    amazon-ebs:               again or use --enablerepo for temporary usage:
    amazon-ebs:
    amazon-ebs:                   yum-config-manager --disable treasure-data
    amazon-ebs:               or
    amazon-ebs:                   subscription-manager repos --disable=treasure-data
    amazon-ebs:
    amazon-ebs:            5. Configure the failing repository to be skipped, if it is unavailable.
    amazon-ebs:               Note that yum will try to contact the repo. when it runs most commands,
    amazon-ebs:               so will have to try and fail each time (and thus. yum will be be much
    amazon-ebs:               slower). If it is a very temporary problem though, this is often a nice
    amazon-ebs:               compromise:
    amazon-ebs:
    amazon-ebs:                   yum-config-manager --save --setopt=treasure-data.skip_if_unavailable=true
    amazon-ebs:
    amazon-ebs:       failure: repodata/repomd.xml from treasure-data: [Errno 256] No more mirrors to try.
    amazon-ebs:       https://packages.treasuredata.com/3/amazon/2/2017.09/x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
    amazon-ebs:       ---- End output of yum -q -y makecache --disablerepo=* --enablerepo=treasure-data ----
    amazon-ebs:       Ran yum -q -y makecache --disablerepo=* --enablerepo=treasure-data returned 1
    amazon-ebs:
    amazon-ebs:       Resource Declaration:
    amazon-ebs:       ---------------------
    amazon-ebs:       # In /opt/chef/embedded/lib/ruby/gems/2.6.0/gems/chef-15.17.4/lib/chef/provider/yum_repository.rb
    amazon-ebs:
    amazon-ebs:        59:         declare_resource(:execute, "yum-makecache-#{new_resource.repositoryid}") do
    amazon-ebs:        60:           command "yum -q -y makecache --disablerepo=* --enablerepo=#{new_resource.repositoryid}"
    amazon-ebs:        61:           action :nothing
    amazon-ebs:        62:           only_if { new_resource.enabled }
    amazon-ebs:        63:         end
    amazon-ebs:        64:
    amazon-ebs:
    amazon-ebs:       Compiled Resource:
    amazon-ebs:       ------------------
    amazon-ebs:       # Declared in /opt/chef/embedded/lib/ruby/gems/2.6.0/gems/chef-15.17.4/lib/chef/provider/yum_repository.rb:59:in `block in <class:YumRepository>'
    amazon-ebs:
    amazon-ebs:       execute("yum-makecache-treasure-data") do
    amazon-ebs:         action [:nothing]
    amazon-ebs:         default_guard_interpreter :execute
    amazon-ebs:         command "yum -q -y makecache --disablerepo=* --enablerepo=treasure-data"
    amazon-ebs:         backup 5
    amazon-ebs:         declared_type :execute
    amazon-ebs:         cookbook_name "td-agent"
    amazon-ebs:         user nil
    amazon-ebs:         domain nil
    amazon-ebs:         only_if { #code block }
    amazon-ebs:       end
    amazon-ebs:
    amazon-ebs:       System Info:
    amazon-ebs:       ------------
    amazon-ebs:       chef_version=15.17.4
    amazon-ebs:       platform=amazon
    amazon-ebs:       platform_version=2
    amazon-ebs:       ruby=ruby 2.6.7p197 (2021-04-05 revision 67941) [x86_64-linux]
    amazon-ebs:       program_name=/bin/chef-client
    amazon-ebs:       executable=/opt/chef/bin/chef-client
    amazon-ebs:
    amazon-ebs:
    amazon-ebs:     ================================================================================
    amazon-ebs:     Error executing action `add` on resource 'yum_repository[treasure-data]'
    amazon-ebs:     ================================================================================
    amazon-ebs:
    amazon-ebs:     Mixlib::ShellOut::ShellCommandFailed
    amazon-ebs:     ------------------------------------
    amazon-ebs:     execute[yum-makecache-treasure-data] (/opt/chef/embedded/lib/ruby/gems/2.6.0/gems/chef-15.17.4/lib/chef/provider/yum_repository.rb line 59) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected proce
ss to exit with [0], but received '1'
    amazon-ebs:     ---- Begin output of yum -q -y makecache --disablerepo=* --enablerepo=treasure-data ----
    amazon-ebs:     STDOUT:
    amazon-ebs:     STDERR: https://packages.treasuredata.com/3/amazon/2/2017.09/x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
    amazon-ebs:     Trying other mirror.

And I noticed the following URL https://packages.treasuredata.com/3/amazon/2/2017.12/x86_64/repodata/repomd.xml exists but not the one in the error message (2017.09) where the date is different.

And the platform is as below.

$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

$ python -c 'import json,yum;yb=yum.YumBase();print(json.dumps(yb.conf.yumvar,indent=4))'
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
{
    "product": "core",
    "target": "latest",
    "basearch": "x86_64",
    "awsregion": "ap-northeast-1",
    "releasever": "2",
    "awsdomain": "amazonaws.com",
    "awsproto": "http",
    "arch": "ia32e",
    "amazonlinux": "amazonlinux",
    "uuid": "xxxxxxxxxxxxxxxxx"
}

new gems are not loaded properly causing td-agent service reload/restart failure

When trying to install td-agent together with the fluent-plugin-elasticsearch plugin, the fluent-plugin-elasticsearch is successfully installed, but the initial restart/reload of the server during the install procedure fails - so after the chef-client has run td-agent is not running, but should be. However when the td-agent server is manually restarted following the installation then it starts fine ( which shows the elasticsearch gem was installed and the td-agent config is OK).

Here is the recipe I am running to install td-agent:

# dependency for elasticsearch-fluentd gem for fluentd plugin                                                                                                                                                       
case node['platform_family']
when 'debian'
  package 'libcurl3-dev' do
    action :install
  end
when 'rhel'
  package 'libcurl-devel' do
    action :install
  end
else
  Chef::Log.fatal("platform family #{node['platform_family']} not supported")
end

include_recipe 'td-agent::default'

# Add a listen to http for curl test POSTs                                                                                                                                                                          
td_agent_source 'test_in_http' do
  type 'http'
  params(port: '8080')
end

# Store incoming to elasticsearch                                                                                                                                                                                   
td_agent_match 'test_out_elasticsearch' do
  type 'elasticsearch'
  tag 'test.*'
  params(host: 'localhost',
         port: '9200',
         logstash_format: 'true',
         type_name: 'test_elasticsearch',
         flush_interval: 1)
end

Here are the relevant attributes:

# tell td-agent to use the includes dir                                                                                                                                         
default['td_agent']['includes'] = true

# tell td-agent not to use the default config                                                                                                                                                                       
default['td_agent']['default_config'] = false

default['td_agent']['plugins'] = ['elasticsearch']

I am running this using test kitchen with the latest chef client (12.6.0-1) on ubuntu 14.04

And on the ubuntu 14.04 machine itself this is the output I see from the td-agent server log (all from during chef run):

cat /var/log/td-agent/td-agent.log 
2016-01-28 13:01:57 +0000 [info]: reading config file path="/etc/td-agent/td-agent.conf"
2016-01-28 13:01:57 +0000 [info]: starting fluentd-0.12.19
2016-01-28 13:01:57 +0000 [info]: gem 'fluent-mixin-config-placeholders' version '0.3.0'
2016-01-28 13:01:57 +0000 [info]: gem 'fluent-mixin-plaintextformatter' version '0.2.6'
2016-01-28 13:01:57 +0000 [info]: gem 'fluent-plugin-mongo' version '0.7.11'
2016-01-28 13:01:57 +0000 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '1.5.3'
2016-01-28 13:01:57 +0000 [info]: gem 'fluent-plugin-s3' version '0.6.4'
2016-01-28 13:01:57 +0000 [info]: gem 'fluent-plugin-scribe' version '0.10.14'
2016-01-28 13:01:57 +0000 [info]: gem 'fluent-plugin-td' version '0.10.28'
2016-01-28 13:01:57 +0000 [info]: gem 'fluent-plugin-td-monitoring' version '0.2.1'
2016-01-28 13:01:57 +0000 [info]: gem 'fluent-plugin-webhdfs' version '0.4.1'
2016-01-28 13:01:57 +0000 [info]: gem 'fluentd' version '0.12.19'
2016-01-28 13:01:57 +0000 [info]: using configuration file: <ROOT>
</ROOT>
2016-01-28 13:02:36 +0000 [info]: restarting
2016-01-28 13:02:36 +0000 [info]: reading config file path="/etc/td-agent/td-agent.conf"
2016-01-28 13:02:36 +0000 [info]: shutting down fluentd
2016-01-28 13:02:36 +0000 [info]: process finished code=0
2016-01-28 13:02:36 +0000 [error]: fluentd main process died unexpectedly. restarting.
2016-01-28 13:02:36 +0000 [info]: starting fluentd-0.12.19
2016-01-28 13:02:36 +0000 [info]: gem 'fluent-mixin-config-placeholders' version '0.3.0'
2016-01-28 13:02:36 +0000 [info]: gem 'fluent-mixin-plaintextformatter' version '0.2.6'
2016-01-28 13:02:36 +0000 [info]: gem 'fluent-plugin-mongo' version '0.7.11'
2016-01-28 13:02:36 +0000 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '1.5.3'
2016-01-28 13:02:36 +0000 [info]: gem 'fluent-plugin-s3' version '0.6.4'
2016-01-28 13:02:36 +0000 [info]: gem 'fluent-plugin-scribe' version '0.10.14'
2016-01-28 13:02:36 +0000 [info]: gem 'fluent-plugin-td' version '0.10.28'
2016-01-28 13:02:36 +0000 [info]: gem 'fluent-plugin-td-monitoring' version '0.2.1'
2016-01-28 13:02:36 +0000 [info]: gem 'fluent-plugin-webhdfs' version '0.4.1'
2016-01-28 13:02:36 +0000 [info]: gem 'fluentd' version '0.12.19'
2016-01-28 13:02:36 +0000 [info]: adding match pattern="test.*" type="elasticsearch"
2016-01-28 13:02:36 +0000 [error]: config error file="/etc/td-agent/td-agent.conf" error="Unknown output plugin 'elasticsearch'. Run 'gem search -rd fluent-plugin' to find plugins"
2016-01-28 13:02:36 +0000 [info]: process finished code=256
2016-01-28 13:02:36 +0000 [warn]: process died within 1 second. exit.

td-agent is not running after the chef run:

sudo service td-agent status 
 * td-agent is not running

But if I manually restart it then it works fine:

sudo service td-agent restart
Restarting td-agent:  * td-agent

And there are now no errors in the td-agent log:

2016-01-28 13:10:00 +0000 [info]: reading config file path="/etc/td-agent/td-agent.conf"
2016-01-28 13:10:00 +0000 [info]: starting fluentd-0.12.19
2016-01-28 13:10:00 +0000 [info]: gem 'fluent-mixin-config-placeholders' version '0.3.0'
2016-01-28 13:10:00 +0000 [info]: gem 'fluent-mixin-plaintextformatter' version '0.2.6'
2016-01-28 13:10:00 +0000 [info]: gem 'fluent-plugin-elasticsearch' version '1.3.0'
2016-01-28 13:10:00 +0000 [info]: gem 'fluent-plugin-mongo' version '0.7.11'
2016-01-28 13:10:00 +0000 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '1.5.3'
2016-01-28 13:10:00 +0000 [info]: gem 'fluent-plugin-s3' version '0.6.4'
2016-01-28 13:10:00 +0000 [info]: gem 'fluent-plugin-scribe' version '0.10.14'
2016-01-28 13:10:00 +0000 [info]: gem 'fluent-plugin-td' version '0.10.28'
2016-01-28 13:10:00 +0000 [info]: gem 'fluent-plugin-td-monitoring' version '0.2.1'
2016-01-28 13:10:00 +0000 [info]: gem 'fluent-plugin-webhdfs' version '0.4.1'
2016-01-28 13:10:00 +0000 [info]: gem 'fluentd' version '0.12.19'
2016-01-28 13:10:00 +0000 [info]: adding match pattern="test.*" type="elasticsearch"
2016-01-28 13:10:00 +0000 [info]: adding source type="http"
2016-01-28 13:10:00 +0000 [info]: using configuration file: <ROOT>
  <source>
    type http
    port 8080
  </source>
  <match test.*>
    type elasticsearch
    host localhost
    port 9200
    logstash_format true
    type_name test_elasticsearch
    flush_interval 1
  </match>
</ROOT>

Unable to install version 2.x.x on Ubuntu

I am having trouble with the cookbook with Chef 11 on Ubuntu 14.04

receiving uninitialized constant Fluent::ExMonitorAgentInput::MONITOR_INFO (NameError) from chef with custom json(as YAML)

  td_agent:
    api_key: <API_KEY>
    plugins: ['filter']
    version: '2'
    includes: true

I believe the problem is that it is not installing the correct version of td-agent/fluentd (should be td-agent 2.x.x fluentd 0.12.x)

$ fluentd --version
fluentd 1.0.0

when I try and pin the version it seems like it is not getting into the recipe.

  td_agent:
    api_key: <API_KEY>
    plugins: ['filter']
    version: '2.3.6'
    pin_version: true
    includes: true

results in

http://packages.treasuredata.com/0/ubuntu/trusty/dists/trusty/contrib/binary-amd64/Packages  404  Not Found [IP: 54.230.19.91 80]

any advice? is my config wrong?

td_agent_gem error on centos 6.4

Getting the error below when running the cookbook on a node.

Note that the rest of recipe is running fine when commenting the last plugins block.

Starting Chef Client, version 11.8.0
resolving cookbooks for run list: ["fluentd-agent"]
Synchronizing Cookbooks:
  - yum
  - apt
  - fluentd-agent
Compiling Cookbooks...

================================================================================
Recipe Compile Error in /var/chef/cache/cookbooks/fluentd-agent/recipes/default.rb
================================================================================


NameError
---------
Cannot find a resource for td_agent_gem on centos version 6.4


Cookbook Trace:
---------------
  /var/chef/cache/cookbooks/fluentd-agent/recipes/default.rb:84:in `block in from_file'
  /var/chef/cache/cookbooks/fluentd-agent/recipes/default.rb:74:in `each'
  /var/chef/cache/cookbooks/fluentd-agent/recipes/default.rb:74:in `from_file'


Relevant File Content:
----------------------
/var/chef/cache/cookbooks/fluentd-agent/recipes/default.rb:

 77:      td_agent_gem plugin_name do
 78:        plugin true
 79:        %w{action version source options gem_binary}.each do |attr|
 80:          send(attr, plugin_attributes[attr]) if plugin_attributes[attr]
 81:        end
 82:      end
 83:    elsif plugin.is_a?(String)
 84>>     td_agent_gem plugin do
 85:        plugin true
 86:      end
 87:    end
 88:  end

td_agent_match duplicated parameters attributes

Hi @yyuu

I'm trying to replicate the following:

<match elasticsearch file>
  @type copy
  <store>
     @type elasticsearch
  </store>
  <store>
     @type file
  </store>
</match>

As you can see, the issue is that store is duplicated here:

td_agent_match 'elasticsearch' do
  type 'copy'
  tag 'elasticsearch file'
  parameters(
    store: {
      '@type': 'elasticsearch'
    },
    store: {
      '@type': 'file'
    }
  )
end

Do you have any ideas how to work around this issue?

Is it necessary to create user & group for td-agent in recipe?

This cookbook creates user and group for td-agent. It also creates directory /etc/td-agent.

I'm wondering if there is a reason behind that since the td-agent package installation also does that? The recipe is doing a bit of duplicate job that the .rpm and .deb package already does.

restart fails with td-agent v4

the configure.rb recipe has a hardcoded restart_command that uses init.d scripts, this doesn't work on td-agent v4 which doesn't ship an init-file, but relies on systemd.

I've created a PR #150 to address this.

yum repository for version 2.x can't access from AWS EC2 instance.

I tried to apply this cookbook my EC2 instance to install td-agent 2.1.5-0 by pinning attribute, but error raised like below.

[2015-03-12T17:51:14+09:00] ERROR: yum_repository[treasure-data] (td-agent::default line 76) had an error: Mixlib::ShellOut::ShellCommandFailed: execute[yum-makecache-treasure-data] (/var/chef/cache/cookbooks/yum/providers/repository.rb line 55) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of yum -q makecache --disablerepo=* --enablerepo=treasure-data ----
STDOUT:
STDERR: http://packages.treasuredata.com/2/redhat/latest/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
Trying other mirror.

I checked these things...

  • The URL http://packages.treasuredata.com/2/redhat/latest/x86_64/repodata/repomd.xml respond NoSuchKey xml.
    • The yum repository does not have latest entry. (here)
    • /etc/yum.conf on my EC2 instance contains releasever=latest line. (code)

Should I change releasever=7 on my EC2 instance or install by other method ?

(I hope that the repository has latest entry on http://packages.treasuredata.com/2/redhat/...)

Chef v17 compatibility

Can You please fix it?

NoMethodError
-------------
undefined method `td_agent_gem' for cookbook: td-agent, recipe: configure :Chef::Recipe
Did you mean?  td_agent_match

Transport section in config file

Hi @yyuu

I'm trying to use the transport directive and modify the message_length_limit for udp:

<transport udp>
  message_length_limit 4096
</transport>

Unfortunately the following Chef code won't work:

td_agent_source 'syslog_docker_input' do
  type 'syslog'
  parameters(
    port: 5140,
    protocol_type: 'udp',
    parse: {
      message_format: 'rfc5424',
    },
    'transport udp' => {
      message_length_limit: 4096,
    },
    '@log_level': 'info'
  )
end

The end result config is messed up as it tries to add transport udp:

<source>
  @type syslog
  port 5140
  protocol_type udp
  <parse>
    message_format rfc5424
  </parse>
  <transport udp>
    message_length_limit 1000000
  </transport udp>   # <=== This is wrong

Any clues how to work around this?

Thanks in advance!

execute[update package index] fails with 404

Ubuntu 12.04 (Precise Pangolin)

It appears there are no packages for precise, only lucid and maverick. See http://packages.treasure-data.com/debian/dists/

chef-client output:

[2013-02-09T16:42:14+00:00] INFO: Processing execute[update package index] action run (/srv/chef/file_store/cookbooks/apt/providers/repository.rb line 56)
Ign http://security.ubuntu.com precise-security InRelease
Hit http://repo.percona.com precise InRelease
Ign http://downloads-distro.mongodb.org dist InRelease
Hit http://security.ubuntu.com precise-security Release.gpg
Hit http://repo.percona.com precise/main amd64 Packages
Ign http://us.archive.ubuntu.com precise InRelease
Ign http://us.archive.ubuntu.com precise-updates InRelease
Ign http://us.archive.ubuntu.com precise-backports InRelease
Hit http://security.ubuntu.com precise-security Release
Hit http://repo.percona.com precise/main i386 Packages
Hit http://us.archive.ubuntu.com precise Release.gpg
Ign http://repo.percona.com precise/main TranslationIndex
Hit http://downloads-distro.mongodb.org dist Release.gpg
Hit http://security.ubuntu.com precise-security/main Sources
Hit http://us.archive.ubuntu.com precise-updates Release.gpg
Hit http://security.ubuntu.com precise-security/restricted Sources
Hit http://security.ubuntu.com precise-security/universe Sources
Hit http://security.ubuntu.com precise-security/multiverse Sources
Hit http://security.ubuntu.com precise-security/main amd64 Packages
Hit http://security.ubuntu.com precise-security/restricted amd64 Packages
Hit http://us.archive.ubuntu.com precise-backports Release.gpg
Hit http://downloads-distro.mongodb.org dist Release
Hit http://security.ubuntu.com precise-security/universe amd64 Packages
Hit http://security.ubuntu.com precise-security/multiverse amd64 Packages
Hit http://security.ubuntu.com precise-security/main i386 Packages
Hit http://security.ubuntu.com precise-security/restricted i386 Packages
Hit http://security.ubuntu.com precise-security/universe i386 Packages
Hit http://security.ubuntu.com precise-security/multiverse i386 Packages
Hit http://us.archive.ubuntu.com precise Release
Ign http://packages.treasure-data.com precise InRelease
Ign http://packages.treasure-data.com precise InRelease
Hit http://security.ubuntu.com precise-security/main TranslationIndex
Hit http://security.ubuntu.com precise-security/multiverse TranslationIndex
Hit http://security.ubuntu.com precise-security/restricted TranslationIndex
Hit http://security.ubuntu.com precise-security/universe TranslationIndex
Hit http://us.archive.ubuntu.com precise-updates Release
Ign http://packages.treasure-data.com precise Release.gpg
Hit http://security.ubuntu.com precise-security/main Translation-en
Hit http://downloads-distro.mongodb.org dist/10gen amd64 Packages
Hit http://us.archive.ubuntu.com precise-backports Release
Hit http://us.archive.ubuntu.com precise/main Sources
Hit http://us.archive.ubuntu.com precise/restricted Sources
Hit http://us.archive.ubuntu.com precise/universe Sources
Hit http://us.archive.ubuntu.com precise/multiverse Sources
Hit http://us.archive.ubuntu.com precise/main amd64 Packages
Ign http://repo.percona.com precise/main Translation-en
Ign http://packages.treasure-data.com precise Release.gpg
Hit http://security.ubuntu.com precise-security/multiverse Translation-en
Hit http://security.ubuntu.com precise-security/restricted Translation-en
Hit http://us.archive.ubuntu.com precise/restricted amd64 Packages
Hit http://us.archive.ubuntu.com precise/universe amd64 Packages
Hit http://us.archive.ubuntu.com precise/multiverse amd64 Packages
Hit http://us.archive.ubuntu.com precise/main i386 Packages
Hit http://us.archive.ubuntu.com precise/restricted i386 Packages
Hit http://us.archive.ubuntu.com precise/universe i386 Packages
Hit http://us.archive.ubuntu.com precise/multiverse i386 Packages
Ign http://packages.treasure-data.com precise Release
Hit http://security.ubuntu.com precise-security/universe Translation-en
Hit http://downloads-distro.mongodb.org dist/10gen i386 Packages
Hit http://us.archive.ubuntu.com precise/main TranslationIndex
Hit http://us.archive.ubuntu.com precise/multiverse TranslationIndex
Hit http://us.archive.ubuntu.com precise/restricted TranslationIndex
Hit http://us.archive.ubuntu.com precise/universe TranslationIndex
Hit http://us.archive.ubuntu.com precise-updates/main Sources
Hit http://us.archive.ubuntu.com precise-updates/restricted Sources
Hit http://us.archive.ubuntu.com precise-updates/universe Sources
Hit http://us.archive.ubuntu.com precise-updates/multiverse Sources
Hit http://us.archive.ubuntu.com precise-updates/main amd64 Packages
Hit http://packages.treasure-data.com precise Release
Hit http://us.archive.ubuntu.com precise-updates/restricted amd64 Packages
Hit http://us.archive.ubuntu.com precise-updates/universe amd64 Packages
Hit http://us.archive.ubuntu.com precise-updates/multiverse amd64 Packages
Hit http://us.archive.ubuntu.com precise-updates/main i386 Packages
Hit http://us.archive.ubuntu.com precise-updates/restricted i386 Packages
Hit http://us.archive.ubuntu.com precise-updates/universe i386 Packages
Hit http://us.archive.ubuntu.com precise-updates/multiverse i386 Packages
Ign http://packages.treasure-data.com precise/contrib TranslationIndex
Hit http://us.archive.ubuntu.com precise-updates/main TranslationIndex
Ign http://downloads-distro.mongodb.org dist/10gen TranslationIndex
Hit http://us.archive.ubuntu.com precise-updates/multiverse TranslationIndex
Hit http://us.archive.ubuntu.com precise-updates/restricted TranslationIndex
Hit http://us.archive.ubuntu.com precise-updates/universe TranslationIndex
Hit http://us.archive.ubuntu.com precise-backports/main Sources
Hit http://us.archive.ubuntu.com precise-backports/restricted Sources
Hit http://us.archive.ubuntu.com precise-backports/universe Sources
Hit http://us.archive.ubuntu.com precise-backports/multiverse Sources
Hit http://us.archive.ubuntu.com precise-backports/main amd64 Packages
Hit http://us.archive.ubuntu.com precise-backports/restricted amd64 Packages
Ign http://packages.treasure-data.com precise/contrib amd64 Packages/DiffIndex
Ign http://packages.treasure-data.com precise/contrib i386 Packages/DiffIndex
Ign http://packages.treasure-data.com precise/contrib TranslationIndex
Hit http://us.archive.ubuntu.com precise-backports/universe amd64 Packages
Hit http://us.archive.ubuntu.com precise-backports/multiverse amd64 Packages
Hit http://us.archive.ubuntu.com precise-backports/main i386 Packages
Hit http://us.archive.ubuntu.com precise-backports/restricted i386 Packages
Hit http://us.archive.ubuntu.com precise-backports/universe i386 Packages
Hit http://us.archive.ubuntu.com precise-backports/multiverse i386 Packages
Hit http://us.archive.ubuntu.com precise-backports/main TranslationIndex
Hit http://us.archive.ubuntu.com precise-backports/multiverse TranslationIndex
Hit http://us.archive.ubuntu.com precise-backports/restricted TranslationIndex
Hit http://us.archive.ubuntu.com precise-backports/universe TranslationIndex
Hit http://us.archive.ubuntu.com precise/main Translation-en
Hit http://us.archive.ubuntu.com precise/multiverse Translation-en
Hit http://us.archive.ubuntu.com precise/restricted Translation-en
Hit http://us.archive.ubuntu.com precise/universe Translation-en
Hit http://us.archive.ubuntu.com precise-updates/main Translation-en
Hit http://us.archive.ubuntu.com precise-updates/multiverse Translation-en
Hit http://us.archive.ubuntu.com precise-updates/restricted Translation-en
Hit http://us.archive.ubuntu.com precise-updates/universe Translation-en
Hit http://us.archive.ubuntu.com precise-backports/main Translation-en
Hit http://us.archive.ubuntu.com precise-backports/multiverse Translation-en
Hit http://us.archive.ubuntu.com precise-backports/restricted Translation-en
Hit http://us.archive.ubuntu.com precise-backports/universe Translation-en
Err http://packages.treasure-data.com precise/contrib amd64 Packages
  404  Not Found
Err http://packages.treasure-data.com precise/contrib i386 Packages
  404  Not Found
Hit http://packages.treasure-data.com precise/contrib amd64 Packages
Hit http://packages.treasure-data.com precise/contrib i386 Packages
Ign http://packages.treasure-data.com precise/contrib Translation-en
Ign http://downloads-distro.mongodb.org dist/10gen Translation-en
Ign http://packages.treasure-data.com precise/contrib Translation-en

================================================================================
Error executing action `run` on resource 'execute[update package index]'
================================================================================

Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '100'

td_agent_gem raise error in why-run mode when a machine was not installed td-agent yet.

recipe is

node.default[:td_agent][:plugins] = [
  "record-reformer"
]

include_recipe 'td-agent'

error is

  * td-agent_gem[record-reformer] action install
================================================================================
Error executing action `install` on resource 'td-agent_gem[record-reformer]'
================================================================================


Errno::ENOENT
-------------
No such file or directory - /usr/lib64/fluent/ruby/bin/fluent-gem env gempath


Resource Declaration:
---------------------
# In /home/ec2-user/chef-solo/cookbooks-2/td-agent/recipes/default.rb

113:     td_agent_gem plugin do
114:       plugin true
115:     end
116:   end



Compiled Resource:
------------------
# Declared in /home/ec2-user/chef-solo/cookbooks-2/td-agent/recipes/default.rb:113:in `block in from_file'

td_agent_gem("record-reformer") do
  provider Chef::Provider::Package::TdRubygems
  action :install
  retries 0
  retry_delay 2
  cookbook_name :"td-agent"
  recipe_name "default"
  plugin true
  package_name "fluent-plugin-record-reformer"
  gem_binary "/usr/lib64/fluent/ruby/bin/fluent-gem"
end

Keep a changelog

Could you please start keeping a changelog for this cookbook? This will make it much easier for users to gauge impact of upgrading to a newer version.

Unnecessarily strict platform check

Not able to use on amazon and other specific non specified os's and AMIs. I will either have to beg you to make a mod, or fork this cookbook. It would be a very easy thing to change the source to not rely on platform attribute and instead use the more general platform_family as in:

case node["platform_family"]
when "debian"
  dist = node['lsb']['codename']
  source = (dist == 'precise') ? "http://packages.treasure-data.com/precise/" : "http://packages.treasure-data.com/debian/"
  apt_repository "treasure-data" do
    uri source
    distribution dist
    components ["contrib"]
    action :add
  end
when "rhel"
  yum_repository "treasure-data" do
    url "http://packages.treasure-data.com/redhat/$basearch"
    gpgkey "http://packages.treasure-data.com/redhat/RPM-GPG-KEY-td-agent"
    action :add
  end
end

Broken version

Tried to install on Ubuntu 14.04, was getting this error:

STDERR: E: Version '2.2.1' for 'td-agent' was not found

Setting these attributes fixed it:

default[:td_agent][:pinning_version] = true
default[:td_agent][:version] = '2.2.1-0'

td_agent_gem package provider broken

Currently the td_agent_gem provider does not work with the newest chef versions. There seems to be an update to the package provider, which broke the td_agent_gem provider. Here is a link to the log output: https://gist.github.com/eightbitraptor/0099e6cfb6a54333951b

I tested it with chef 12.2.1 and it stills works in that version, but it seems broken in 12.3.0. I will try to find the change that broke that in the chef package provider and add it to this issue.

Cannot pin td-agent version

Given I have this in an attribute file in a wrapper cookbook:

default["td_agent"]["version"] = "2.3.2"
default["td_agent"]["pinning_version"] = true

When I run include_recipe('td-agent') in said wrapper cookbook

Then I get this error:

           Error executing action `install` on resource 'apt_package[td-agent]'
           ================================================================================

           Mixlib::ShellOut::ShellCommandFailed
           ------------------------------------
           Expected process to exit with [0], but received '100'
           ---- Begin output of apt-get -q -y install td-agent=2.3.2 ----
           STDOUT: Reading package lists...
           Building dependency tree...
           Reading state information...
           STDERR: E: Version '2.3.2' for 'td-agent' was not found
           ---- End output of apt-get -q -y install td-agent=2.3.2 ----
           Ran apt-get -q -y install td-agent=2.3.2 returned 100

           Cookbook Trace:
           ---------------
           /tmp/kitchen/cache/cookbooks/compat_resource/files/lib/chef_compat/monkeypatches/chef/runner.rb:41:in `run_action'

           Resource Declaration:
           ---------------------
           # In /tmp/kitchen/cache/cookbooks/td-agent/recipes/default.rb

           115: package "td-agent" do
           116:   if node["td_agent"]["pinning_version"]
           117:     action :install
           118:     version node["td_agent"]["version"]
           119:   else
           120:     action :upgrade
           121:   end
           122: end

           Compiled Resource:
           ------------------
           # Declared in /tmp/kitchen/cache/cookbooks/td-agent/recipes/default.rb:115:in `from_file'

           apt_package("td-agent") do
             package_name "td-agent"
             action [:install]
             retries 0
             retry_delay 2
             default_guard_interpreter :default
             declared_type :package
             cookbook_name "td-agent"
             recipe_name "default"
             version "2.3.2"
           end

           Platform:
           ---------
           x86_64-linux

Am I doing something wrong or is this a bug?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.