From e9b67549ff4b0b2abd85fd7d7004bcc5dae0751f Mon Sep 17 00:00:00 2001 From: Massimiliano Pippi Date: Thu, 9 Jun 2016 16:31:24 -0400 Subject: [PATCH 1/7] first pass at layout --- .gitignore | 11 +- build.sh | 8 + {agentmain => cmd/agent/app}/main.go | 6 +- main.go => cmd/agent/main.go | 2 +- models/check.go | 9 - omnibus/Berksfile | 6 - omnibus/Berksfile.lock | 47 ---- omnibus/DEPENDENCY_TREE.txt | 66 ------ omnibus/Gemfile | 4 - omnibus/README.md | 75 ------ omnibus/Vagrantfile | 122 ---------- omnibus/Vagrantfile.chef | 1 - omnibus/bin/bundler | 16 -- omnibus/bin/ffi-yajl-bench | 16 -- omnibus/bin/fpm | 16 -- omnibus/bin/ohai | 16 -- omnibus/bin/omnibus | 16 -- omnibus/bin/rake | 16 -- omnibus/bin/rubygems-cabin-test | 16 -- omnibus/bin/thor | 16 -- omnibus/config/projects/datadog-agent.rb | 168 -------------- omnibus/config/software/datadog-agent.rb | 127 ---------- omnibus/lib/ostools.rb | 22 -- omnibus/omnibus.rb | 14 -- omnibus/omnibus_build.sh | 42 ---- .../package-scripts/datadog-agent/README.md | 25 -- .../package-scripts/datadog-agent/postinst | 219 ------------------ omnibus/package-scripts/datadog-agent/postrm | 31 --- .../package-scripts/datadog-agent/posttrans | 6 - omnibus/package-scripts/datadog-agent/preinst | 110 --------- omnibus/package-scripts/datadog-agent/prerm | 35 --- .../datadog-agent/dmg/background.png | Bin 210167 -> 0 bytes omnibus/resources/datadog-agent/dmg/icon.png | Bin 563984 -> 0 bytes .../datadog-agent/pkg/background.png | Bin 84985 -> 0 bytes .../datadog-agent/pkg/license.html.erb | 31 --- .../datadog-agent/pkg/welcome.html.erb | 4 - omnibus/rpm-sign | 20 -- {checks => pkg/checks}/common.go | 0 {checks => pkg/checks}/common_test.go | 0 {checks => pkg/checks}/system/memory.go | 0 {py => pkg/py}/check.go | 2 +- {py => pkg/py}/check_test.go | 0 {py => pkg/py}/checks/__init__.py | 0 {py => pkg/py}/checks/activemq_xml.py | 0 {py => pkg/py}/checks/agent_metrics.py | 0 {py => pkg/py}/checks/apache.py | 0 {py => pkg/py}/checks/btrfs.py | 0 {py => pkg/py}/checks/cacti.py | 0 {py => pkg/py}/checks/consul.py | 0 {py => pkg/py}/checks/couch.py | 0 {py => pkg/py}/checks/couchbase.py | 0 {py => pkg/py}/checks/directory.py | 0 {py => pkg/py}/checks/disk.py | 0 {py => pkg/py}/checks/docker.py | 0 {py => pkg/py}/checks/docker_daemon.py | 0 {py => pkg/py}/checks/elastic.py | 0 {py => pkg/py}/checks/etcd.py | 0 {py => pkg/py}/checks/fluentd.py | 0 {py => pkg/py}/checks/gearmand.py | 0 {py => pkg/py}/checks/go_expvar.py | 0 {py => pkg/py}/checks/gunicorn.py | 0 {py => pkg/py}/checks/haproxy.py | 0 {py => pkg/py}/checks/hdfs.py | 0 {py => pkg/py}/checks/http_check.py | 0 {py => pkg/py}/checks/iis.py | 0 {py => pkg/py}/checks/jenkins.py | 0 {py => pkg/py}/checks/kafka_consumer.py | 0 {py => pkg/py}/checks/kubernetes.py | 0 {py => pkg/py}/checks/kyototycoon.py | 0 {py => pkg/py}/checks/lighttpd.py | 0 {py => pkg/py}/checks/marathon.py | 0 {py => pkg/py}/checks/mcache.py | 0 {py => pkg/py}/checks/mesos.py | 0 {py => pkg/py}/checks/mesos_master.py | 0 {py => pkg/py}/checks/mesos_slave.py | 0 {py => pkg/py}/checks/mongo.py | 0 {py => pkg/py}/checks/mysql.py | 0 {py => pkg/py}/checks/nagios.py | 0 {py => pkg/py}/checks/network.py | 0 {py => pkg/py}/checks/nginx.py | 0 {py => pkg/py}/checks/ntp.py | 0 {py => pkg/py}/checks/openstack.py | 0 {py => pkg/py}/checks/pgbouncer.py | 0 {py => pkg/py}/checks/php_fpm.py | 0 {py => pkg/py}/checks/postfix.py | 0 {py => pkg/py}/checks/postgres.py | 0 {py => pkg/py}/checks/process.py | 0 {py => pkg/py}/checks/rabbitmq.py | 0 {py => pkg/py}/checks/redisdb.py | 0 {py => pkg/py}/checks/riak.py | 0 {py => pkg/py}/checks/riakcs.py | 0 {py => pkg/py}/checks/snmp.py | 0 {py => pkg/py}/checks/sqlserver.py | 0 {py => pkg/py}/checks/ssh_check.py | 0 {py => pkg/py}/checks/supervisord.py | 0 {py => pkg/py}/checks/system_core.py | 0 {py => pkg/py}/checks/system_swap.py | 0 {py => pkg/py}/checks/tcp_check.py | 0 {py => pkg/py}/checks/teamcity.py | 0 {py => pkg/py}/checks/tokumx.py | 0 {py => pkg/py}/checks/varnish.py | 0 {py => pkg/py}/checks/vsphere.py | 0 {py => pkg/py}/checks/win32_event_log.py | 0 {py => pkg/py}/checks/windows_service.py | 0 {py => pkg/py}/checks/wmi_check.py | 0 {py => pkg/py}/checks/zk.py | 0 {py => pkg/py}/conf.d/directory.yaml | 0 {py => pkg/py}/conf.d/go_expvar.yaml | 0 {py => pkg/py}/conf.d/process.yaml | 0 {py => pkg/py}/conf.d/system_core.yaml | 0 {py => pkg/py}/config.go | 0 {py => pkg/py}/config.py | 0 {py => pkg/py}/config_test.go | 0 {py => pkg/py}/tests/__init__.py | 0 {py => pkg/py}/tests/bad.yaml | 0 {py => pkg/py}/tests/bar.py | 0 {py => pkg/py}/tests/complex.py | 0 {py => pkg/py}/tests/complex.yaml | 0 {py => pkg/py}/tests/foo.py | 0 {py => pkg/py}/tests/testcheck.py | 0 {py => pkg/py}/tests/testcheck.yaml | 0 {py => pkg/py}/tests/testcheck2.py | 0 {py => pkg/py}/util.py | 0 {py => pkg/py}/utils.go | 0 {py => pkg/py}/utils/__init__.py | 0 {py => pkg/py}/utils/debug.py | 0 {py => pkg/py}/utils/deprecations.py | 0 {py => pkg/py}/utils/dockerutil.py | 0 {py => pkg/py}/utils/flare.py | 0 {py => pkg/py}/utils/http.py | 0 {py => pkg/py}/utils/jmx.py | 0 {py => pkg/py}/utils/kubeutil.py | 0 {py => pkg/py}/utils/logger.py | 0 {py => pkg/py}/utils/ntp.py | 0 {py => pkg/py}/utils/pidfile.py | 0 {py => pkg/py}/utils/pip-allow-failures.sh | 0 {py => pkg/py}/utils/platform.py | 0 {py => pkg/py}/utils/process.py | 0 {py => pkg/py}/utils/profile.py | 0 {py => pkg/py}/utils/proxy.py | 0 {py => pkg/py}/utils/shell.py | 0 {py => pkg/py}/utils/subprocess_output.py | 0 {py => pkg/py}/utils/tailfile.py | 0 {py => pkg/py}/utils/timeout.py | 0 {py => pkg/py}/utils_test.go | 0 runtests.sh | 2 +- 146 files changed, 19 insertions(+), 1324 deletions(-) create mode 100755 build.sh rename {agentmain => cmd/agent/app}/main.go (92%) rename main.go => cmd/agent/main.go (78%) delete mode 100644 models/check.go delete mode 100644 omnibus/Berksfile delete mode 100644 omnibus/Berksfile.lock delete mode 100644 omnibus/DEPENDENCY_TREE.txt delete mode 100644 omnibus/Gemfile delete mode 100644 omnibus/README.md delete mode 100644 omnibus/Vagrantfile delete mode 100644 omnibus/Vagrantfile.chef delete mode 100755 omnibus/bin/bundler delete mode 100755 omnibus/bin/ffi-yajl-bench delete mode 100755 omnibus/bin/fpm delete mode 100755 omnibus/bin/ohai delete mode 100755 omnibus/bin/omnibus delete mode 100755 omnibus/bin/rake delete mode 100755 omnibus/bin/rubygems-cabin-test delete mode 100755 omnibus/bin/thor delete mode 100644 omnibus/config/projects/datadog-agent.rb delete mode 100644 omnibus/config/software/datadog-agent.rb delete mode 100644 omnibus/lib/ostools.rb delete mode 100644 omnibus/omnibus.rb delete mode 100644 omnibus/omnibus_build.sh delete mode 100644 omnibus/package-scripts/datadog-agent/README.md delete mode 100755 omnibus/package-scripts/datadog-agent/postinst delete mode 100755 omnibus/package-scripts/datadog-agent/postrm delete mode 100755 omnibus/package-scripts/datadog-agent/posttrans delete mode 100755 omnibus/package-scripts/datadog-agent/preinst delete mode 100755 omnibus/package-scripts/datadog-agent/prerm delete mode 100644 omnibus/resources/datadog-agent/dmg/background.png delete mode 100644 omnibus/resources/datadog-agent/dmg/icon.png delete mode 100644 omnibus/resources/datadog-agent/pkg/background.png delete mode 100644 omnibus/resources/datadog-agent/pkg/license.html.erb delete mode 100644 omnibus/resources/datadog-agent/pkg/welcome.html.erb delete mode 100755 omnibus/rpm-sign rename {checks => pkg/checks}/common.go (100%) rename {checks => pkg/checks}/common_test.go (100%) rename {checks => pkg/checks}/system/memory.go (100%) rename {py => pkg/py}/check.go (98%) rename {py => pkg/py}/check_test.go (100%) rename {py => pkg/py}/checks/__init__.py (100%) rename {py => pkg/py}/checks/activemq_xml.py (100%) rename {py => pkg/py}/checks/agent_metrics.py (100%) rename {py => pkg/py}/checks/apache.py (100%) rename {py => pkg/py}/checks/btrfs.py (100%) rename {py => pkg/py}/checks/cacti.py (100%) rename {py => pkg/py}/checks/consul.py (100%) rename {py => pkg/py}/checks/couch.py (100%) rename {py => pkg/py}/checks/couchbase.py (100%) rename {py => pkg/py}/checks/directory.py (100%) rename {py => pkg/py}/checks/disk.py (100%) rename {py => pkg/py}/checks/docker.py (100%) rename {py => pkg/py}/checks/docker_daemon.py (100%) rename {py => pkg/py}/checks/elastic.py (100%) rename {py => pkg/py}/checks/etcd.py (100%) rename {py => pkg/py}/checks/fluentd.py (100%) rename {py => pkg/py}/checks/gearmand.py (100%) rename {py => pkg/py}/checks/go_expvar.py (100%) rename {py => pkg/py}/checks/gunicorn.py (100%) rename {py => pkg/py}/checks/haproxy.py (100%) rename {py => pkg/py}/checks/hdfs.py (100%) rename {py => pkg/py}/checks/http_check.py (100%) rename {py => pkg/py}/checks/iis.py (100%) rename {py => pkg/py}/checks/jenkins.py (100%) rename {py => pkg/py}/checks/kafka_consumer.py (100%) rename {py => pkg/py}/checks/kubernetes.py (100%) rename {py => pkg/py}/checks/kyototycoon.py (100%) rename {py => pkg/py}/checks/lighttpd.py (100%) rename {py => pkg/py}/checks/marathon.py (100%) rename {py => pkg/py}/checks/mcache.py (100%) rename {py => pkg/py}/checks/mesos.py (100%) rename {py => pkg/py}/checks/mesos_master.py (100%) rename {py => pkg/py}/checks/mesos_slave.py (100%) rename {py => pkg/py}/checks/mongo.py (100%) rename {py => pkg/py}/checks/mysql.py (100%) rename {py => pkg/py}/checks/nagios.py (100%) rename {py => pkg/py}/checks/network.py (100%) rename {py => pkg/py}/checks/nginx.py (100%) rename {py => pkg/py}/checks/ntp.py (100%) rename {py => pkg/py}/checks/openstack.py (100%) rename {py => pkg/py}/checks/pgbouncer.py (100%) rename {py => pkg/py}/checks/php_fpm.py (100%) rename {py => pkg/py}/checks/postfix.py (100%) rename {py => pkg/py}/checks/postgres.py (100%) rename {py => pkg/py}/checks/process.py (100%) rename {py => pkg/py}/checks/rabbitmq.py (100%) rename {py => pkg/py}/checks/redisdb.py (100%) rename {py => pkg/py}/checks/riak.py (100%) rename {py => pkg/py}/checks/riakcs.py (100%) rename {py => pkg/py}/checks/snmp.py (100%) rename {py => pkg/py}/checks/sqlserver.py (100%) rename {py => pkg/py}/checks/ssh_check.py (100%) rename {py => pkg/py}/checks/supervisord.py (100%) rename {py => pkg/py}/checks/system_core.py (100%) rename {py => pkg/py}/checks/system_swap.py (100%) rename {py => pkg/py}/checks/tcp_check.py (100%) rename {py => pkg/py}/checks/teamcity.py (100%) rename {py => pkg/py}/checks/tokumx.py (100%) rename {py => pkg/py}/checks/varnish.py (100%) rename {py => pkg/py}/checks/vsphere.py (100%) rename {py => pkg/py}/checks/win32_event_log.py (100%) rename {py => pkg/py}/checks/windows_service.py (100%) rename {py => pkg/py}/checks/wmi_check.py (100%) rename {py => pkg/py}/checks/zk.py (100%) rename {py => pkg/py}/conf.d/directory.yaml (100%) rename {py => pkg/py}/conf.d/go_expvar.yaml (100%) rename {py => pkg/py}/conf.d/process.yaml (100%) rename {py => pkg/py}/conf.d/system_core.yaml (100%) rename {py => pkg/py}/config.go (100%) rename {py => pkg/py}/config.py (100%) rename {py => pkg/py}/config_test.go (100%) rename {py => pkg/py}/tests/__init__.py (100%) rename {py => pkg/py}/tests/bad.yaml (100%) rename {py => pkg/py}/tests/bar.py (100%) rename {py => pkg/py}/tests/complex.py (100%) rename {py => pkg/py}/tests/complex.yaml (100%) rename {py => pkg/py}/tests/foo.py (100%) rename {py => pkg/py}/tests/testcheck.py (100%) rename {py => pkg/py}/tests/testcheck.yaml (100%) rename {py => pkg/py}/tests/testcheck2.py (100%) rename {py => pkg/py}/util.py (100%) rename {py => pkg/py}/utils.go (100%) rename {py => pkg/py}/utils/__init__.py (100%) rename {py => pkg/py}/utils/debug.py (100%) rename {py => pkg/py}/utils/deprecations.py (100%) rename {py => pkg/py}/utils/dockerutil.py (100%) rename {py => pkg/py}/utils/flare.py (100%) rename {py => pkg/py}/utils/http.py (100%) rename {py => pkg/py}/utils/jmx.py (100%) rename {py => pkg/py}/utils/kubeutil.py (100%) rename {py => pkg/py}/utils/logger.py (100%) rename {py => pkg/py}/utils/ntp.py (100%) rename {py => pkg/py}/utils/pidfile.py (100%) rename {py => pkg/py}/utils/pip-allow-failures.sh (100%) rename {py => pkg/py}/utils/platform.py (100%) rename {py => pkg/py}/utils/process.py (100%) rename {py => pkg/py}/utils/profile.py (100%) rename {py => pkg/py}/utils/proxy.py (100%) rename {py => pkg/py}/utils/shell.py (100%) rename {py => pkg/py}/utils/subprocess_output.py (100%) rename {py => pkg/py}/utils/tailfile.py (100%) rename {py => pkg/py}/utils/timeout.py (100%) rename {py => pkg/py}/utils_test.go (100%) diff --git a/.gitignore b/.gitignore index b5017a5e1678..e158471cc063 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ -pkg/* -*.pyc -datadog-agent -*.lock vendor/ +bin/ + .DS_Store -*.out -profile.cov +*.cov +*.lock +*.pyc diff --git a/build.sh b/build.sh new file mode 100755 index 000000000000..f8d98ea54a81 --- /dev/null +++ b/build.sh @@ -0,0 +1,8 @@ +#!/bin/sh -e + +ORG_PATH="github.com/DataDog" +REPO_PATH="${ORG_PATH}/datadog-agent" + +eval $(go env) + +go build -o ./bin/agent ${REPO_PATH}/cmd/agent diff --git a/agentmain/main.go b/cmd/agent/app/main.go similarity index 92% rename from agentmain/main.go rename to cmd/agent/app/main.go index 3c4a64a4b2f4..f84073c3f78c 100644 --- a/agentmain/main.go +++ b/cmd/agent/app/main.go @@ -4,9 +4,9 @@ import ( "time" "github.com/DataDog/datadog-agent/aggregator" - "github.com/DataDog/datadog-agent/checks" - "github.com/DataDog/datadog-agent/checks/system" - "github.com/DataDog/datadog-agent/py" + "github.com/DataDog/datadog-agent/pkg/checks" + "github.com/DataDog/datadog-agent/pkg/checks/system" + "github.com/DataDog/datadog-agent/pkg/py" "github.com/op/go-logging" "github.com/sbinet/go-python" ) diff --git a/main.go b/cmd/agent/main.go similarity index 78% rename from main.go rename to cmd/agent/main.go index 4cde25a7c519..49c3e9f9b5db 100644 --- a/main.go +++ b/cmd/agent/main.go @@ -5,7 +5,7 @@ import ( "net/http" _ "net/http/pprof" - "github.com/DataDog/datadog-agent/agentmain" + "github.com/DataDog/datadog-agent/cmd/agent/app" ) func main() { diff --git a/models/check.go b/models/check.go deleted file mode 100644 index 98edfbb56d39..000000000000 --- a/models/check.go +++ /dev/null @@ -1,9 +0,0 @@ -package models - -import ( - "github.com/DataDog/datadog-agent/aggregator" -) - -type Check interface { - Check(agg *aggregator.Aggregator) -} diff --git a/omnibus/Berksfile b/omnibus/Berksfile deleted file mode 100644 index 76505fd89194..000000000000 --- a/omnibus/Berksfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://api.berkshelf.com' - -cookbook "omnibus", "~> 1.2.2" -cookbook "yum", "< 3.0.0" -cookbook "golang", "~> 1.4.0" -# cookbook "mercurial", "~> 2.0.0" diff --git a/omnibus/Berksfile.lock b/omnibus/Berksfile.lock deleted file mode 100644 index f132129e48c6..000000000000 --- a/omnibus/Berksfile.lock +++ /dev/null @@ -1,47 +0,0 @@ -DEPENDENCIES - golang (~> 1.4.0) - omnibus (~> 1.2.2) - yum (< 3.0.0) - -GRAPH - 7-zip (1.0.2) - windows (>= 1.2.2) - apt (1.9.2) - build-essential (1.4.4) - chef_handler (1.1.6) - dmg (2.2.0) - git (2.3.0) - build-essential (>= 0.0.0) - dmg (>= 0.0.0) - runit (~> 1.0) - windows (>= 0.0.0) - yum (>= 0.0.0) - golang (1.4.0) - homebrew (1.3.2) - ohai (2.0.1) - omnibus (1.2.2) - 7-zip (~> 1.0.0) - apt (~> 1.9.0) - build-essential (~> 1.4.0) - git (~> 2.3.0) - homebrew (~> 1.3.2) - pkgin (~> 0.4.0) - pkgutil (~> 0.0.3) - rbenv (= 1.6.5) - windows (~> 1.8.8) - wix (~> 1.1.0) - yum (~> 2.2.0) - pkgin (0.4.0) - pkgutil (0.0.3) - rbenv (1.6.5) - apt (>= 0.0.0) - build-essential (>= 0.0.0) - git (>= 0.0.0) - ohai (>= 1.1) - runit (1.0.6) - build-essential (>= 0.0.0) - windows (1.8.10) - chef_handler (>= 0.0.0) - wix (1.1.0) - windows (>= 1.2.2) - yum (2.2.4) diff --git a/omnibus/DEPENDENCY_TREE.txt b/omnibus/DEPENDENCY_TREE.txt deleted file mode 100644 index b4bc76a257a4..000000000000 --- a/omnibus/DEPENDENCY_TREE.txt +++ /dev/null @@ -1,66 +0,0 @@ -Legend (W, M, L = windows / mac / linux only) - -adodbapi -boto -** bzip2 -** cacerts -*** cmake -** curl -datadog-gohai -* futures -** gdbm -gui M W -* guidata M W -**** homebrew -httplib2 -kafka-python M L -kazoo -** libedit -* libffi -** libgcc -**** libiconv -* libpq -** libsqlite3 -** libtool -* libyaml -** makedepend -* ncurses -ntplib -* openssl -paramiko -pg8000 -* pip -*** pkg-config -preparation -procps-ng L -psutil -psycopg2 -pycrypto -* pycurl -pymongo -pymysql -pyopenssl -pysnmp -* pysnmp-mibs -* pyro4 -** pyside -* python -python-gearman -python-memcached -python-redis -python-rrdtool -pyyaml -pyvmomo -*** qtorequests -** setuptools -simplejson -snakebite -* spyderlib M W -supervisor M L -sysstat L -tornado -*** util-macros -uuid -version-manifest -*** xproto -zlib (M L ?) diff --git a/omnibus/Gemfile b/omnibus/Gemfile deleted file mode 100644 index c1e1b19aa15e..000000000000 --- a/omnibus/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' -gem 'omnibus', git: 'git://github.com/datadog/omnibus-ruby.git', branch: 'datadog-4.0.0' -gem 'omnibus-software', git: 'git://github.com/datadog/omnibus-software.git', branch: ENV['OMNIBUS_SOFTWARE_BRANCH'] -gem 'httparty' diff --git a/omnibus/README.md b/omnibus/README.md deleted file mode 100644 index 6bfe7d58babc..000000000000 --- a/omnibus/README.md +++ /dev/null @@ -1,75 +0,0 @@ -Datadog Agent - Omnibus Project -================ - -This is an [Omnibus](https://github.com/opscode/omnibus) project to build the Datadog Agent packages. - -It's using a [fork](https://github.com/chef/omnibus/compare/v4.0.0...DataDog:datadog-4.0.0) of the official 4.0.0 release of the Omnibus project. - -Builds are run in docker containers with Circleci. -See: -* https://github.com/DataDog/docker-dd-agent-build-deb-i386 -* https://github.com/DataDog/docker-dd-agent-build-rpm-i386 -* https://github.com/DataDog/docker-dd-agent-build-deb-x64 -* https://github.com/DataDog/docker-dd-agent-build-rpm-x64 - - -## Build a package locally - -* Install Docker - -* Run the following script with the desired parameters - -```bash -PLATFORM="deb-x64" # must be in "deb-x64", "deb-i386", "rpm-x64", "rpm-i386" -AGENT_BRANCH="master" # Branch of dd-agent repo to use, default "master" -OMNIBUS_BRANCH="master" # Branch of dd-agent-omnibus repo to use, default "master" -AGENT_VERSION="5.4.0" # default to the latest tag on that branch -LOG_LEVEL="debug" # default to "info" -LOCAL_AGENT_REPO="~/dd-agent" # Path to a local repo of the agent to build from. Defaut is not set and the build will be done against the github repo - -# The passphrase of the key you want to use to sign your .rpm package (if -# building an RPM package). If you don't set this variable, the RPM won't be -# signed but the build should succeed. Note that you must also mount a volume -# under /keys and bind it to a folder containing an RPM-SIGNING-KEY.private -# file containing your exported signing key. Finally, be aware that the -# package_maintainer DSL defined in config/projects/datadog_agent.rb and the -# full key name (My Name (comments) ) must match. -RPM_SIGNING_PASSPHRASE="my_super_secret_passphrase" - -mkdir -p pkg -mkdir -p "cache/$PLATFORM" -docker run --name "dd-agent-build-$PLATFORM" \ - -e OMNIBUS_BRANCH=$OMNIBUS_BRANCH \ - -e LOG_LEVEL=$LOG_LEVEL \ - -e AGENT_BRANCH=$AGENT_BRANCH \ - -e AGENT_VERSION=$AGENT_VERSION \ - -e RPM_SIGNING_PASSPHRASE=$RPM_SIGNING_PASSPHRASE \ - -e $LOCAL_AGENT_REPO=/dd-agent-repo # Only to use if you want to build from a local repo \ - -v `pwd`/pkg:/dd-agent-omnibus/pkg \ - -v `pwd`/keys:/keys \ - -v "`pwd`/cache/$PLATFORM:/var/cache/omnibus" \ - -v $LOCAL_AGENT_REPO:/dd-agent-repo # Only to use if you want to build from a local repo \ - "datadog/docker-dd-agent-build-$PLATFORM" - -# Cleanup (necessary to launch another build) -docker rm dd-agent-build-$PLATFORM -``` - -## Build on Mac OS X - -The Mac build platform should have: - -* Xcode installed (type `git` in a terminal), -* [Go](http://golang.org/dl/) installed, -* sudoer rights for the build user, -* Bundler installed: `sudo gem install bundler`, -* Important directories created: `sudo mkdir -p /var/cache/omnibus /opt/datadog-agent`, -* Owned by the right user: `sudo chown $USER:nogroup /var/cache/omnibus /opt/datadog-agent`. -* Xcode license accepted (to sign package) `sudo xcodebuild -license` -* Datadog signing key - -Then run: -```bash -AGENT_BRANCH= OMNIBUS_BRANCH= OMNIBUS_SOFTWARE_BRANCH= sh omnibus_build.sh -``` -The env vars have the same meaning as the Dockerized build above. Omitting them will cause the default of `master` to be used for all 3 diff --git a/omnibus/Vagrantfile b/omnibus/Vagrantfile deleted file mode 100644 index d03272579999..000000000000 --- a/omnibus/Vagrantfile +++ /dev/null @@ -1,122 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -require "vagrant" - -if Vagrant::VERSION < "1.2.1" - raise "The Omnibus Build Lab is only compatible with Vagrant 1.2.1+" -end - -host_project_path = File.expand_path("..", __FILE__) -guest_project_path = "/home/vagrant/#{File.basename(host_project_path)}" -project_name = "datadog-agent" - -Vagrant.configure("2") do |config| - - config.vm.hostname = "#{project_name}-omnibus-build-lab.com" - - # Let's cache stuff to reduce build time using vagrant-cachier - # Require vagrant-cachier plugin - config.cache.scope = :box - - vms_to_use = { - 'ubuntu-i386' => 'ubuntu-10.04-i386', - 'ubuntu-x64' => 'ubuntu-10.04', - 'debian-i386' => 'debian-6.0.8-i386', - 'debian-x64' => 'debian-6.0.8', - 'fedora-i386' => 'fedora-19-i386', - 'fedora-x64' => 'fedora-19', - 'centos-i386' => 'centos-5.10-i386', - 'centos-x64' => 'centos-5.10', - } - - vms_to_use.each_pair do |key, platform| - - config.vm.define key do |c| - c.vm.box = "opscode-#{platform}" - c.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_#{platform}_chef-provisionerless.box" - end - - end - - config.vm.provider :virtualbox do |vb| - # Give enough horsepower to build without taking all day. - vb.customize [ - "modifyvm", :id, - "--memory", "3072", - "--cpus", "3", - "--ioapic", "on" # Required for the centos-5-32 bits to boot - ] - end - - # Ensure a recent version of the Chef Omnibus packages are installed - config.omnibus.chef_version = "11.16.4" - - # Enable the berkshelf-vagrant plugin - config.berkshelf.enabled = true - # The path to the Berksfile to use with Vagrant Berkshelf - config.berkshelf.berksfile_path = "./Berksfile" - - config.ssh.forward_agent = true - - # Mount omnibus to have the builder code! - current_dir = File.expand_path('..', __FILE__) - config.vm.synced_folder current_dir, '/home/vagrant/dd-agent-omnibus' - # Mount local agent repo if asked to - if ENV['LOCAL_AGENT_REPO'] - config.vm.synced_folder ENV['LOCAL_AGENT_REPO'], '/home/vagrant/dd-agent' - # For the VM replace by the new path where we mounted it - ENV['LOCAL_AGENT_REPO'] = '/home/vagrant/dd-agent' - end - - # prepare VM to be an Omnibus builder - config.vm.provision :chef_solo do |chef| - chef.custom_config_path = "Vagrantfile.chef" - chef.json = { - "omnibus" => { - "build_user" => "vagrant", - "build_dir" => guest_project_path, - "install_dir" => "/opt/#{project_name}" - }, - "go" => { - "version" => "1.2.2", - "scm" => false - }, - } - - chef.run_list = [ - "recipe[omnibus::default]", - "recipe[golang]" - ] - end - - # Export the defaults we need to run the scripts - # No better way of passing args in the VM :/ - profile_file = "/etc/profile.d/vagrant.sh" - env_variables_script = < #{profile_file} -ENVSCRIPT - env_variables_passthru = %w[ - AGENT_BRANCH - AGENT_VERSION - DISTRO - LOCAL_AGENT_REPO - LOG_LEVEL - S3_OMNIBUS_BUCKET - S3_ACCESS_KEY - S3_SECRET_KEY - ] - env_variables_passthru.each do |var| - env_variables_script += "\necho export #{var}=#{ENV[var]} >> #{profile_file}" - end - config.vm.provision 'shell', inline: env_variables_script - - # Do the real work, build it! - config.vm.provision 'shell', path: 'omnibus_build.sh' - - if ENV['CLEAR_CACHE'] == "true" - config.vm.provision "shell", - inline: "echo Clearing Omnibus cache && rm -rf /var/cache/omnibus/*" - end -end diff --git a/omnibus/Vagrantfile.chef b/omnibus/Vagrantfile.chef deleted file mode 100644 index dc06693d10a6..000000000000 --- a/omnibus/Vagrantfile.chef +++ /dev/null @@ -1 +0,0 @@ -Chef::Config.ssl_verify_mode = :verify_peer \ No newline at end of file diff --git a/omnibus/bin/bundler b/omnibus/bin/bundler deleted file mode 100755 index 72c62ec0b5d3..000000000000 --- a/omnibus/bin/bundler +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by Bundler. -# -# The application 'bundler' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'pathname' -ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -require 'rubygems' -require 'bundler/setup' - -load Gem.bin_path('bundler', 'bundler') diff --git a/omnibus/bin/ffi-yajl-bench b/omnibus/bin/ffi-yajl-bench deleted file mode 100755 index af15547ea219..000000000000 --- a/omnibus/bin/ffi-yajl-bench +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by Bundler. -# -# The application 'ffi-yajl-bench' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'pathname' -ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -require 'rubygems' -require 'bundler/setup' - -load Gem.bin_path('ffi-yajl', 'ffi-yajl-bench') diff --git a/omnibus/bin/fpm b/omnibus/bin/fpm deleted file mode 100755 index 606005397dff..000000000000 --- a/omnibus/bin/fpm +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by Bundler. -# -# The application 'fpm' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'pathname' -ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -require 'rubygems' -require 'bundler/setup' - -load Gem.bin_path('fpm', 'fpm') diff --git a/omnibus/bin/ohai b/omnibus/bin/ohai deleted file mode 100755 index 3990a9df62a7..000000000000 --- a/omnibus/bin/ohai +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by Bundler. -# -# The application 'ohai' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'pathname' -ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -require 'rubygems' -require 'bundler/setup' - -load Gem.bin_path('ohai', 'ohai') diff --git a/omnibus/bin/omnibus b/omnibus/bin/omnibus deleted file mode 100755 index e3f3899d7934..000000000000 --- a/omnibus/bin/omnibus +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by Bundler. -# -# The application 'omnibus' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'pathname' -ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -require 'rubygems' -require 'bundler/setup' - -load Gem.bin_path('omnibus', 'omnibus') diff --git a/omnibus/bin/rake b/omnibus/bin/rake deleted file mode 100755 index 26c7a2d5b5f1..000000000000 --- a/omnibus/bin/rake +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by Bundler. -# -# The application 'rake' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'pathname' -ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -require 'rubygems' -require 'bundler/setup' - -load Gem.bin_path('rake', 'rake') diff --git a/omnibus/bin/rubygems-cabin-test b/omnibus/bin/rubygems-cabin-test deleted file mode 100755 index 3b151505993c..000000000000 --- a/omnibus/bin/rubygems-cabin-test +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by Bundler. -# -# The application 'rubygems-cabin-test' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'pathname' -ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -require 'rubygems' -require 'bundler/setup' - -load Gem.bin_path('cabin', 'rubygems-cabin-test') diff --git a/omnibus/bin/thor b/omnibus/bin/thor deleted file mode 100755 index 8421e001eac7..000000000000 --- a/omnibus/bin/thor +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by Bundler. -# -# The application 'thor' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'pathname' -ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -require 'rubygems' -require 'bundler/setup' - -load Gem.bin_path('thor', 'thor') diff --git a/omnibus/config/projects/datadog-agent.rb b/omnibus/config/projects/datadog-agent.rb deleted file mode 100644 index 3dbffe9530b5..000000000000 --- a/omnibus/config/projects/datadog-agent.rb +++ /dev/null @@ -1,168 +0,0 @@ -require "./lib/ostools.rb" - -name 'datadog-agent' -maintainer 'Datadog Packages ' -homepage 'http://www.datadoghq.com' -install_dir '/opt/datadog-agent' - -build_version do - source :git, from_dependency: 'datadog-agent' - output_format :dd_agent_format -end - -build_iteration 1 - -description 'Datadog Monitoring Agent - The Datadog Monitoring Agent is a lightweight process that monitors system - processes and services, and sends information back to your Datadog account. - . - This package installs and runs the advanced Agent daemon, which queues and - forwards metrics from your applications as well as system services. - . - See http://www.datadoghq.com/ for more information -' - -# ------------------------------------ -# Generic package information -# ------------------------------------ - -# .deb specific flags -package :deb do - vendor 'Datadog ' - epoch 1 - license 'Simplified BSD License' - section 'utils' - priority 'extra' -end - -# .rpm specific flags -package :rpm do - vendor 'Datadog ' - epoch 1 - license 'Simplified BSD License' - category 'System Environment/Daemons' - priority 'extra' - if ENV.has_key?('RPM_SIGNING_PASSPHRASE') and not ENV['RPM_SIGNING_PASSPHRASE'].empty? - signing_passphrase "#{ENV['RPM_SIGNING_PASSPHRASE']}" - end -end - -# OSX .pkg specific flags -package :pkg do - identifier 'com.datadoghq.agent' - signing_identity 'Developer ID Installer: Datadog, Inc. (JKFCB4CN7C)' -end -compress :dmg do - window_bounds '200, 200, 750, 600' - pkg_position '10, 10' -end - -# Note: this is to try to avoid issues when upgrading from an -# old version of the agent which shipped also a datadog-agent-base -# package. -if redhat? - replace 'datadog-agent-base < 5.0.0' - replace 'datadog-agent-lib < 5.0.0' -elsif debian? - replace 'datadog-agent-base (<< 5.0.0)' - replace 'datadog-agent-lib (<< 5.0.0)' - conflict 'datadog-agent-base (<< 5.0.0)' -end - -# ------------------------------------ -# OS specific DSLs and dependencies -# ------------------------------------ - -# Linux -if linux? - # Debian - if debian? - extra_package_file '/lib/systemd/system/datadog-agent.service' - end - - # SysVInit service file - if redhat? - extra_package_file '/etc/rc.d/init.d/datadog-agent' - else - extra_package_file '/etc/init.d/datadog-agent' - end - - # Supervisord config file for the agent - extra_package_file '/etc/dd-agent/supervisor.conf' - - # Example configuration files for the agent and the checks - extra_package_file '/etc/dd-agent/datadog.conf.example' - extra_package_file '/etc/dd-agent/conf.d' - - # Custom checks directory - extra_package_file '/etc/dd-agent/checks.d' - - # Just a dummy file that needs to be in the RPM package list if we don't want it to be removed - # during RPM upgrades. (the old files from the RPM file listthat are not in the new RPM file - # list will get removed, that's why we need this one here) - extra_package_file '/usr/bin/dd-agent' - - # Linux-specific dependencies - dependency 'procps-ng' - dependency 'sysstat' -end - -# Mac and Windows -if osx? or windows? - dependency 'gui' -end - -# ------------------------------------ -# Dependencies -# ------------------------------------ - -# creates required build directories -dependency 'preparation' - -# Agent dependencies -dependency 'boto' -dependency 'docker-py' -dependency 'ntplib' -dependency 'pycrypto' -dependency 'pyopenssl' -dependency 'pyyaml' -dependency 'simplejson' -dependency 'supervisor' -dependency 'tornado' -dependency 'uptime' -dependency 'uuid' -dependency 'zlib' - -# Check dependencies -dependency 'adodbapi' -dependency 'httplib2' -dependency 'kafka-python' -dependency 'kazoo' -dependency 'paramiko' -dependency 'pg8000' -dependency 'psutil' -dependency 'psycopg2' -dependency 'pymongo' -dependency 'pymysql' -dependency 'pysnmp' -dependency 'python-gearman' -dependency 'python-memcached' -dependency 'python-redis' -dependency 'python-rrdtool' -dependency 'pyvmomi' -dependency 'requests' -dependency 'snakebite' - -# Datadog gohai is built last before dataadog agent since it should always -# be rebuilt (if put above, it would dirty the cache of the dependencies below -# and trigger a useless rebuild of many packages) -dependency 'datadog-gohai' - -# Datadog agent -dependency 'datadog-agent' - -# version manifest file -dependency 'version-manifest' - -exclude '\.git*' -exclude 'bundler\/git' diff --git a/omnibus/config/software/datadog-agent.rb b/omnibus/config/software/datadog-agent.rb deleted file mode 100644 index 5e4979bd7192..000000000000 --- a/omnibus/config/software/datadog-agent.rb +++ /dev/null @@ -1,127 +0,0 @@ -require './lib/ostools.rb' - -name 'datadog-agent' - -local_agent_repo = ENV['LOCAL_AGENT_REPO'] -if local_agent_repo.nil? || local_agent_repo.empty? - source git: 'https://github.com/DataDog/dd-agent.git' -else - # For local development - source path: ENV['LOCAL_AGENT_REPO'] -end - -agent_branch = ENV['AGENT_BRANCH'] -if agent_branch.nil? || agent_branch.empty? - default_version 'master' -else - default_version agent_branch -end - -relative_path 'dd-agent' - -build do - ship_license 'https://raw.githubusercontent.com/DataDog/dd-agent/master/LICENSE' - # Agent code - mkdir "#{install_dir}/agent/" - copy 'checks.d', "#{install_dir}/agent/" - copy 'checks', "#{install_dir}/agent/" - copy 'dogstream', "#{install_dir}/agent/" - copy 'resources', "#{install_dir}/agent/" - copy 'utils', "#{install_dir}/agent/" - command "cp *.py #{install_dir}/agent/" - copy 'datadog-cert.pem', "#{install_dir}/agent/" - - mkdir "#{install_dir}/run/" - - - if linux? - # Configuration files - mkdir '/etc/dd-agent' - if ohai['platform_family'] == 'rhel' - copy 'packaging/centos/datadog-agent.init', '/etc/rc.d/init.d/datadog-agent' - elsif ohai['platform_family'] == 'debian' - copy 'packaging/debian/datadog-agent.init', '/etc/init.d/datadog-agent' - mkdir '/lib/systemd/system' - copy 'packaging/debian/datadog-agent.service', '/lib/systemd/system/datadog-agent.service' - copy 'packaging/debian/start_agent.sh', '/opt/datadog-agent/bin/start_agent.sh' - command 'chmod 755 /opt/datadog-agent/bin/start_agent.sh' - end - copy 'packaging/supervisor.conf', '/etc/dd-agent/supervisor.conf' - copy 'datadog.conf.example', '/etc/dd-agent/datadog.conf.example' - copy 'conf.d', '/etc/dd-agent/' - mkdir '/etc/dd-agent/checks.d/' - command 'chmod 755 /etc/init.d/datadog-agent' - touch '/usr/bin/dd-agent' - end - - if osx? - env = { - 'PATH' => "#{install_dir}/embedded/bin/:#{ENV['PATH']}" - } - - app_temp_dir = "#{install_dir}/agent/dist/Datadog Agent.app/Contents" - app_temp_dir_escaped = "#{install_dir}/agent/dist/Datadog\\ Agent.app/Contents" - pyside_build_dir = "#{install_dir}/agent/build/bdist.macosx-10.5-intel/python2.7-standalone/app/collect/PySide" - command_fix_shiboken = 'install_name_tool -change @rpath/libshiboken-python2.7.1.2.dylib'\ - ' @executable_path/../Frameworks/libshiboken-python2.7.1.2.dylib ' - command_fix_pyside = 'install_name_tool -change @rpath/libpyside-python2.7.1.2.dylib'\ - ' @executable_path/../Frameworks/libpyside-python2.7.1.2.dylib ' - - # Command line tool - copy 'packaging/osx/datadog-agent', "#{install_dir}/bin" - command "chmod 755 #{install_dir}/bin/datadog-agent" - - # GUI - copy 'packaging/datadog-agent/win32/install_files/guidata/images', "#{install_dir}/agent" - copy 'win32/gui.py', "#{install_dir}/agent" - copy 'win32/status.html', "#{install_dir}/agent" - mkdir "#{install_dir}/agent/packaging" - copy 'packaging/osx/app/*', "#{install_dir}/agent/packaging" - - command "cd #{install_dir}/agent && "\ - "#{install_dir}/embedded/bin/python #{install_dir}/agent/setup.py py2app"\ - ' && cd -', env: env - # Time to patch the install, see py2app bug: (dependencies to system PySide) - # https://bitbucket.org/ronaldoussoren/py2app/issue/143/resulting-app-mistakenly-looks-for-pyside - copy "#{pyside_build_dir}/libshiboken-python2.7.1.2.dylib", "#{app_temp_dir}/Frameworks/libshiboken-python2.7.1.2.dylib" - copy "#{pyside_build_dir}/libpyside-python2.7.1.2.dylib", "#{app_temp_dir}/Frameworks/libpyside-python2.7.1.2.dylib" - - command "chmod a+x #{app_temp_dir_escaped}/Frameworks/{libpyside,libshiboken}-python2.7.1.2.dylib" - command "#{command_fix_shiboken} #{app_temp_dir_escaped}/Frameworks/libpyside-python2.7.1.2.dylib" - command 'install_name_tool -change /usr/local/lib/QtCore.framework/Versions/4/QtCore '\ - '@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore '\ - "#{app_temp_dir_escaped}/Frameworks/libpyside-python2.7.1.2.dylib" - command "#{command_fix_shiboken} #{app_temp_dir_escaped}/Resources/lib/python2.7/lib-dynload/PySide/QtCore.so" - command "#{command_fix_shiboken} #{app_temp_dir_escaped}/Resources/lib/python2.7/lib-dynload/PySide/QtGui.so" - command "#{command_fix_pyside} #{app_temp_dir_escaped}/Resources/lib/python2.7/lib-dynload/PySide/QtCore.so" - command "#{command_fix_pyside} #{app_temp_dir_escaped}/Resources/lib/python2.7/lib-dynload/PySide/QtGui.so" - - # And finally - command "cp -Rf #{install_dir}/agent/dist/Datadog\\ Agent.app #{install_dir}" - - # Clean GUI related things - %w(build dist images gui.py status.html packaging Datadog_Agent.egg-info).each do |file| - delete "#{install_dir}/agent/#{file}" - end - %w(py2app macholib modulegraph altgraph).each do |package| - command "yes | #{install_dir}/embedded/bin/pip uninstall #{package}" - end - %w(pyside guidata spyderlib).each do |dependency_name| - # Installed with `python setup.py install`, needs to be uninstalled manually - command "cat #{install_dir}/embedded/#{dependency_name}-files.txt | xargs rm -rf \"{}\"" - delete "#{install_dir}/embedded/#{dependency_name}-files.txt" - end - - # conf - mkdir "#{install_dir}/etc" - command "grep -v 'user=dd-agent' packaging/supervisor.conf > #{install_dir}/etc/supervisor.conf" - copy 'datadog.conf.example', "#{install_dir}/etc/datadog.conf.example" - command "cp -R conf.d #{install_dir}/etc/" - copy 'packaging/osx/com.datadoghq.Agent.plist.example', "#{install_dir}/etc/" - end - - # The file below is touched by software builds that don't put anything in the installation - # directory (libgcc right now) so that the git_cache gets updated let's remove it from the - # final package - delete "#{install_dir}/uselessfile" -end diff --git a/omnibus/lib/ostools.rb b/omnibus/lib/ostools.rb deleted file mode 100644 index 8f447dd4647e..000000000000 --- a/omnibus/lib/ostools.rb +++ /dev/null @@ -1,22 +0,0 @@ -# ------------------------------------ -# OS-detection helper functions -# ------------------------------------ -def linux?() - return %w(rhel debian fedora suse gentoo slackware arch exherbo).include? ohai['platform_family'] -end - -def redhat?() - return %w(rhel fedora suse).include? ohai['platform_family'] -end - -def debian?() - return ohai['platform_family'] == 'debian' -end - -def osx?() - return ohai['platform_family'] == 'mac_os_x' -end - -def windows?() - return ohai['platform_family'] == 'windows' -end diff --git a/omnibus/omnibus.rb b/omnibus/omnibus.rb deleted file mode 100644 index 170096a82714..000000000000 --- a/omnibus/omnibus.rb +++ /dev/null @@ -1,14 +0,0 @@ -bucket = ENV['S3_OMNIBUS_BUCKET'] - -append_timestamp false - -if bucket.nil? || bucket.empty? - use_s3_caching false -else - s3_access_key ENV['S3_ACCESS_KEY'] - s3_secret_key ENV['S3_SECRET_KEY'] - s3_bucket ENV['S3_OMNIBUS_BUCKET'] - use_s3_caching true -end - -append_timestamp false diff --git a/omnibus/omnibus_build.sh b/omnibus/omnibus_build.sh deleted file mode 100644 index c223b49fa729..000000000000 --- a/omnibus/omnibus_build.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash -e - -########################### -# -# WARNING: You need to rebuild the docker images if you do any changes to this file -# -############################ - -PROJECT_DIR=dd-agent-omnibus -PROJECT_NAME=datadog-agent -LOG_LEVEL=${LOG_LEVEL:-"info"} -OMNIBUS_BRANCH=${OMNIBUS_BRANCH:-"master"} -OMNIBUS_SOFTWARE_BRANCH=${OMNIBUS_SOFTWARE_BRANCH:-"master"} - -# Clean up omnibus artifacts -rm -rf /var/cache/omnibus/pkg/* - -# Clean up what we installed -rm -f /etc/init.d/datadog-agent -rm -rf /etc/dd-agent -rm -rf /opt/$PROJECT_NAME/* - -cd $PROJECT_DIR -# Allow to use a different dd-agent-omnibus branch -git fetch --all -git checkout $OMNIBUS_BRANCH -git reset --hard origin/$OMNIBUS_BRANCH - -# If an RPM_SIGNING_PASSPHRASE has been passed, let's import the signing key -if [ -n "$RPM_SIGNING_PASSPHRASE" ]; then - gpg --import /keys/RPM-SIGNING-KEY.private -fi - -# Last but not least, let's make sure that we rebuild the agent everytime because -# the extra package files are destroyed when the build container stops (we have -# to tweak omnibus-git-cache directly for that). Same for gohai. -git --git-dir=/var/cache/omnibus/cache/git_cache/opt/datadog-agent tag -d `git --git-dir=/var/cache/omnibus/cache/git_cache/opt/datadog-agent tag -l | grep datadog-agent` -git --git-dir=/var/cache/omnibus/cache/git_cache/opt/datadog-agent tag -d `git --git-dir=/var/cache/omnibus/cache/git_cache/opt/datadog-agent tag -l | grep datadog-gohai` - -# Install the gems we need, with stubs in bin/ -bundle update # Make sure to update to the latest version of omnibus-software -bin/omnibus build -l=$LOG_LEVEL $PROJECT_NAME diff --git a/omnibus/package-scripts/datadog-agent/README.md b/omnibus/package-scripts/datadog-agent/README.md deleted file mode 100644 index 8c1d30331907..000000000000 --- a/omnibus/package-scripts/datadog-agent/README.md +++ /dev/null @@ -1,25 +0,0 @@ -The order in which these script are executed varies between APT and YUM which can lead to some -rather sneaky bugs. Here's the standard order for updates: - -APT (source https://debian-handbook.info/browse/stable/sect.package-meta-information.html): -------------------------------------------------------------------------------------------- -* `prerm` script of the old package (with arguments: `upgrade `) -* `preinst` script of the new package (with arguments: `upgrade `) -* New files get unpacked based on the file list embedded in the `.deb` package -* `postrm` script from the old package (with arguments `upgrade `) -* `dpkg` updates the files list, removes the files that don't exist anymore, etc. -* `postinst` of the new script is run (with arguments `configure ` - -YUM (source: various Stackoverflow posts + local experiments): --------------------------------------------------------------- - -* `pretrans` of new package -* `preinst` of new package` -* Files in the list get copied -* `prerm` of old package -* Files in the old package file list that are not in the new one's get removed -* `postrm` of the old package gets run -* `posttrans` of the old package is ran - -One thing to notice is that if you remove files or other components in the `postrm` script, -updates won't work as expected with YUM. diff --git a/omnibus/package-scripts/datadog-agent/postinst b/omnibus/package-scripts/datadog-agent/postinst deleted file mode 100755 index c27959a23ead..000000000000 --- a/omnibus/package-scripts/datadog-agent/postinst +++ /dev/null @@ -1,219 +0,0 @@ -#!/bin/sh - -INSTALL_DIR=/opt/datadog-agent -LOG_DIR=/var/log/datadog -RUN_DIR=$INSTALL_DIR/run - -DISTRIBUTION=$(grep -Eo "(Debian|Ubuntu|RedHat|CentOS|openSUSE|Amazon)" /etc/issue 2>/dev/null || uname -s) - -error_exit() -{ - echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2 - exit 1 -} - -mkdir -p ${LOG_DIR} || error_exit "Cannot create ${LOG_DIR}!" - -# If we are inside the Docker container, do nothing -if [ -n "$DOCKER_DD_AGENT" ]; then - echo "Installation from docker-dd-agent, nothing to do in postinst" - exit 0 -fi - -# Linux installation -if [ "$DISTRIBUTION" != "Darwin" ]; then - # Linus specific variables - CONFIG_DIR=/etc/dd-agent - - # Since we now package our own supervisor config, we no longer want - # the old config to be loaded. Since supervisor automatically loads - # configs in conf.d, we have to delete the old config file. - if [ -f "/etc/supervisor/conf.d/ddagent.conf" ]; then - echo "Removing old configuration from system supervisord" - rm /etc/supervisor/conf.d/ddagent.conf - fi - - if [ -f "/etc/debian_version" ] || [ "$DISTRIBUTION" == "Debian" ] || [ "$DISTRIBUTION" == "Ubuntu" ]; then - set -e - case "$1" in - configure) - echo "Registering service datadog-agent" - update-rc.d datadog-agent defaults - echo "Enabling service datadog-agent" - update-rc.d datadog-agent enable >/dev/null 2>&1 - # Only add dd-agent user if it doesn't already exist - set +e - id -u dd-agent >/dev/null 2>&1 - USER_EXISTS=$? - set -e - if [ ! $USER_EXISTS -eq 0 ]; then - echo "Creating dd-agent user" - adduser --system dd-agent --disabled-login --shell /bin/sh --no-create-home --quiet - usermod -d /opt/datadog-agent dd-agent - fi - set +e - ;; - abort-upgrade|abort-remove|abort-deconfigure) - ;; - - *) - ;; - esac - #DEBHELPER# - fi - - # Set proper rights to the dd-agent user - chown -R dd-agent:root ${CONFIG_DIR} - chown -R dd-agent:root ${LOG_DIR} - chown root:root /etc/init.d/datadog-agent - chown -R root:root /opt/datadog-agent - chown -R dd-agent:root ${RUN_DIR} - - if command -v chkconfig >/dev/null 2>&1; then - chkconfig --add datadog-agent - fi - - # Create symlinks to the various agent's components - ln -sf $INSTALL_DIR/agent/agent.py /usr/bin/dd-agent - chown -R dd-agent:root /usr/bin/dd-agent - chmod 755 /usr/bin/dd-agent - - # The configcheck call will return zero if the config is valid, which means we - # can restart the agent without taking the risk to trigger an error in the - # postinst script . If the config file doesn't exist (RETVAL=3), the user is - # probably using the source install script so let's consider the postinst script - # did its job and exist zero, otherwise, if the file exists but it's wrong we - # have to return a non zero exit status so that the system (and the user) are - # notified the installation went wrong. - /etc/init.d/datadog-agent configcheck - RETVAL=$? - if [ $RETVAL -eq 0 ]; then - echo "(Re)starting datadog-agent now..." - if command -v invoke-rc.d >/dev/null 2>&1; then - invoke-rc.d datadog-agent restart - else - /etc/init.d/datadog-agent restart - fi - fi - - if [ $RETVAL -ne 0 ]; then - if [ $RETVAL -eq 3 ]; then - # No datadog.conf file is present. The user is probably following - # the step-by-step instructions and will add the config file next. - exit 0 - else - exit $RETVAL - fi - fi -# OSX installation -elif [ "$DISTRIBUTION" = "Darwin" ]; then - # OSX specific variables - OPT_APP_DIR="$INSTALL_DIR/Datadog Agent.app" - APP_DIR="/Applications/Datadog Agent.app" - CONF_DIR=$INSTALL_DIR/etc - RUN_DIR=$INSTALL_DIR/run - - # Let's log the standard outputs of this script - LOG_FILE="$LOG_DIR/postinstall.log" - mkdir -vp $LOG_DIR - exec > $LOG_FILE 2>&1 - - # Let's talk to our user installing the Agent a bit - echo "# State at the beginning" - echo "## Agent version" - grep AGENT_VERSION $INSTALL_DIR/agent/cofnig.py || echo "No config file" - echo "## $INSTALL_DIR" - ls -al $INSTALL_DIR || "No agent installed" - echo "## $APP_DIR/Contents/Resources" - ls -al "$APP_DIR/Contents/Resources" || echo "No app installed" - - # Determine current user if he is using the Graphical installer - INSTALL_USER=$(ps aux | grep "CoreServices/Installer" | grep -v grep | awk '{print $1;}') - - # Otherwise, we hope he is using the install script and try to this user - # If it fails, no choice but to use root :'( - if [ -z "$INSTALL_USER" ] || [ "$INSTALL_USER" == "root" ]; then - SCRIPT_INSTALL="yes" - INSTALL_USER=`cat /tmp/datadog-install-user || echo 'root'` - rm -v /tmp/datadog-install-user || true - fi - echo "INSTALL_USER: $INSTALL_USER" - - echo "# Prepareing log dir" - chown -vR $INSTALL_USER:admin $LOG_DIR - chmod -v 755 $LOG_DIR - - echo "# Installing the app" - mv -v "$OPT_APP_DIR" /Applications || echo "App already installed" - - # Set the run directory for the agent - mkdir -vp "$RUN_DIR" - chown -vR $INSTALL_USER:admin "$RUN_DIR" - chmod -v 755 "$RUN_DIR" - - echo "# Creating default plist" - sed "s|USER_NAME|$INSTALL_USER|" "$CONF_DIR/com.datadoghq.Agent.plist.example" > "$CONF_DIR/com.datadoghq.Agent.plist" - - echo "# Copying conf" - mkdir -vp $CONF_DIR/checks.d - - if [ -e "/tmp/datadog.conf" ]; then - mv -vf /tmp/datadog.conf $CONF_DIR - mv -vf /tmp/conf.d/* $CONF_DIR/conf.d - cp -vn /tmp/checks.d/* $CONF_DIR/checks.d - rm -vrf /tmp/datadog.conf /tmp/conf.d /tmp/checks.d - # Or copying default - else - sed -E 's/^api_key:$/api_key: APIKEY/' $CONF_DIR/datadog.conf.example > $CONF_DIR/datadog.conf - fi - - echo "# Setting correct rights on conf" - chown -v $INSTALL_USER:admin $CONF_DIR/datadog.conf - chown -vR $INSTALL_USER:admin $CONF_DIR/conf.d $CONF_DIR/checks.d - - # `datadog-agent` command line - mkdir -vp /usr/local/bin - ln -vs $INSTALL_DIR/bin/datadog-agent /usr/local/bin/datadog-agent - - # Link for conf files (let's ease the user's life) - USER_HOME=`sudo -Hu $INSTALL_USER sh -c 'echo $HOME'` - sudo -Hu $INSTALL_USER mkdir -vp "$USER_HOME/.datadog-agent" - rm -vf "$USER_HOME/.datadog-agent/conf.d" "$USER_HOME/.datadog-agent/datadog.conf" "$USER_HOME/.datadog-agent/checks.d" - sudo -Hu $INSTALL_USER ln -vs $CONF_DIR/conf.d "$USER_HOME/.datadog-agent/conf.d" - sudo -Hu $INSTALL_USER ln -vs $CONF_DIR/datadog.conf "$USER_HOME/.datadog-agent/datadog.conf" - sudo -Hu $INSTALL_USER ln -vs $CONF_DIR/checks.d "$USER_HOME/.datadog-agent/checks.d" - - # Error if app not properly installed or root - if [ "$INSTALL_USER" == "root" ]; then - echo 'INSTALL_USER is set to root, Datadog Agent app has been installed' - echo 'but is not configured. Running Datadog Agent as root is not advised!' - exit 1 - fi - - if [ ! -e "$CONF_DIR/datadog.conf" ]; then - exit 1 - fi - - # Start the app only if it's not a script install - if [ -z "$SCRIPT_INSTALL" ]; then - echo "# Starting the app" - # -a for application, -F for fresh, do not restore old app - export TMPDIR=`sudo -u $INSTALL_USER getconf DARWIN_USER_TEMP_DIR` - sudo -u $INSTALL_USER open -Fa 'Datadog Agent' - fi - - echo "# Configuring the login launch of the app" - sudo -u $INSTALL_USER osascript -e 'tell application "System Events" to delete every login item whose name is "Datadog Agent"' - sudo -u $INSTALL_USER osascript -e 'tell application "System Events" to make login item at end with properties {path:"/Applications/Datadog Agent.app", name:"Datadog Agent", hidden:false}' - - # A little debriefing won't hurt - echo "# State at the end" - echo "## AGent version" - grep AGENT_VERSION $INSTALL_DIR/agent/config.py || echo "No config file" - echo "## $INSTALL_DIR" - ls -al $INSTALL_DIR || echo "No agent installed :(" - echo "## $APP_DIR/Contents/Resources" - ls -al "$APP_DIR/Contents/Resources" || echo "No app installed ;-(" -fi - -exit 0 diff --git a/omnibus/package-scripts/datadog-agent/postrm b/omnibus/package-scripts/datadog-agent/postrm deleted file mode 100755 index aa2ffe4fec18..000000000000 --- a/omnibus/package-scripts/datadog-agent/postrm +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -LINUX_DISTRIBUTION=$(grep -Eo "(Debian|Ubuntu|RedHat|CentOS|openSUSE|Amazon)" /etc/issue) - -if [ -f "/etc/debian_version" ] || [ "$LINUX_DISTRIBUTION" == "Debian" ] || [ "$LINUX_DISTRIBUTION" == "Ubuntu" ]; then - set -e - - if [ "$1" = purge ]; then - deluser dd-agent - rm -rf /opt/datadog-agent - rm -rf /var/log/datadog - rm -rf /etc/dd-agent - rm -rf /var/log/datadog - fi -elif [ -f "/etc/redhat-release" ] || [ "$LINUX_DISTRIBUTION" == "RedHat" ] || [ "$LINUX_DISTRIBUTION" == "CentOS" ] || [ "$LINUX_DISTRIBUTION" == "openSUSE" ] || [ "$LINUX_DISTRIBUTION" == "Amazon" ]; then - case "$*" in - 0) - # We're uninstalling. - getent passwd dd-agent > /dev/null && userdel dd-agent - getent group dd-agent >/dev/null && groupdel dd-agent - ;; - 1) - # We're upgrading. - ;; - *) - ;; - esac -else - echo "[ ${Red}FAILED ${RCol}]\tYour system is currently not supported by this script."; - exit 1; -fi -exit 0 diff --git a/omnibus/package-scripts/datadog-agent/posttrans b/omnibus/package-scripts/datadog-agent/posttrans deleted file mode 100755 index 55cbf0840ee0..000000000000 --- a/omnibus/package-scripts/datadog-agent/posttrans +++ /dev/null @@ -1,6 +0,0 @@ -getent group dd-agent >/dev/null || groupadd -r dd-agent -getent passwd dd-agent >/dev/null || \ - useradd -r -M -g dd-agent -d /usr/share/datadog/agent -s /bin/sh \ - -c "Datadog Agent" dd-agent -/etc/init.d/datadog-agent restart -exit 0 diff --git a/omnibus/package-scripts/datadog-agent/preinst b/omnibus/package-scripts/datadog-agent/preinst deleted file mode 100755 index 35fdf004965e..000000000000 --- a/omnibus/package-scripts/datadog-agent/preinst +++ /dev/null @@ -1,110 +0,0 @@ -#! /bin/sh - -INSTALL_DIR=/opt/datadog-agent -LOG_DIR=/var/log/datadog -mkdir -p $LOG_DIR - -DISTRIBUTION=$(grep -Eo "(Debian|Ubuntu|RedHat|CentOS|openSUSE|Amazon)" /etc/issue 2>/dev/null || uname -s) - -# Linux installation -if [ "$DISTRIBUTION" != "Darwin" ]; then - if [ -f "/etc/debian_version" ] || [ "$DISTRIBUTION" == "Debian" ] || [ "$DISTRIBUTION" == "Ubuntu" ]; then - set -e - if [ -f "/etc/init.d/datadog-agent" ]; then - if command -v invoke-rc.d >/dev/null 2>&1; then - invoke-rc.d datadog-agent stop || true - else - /etc/init.d/datadog-agent stop || true - fi - fi - - # Since we now package our own supervisor config, we no longer want - # the old config to be loaded. Since supervisor automatically loads - # configs in conf.d, we have to delete the old config file. - if [ -f "/etc/supervisor/conf.d/ddagent.conf" ]; then - echo "Removing old configuration from system supervisord" - rm /etc/supervisor/conf.d/ddagent.conf - fi - - # Previous versions of dd-agent created this file but didn't do - # anything with it. - if [ -f "/etc/dd-agent/supervisor_ddagent.conf" ]; then - rm /etc/dd-agent/supervisor_ddagent.conf - fi - - #DEBHELPER# - - elif [ -f "/etc/redhat-release" ] || [ -f "/etc/system-release" ] || [ "$DISTRIBUTION" == "RedHat" ] || [ "$DISTRIBUTION" == "CentOS" ] || [ "$DISTRIBUTION" == "openSUSE" ] || [ "$DISTRIBUTION" == "Amazon" ]; then - getent group dd-agent >/dev/null || groupadd -r dd-agent - getent passwd dd-agent >/dev/null || \ - useradd -r -M -g dd-agent -d $INSTALL_DIR -s /bin/sh \ - -c "Datadog Agent" dd-agent - # Stop the old agent before installing - if [ -f "/etc/init.d/datadog-agent" ]; then - /etc/init.d/datadog-agent stop || true - fi - else - echo "[ ${Red}FAILED ${RCol}]\tYour system is currently not supported by this script."; - exit 1; - fi - - # Delete .pyc files - # FIXME: it shouldn't be done there, but only in prerm (see 6.6 - # of https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html) - # It is also here because version < 5.4 didn't delete .pyc, - # so we need to be sure to clean them here (if a file is deleted for instance) - find $INSTALL_DIR/agent -name '*.py[co]' -type f -delete || true - - # FIXME: remove when CentOS5 support is dropped (03/31/2017) or when everybody - # has stopped using dd-agent 5.3 (and older versions ofc) - rm -f $INSTALL_DIR/agent/checks/utils.py - -elif [ "$DISTRIBUTION" = "Darwin" ]; then - DD_COMMAND="$INSTALL_DIR/bin/datadog-agent" - CONF_DIR="$INSTALL_DIR/etc" - APP_DIR="/Applications/Datadog Agent.app" - - LOG_FILE="$LOG_DIR/preinstall.log" - exec > $LOG_FILE 2>&1 - - if [ -e "$CONF_DIR/datadog.conf" ]; then - echo "# State at the beginning" - echo "## Agent version" - grep AGENT_VERSION $INSTALL_DIR/agent/config.py || echo "No config file" - echo "## $INSTALL_DIR" - ls -al $INSTALL_DIR || echo "No agent installed" - echo "## $APP_DIR/Contents/Resources" - ls -al "$APP_DIR/Contents/Resources" || echo "No app installed" - - echo '# Stop old agent' - $DD_COMMAND stop || true - kill `ps aux | grep 'Datadog Agent.app' | grep -v grep | cut -d ' ' -f 4` || true - - echo '# Stop old GUI'okill `ps aux | grep 'Datadog Agent.app' | grep -v grep | awk '{ print $2 }'` || true - - # Save old conf - mkdir -vp /tmp/{conf,checks}.d - rm -rvf /tmp/{checks,conf}.d/* /tmp/datadog.conf - cp -vf $CONF_DIR/datadog.conf /tmp - cp -vf $CONF_DIR/conf.d/*.yaml /tmp/conf.d - cp -vfR $CONF_DIR/checks.d/* /tmp/checks.d - fi - - echo '# Deleting old datadog-agent link' - rm -vf /usr/local/bin/datadog-agent - - echo '# Deleting old datadog-agent files' - rm -rf $INSTALL_DIR/agent || true - - # Debriefing time - echo "# State at the end" - echo "## Agent version" - grep AGENT_VERSION $INSTALL_DIR/agent/config.py || echo "No config file" - echo "## $INSTALL_DIR" - ls -al $INSTALL_DIR || echo "No agent installed" - echo "## $APP_DIR/Contents/Resources" - ls -al "$APP_DIR/Contents/Resources" || echo "No app installed" -fi - - -exit 0 diff --git a/omnibus/package-scripts/datadog-agent/prerm b/omnibus/package-scripts/datadog-agent/prerm deleted file mode 100755 index e4687c3103a8..000000000000 --- a/omnibus/package-scripts/datadog-agent/prerm +++ /dev/null @@ -1,35 +0,0 @@ -#! /bin/sh -LINUX_DISTRIBUTION=$(grep -Eo "(Debian|Ubuntu|RedHat|CentOS|openSUSE|Amazon)" /etc/issue) - -if [ -f "/etc/debian_version" ] || [ "$LINUX_DISTRIBUTION" == "Debian" ] || [ "$LINUX_DISTRIBUTION" == "Ubuntu" ]; then - if command -v invoke-rc.d >/dev/null 2>&1; then - invoke-rc.d datadog-agent stop || true - - # Removing the service form startup (since it's not there anymore) - update-rc.d -f datadog-agent disable >/dev/null 2>&1 - update-rc.d -f datadog-agent remove - else - /etc/init.d/datadog-agent stop || true - fi -elif [ -f "/etc/redhat-release" ] || [ "$LINUX_DISTRIBUTION" == "RedHat" ] || [ "$LINUX_DISTRIBUTION" == "CentOS" ] || [ "$LINUX_DISTRIBUTION" == "openSUSE" ] || [ "$LINUX_DISTRIBUTION" == "Amazon" ]; then - case "$*" in - 0) - # We're uninstalling. - /etc/init.d/datadog-agent stop - ;; - 1) - # We're upgrading. Do nothing. - ;; - *) - ;; - esac -else - echo "[ ${Red}FAILED ${RCol}]\tYour system is currently not supported by this script."; - exit 1; -fi - -# Delete all.pyc files -find /opt/datadog-agent/agent -name '*.py[co]' -type f -delete || echo 'Unable to delete .pyc files' - -exit 0 - diff --git a/omnibus/resources/datadog-agent/dmg/background.png b/omnibus/resources/datadog-agent/dmg/background.png deleted file mode 100644 index 5f67c9e6a4d962ad6e6184ccc89d6cdcdca329cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210167 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Î>s5X}Y+CW1TN@Ce>uaSvMO!Y0~Z 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 z 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 uA~!k=i#`A{+GQKF diff --git a/omnibus/resources/datadog-agent/dmg/icon.png b/omnibus/resources/datadog-agent/dmg/icon.png deleted file mode 100644 index de0c34718ece149e119e7ebdb9ff9d215ea4ad99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563984 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
    l_wnH=gjh^96j~e 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

    0O%ynu>oMUODPUUxpRi2^$9pTZ@ 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%0D`t5n;oR#ZM)uR`;p#aQ}M&2(W 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

    DLwZ>WF}RGK>$(U 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

    T3S_+ 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 z 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 sqx-L?rK9_Ayr84||2(kPD(s~D>bXO^ -Copyright (c) 2010-2015, Datadog -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of Boxed Ice nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - * Neither the name of Datadog nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/omnibus/resources/datadog-agent/pkg/welcome.html.erb b/omnibus/resources/datadog-agent/pkg/welcome.html.erb deleted file mode 100644 index c45028d369cd..000000000000 --- a/omnibus/resources/datadog-agent/pkg/welcome.html.erb +++ /dev/null @@ -1,4 +0,0 @@ -The installer will help you install <%= friendly_name %> on your Mac. - --------------------------------------------------- -You will be guided through the steps necessary to install this software. diff --git a/omnibus/rpm-sign b/omnibus/rpm-sign deleted file mode 100755 index 227d36aa3fd5..000000000000 --- a/omnibus/rpm-sign +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/expect -f -# -# rpmsign-batch.expect : expect powered rpm signing command -# - -proc usage {} { - send_user "Usage: rpm-sign gpgname passphrase rpmfile\n\n" - exit -} - -if {[llength $argv]!=3} usage - -set gpgname [lindex $argv 0] -set passphrase [lindex $argv 1] -set rpmfile [lindex $argv 2] - -spawn rpm --addsign -D "\"_signature gpg\"" -D "\"_gpg_name $gpgname\"" $rpmfile -expect -exact "Enter pass phrase: " -send -- "$passphrase\r" -expect eof \ No newline at end of file diff --git a/checks/common.go b/pkg/checks/common.go similarity index 100% rename from checks/common.go rename to pkg/checks/common.go diff --git a/checks/common_test.go b/pkg/checks/common_test.go similarity index 100% rename from checks/common_test.go rename to pkg/checks/common_test.go diff --git a/checks/system/memory.go b/pkg/checks/system/memory.go similarity index 100% rename from checks/system/memory.go rename to pkg/checks/system/memory.go diff --git a/py/check.go b/pkg/py/check.go similarity index 98% rename from py/check.go rename to pkg/py/check.go index c514dce4728c..35149433769e 100644 --- a/py/check.go +++ b/pkg/py/check.go @@ -4,7 +4,7 @@ import ( "errors" "runtime" - "github.com/DataDog/datadog-agent/checks" + "github.com/DataDog/datadog-agent/pkg/checks" "github.com/op/go-logging" "github.com/sbinet/go-python" ) diff --git a/py/check_test.go b/pkg/py/check_test.go similarity index 100% rename from py/check_test.go rename to pkg/py/check_test.go diff --git a/py/checks/__init__.py b/pkg/py/checks/__init__.py similarity index 100% rename from py/checks/__init__.py rename to pkg/py/checks/__init__.py diff --git a/py/checks/activemq_xml.py b/pkg/py/checks/activemq_xml.py similarity index 100% rename from py/checks/activemq_xml.py rename to pkg/py/checks/activemq_xml.py diff --git a/py/checks/agent_metrics.py b/pkg/py/checks/agent_metrics.py similarity index 100% rename from py/checks/agent_metrics.py rename to pkg/py/checks/agent_metrics.py diff --git a/py/checks/apache.py b/pkg/py/checks/apache.py similarity index 100% rename from py/checks/apache.py rename to pkg/py/checks/apache.py diff --git a/py/checks/btrfs.py b/pkg/py/checks/btrfs.py similarity index 100% rename from py/checks/btrfs.py rename to pkg/py/checks/btrfs.py diff --git a/py/checks/cacti.py b/pkg/py/checks/cacti.py similarity index 100% rename from py/checks/cacti.py rename to pkg/py/checks/cacti.py diff --git a/py/checks/consul.py b/pkg/py/checks/consul.py similarity index 100% rename from py/checks/consul.py rename to pkg/py/checks/consul.py diff --git a/py/checks/couch.py b/pkg/py/checks/couch.py similarity index 100% rename from py/checks/couch.py rename to pkg/py/checks/couch.py diff --git a/py/checks/couchbase.py b/pkg/py/checks/couchbase.py similarity index 100% rename from py/checks/couchbase.py rename to pkg/py/checks/couchbase.py diff --git a/py/checks/directory.py b/pkg/py/checks/directory.py similarity index 100% rename from py/checks/directory.py rename to pkg/py/checks/directory.py diff --git a/py/checks/disk.py b/pkg/py/checks/disk.py similarity index 100% rename from py/checks/disk.py rename to pkg/py/checks/disk.py diff --git a/py/checks/docker.py b/pkg/py/checks/docker.py similarity index 100% rename from py/checks/docker.py rename to pkg/py/checks/docker.py diff --git a/py/checks/docker_daemon.py b/pkg/py/checks/docker_daemon.py similarity index 100% rename from py/checks/docker_daemon.py rename to pkg/py/checks/docker_daemon.py diff --git a/py/checks/elastic.py b/pkg/py/checks/elastic.py similarity index 100% rename from py/checks/elastic.py rename to pkg/py/checks/elastic.py diff --git a/py/checks/etcd.py b/pkg/py/checks/etcd.py similarity index 100% rename from py/checks/etcd.py rename to pkg/py/checks/etcd.py diff --git a/py/checks/fluentd.py b/pkg/py/checks/fluentd.py similarity index 100% rename from py/checks/fluentd.py rename to pkg/py/checks/fluentd.py diff --git a/py/checks/gearmand.py b/pkg/py/checks/gearmand.py similarity index 100% rename from py/checks/gearmand.py rename to pkg/py/checks/gearmand.py diff --git a/py/checks/go_expvar.py b/pkg/py/checks/go_expvar.py similarity index 100% rename from py/checks/go_expvar.py rename to pkg/py/checks/go_expvar.py diff --git a/py/checks/gunicorn.py b/pkg/py/checks/gunicorn.py similarity index 100% rename from py/checks/gunicorn.py rename to pkg/py/checks/gunicorn.py diff --git a/py/checks/haproxy.py b/pkg/py/checks/haproxy.py similarity index 100% rename from py/checks/haproxy.py rename to pkg/py/checks/haproxy.py diff --git a/py/checks/hdfs.py b/pkg/py/checks/hdfs.py similarity index 100% rename from py/checks/hdfs.py rename to pkg/py/checks/hdfs.py diff --git a/py/checks/http_check.py b/pkg/py/checks/http_check.py similarity index 100% rename from py/checks/http_check.py rename to pkg/py/checks/http_check.py diff --git a/py/checks/iis.py b/pkg/py/checks/iis.py similarity index 100% rename from py/checks/iis.py rename to pkg/py/checks/iis.py diff --git a/py/checks/jenkins.py b/pkg/py/checks/jenkins.py similarity index 100% rename from py/checks/jenkins.py rename to pkg/py/checks/jenkins.py diff --git a/py/checks/kafka_consumer.py b/pkg/py/checks/kafka_consumer.py similarity index 100% rename from py/checks/kafka_consumer.py rename to pkg/py/checks/kafka_consumer.py diff --git a/py/checks/kubernetes.py b/pkg/py/checks/kubernetes.py similarity index 100% rename from py/checks/kubernetes.py rename to pkg/py/checks/kubernetes.py diff --git a/py/checks/kyototycoon.py b/pkg/py/checks/kyototycoon.py similarity index 100% rename from py/checks/kyototycoon.py rename to pkg/py/checks/kyototycoon.py diff --git a/py/checks/lighttpd.py b/pkg/py/checks/lighttpd.py similarity index 100% rename from py/checks/lighttpd.py rename to pkg/py/checks/lighttpd.py diff --git a/py/checks/marathon.py b/pkg/py/checks/marathon.py similarity index 100% rename from py/checks/marathon.py rename to pkg/py/checks/marathon.py diff --git a/py/checks/mcache.py b/pkg/py/checks/mcache.py similarity index 100% rename from py/checks/mcache.py rename to pkg/py/checks/mcache.py diff --git a/py/checks/mesos.py b/pkg/py/checks/mesos.py similarity index 100% rename from py/checks/mesos.py rename to pkg/py/checks/mesos.py diff --git a/py/checks/mesos_master.py b/pkg/py/checks/mesos_master.py similarity index 100% rename from py/checks/mesos_master.py rename to pkg/py/checks/mesos_master.py diff --git a/py/checks/mesos_slave.py b/pkg/py/checks/mesos_slave.py similarity index 100% rename from py/checks/mesos_slave.py rename to pkg/py/checks/mesos_slave.py diff --git a/py/checks/mongo.py b/pkg/py/checks/mongo.py similarity index 100% rename from py/checks/mongo.py rename to pkg/py/checks/mongo.py diff --git a/py/checks/mysql.py b/pkg/py/checks/mysql.py similarity index 100% rename from py/checks/mysql.py rename to pkg/py/checks/mysql.py diff --git a/py/checks/nagios.py b/pkg/py/checks/nagios.py similarity index 100% rename from py/checks/nagios.py rename to pkg/py/checks/nagios.py diff --git a/py/checks/network.py b/pkg/py/checks/network.py similarity index 100% rename from py/checks/network.py rename to pkg/py/checks/network.py diff --git a/py/checks/nginx.py b/pkg/py/checks/nginx.py similarity index 100% rename from py/checks/nginx.py rename to pkg/py/checks/nginx.py diff --git a/py/checks/ntp.py b/pkg/py/checks/ntp.py similarity index 100% rename from py/checks/ntp.py rename to pkg/py/checks/ntp.py diff --git a/py/checks/openstack.py b/pkg/py/checks/openstack.py similarity index 100% rename from py/checks/openstack.py rename to pkg/py/checks/openstack.py diff --git a/py/checks/pgbouncer.py b/pkg/py/checks/pgbouncer.py similarity index 100% rename from py/checks/pgbouncer.py rename to pkg/py/checks/pgbouncer.py diff --git a/py/checks/php_fpm.py b/pkg/py/checks/php_fpm.py similarity index 100% rename from py/checks/php_fpm.py rename to pkg/py/checks/php_fpm.py diff --git a/py/checks/postfix.py b/pkg/py/checks/postfix.py similarity index 100% rename from py/checks/postfix.py rename to pkg/py/checks/postfix.py diff --git a/py/checks/postgres.py b/pkg/py/checks/postgres.py similarity index 100% rename from py/checks/postgres.py rename to pkg/py/checks/postgres.py diff --git a/py/checks/process.py b/pkg/py/checks/process.py similarity index 100% rename from py/checks/process.py rename to pkg/py/checks/process.py diff --git a/py/checks/rabbitmq.py b/pkg/py/checks/rabbitmq.py similarity index 100% rename from py/checks/rabbitmq.py rename to pkg/py/checks/rabbitmq.py diff --git a/py/checks/redisdb.py b/pkg/py/checks/redisdb.py similarity index 100% rename from py/checks/redisdb.py rename to pkg/py/checks/redisdb.py diff --git a/py/checks/riak.py b/pkg/py/checks/riak.py similarity index 100% rename from py/checks/riak.py rename to pkg/py/checks/riak.py diff --git a/py/checks/riakcs.py b/pkg/py/checks/riakcs.py similarity index 100% rename from py/checks/riakcs.py rename to pkg/py/checks/riakcs.py diff --git a/py/checks/snmp.py b/pkg/py/checks/snmp.py similarity index 100% rename from py/checks/snmp.py rename to pkg/py/checks/snmp.py diff --git a/py/checks/sqlserver.py b/pkg/py/checks/sqlserver.py similarity index 100% rename from py/checks/sqlserver.py rename to pkg/py/checks/sqlserver.py diff --git a/py/checks/ssh_check.py b/pkg/py/checks/ssh_check.py similarity index 100% rename from py/checks/ssh_check.py rename to pkg/py/checks/ssh_check.py diff --git a/py/checks/supervisord.py b/pkg/py/checks/supervisord.py similarity index 100% rename from py/checks/supervisord.py rename to pkg/py/checks/supervisord.py diff --git a/py/checks/system_core.py b/pkg/py/checks/system_core.py similarity index 100% rename from py/checks/system_core.py rename to pkg/py/checks/system_core.py diff --git a/py/checks/system_swap.py b/pkg/py/checks/system_swap.py similarity index 100% rename from py/checks/system_swap.py rename to pkg/py/checks/system_swap.py diff --git a/py/checks/tcp_check.py b/pkg/py/checks/tcp_check.py similarity index 100% rename from py/checks/tcp_check.py rename to pkg/py/checks/tcp_check.py diff --git a/py/checks/teamcity.py b/pkg/py/checks/teamcity.py similarity index 100% rename from py/checks/teamcity.py rename to pkg/py/checks/teamcity.py diff --git a/py/checks/tokumx.py b/pkg/py/checks/tokumx.py similarity index 100% rename from py/checks/tokumx.py rename to pkg/py/checks/tokumx.py diff --git a/py/checks/varnish.py b/pkg/py/checks/varnish.py similarity index 100% rename from py/checks/varnish.py rename to pkg/py/checks/varnish.py diff --git a/py/checks/vsphere.py b/pkg/py/checks/vsphere.py similarity index 100% rename from py/checks/vsphere.py rename to pkg/py/checks/vsphere.py diff --git a/py/checks/win32_event_log.py b/pkg/py/checks/win32_event_log.py similarity index 100% rename from py/checks/win32_event_log.py rename to pkg/py/checks/win32_event_log.py diff --git a/py/checks/windows_service.py b/pkg/py/checks/windows_service.py similarity index 100% rename from py/checks/windows_service.py rename to pkg/py/checks/windows_service.py diff --git a/py/checks/wmi_check.py b/pkg/py/checks/wmi_check.py similarity index 100% rename from py/checks/wmi_check.py rename to pkg/py/checks/wmi_check.py diff --git a/py/checks/zk.py b/pkg/py/checks/zk.py similarity index 100% rename from py/checks/zk.py rename to pkg/py/checks/zk.py diff --git a/py/conf.d/directory.yaml b/pkg/py/conf.d/directory.yaml similarity index 100% rename from py/conf.d/directory.yaml rename to pkg/py/conf.d/directory.yaml diff --git a/py/conf.d/go_expvar.yaml b/pkg/py/conf.d/go_expvar.yaml similarity index 100% rename from py/conf.d/go_expvar.yaml rename to pkg/py/conf.d/go_expvar.yaml diff --git a/py/conf.d/process.yaml b/pkg/py/conf.d/process.yaml similarity index 100% rename from py/conf.d/process.yaml rename to pkg/py/conf.d/process.yaml diff --git a/py/conf.d/system_core.yaml b/pkg/py/conf.d/system_core.yaml similarity index 100% rename from py/conf.d/system_core.yaml rename to pkg/py/conf.d/system_core.yaml diff --git a/py/config.go b/pkg/py/config.go similarity index 100% rename from py/config.go rename to pkg/py/config.go diff --git a/py/config.py b/pkg/py/config.py similarity index 100% rename from py/config.py rename to pkg/py/config.py diff --git a/py/config_test.go b/pkg/py/config_test.go similarity index 100% rename from py/config_test.go rename to pkg/py/config_test.go diff --git a/py/tests/__init__.py b/pkg/py/tests/__init__.py similarity index 100% rename from py/tests/__init__.py rename to pkg/py/tests/__init__.py diff --git a/py/tests/bad.yaml b/pkg/py/tests/bad.yaml similarity index 100% rename from py/tests/bad.yaml rename to pkg/py/tests/bad.yaml diff --git a/py/tests/bar.py b/pkg/py/tests/bar.py similarity index 100% rename from py/tests/bar.py rename to pkg/py/tests/bar.py diff --git a/py/tests/complex.py b/pkg/py/tests/complex.py similarity index 100% rename from py/tests/complex.py rename to pkg/py/tests/complex.py diff --git a/py/tests/complex.yaml b/pkg/py/tests/complex.yaml similarity index 100% rename from py/tests/complex.yaml rename to pkg/py/tests/complex.yaml diff --git a/py/tests/foo.py b/pkg/py/tests/foo.py similarity index 100% rename from py/tests/foo.py rename to pkg/py/tests/foo.py diff --git a/py/tests/testcheck.py b/pkg/py/tests/testcheck.py similarity index 100% rename from py/tests/testcheck.py rename to pkg/py/tests/testcheck.py diff --git a/py/tests/testcheck.yaml b/pkg/py/tests/testcheck.yaml similarity index 100% rename from py/tests/testcheck.yaml rename to pkg/py/tests/testcheck.yaml diff --git a/py/tests/testcheck2.py b/pkg/py/tests/testcheck2.py similarity index 100% rename from py/tests/testcheck2.py rename to pkg/py/tests/testcheck2.py diff --git a/py/util.py b/pkg/py/util.py similarity index 100% rename from py/util.py rename to pkg/py/util.py diff --git a/py/utils.go b/pkg/py/utils.go similarity index 100% rename from py/utils.go rename to pkg/py/utils.go diff --git a/py/utils/__init__.py b/pkg/py/utils/__init__.py similarity index 100% rename from py/utils/__init__.py rename to pkg/py/utils/__init__.py diff --git a/py/utils/debug.py b/pkg/py/utils/debug.py similarity index 100% rename from py/utils/debug.py rename to pkg/py/utils/debug.py diff --git a/py/utils/deprecations.py b/pkg/py/utils/deprecations.py similarity index 100% rename from py/utils/deprecations.py rename to pkg/py/utils/deprecations.py diff --git a/py/utils/dockerutil.py b/pkg/py/utils/dockerutil.py similarity index 100% rename from py/utils/dockerutil.py rename to pkg/py/utils/dockerutil.py diff --git a/py/utils/flare.py b/pkg/py/utils/flare.py similarity index 100% rename from py/utils/flare.py rename to pkg/py/utils/flare.py diff --git a/py/utils/http.py b/pkg/py/utils/http.py similarity index 100% rename from py/utils/http.py rename to pkg/py/utils/http.py diff --git a/py/utils/jmx.py b/pkg/py/utils/jmx.py similarity index 100% rename from py/utils/jmx.py rename to pkg/py/utils/jmx.py diff --git a/py/utils/kubeutil.py b/pkg/py/utils/kubeutil.py similarity index 100% rename from py/utils/kubeutil.py rename to pkg/py/utils/kubeutil.py diff --git a/py/utils/logger.py b/pkg/py/utils/logger.py similarity index 100% rename from py/utils/logger.py rename to pkg/py/utils/logger.py diff --git a/py/utils/ntp.py b/pkg/py/utils/ntp.py similarity index 100% rename from py/utils/ntp.py rename to pkg/py/utils/ntp.py diff --git a/py/utils/pidfile.py b/pkg/py/utils/pidfile.py similarity index 100% rename from py/utils/pidfile.py rename to pkg/py/utils/pidfile.py diff --git a/py/utils/pip-allow-failures.sh b/pkg/py/utils/pip-allow-failures.sh similarity index 100% rename from py/utils/pip-allow-failures.sh rename to pkg/py/utils/pip-allow-failures.sh diff --git a/py/utils/platform.py b/pkg/py/utils/platform.py similarity index 100% rename from py/utils/platform.py rename to pkg/py/utils/platform.py diff --git a/py/utils/process.py b/pkg/py/utils/process.py similarity index 100% rename from py/utils/process.py rename to pkg/py/utils/process.py diff --git a/py/utils/profile.py b/pkg/py/utils/profile.py similarity index 100% rename from py/utils/profile.py rename to pkg/py/utils/profile.py diff --git a/py/utils/proxy.py b/pkg/py/utils/proxy.py similarity index 100% rename from py/utils/proxy.py rename to pkg/py/utils/proxy.py diff --git a/py/utils/shell.py b/pkg/py/utils/shell.py similarity index 100% rename from py/utils/shell.py rename to pkg/py/utils/shell.py diff --git a/py/utils/subprocess_output.py b/pkg/py/utils/subprocess_output.py similarity index 100% rename from py/utils/subprocess_output.py rename to pkg/py/utils/subprocess_output.py diff --git a/py/utils/tailfile.py b/pkg/py/utils/tailfile.py similarity index 100% rename from py/utils/tailfile.py rename to pkg/py/utils/tailfile.py diff --git a/py/utils/timeout.py b/pkg/py/utils/timeout.py similarity index 100% rename from py/utils/timeout.py rename to pkg/py/utils/timeout.py diff --git a/py/utils_test.go b/pkg/py/utils_test.go similarity index 100% rename from py/utils_test.go rename to pkg/py/utils_test.go diff --git a/runtests.sh b/runtests.sh index a4b62237da2e..cd1c45aa5407 100755 --- a/runtests.sh +++ b/runtests.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh -e # Code based on https://github.com/hailiang/gosweep set -e From 8fea6ccb766f42d9386e6b6263af604c32dac7ce Mon Sep 17 00:00:00 2001 From: Massimiliano Pippi Date: Thu, 9 Jun 2016 16:42:17 -0400 Subject: [PATCH 2/7] updated deps --- glide.yaml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/glide.yaml b/glide.yaml index e085a254ab95..ed3a66c25f40 100644 --- a/glide.yaml +++ b/glide.yaml @@ -1,10 +1,12 @@ package: github.com/DataDog/datadog-agent -homepage: https://github.com/DataDog/datadog-agent -license: MIT import: -- package: github.com/sbinet/go-python +- package: github.com/DataDog/datadog-go + subpackages: + - statsd +- package: github.com/mitchellh/reflectwalk - package: github.com/op/go-logging +- package: github.com/sbinet/go-python - package: github.com/shirou/gopsutil subpackages: - - /mem + - mem - package: gopkg.in/yaml.v2 From 316e9cfe4e01327434abd9068fcdb740507849c6 Mon Sep 17 00:00:00 2001 From: Massimiliano Pippi Date: Thu, 9 Jun 2016 17:41:32 -0400 Subject: [PATCH 3/7] remove unused modules --- cmd/agent/app/main.go | 2 +- pkg/py/checks/activemq_xml.py | 156 ------ pkg/py/checks/agent_metrics.py | 151 ------ pkg/py/checks/apache.py | 99 ---- pkg/py/checks/btrfs.py | 140 ----- pkg/py/checks/cacti.py | 239 --------- pkg/py/checks/consul.py | 320 ------------ pkg/py/checks/couch.py | 130 ----- pkg/py/checks/couchbase.py | 238 --------- pkg/py/checks/directory.py | 93 ---- pkg/py/checks/disk.py | 249 --------- pkg/py/checks/docker.py | 471 ----------------- pkg/py/checks/docker_daemon.py | 722 -------------------------- pkg/py/checks/elastic.py | 537 ------------------- pkg/py/checks/etcd.py | 178 ------- pkg/py/checks/fluentd.py | 61 --- pkg/py/checks/gearmand.py | 75 --- pkg/py/checks/gunicorn.py | 123 ----- pkg/py/checks/haproxy.py | 438 ---------------- pkg/py/checks/hdfs.py | 91 ---- pkg/py/checks/http_check.py | 415 --------------- pkg/py/checks/iis.py | 114 ---- pkg/py/checks/jenkins.py | 182 ------- pkg/py/checks/kafka_consumer.py | 124 ----- pkg/py/checks/kubernetes.py | 249 --------- pkg/py/checks/kyototycoon.py | 115 ----- pkg/py/checks/lighttpd.py | 159 ------ pkg/py/checks/marathon.py | 81 --- pkg/py/checks/mcache.py | 201 -------- pkg/py/checks/mesos.py | 127 ----- pkg/py/checks/mesos_master.py | 233 --------- pkg/py/checks/mesos_slave.py | 187 ------- pkg/py/checks/mongo.py | 450 ---------------- pkg/py/checks/mysql.py | 396 -------------- pkg/py/checks/nagios.py | 395 -------------- pkg/py/checks/network.py | 493 ------------------ pkg/py/checks/nginx.py | 178 ------- pkg/py/checks/ntp.py | 50 -- pkg/py/checks/openstack.py | 860 ------------------------------- pkg/py/checks/pgbouncer.py | 180 ------- pkg/py/checks/php_fpm.py | 119 ----- pkg/py/checks/postfix.py | 69 --- pkg/py/checks/postgres.py | 644 ----------------------- pkg/py/checks/rabbitmq.py | 328 ------------ pkg/py/checks/redisdb.py | 338 ------------ pkg/py/checks/riak.py | 94 ---- pkg/py/checks/riakcs.py | 109 ---- pkg/py/checks/snmp.py | 424 --------------- pkg/py/checks/sqlserver.py | 441 ---------------- pkg/py/checks/ssh_check.py | 101 ---- pkg/py/checks/supervisord.py | 187 ------- pkg/py/checks/system_core.py | 20 - pkg/py/checks/system_swap.py | 13 - pkg/py/checks/tcp_check.py | 171 ------ pkg/py/checks/teamcity.py | 135 ----- pkg/py/checks/tokumx.py | 473 ----------------- pkg/py/checks/varnish.py | 243 --------- pkg/py/checks/vsphere.py | 839 ------------------------------ pkg/py/checks/win32_event_log.py | 229 -------- pkg/py/checks/windows_service.py | 67 --- pkg/py/checks/wmi_check.py | 285 ---------- pkg/py/checks/zk.py | 213 -------- pkg/py/conf.d/directory.yaml | 28 - pkg/py/conf.d/system_core.yaml | 6 - 64 files changed, 1 insertion(+), 15277 deletions(-) delete mode 100644 pkg/py/checks/activemq_xml.py delete mode 100644 pkg/py/checks/agent_metrics.py delete mode 100644 pkg/py/checks/apache.py delete mode 100644 pkg/py/checks/btrfs.py delete mode 100644 pkg/py/checks/cacti.py delete mode 100644 pkg/py/checks/consul.py delete mode 100644 pkg/py/checks/couch.py delete mode 100644 pkg/py/checks/couchbase.py delete mode 100644 pkg/py/checks/directory.py delete mode 100644 pkg/py/checks/disk.py delete mode 100644 pkg/py/checks/docker.py delete mode 100644 pkg/py/checks/docker_daemon.py delete mode 100644 pkg/py/checks/elastic.py delete mode 100644 pkg/py/checks/etcd.py delete mode 100644 pkg/py/checks/fluentd.py delete mode 100644 pkg/py/checks/gearmand.py delete mode 100644 pkg/py/checks/gunicorn.py delete mode 100644 pkg/py/checks/haproxy.py delete mode 100644 pkg/py/checks/hdfs.py delete mode 100644 pkg/py/checks/http_check.py delete mode 100644 pkg/py/checks/iis.py delete mode 100644 pkg/py/checks/jenkins.py delete mode 100644 pkg/py/checks/kafka_consumer.py delete mode 100644 pkg/py/checks/kubernetes.py delete mode 100644 pkg/py/checks/kyototycoon.py delete mode 100644 pkg/py/checks/lighttpd.py delete mode 100644 pkg/py/checks/marathon.py delete mode 100644 pkg/py/checks/mcache.py delete mode 100644 pkg/py/checks/mesos.py delete mode 100644 pkg/py/checks/mesos_master.py delete mode 100644 pkg/py/checks/mesos_slave.py delete mode 100644 pkg/py/checks/mongo.py delete mode 100644 pkg/py/checks/mysql.py delete mode 100644 pkg/py/checks/nagios.py delete mode 100644 pkg/py/checks/network.py delete mode 100644 pkg/py/checks/nginx.py delete mode 100644 pkg/py/checks/ntp.py delete mode 100644 pkg/py/checks/openstack.py delete mode 100644 pkg/py/checks/pgbouncer.py delete mode 100644 pkg/py/checks/php_fpm.py delete mode 100644 pkg/py/checks/postfix.py delete mode 100644 pkg/py/checks/postgres.py delete mode 100644 pkg/py/checks/rabbitmq.py delete mode 100644 pkg/py/checks/redisdb.py delete mode 100644 pkg/py/checks/riak.py delete mode 100644 pkg/py/checks/riakcs.py delete mode 100644 pkg/py/checks/snmp.py delete mode 100644 pkg/py/checks/sqlserver.py delete mode 100644 pkg/py/checks/ssh_check.py delete mode 100644 pkg/py/checks/supervisord.py delete mode 100644 pkg/py/checks/system_core.py delete mode 100644 pkg/py/checks/system_swap.py delete mode 100644 pkg/py/checks/tcp_check.py delete mode 100644 pkg/py/checks/teamcity.py delete mode 100644 pkg/py/checks/tokumx.py delete mode 100644 pkg/py/checks/varnish.py delete mode 100644 pkg/py/checks/vsphere.py delete mode 100644 pkg/py/checks/win32_event_log.py delete mode 100644 pkg/py/checks/windows_service.py delete mode 100644 pkg/py/checks/wmi_check.py delete mode 100644 pkg/py/checks/zk.py delete mode 100644 pkg/py/conf.d/directory.yaml delete mode 100644 pkg/py/conf.d/system_core.yaml diff --git a/cmd/agent/app/main.go b/cmd/agent/app/main.go index f84073c3f78c..d037a10f4e77 100644 --- a/cmd/agent/app/main.go +++ b/cmd/agent/app/main.go @@ -57,7 +57,7 @@ func Start() { go checks.Runner(pending) // Get a list of Python checks we want to run - checksNames := []string{"checks.directory", "checks.go_expvar", "checks.process"} + checksNames := []string{"checks.go_expvar", "checks.process"} // Search for and import all the desired Python checks checks := py.CollectChecks(checksNames, confdPath) diff --git a/pkg/py/checks/activemq_xml.py b/pkg/py/checks/activemq_xml.py deleted file mode 100644 index f583d4d2dc0f..000000000000 --- a/pkg/py/checks/activemq_xml.py +++ /dev/null @@ -1,156 +0,0 @@ -# stdlib -from xml.etree import ElementTree - -# third party -import requests - -# project -from checks import AgentCheck - -QUEUE_URL = "/admin/xml/queues.jsp" -TOPIC_URL = "/admin/xml/topics.jsp" -SUBSCRIBER_URL = "/admin/xml/subscribers.jsp" - -TOPIC_QUEUE_METRICS = { - "consumerCount": "consumer_count", - "dequeueCount": "dequeue_count", - "enqueueCount": "enqueue_count", - "size": "size" -} - -SUBSCRIBER_TAGS = [ - "connectionId", - "subscriptionName", - "destinationName", - "selector", - "active", -] - -MAX_ELEMENTS = 300 - - -class ActiveMQXML(AgentCheck): - - def check(self, instance): - url = instance.get("url") - username = instance.get("username") - password = instance.get("password") - custom_tags = instance.get('tags', []) - max_queues = int(instance.get("max_queues", MAX_ELEMENTS)) - max_topics = int(instance.get("max_topics", MAX_ELEMENTS)) - max_subscribers = int(instance.get("max_subscribers", MAX_ELEMENTS)) - detailed_queues = instance.get("detailed_queues", []) - detailed_topics = instance.get("detailed_topics", []) - detailed_subscribers = instance.get("detailed_subscribers", []) - - tags = custom_tags + ["url:{0}".format(url)] - - self.log.debug("Processing ActiveMQ data for %s" % url) - data = self._fetch_data(url, QUEUE_URL, username, password) - self._process_data(data, "queue", tags, max_queues, detailed_queues) - - data = self._fetch_data(url, TOPIC_URL, username, password) - self._process_data(data, "topic", tags, max_topics, detailed_topics) - - data = self._fetch_data(url, SUBSCRIBER_URL, username, password) - self._process_subscriber_data(data, tags, max_subscribers, detailed_subscribers) - - def _fetch_data(self, base_url, xml_url, username, password): - auth = None - if username and password: - auth = (username, password) - url = "%s%s" % (base_url, xml_url) - self.log.debug("ActiveMQ Fetching queue data from: %s" % url) - r = requests.get(url, auth=auth) - r.raise_for_status() - return r.text - - def _process_data(self, data, el_type, tags, max_elements, detailed_elements): - root = ElementTree.fromstring(data) - # if list provided in config, only send those metrics - if detailed_elements: - elements = [e for e in root.findall(el_type) if e.get('name') in detailed_elements] - else: - elements = [e for e in root.findall(el_type) if e.get('name')] - count = len(elements) - - if count > max_elements: - if not detailed_elements: - self.warning("Number of {0} is too high ({1} > {2}). " - "Please use the detailed_{0}s parameter" - " to list the {0} you want to monitor.".format(el_type, - count, - max_elements)) - - for el in elements[:max_elements]: - name = el.get("name") - stats = el.find("stats") - if stats is None: - continue - - el_tags = tags + ["{0}:{1}".format(el_type, name)] - for attr_name, alias in TOPIC_QUEUE_METRICS.iteritems(): - metric_name = "activemq.{0}.{1}".format(el_type, alias) - value = stats.get(attr_name, 0) - self.gauge(metric_name, value, tags=el_tags) - - self.log.debug("ActiveMQ {0} count: {1}".format(el_type, count)) - self.gauge("activemq.{0}.count".format(el_type), count, tags=tags) - - def _process_subscriber_data(self, data, tags, max_subscribers, detailed_subscribers): - root = ElementTree.fromstring(data) - # if subscribers list provided in config, only send those metrics - if detailed_subscribers: - subscribers = [s for s in root.findall("subscriber") if s.get("clientId") in detailed_subscribers] - else: - subscribers = [s for s in root.findall("subscriber") if s.get("clientId")] - - count = len(subscribers) - if count > max_subscribers: - if not detailed_subscribers: - self.warning("Number of subscribers is too high ({0} > {1})." - "Please use the detailed_subscribers parameter " - "to list the {0} you want to monitor.".format(count, - max_subscribers)) - - for subscriber in subscribers[:max_subscribers]: - clientId = subscriber.get("clientId") - if not clientId: - continue - subscribers.append(clientId) - stats = subscriber.find("stats") - if stats is None: - continue - - el_tags = tags + ["clientId:{0}".format(clientId)] - - for name in SUBSCRIBER_TAGS: - value = subscriber.get(name) - if value is not None: - el_tags.append("%s:%s" % (name, value)) - - pending_queue_size = stats.get("pendingQueueSize", 0) - dequeue_counter = stats.get("dequeueCounter", 0) - enqueue_counter = stats.get("enqueueCounter", 0) - dispatched_queue_size = stats.get("dispatchedQueueSize", 0) - dispatched_counter = stats.get("dispatchedCounter", 0) - - self.log.debug( - "ActiveMQ Subscriber %s: %s %s %s %s %s" % ( - clientId, pending_queue_size, dequeue_counter, - enqueue_counter, dispatched_queue_size, dispatched_counter - ) - ) - self.gauge("activemq.subscriber.pending_queue_size", - pending_queue_size, tags=el_tags) - self.gauge("activemq.subscriber.dequeue_counter", - dequeue_counter, tags=el_tags) - self.gauge("activemq.subscriber.enqueue_counter", - enqueue_counter, tags=el_tags) - self.gauge("activemq.subscriber.dispatched_queue_size", - dispatched_queue_size, tags=el_tags) - self.gauge("activemq.subscriber.dispatched_counter", - dispatched_counter, tags=el_tags) - - self.log.debug("ActiveMQ Subscriber Count: {0}".format(count)) - self.gauge("activemq.subscriber.count", count, tags=tags) diff --git a/pkg/py/checks/agent_metrics.py b/pkg/py/checks/agent_metrics.py deleted file mode 100644 index ed79bfe1e9f7..000000000000 --- a/pkg/py/checks/agent_metrics.py +++ /dev/null @@ -1,151 +0,0 @@ -# stdlib -import threading - -# 3p -try: - import psutil -except ImportError: - psutil = None - -# project -from checks import AgentCheck -from checks.metric_types import MetricTypes -from config import _is_affirmative - -MAX_THREADS_COUNT = 50 -MAX_COLLECTION_TIME = 30 -MAX_EMIT_TIME = 5 -MAX_CPU_PCT = 10 - - -class UnsupportedMetricType(Exception): - """ - Raised by :class:`AgentMetrics` when a metric type outside outside of AgentMetrics.ALLOWED_METRIC_TYPES - is requested for measurement of a particular statistic - """ - def __init__(self, metric_name, metric_type): - message = 'Unsupported Metric Type for {0} : {1}'.format(metric_name, metric_type) - Exception.__init__(self, message) - -class AgentMetrics(AgentCheck): - """ - New-style version of `CollectorMetrics` - Gets information about agent performance on every collector loop - """ - - def __init__(self, *args, **kwargs): - AgentCheck.__init__(self, *args, **kwargs) - self._collector_payload = {} - self._metric_context = {} - - def _psutil_config_to_stats(self, instance): - """ - Reads `init_config` for `psutil` methods to call on the current process - Calls those methods and stores the raw output - - :returns a dictionary of statistic_name: value - """ - process_metrics = instance.get('process_metrics', self.init_config.get('process_metrics', None)) - if not process_metrics: - self.log.error('No metrics configured for AgentMetrics check!') - return {} - - methods, metric_types = zip( - *[(p['name'], p.get('type', MetricTypes.GAUGE)) - for p in process_metrics if _is_affirmative(p.get('active'))] - ) - - names_to_metric_types = {} - for i, m in enumerate(methods): - names_to_metric_types[AgentCheck._get_statistic_name_from_method(m)] = metric_types[i] - - stats = AgentCheck._collect_internal_stats(methods) - return stats, names_to_metric_types - - def _send_single_metric(self, metric_name, metric_value, metric_type): - if metric_type == MetricTypes.GAUGE: - self.gauge(metric_name, metric_value) - elif metric_type == MetricTypes.RATE: - self.rate(metric_name, metric_value) - else: - raise UnsupportedMetricType(metric_name, metric_type) - - def _register_psutil_metrics(self, stats, names_to_metric_types): - """ - Saves sample metrics from psutil - - :param stats: a dictionary that looks like: - { - 'memory_info': OrderedDict([('rss', 24395776), ('vms', 144666624)]), - 'io_counters': OrderedDict([('read_count', 4536), - ('write_count', 100), - ('read_bytes', 0), - ('write_bytes', 61440)]) - ... - } - - This creates a metric like `datadog.agent.collector.{key_1}.{key_2}` where key_1 is a top-level - key in `stats`, and key_2 is a nested key. - E.g. datadog.agent.collector.memory_info.rss - """ - - base_metric = 'datadog.agent.collector.{0}.{1}' - # TODO: May have to call self.normalize(metric_name) to get a compliant name - for k, v in stats.iteritems(): - metric_type = names_to_metric_types[k] - if isinstance(v, dict): - for _k, _v in v.iteritems(): - full_metric_name = base_metric.format(k, _k) - self._send_single_metric(full_metric_name, _v, metric_type) - else: - full_metric_name = 'datadog.agent.collector.{0}'.format(k) - self._send_single_metric(full_metric_name, v, metric_type) - - def set_metric_context(self, payload, context): - self._collector_payload = payload - self._metric_context = context - - def get_metric_context(self): - return self._collector_payload, self._metric_context - - def check(self, instance): - if self.in_developer_mode: - stats, names_to_metric_types = self._psutil_config_to_stats(instance) - self._register_psutil_metrics(stats, names_to_metric_types) - - payload, context = self.get_metric_context() - collection_time = context.get('collection_time', None) - emit_time = context.get('emit_time', None) - cpu_time = context.get('cpu_time', None) - - if threading.activeCount() > MAX_THREADS_COUNT: - self.gauge('datadog.agent.collector.threads.count', threading.activeCount()) - self.log.info("Thread count is high: %d" % threading.activeCount()) - - collect_time_exceeds_threshold = collection_time > MAX_COLLECTION_TIME - if collection_time is not None and \ - (collect_time_exceeds_threshold or self.in_developer_mode): - - self.gauge('datadog.agent.collector.collection.time', collection_time) - if collect_time_exceeds_threshold: - self.log.info("Collection time (s) is high: %.1f, metrics count: %d, events count: %d", - collection_time, len(payload['metrics']), len(payload['events'])) - - emit_time_exceeds_threshold = emit_time > MAX_EMIT_TIME - if emit_time is not None and \ - (emit_time_exceeds_threshold or self.in_developer_mode): - self.gauge('datadog.agent.emitter.emit.time', emit_time) - if emit_time_exceeds_threshold: - self.log.info("Emit time (s) is high: %.1f, metrics count: %d, events count: %d", - emit_time, len(payload['metrics']), len(payload['events'])) - - if cpu_time is not None: - try: - cpu_used_pct = 100.0 * float(cpu_time)/float(collection_time) - if cpu_used_pct > MAX_CPU_PCT: - self.gauge('datadog.agent.collector.cpu.used', cpu_used_pct) - self.log.info("CPU consumed (%%) is high: %.1f, metrics count: %d, events count: %d", - cpu_used_pct, len(payload['metrics']), len(payload['events'])) - except Exception, e: - self.log.debug("Couldn't compute cpu used by collector with values %s %s %s", - cpu_time, collection_time, str(e)) diff --git a/pkg/py/checks/apache.py b/pkg/py/checks/apache.py deleted file mode 100644 index 26ea7a580ee4..000000000000 --- a/pkg/py/checks/apache.py +++ /dev/null @@ -1,99 +0,0 @@ -# stdlib -import urlparse - -# 3rd party -import requests - -# project -from checks import AgentCheck -from util import headers - - -class Apache(AgentCheck): - """Tracks basic connection/requests/workers metrics - - See http://httpd.apache.org/docs/2.2/mod/mod_status.html for more details - """ - GAUGES = { - 'IdleWorkers': 'apache.performance.idle_workers', - 'BusyWorkers': 'apache.performance.busy_workers', - 'CPULoad': 'apache.performance.cpu_load', - 'Uptime': 'apache.performance.uptime', - 'Total kBytes': 'apache.net.bytes', - 'Total Accesses': 'apache.net.hits', - } - - RATES = { - 'Total kBytes': 'apache.net.bytes_per_s', - 'Total Accesses': 'apache.net.request_per_s' - } - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - self.assumed_url = {} - - def check(self, instance): - if 'apache_status_url' not in instance: - raise Exception("Missing 'apache_status_url' in Apache config") - - url = self.assumed_url.get(instance['apache_status_url'], instance['apache_status_url']) - - tags = instance.get('tags', []) - - auth = None - if 'apache_user' in instance and 'apache_password' in instance: - auth = (instance['apache_user'], instance['apache_password']) - - # Submit a service check for status page availability. - parsed_url = urlparse.urlparse(url) - apache_host = parsed_url.hostname - apache_port = parsed_url.port or 80 - service_check_name = 'apache.can_connect' - service_check_tags = ['host:%s' % apache_host, 'port:%s' % apache_port] - try: - r = requests.get(url, auth=auth, headers=headers(self.agentConfig)) - r.raise_for_status() - - except Exception: - self.service_check(service_check_name, AgentCheck.CRITICAL, - tags=service_check_tags) - raise - else: - self.service_check(service_check_name, AgentCheck.OK, - tags=service_check_tags) - - response = r.content - metric_count = 0 - # Loop through and extract the numerical values - for line in response.splitlines(): - values = line.split(': ') - if len(values) == 2: # match - metric, value = values - try: - value = float(value) - except ValueError: - continue - - # Special case: kBytes => bytes - if metric == 'Total kBytes': - value = value * 1024 - - # Send metric as a gauge, if applicable - if metric in self.GAUGES: - metric_count += 1 - metric_name = self.GAUGES[metric] - self.gauge(metric_name, value, tags=tags) - - # Send metric as a rate, if applicable - if metric in self.RATES: - metric_count += 1 - metric_name = self.RATES[metric] - self.rate(metric_name, value, tags=tags) - - if metric_count == 0: - if self.assumed_url.get(instance['apache_status_url'], None) is None and url[-5:] != '?auto': - self.assumed_url[instance['apache_status_url']] = '%s?auto' % url - self.warning("Assuming url was not correct. Trying to add ?auto suffix to the url") - self.check(instance) - else: - raise Exception("No metrics were fetched for this instance. Make sure that %s is the proper url." % instance['apache_status_url']) diff --git a/pkg/py/checks/btrfs.py b/pkg/py/checks/btrfs.py deleted file mode 100644 index 25a1cdccaa7c..000000000000 --- a/pkg/py/checks/btrfs.py +++ /dev/null @@ -1,140 +0,0 @@ -# stdlib -import array -from collections import defaultdict -import fcntl -import itertools -import os -import struct - -# 3rd party -import psutil - -# project -from checks import AgentCheck - -MIXED = "mixed" -DATA = "data" -METADATA = "metadata" -SYSTEM = "system" -SINGLE = "single" -RAID0 = "raid0" -RAID1 = "raid1" -RAID10 = "raid10" -DUP = "dup" -UNKNOWN = "unknown" - -FLAGS_MAPPER = defaultdict(lambda: (SINGLE, UNKNOWN),{ - 1: (SINGLE, DATA), - 2: (SINGLE, SYSTEM), - 4: (SINGLE, METADATA), - 5: (SINGLE, MIXED), - 9: (RAID0, DATA), - 10: (RAID0, SYSTEM), - 12: (RAID0, METADATA), - 13: (RAID0, MIXED), - 17: (RAID1, DATA), - 18: (RAID1, SYSTEM), - 20: (RAID1, METADATA), - 21: (RAID1, MIXED), - 33: (DUP, DATA), - 34: (DUP, SYSTEM), - 36: (DUP, METADATA), - 37: (DUP, MIXED), - 65: (RAID10, DATA), - 66: (RAID10, SYSTEM), - 68: (RAID10, METADATA), - 69: (RAID10, MIXED), - -}) - -BTRFS_IOC_SPACE_INFO = 0xc0109414 - -TWO_LONGS_STRUCT = struct.Struct("=2Q") # 2 Longs -THREE_LONGS_STRUCT = struct.Struct("=3Q") # 3 Longs - - -def sized_array(count): - return array.array("B", itertools.repeat(0, count)) - - -class FileDescriptor(object): - - def __init__(self, mountpoint): - self.fd = os.open(mountpoint, os.O_DIRECTORY) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, traceback): - os.close(self.fd) - - def fileno(self): - return self.fd - - def open(self, dir): - return self.fd - - -class BTRFS(AgentCheck): - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances=instances) - if instances is not None and len(instances) > 1: - raise Exception("BTRFS check only supports one configured instance.") - - def get_usage(self, mountpoint): - results = [] - - with FileDescriptor(mountpoint) as fd: - - # Get the struct size needed - # https://github.com/spotify/linux/blob/master/fs/btrfs/ioctl.h#L46-L50 - ret = sized_array(TWO_LONGS_STRUCT.size) - fcntl.ioctl(fd, BTRFS_IOC_SPACE_INFO, ret) - _, total_spaces = TWO_LONGS_STRUCT.unpack(ret) - - # Allocate it - buffer_size = (TWO_LONGS_STRUCT.size - + total_spaces * THREE_LONGS_STRUCT.size) - - data = sized_array(buffer_size) - TWO_LONGS_STRUCT.pack_into(data, 0, total_spaces, 0) - fcntl.ioctl(fd, BTRFS_IOC_SPACE_INFO, data) - - _, total_spaces = TWO_LONGS_STRUCT.unpack_from(ret, 0) - for offset in xrange(TWO_LONGS_STRUCT.size, - buffer_size, - THREE_LONGS_STRUCT.size): - - # https://github.com/spotify/linux/blob/master/fs/btrfs/ioctl.h#L40-L44 - flags, total_bytes, used_bytes = THREE_LONGS_STRUCT.unpack_from(data, offset) - results.append((flags, total_bytes, used_bytes)) - - return results - - def check(self, instance): - btrfs_devices = {} - excluded_devices = instance.get('excluded_devices', []) - for p in psutil.disk_partitions(): - if (p.fstype == 'btrfs' and p.device not in btrfs_devices - and p.device not in excluded_devices): - btrfs_devices[p.device] = p.mountpoint - - if len(btrfs_devices) == 0: - raise Exception("No btrfs device found") - - for device, mountpoint in btrfs_devices.iteritems(): - for flags, total_bytes, used_bytes in self.get_usage(mountpoint): - replication_type, usage_type = FLAGS_MAPPER[flags] - tags = [ - 'usage_type:{0}'.format(usage_type), - 'replication_type:{0}'.format(replication_type), - ] - - free = total_bytes - used_bytes - usage = float(used_bytes) / float(total_bytes) - - self.gauge('system.disk.btrfs.total', total_bytes, tags=tags, device_name=device) - self.gauge('system.disk.btrfs.used', used_bytes, tags=tags, device_name=device) - self.gauge('system.disk.btrfs.free', free, tags=tags, device_name=device) - self.gauge('system.disk.btrfs.usage', usage, tags=tags, device_name=device) diff --git a/pkg/py/checks/cacti.py b/pkg/py/checks/cacti.py deleted file mode 100644 index 70f04dd8d4d0..000000000000 --- a/pkg/py/checks/cacti.py +++ /dev/null @@ -1,239 +0,0 @@ -# stdlib -from collections import namedtuple -from fnmatch import fnmatch -import os -import time - -# 3rd party -try: - import rrdtool -except ImportError: - rrdtool = None -import pymysql - -# project -from checks import AgentCheck - -CFUNC_TO_AGGR = { - 'AVERAGE': 'avg', - 'MAXIMUM': 'max', - 'MINIMUM': 'min' -} - -CACTI_TO_DD = { - 'hdd_free': 'system.disk.free', - 'hdd_used': 'system.disk.used', - 'swap_free': 'system.swap.free', - 'load_1min': 'system.load.1', - 'load_5min': 'system.load.5', - 'load_15min': 'system.load.15', - 'mem_buffers': 'system.mem.buffered', - 'proc': 'system.proc.running', - 'users': 'system.users.current', - 'mem_swap': 'system.swap.free', - 'ping': 'system.ping.latency' -} - -class Cacti(AgentCheck): - def __init__(self, name, init_config, agentConfig): - AgentCheck.__init__(self, name, init_config, agentConfig) - self.last_ts = {} - - def get_library_versions(self): - if rrdtool is not None: - return {"rrdtool": rrdtool.__version__} - return {"rrdtool": "Not Found"} - - def check(self, instance): - if rrdtool is None: - raise Exception("Unable to import python rrdtool module") - - # Load the instance config - config = self._get_config(instance) - - connection = pymysql.connect(config.host, config.user, config.password, config.db) - - self.log.debug("Connected to MySQL to fetch Cacti metadata") - - # Get whitelist patterns, if available - patterns = self._get_whitelist_patterns(config.whitelist) - - # Fetch the RRD metadata from MySQL - rrd_meta = self._fetch_rrd_meta(connection, config.rrd_path, patterns, config.field_names) - - # Load the metrics from each RRD, tracking the count as we go - metric_count = 0 - for hostname, device_name, rrd_path in rrd_meta: - m_count = self._read_rrd(rrd_path, hostname, device_name) - metric_count += m_count - - self.gauge('cacti.metrics.count', metric_count) - - def _get_whitelist_patterns(self, whitelist): - patterns = [] - if whitelist: - if not os.path.isfile(whitelist) or not os.access(whitelist, os.R_OK): - # Don't run the check if the whitelist is unavailable - self.log.exception("Unable to read whitelist file at %s" % (whitelist)) - - wl = open(whitelist) - for line in wl: - patterns.append(line.strip()) - wl.close() - - return patterns - - - def _get_config(self, instance): - required = ['mysql_host', 'mysql_user', 'rrd_path'] - for param in required: - if not instance.get(param): - raise Exception("Cacti instance missing %s. Skipping." % (param)) - - host = instance.get('mysql_host') - user = instance.get('mysql_user') - password = instance.get('mysql_password', '') or '' - db = instance.get('mysql_db', 'cacti') - rrd_path = instance.get('rrd_path') - whitelist = instance.get('rrd_whitelist') - field_names = instance.get('field_names', ['ifName', 'dskDevice']) - - Config = namedtuple('Config', [ - 'host', - 'user', - 'password', - 'db', - 'rrd_path', - 'whitelist', - 'field_names'] - ) - - return Config(host, user, password, db, rrd_path, whitelist, field_names) - - def _read_rrd(self, rrd_path, hostname, device_name): - ''' Main metric fetching method ''' - metric_count = 0 - - try: - info = rrdtool.info(rrd_path) - except Exception: - # Unable to read RRD file, ignore it - self.log.exception("Unable to read RRD file at %s" % rrd_path) - return metric_count - - # Find the consolidation functions for the RRD metrics - c_funcs = set([v for k,v in info.items() if k.endswith('.cf')]) - - for c in list(c_funcs): - last_ts_key = '%s.%s' % (rrd_path, c) - if last_ts_key not in self.last_ts: - self.last_ts[last_ts_key] = int(time.time()) - continue - - start = self.last_ts[last_ts_key] - last_ts = start - - try: - fetched = rrdtool.fetch(rrd_path, c, '--start', str(start)) - except rrdtool.error: - # Start time was out of range, skip this RRD - self.log.warn("Time %s out of range for %s" % (rrd_path, start)) - return metric_count - - # Extract the data - (start_ts, end_ts, interval) = fetched[0] - metric_names = fetched[1] - points = fetched[2] - for k, m_name in enumerate(metric_names): - m_name = self._format_metric_name(m_name, c) - for i, p in enumerate(points): - ts = start_ts + (i * interval) - - if p[k] is None: - continue - - # Save this metric as a gauge - val = self._transform_metric(m_name, p[k]) - self.gauge(m_name, val, hostname=hostname, - device_name=device_name, timestamp=ts) - metric_count += 1 - last_ts = (ts + interval) - - # Update the last timestamp based on the last valid metric - self.last_ts[last_ts_key] = last_ts - return metric_count - - def _fetch_rrd_meta(self, connection, rrd_path_root, whitelist, field_names): - ''' Fetch metadata about each RRD in this Cacti DB, returning a list of - tuples of (hostname, device_name, rrd_path) - ''' - def _in_whitelist(rrd): - path = rrd.replace('/','') - for p in whitelist: - if fnmatch(path, p): - return True - return False - - c = connection.cursor() - - and_parameters = " OR ".join(["hsc.field_name = '%s'" % field_name for field_name in field_names]) - - # Check for the existence of the `host_snmp_cache` table - rrd_query = """ - SELECT - h.hostname as hostname, - hsc.field_value as device_name, - dt.data_source_path as rrd_path - FROM data_local dl - JOIN host h on dl.host_id = h.id - JOIN data_template_data dt on dt.local_data_id = dl.id - LEFT JOIN host_snmp_cache hsc on h.id = hsc.host_id - AND dl.snmp_index = hsc.snmp_index - WHERE dt.data_source_path IS NOT NULL - AND dt.data_source_path != '' - AND (%s OR hsc.field_name is NULL) """ % and_parameters - - c.execute(rrd_query) - res = [] - for hostname, device_name, rrd_path in c.fetchall(): - if not whitelist or _in_whitelist(rrd_path): - if hostname in ('localhost', '127.0.0.1'): - hostname = self.hostname - rrd_path = rrd_path.replace('', rrd_path_root) - device_name = device_name or None - res.append((hostname, device_name, rrd_path)) - - # Collect stats - num_hosts = len(set([r[0] for r in res])) - self.gauge('cacti.rrd.count', len(res)) - self.gauge('cacti.hosts.count', num_hosts) - - return res - - def _format_metric_name(self, m_name, cfunc): - ''' Format a cacti metric name into a Datadog-friendly name ''' - try: - aggr = CFUNC_TO_AGGR[cfunc] - except KeyError: - aggr = cfunc.lower() - - try: - m_name = CACTI_TO_DD[m_name] - if aggr != 'avg': - m_name += '.%s' % (aggr) - return m_name - except KeyError: - return "cacti.%s.%s" % (m_name.lower(), aggr) - - def _transform_metric(self, m_name, val): - ''' Add any special case transformations here ''' - # Report memory in MB - if m_name[0:11] in ('system.mem.', 'system.disk'): - return val / 1024 - return val - - - ''' - For backwards compatability with pre-checks.d configuration. - Convert old-style config to new-style config. - ''' diff --git a/pkg/py/checks/consul.py b/pkg/py/checks/consul.py deleted file mode 100644 index 7e444255e274..000000000000 --- a/pkg/py/checks/consul.py +++ /dev/null @@ -1,320 +0,0 @@ -# stdlib -from collections import defaultdict -from datetime import datetime, timedelta -from itertools import islice -from urlparse import urljoin - -# project -from checks import AgentCheck - -# 3p -import requests - - -class ConsulCheck(AgentCheck): - CONSUL_CHECK = 'consul.up' - HEALTH_CHECK = 'consul.check' - - CONSUL_CATALOG_CHECK = 'consul.catalog' - - SOURCE_TYPE_NAME = 'consul' - - MAX_CONFIG_TTL = 300 # seconds - MAX_SERVICES = 50 # cap on distinct Consul ServiceIDs to interrogate - - STATUS_SC = { - 'up': AgentCheck.OK, - 'passing': AgentCheck.OK, - 'warning': AgentCheck.WARNING, - 'critical': AgentCheck.CRITICAL, - } - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - if instances is not None and len(instances) > 1: - raise Exception("Consul check only supports one configured instance.") - - self._local_config = None - self._last_config_fetch_time = None - self._last_known_leader = None - - def consul_request(self, instance, endpoint): - url = urljoin(instance.get('url'), endpoint) - try: - - clientcertfile = instance.get('client_cert_file', self.init_config.get('client_cert_file', False)) - privatekeyfile = instance.get('private_key_file', self.init_config.get('private_key_file', False)) - cabundlefile = instance.get('ca_bundle_file', self.init_config.get('ca_bundle_file', True)) - - if clientcertfile: - if privatekeyfile: - resp = requests.get(url, cert=(clientcertfile,privatekeyfile), verify=cabundlefile) - else: - resp = requests.get(url, cert=clientcertfile, verify=cabundlefile) - else: - resp = requests.get(url, verify=cabundlefile) - - except requests.exceptions.Timeout: - self.log.exception('Consul request to {0} timed out'.format(url)) - raise - - resp.raise_for_status() - return resp.json() - - ### Consul Config Accessors - def _get_local_config(self, instance): - if not self._local_config or datetime.now() - self._last_config_fetch_time > timedelta(seconds=self.MAX_CONFIG_TTL): - self._local_config = self.consul_request(instance, '/v1/agent/self') - self._last_config_fetch_time = datetime.now() - - return self._local_config - - def _get_cluster_leader(self, instance): - return self.consul_request(instance, '/v1/status/leader') - - def _get_agent_url(self, instance): - self.log.debug("Starting _get_agent_url") - local_config = self._get_local_config(instance) - agent_addr = local_config.get('Config', {}).get('AdvertiseAddr') - agent_port = local_config.get('Config', {}).get('Ports', {}).get('Server') - agent_url = "{0}:{1}".format(agent_addr, agent_port) - self.log.debug("Agent url is %s" % agent_url) - return agent_url - - def _get_agent_datacenter(self, instance): - local_config = self._get_local_config(instance) - agent_dc = local_config.get('Config', {}).get('Datacenter') - return agent_dc - - ### Consul Leader Checks - def _is_instance_leader(self, instance): - try: - agent_url = self._get_agent_url(instance) - leader = self._last_known_leader or self._get_cluster_leader(instance) - self.log.debug("Consul agent lives at %s . Consul Leader lives at %s" % (agent_url,leader)) - return agent_url == leader - - except Exception as e: - return False - - def _check_for_leader_change(self, instance): - agent_dc = self._get_agent_datacenter(instance) - leader = self._get_cluster_leader(instance) - - if not leader: - # A few things could be happening here. - # 1. Consul Agent is Down - # 2. The cluster is in the midst of a leader election - # 3. The Datadog agent is not able to reach the Consul instance (network partition et al.) - self.log.warn('Consul Leader information is not available!') - return - - if not self._last_known_leader: - # We have no state preserved, store some and return - self._last_known_leader = leader - return - - if leader != self._last_known_leader: - self.log.info(('Leader change from {0} to {1}. Sending new leader event').format( - self._last_known_leader, leader)) - - self.event({ - "timestamp": int(datetime.now().strftime("%s")), - "event_type": "consul.new_leader", - "source_type_name": self.SOURCE_TYPE_NAME, - "msg_title": "New Consul Leader Elected in consul_datacenter:{0}".format(agent_dc), - "aggregation_key": "consul.new_leader", - "msg_text": "The Node at {0} is the new leader of the consul datacenter {1}".format( - leader, - agent_dc - ), - "tags": ["prev_consul_leader:{0}".format(self._last_known_leader), - "curr_consul_leader:{0}".format(leader), - "consul_datacenter:{0}".format(agent_dc)] - }) - - self._last_known_leader = leader - - ### Consul Catalog Accessors - def get_peers_in_cluster(self, instance): - return self.consul_request(instance, '/v1/status/peers') - - def get_services_in_cluster(self, instance): - return self.consul_request(instance, '/v1/catalog/services') - - def get_nodes_with_service(self, instance, service): - consul_request_url = '/v1/health/service/{0}'.format(service) - - return self.consul_request(instance, consul_request_url) - - def _cull_services_list(self, services, service_whitelist): - if service_whitelist: - if len(service_whitelist) > self.MAX_SERVICES: - self.warning('More than %d services in whitelist. Service list will be truncated.' % self.MAX_SERVICES) - - services = [s for s in services if s in service_whitelist][:self.MAX_SERVICES] - else: - if len(services) <= self.MAX_SERVICES: - self.warning('Consul service whitelist not defined. Agent will poll for all %d services found' % len(services)) - else: - self.warning('Consul service whitelist not defined. Agent will poll for at most %d services' % self.MAX_SERVICES) - services = list(islice(services.iterkeys(), 0, self.MAX_SERVICES)) - - return services - - def check(self, instance): - perform_new_leader_checks = instance.get('new_leader_checks', - self.init_config.get('new_leader_checks', False)) - if perform_new_leader_checks: - self._check_for_leader_change(instance) - - peers = self.get_peers_in_cluster(instance) - main_tags = [] - agent_dc = self._get_agent_datacenter(instance) - - if agent_dc is not None: - main_tags.append('consul_datacenter:{0}'.format(agent_dc)) - - if not self._is_instance_leader(instance): - self.gauge("consul.peers", len(peers), tags=main_tags + ["mode:follower"]) - self.log.debug("This consul agent is not the cluster leader." + - "Skipping service and catalog checks for this instance") - return - else: - self.gauge("consul.peers", len(peers), tags=main_tags + ["mode:leader"]) - - service_check_tags = ['consul_url:{0}'.format(instance.get('url'))] - perform_catalog_checks = instance.get('catalog_checks', - self.init_config.get('catalog_checks')) - - try: - # Make service checks from health checks for all services in catalog - health_state = self.consul_request(instance, '/v1/health/state/any') - - for check in health_state: - status = self.STATUS_SC.get(check['Status']) - if status is None: - continue - - tags = ["check:{0}".format(check["CheckID"])] - if check["ServiceName"]: - tags.append("service:{0}".format(check["ServiceName"])) - if check["ServiceID"]: - tags.append("consul_service_id:{0}".format(check["ServiceID"])) - - self.service_check(self.HEALTH_CHECK, status, tags=main_tags+tags) - - except Exception as e: - self.service_check(self.CONSUL_CHECK, AgentCheck.CRITICAL, - tags=service_check_tags) - else: - self.service_check(self.CONSUL_CHECK, AgentCheck.OK, - tags=service_check_tags) - - if perform_catalog_checks: - # Collect node by service, and service by node counts for a whitelist of services - - services = self.get_services_in_cluster(instance) - service_whitelist = instance.get('service_whitelist', - self.init_config.get('service_whitelist', [])) - - services = self._cull_services_list(services, service_whitelist) - - # {node_id: {"up: 0, "passing": 0, "warning": 0, "critical": 0} - nodes_to_service_status = defaultdict(lambda: defaultdict(int)) - - for service in services: - # For every service in the cluster, - # Gauge the following: - # `consul.catalog.nodes_up` : # of Nodes registered with that service - # `consul.catalog.nodes_passing` : # of Nodes with service status `passing` from those registered - # `consul.catalog.nodes_warning` : # of Nodes with service status `warning` from those registered - # `consul.catalog.nodes_critical` : # of Nodes with service status `critical` from those registered - - service_tags = ['consul_service_id:{0}'.format(service)] - - nodes_with_service = self.get_nodes_with_service(instance, service) - - # {'up': 0, 'passing': 0, 'warning': 0, 'critical': 0} - node_status = defaultdict(int) - - for node in nodes_with_service: - # The node_id is n['Node']['Node'] - node_id = node.get('Node', {}).get("Node") - - # An additional service is registered on this node. Bump up the counter - nodes_to_service_status[node_id]["up"] += 1 - - # If there is no Check for the node then Consul and dd-agent consider it up - if 'Checks' not in node: - node_status['passing'] += 1 - node_status['up'] += 1 - else: - found_critical = False - found_warning = False - found_serf_health = False - - for check in node['Checks']: - if check['CheckID'] == 'serfHealth': - found_serf_health = True - - # For backwards compatibility, the "up" node_status is computed - # based on the total # of nodes 'running' as part of the service. - - # If the serfHealth is `critical` it means the Consul agent isn't even responding, - # and we don't register the node as `up` - if check['Status'] != 'critical': - node_status["up"] += 1 - continue - - if check['Status'] == 'critical': - found_critical = True - break - elif check['Status'] == 'warning': - found_warning = True - # Keep looping in case there is a critical status - - # Increment the counters based on what was found in Checks - # `critical` checks override `warning`s, and if neither are found, register the node as `passing` - if found_critical: - node_status['critical'] += 1 - nodes_to_service_status[node_id]["critical"] += 1 - elif found_warning: - node_status['warning'] += 1 - nodes_to_service_status[node_id]["warning"] += 1 - else: - if not found_serf_health: - # We have not found a serfHealth check for this node, which is unexpected - # If we get here assume this node's status is "up", since we register it as 'passing' - node_status['up'] += 1 - - node_status['passing'] += 1 - nodes_to_service_status[node_id]["passing"] += 1 - - for status_key in self.STATUS_SC: - status_value = node_status[status_key] - self.gauge( - '{0}.nodes_{1}'.format(self.CONSUL_CATALOG_CHECK, status_key), - status_value, - tags=main_tags+service_tags - ) - - for node, service_status in nodes_to_service_status.iteritems(): - # For every node discovered for whitelisted services, gauge the following: - # `consul.catalog.services_up` : Total services registered on node - # `consul.catalog.services_passing` : Total passing services on node - # `consul.catalog.services_warning` : Total warning services on node - # `consul.catalog.services_critical` : Total critical services on node - - node_tags = ['consul_node_id:{0}'.format(node)] - self.gauge('{0}.services_up'.format(self.CONSUL_CATALOG_CHECK), - len(services), - tags=main_tags+node_tags) - - for status_key in self.STATUS_SC: - status_value = service_status[status_key] - self.gauge( - '{0}.services_{1}'.format(self.CONSUL_CATALOG_CHECK, status_key), - status_value, - tags=main_tags+node_tags - ) diff --git a/pkg/py/checks/couch.py b/pkg/py/checks/couch.py deleted file mode 100644 index c26efb3ec61f..000000000000 --- a/pkg/py/checks/couch.py +++ /dev/null @@ -1,130 +0,0 @@ -# stdlib -from urlparse import urljoin - -# 3rd party -import requests - -# project -from checks import AgentCheck -from util import headers - - -class CouchDb(AgentCheck): - """Extracts stats from CouchDB via its REST API - http://wiki.apache.org/couchdb/Runtime_Statistics - """ - - MAX_DB = 50 - SERVICE_CHECK_NAME = 'couchdb.can_connect' - SOURCE_TYPE_NAME = 'couchdb' - TIMEOUT = 5 - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - self.db_blacklist = {} - - def _create_metric(self, data, tags=None): - overall_stats = data.get('stats', {}) - for key, stats in overall_stats.items(): - for metric, val in stats.items(): - if val['current'] is not None: - metric_name = '.'.join(['couchdb', key, metric]) - self.gauge(metric_name, val['current'], tags=tags) - - for db_name, db_stats in data.get('databases', {}).items(): - for name, val in db_stats.items(): - if name in ['doc_count', 'disk_size'] and val is not None: - metric_name = '.'.join(['couchdb', 'by_db', name]) - metric_tags = list(tags) - metric_tags.append('db:%s' % db_name) - self.gauge(metric_name, val, tags=metric_tags, device_name=db_name) - - def _get_stats(self, url, instance): - "Hit a given URL and return the parsed json" - self.log.debug('Fetching Couchdb stats at url: %s' % url) - - auth = None - if 'user' in instance and 'password' in instance: - auth = (instance['user'], instance['password']) - # Override Accept request header so that failures are not redirected to the Futon web-ui - request_headers = headers(self.agentConfig) - request_headers['Accept'] = 'text/json' - r = requests.get(url, auth=auth, headers=request_headers, - timeout=int(instance.get('timeout', self.TIMEOUT))) - r.raise_for_status() - return r.json() - - def check(self, instance): - server = instance.get('server', None) - if server is None: - raise Exception("A server must be specified") - data = self.get_data(server, instance) - self._create_metric(data, tags=['instance:%s' % server]) - - def get_data(self, server, instance): - # The dictionary to be returned. - couchdb = {'stats': None, 'databases': {}} - - # First, get overall statistics. - endpoint = '/_stats/' - - url = urljoin(server, endpoint) - - # Fetch initial stats and capture a service check based on response. - service_check_tags = ['instance:%s' % server] - try: - overall_stats = self._get_stats(url, instance) - except requests.exceptions.Timeout as e: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - tags=service_check_tags, message="Request timeout: {0}, {1}".format(url, e)) - raise - except requests.exceptions.HTTPError as e: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - tags=service_check_tags, message=str(e.message)) - raise - except Exception as e: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - tags=service_check_tags, message=str(e)) - raise - else: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.OK, - tags=service_check_tags, - message='Connection to %s was successful' % url) - - # No overall stats? bail out now - if overall_stats is None: - raise Exception("No stats could be retrieved from %s" % url) - - couchdb['stats'] = overall_stats - - # Next, get all database names. - endpoint = '/_all_dbs/' - - url = urljoin(server, endpoint) - - # Get the list of whitelisted databases. - db_whitelist = instance.get('db_whitelist') - self.db_blacklist.setdefault(server,[]) - self.db_blacklist[server].extend(instance.get('db_blacklist',[])) - whitelist = set(db_whitelist) if db_whitelist else None - databases = set(self._get_stats(url, instance)) - set(self.db_blacklist[server]) - databases = databases.intersection(whitelist) if whitelist else databases - - if len(databases) > self.MAX_DB: - self.warning('Too many databases, only the first %s will be checked.' % self.MAX_DB) - databases = list(databases)[:self.MAX_DB] - - for dbName in databases: - url = urljoin(server, dbName) - try: - db_stats = self._get_stats(url, instance) - except requests.exceptions.HTTPError as e: - couchdb['databases'][dbName] = None - if (e.response.status_code == 403) or (e.response.status_code == 401): - self.db_blacklist[server].append(dbName) - self.warning('Database %s is not readable by the configured user. It will be added to the blacklist. Please restart the agent to clear.' % dbName) - del couchdb['databases'][dbName] - continue - if db_stats is not None: - couchdb['databases'][dbName] = db_stats - return couchdb diff --git a/pkg/py/checks/couchbase.py b/pkg/py/checks/couchbase.py deleted file mode 100644 index fcdfbb68e9c1..000000000000 --- a/pkg/py/checks/couchbase.py +++ /dev/null @@ -1,238 +0,0 @@ -# stdlib -import re - -# 3rd party -import requests - -# project -from checks import AgentCheck -from util import headers - -# Constants -COUCHBASE_STATS_PATH = '/pools/default' -DEFAULT_TIMEOUT = 10 - - -class Couchbase(AgentCheck): - """Extracts stats from Couchbase via its REST API - http://docs.couchbase.com/couchbase-manual-2.0/#using-the-rest-api - """ - SERVICE_CHECK_NAME = 'couchbase.can_connect' - - # Selected metrics to send amongst all the bucket stats, after name normalization - BUCKET_STATS = set([ - 'avg_bg_wait_time', - 'avg_disk_commit_time', - 'bytes_read', - 'bytes_written', - 'cas_hits', - 'cas_misses', - 'cmd_get', - 'cmd_set', - 'couch_docs_actual_disk_size', - 'couch_docs_data_size', - 'couch_docs_disk_size', - 'couch_docs_fragmentation', - 'couch_total_disk_size', - 'couch_views_fragmentation', - 'couch_views_ops', - 'cpu_idle_ms', - 'cpu_utilization_rate', - 'curr_connections', - 'curr_items', - 'curr_items_tot', - 'decr_hits', - 'decr_misses', - 'delete_hits', - 'delete_misses', - 'disk_commit_count', - 'disk_update_count', - 'disk_write_queue', - 'ep_bg_fetched', - 'ep_cache_miss_rate', - 'ep_cache_miss_ratio', - 'ep_diskqueue_drain', - 'ep_diskqueue_fill', - 'ep_flusher_todo', - 'ep_item_commit_failed', - 'ep_max_size', - 'ep_mem_high_wat', - 'ep_mem_low_wat', - 'ep_num_non_resident', - 'ep_num_value_ejects', - 'ep_oom_errors', - 'ep_ops_create', - 'ep_ops_update', - 'ep_overhead', - 'ep_queue_size', - 'ep_resident_items_rate', - 'ep_tap_replica_queue_drain', - 'ep_tap_total_queue_drain', - 'ep_tap_total_queue_fill', - 'ep_tap_total_total_backlog_size', - 'ep_tmp_oom_errors', - 'evictions', - 'get_hits', - 'get_misses', - 'hit_ratio', - 'incr_hits', - 'incr_misses', - 'mem_free', - 'mem_total', - 'mem_used', - 'misses', - 'ops', - 'page_faults', - 'replication_docs_rep_queue', - 'replication_meta_latency_aggr', - 'vb_active_num', - 'vb_active_queue_drain', - 'vb_active_queue_size', - 'vb_active_resident_items_ratio', - 'vb_avg_total_queue_age', - 'vb_pending_ops_create', - 'vb_pending_queue_fill', - 'vb_replica_curr_items', - 'vb_replica_meta_data_memory', - 'vb_replica_num', - 'vb_replica_queue_size', - 'xdc_ops', - ]) - - def _create_metrics(self, data, tags=None): - storage_totals = data['stats']['storageTotals'] - for key, storage_type in storage_totals.items(): - for metric_name, val in storage_type.items(): - if val is not None: - metric_name = '.'.join(['couchbase', key, self.camel_case_to_joined_lower(metric_name)]) - self.gauge(metric_name, val, tags=tags) - - for bucket_name, bucket_stats in data['buckets'].items(): - for metric_name, val in bucket_stats.items(): - if val is not None: - norm_metric_name = self.camel_case_to_joined_lower(metric_name) - if norm_metric_name in self.BUCKET_STATS: - full_metric_name = '.'.join(['couchbase', 'by_bucket', norm_metric_name]) - metric_tags = list(tags) - metric_tags.append('bucket:%s' % bucket_name) - self.gauge(full_metric_name, val[0], tags=metric_tags, device_name=bucket_name) - - for node_name, node_stats in data['nodes'].items(): - for metric_name, val in node_stats['interestingStats'].items(): - if val is not None: - metric_name = '.'.join(['couchbase', 'by_node', self.camel_case_to_joined_lower(metric_name)]) - metric_tags = list(tags) - metric_tags.append('node:%s' % node_name) - self.gauge(metric_name, val, tags=metric_tags, device_name=node_name) - - def _get_stats(self, url, instance): - """ Hit a given URL and return the parsed json. """ - self.log.debug('Fetching Couchbase stats at url: %s' % url) - - timeout = float(instance.get('timeout', DEFAULT_TIMEOUT)) - - auth = None - if 'user' in instance and 'password' in instance: - auth = (instance['user'], instance['password']) - - r = requests.get(url, auth=auth, headers=headers(self.agentConfig), - timeout=timeout) - r.raise_for_status() - return r.json() - - def check(self, instance): - server = instance.get('server', None) - if server is None: - raise Exception("The server must be specified") - tags = instance.get('tags', []) - # Clean up tags in case there was a None entry in the instance - # e.g. if the yaml contains tags: but no actual tags - if tags is None: - tags = [] - else: - tags = list(set(tags)) - tags.append('instance:%s' % server) - data = self.get_data(server, instance) - self._create_metrics(data, tags=list(set(tags))) - - def get_data(self, server, instance): - # The dictionary to be returned. - couchbase = { - 'stats': None, - 'buckets': {}, - 'nodes': {} - } - - # build couchbase stats entry point - url = '%s%s' % (server, COUCHBASE_STATS_PATH) - - # Fetch initial stats and capture a service check based on response. - service_check_tags = ['instance:%s' % server] - try: - overall_stats = self._get_stats(url, instance) - # No overall stats? bail out now - if overall_stats is None: - raise Exception("No data returned from couchbase endpoint: %s" % url) - except requests.exceptions.HTTPError as e: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - tags=service_check_tags, message=str(e.message)) - raise - except Exception as e: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - tags=service_check_tags, message=str(e)) - raise - else: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.OK, - tags=service_check_tags) - - couchbase['stats'] = overall_stats - - nodes = overall_stats['nodes'] - - # Next, get all the nodes - if nodes is not None: - for node in nodes: - couchbase['nodes'][node['hostname']] = node - - # Next, get all buckets . - endpoint = overall_stats['buckets']['uri'] - - url = '%s%s' % (server, endpoint) - buckets = self._get_stats(url, instance) - - if buckets is not None: - for bucket in buckets: - bucket_name = bucket['name'] - - # Fetch URI for the stats bucket - endpoint = bucket['stats']['uri'] - url = '%s%s' % (server, endpoint) - - try: - bucket_stats = self._get_stats(url, instance) - except requests.exceptions.HTTPError: - url_backup = '%s/pools/nodes/buckets/%s/stats' % (server, bucket_name) - bucket_stats = self._get_stats(url_backup, instance) - - bucket_samples = bucket_stats['op']['samples'] - if bucket_samples is not None: - couchbase['buckets'][bucket['name']] = bucket_samples - - return couchbase - - # Takes a camelCased variable and returns a joined_lower equivalent. - # Returns input if non-camelCase variable is detected. - def camel_case_to_joined_lower(self, variable): - # replace non-word with _ - converted_variable = re.sub('\W+', '_', variable) - - # insert _ in front of capital letters and lowercase the string - converted_variable = re.sub('([A-Z])', '_\g<1>', converted_variable).lower() - - # remove duplicate _ - converted_variable = re.sub('_+', '_', converted_variable) - - # handle special case of starting/ending underscores - converted_variable = re.sub('^_|_$', '', converted_variable) - - return converted_variable diff --git a/pkg/py/checks/directory.py b/pkg/py/checks/directory.py deleted file mode 100644 index d64ac3e4aebb..000000000000 --- a/pkg/py/checks/directory.py +++ /dev/null @@ -1,93 +0,0 @@ -# stdlib -from fnmatch import fnmatch -from os import stat, walk -from os.path import abspath, exists, join -import time - -# project -from checks import AgentCheck - - -def _is_affirmative(s): - # int or real bool - if isinstance(s, int): - return bool(s) - # try string cast - return s.lower() in ('yes', 'true', '1') - - -class DirectoryCheck(AgentCheck): - """This check is for monitoring and reporting metrics on the files for a provided directory - - WARNING: the user/group that dd-agent runs as must have access to stat the files in the desired directory - - Config options: - "directory" - string, the directory to gather stats for. required - "name" - string, the name to use when tagging the metrics. defaults to the "directory" - "dirtagname" - string, the name of the tag used for the directory. defaults to "name" - "filetagname" - string, the name of the tag used for each file. defaults to "filename" - "filegauges" - boolean, when true stats will be an individual gauge per file (max. 20 files!) and not a histogram of the whole directory. default False - "pattern" - string, the `fnmatch` pattern to use when reading the "directory"'s files. default "*" - "recursive" - boolean, when true the stats will recurse into directories. default False - """ - - SOURCE_TYPE_NAME = 'system' - - def check(self, instance): - if "directory" not in instance: - raise Exception('DirectoryCheck: missing "directory" in config') - - directory = instance["directory"] - abs_directory = abspath(directory) - name = instance.get("name", directory) - pattern = instance.get("pattern", "*") - recursive = _is_affirmative(instance.get("recursive", False)) - dirtagname = instance.get("dirtagname", "name") - filetagname = instance.get("filetagname", "filename") - filegauges = _is_affirmative(instance.get("filegauges", False)) - - if not exists(abs_directory): - raise Exception("DirectoryCheck: the directory (%s) does not exist" % abs_directory) - - self._get_stats(abs_directory, name, dirtagname, filetagname, filegauges, pattern, recursive) - - def _get_stats(self, directory, name, dirtagname, filetagname, filegauges, pattern, recursive): - dirtags = [dirtagname + ":%s" % name] - directory_bytes = 0 - directory_files = 0 - for root, dirs, files in walk(directory): - for filename in files: - filename = join(root, filename) - # check if it passes our filter - if not fnmatch(filename, pattern): - continue - try: - file_stat = stat(filename) - - except OSError, ose: - self.warning("DirectoryCheck: could not stat file %s - %s" % (filename, ose)) - else: - # file specific metrics - directory_files += 1 - directory_bytes += file_stat.st_size - if filegauges and directory_files <= 20: - filetags = list(dirtags) - filetags.append(filetagname + ":%s" % filename) - self.gauge("system.disk.directory.file.bytes", file_stat.st_size, tags=filetags) - self.gauge("system.disk.directory.file.modified_sec_ago", time.time() - file_stat.st_mtime, tags=filetags) - self.gauge("system.disk.directory.file.created_sec_ago", time.time() - file_stat.st_ctime, tags=filetags) - elif not filegauges: - self.histogram("system.disk.directory.file.bytes", file_stat.st_size, tags=dirtags) - self.histogram("system.disk.directory.file.modified_sec_ago", time.time() - file_stat.st_mtime, tags=dirtags) - self.histogram("system.disk.directory.file.created_sec_ago", time.time() - file_stat.st_ctime, tags=dirtags) - - # os.walk gives us all sub-directories and their files - # if we do not want to do this recursively and just want - # the top level directory we gave it, then break - if not recursive: - break - - # number of files - self.gauge("system.disk.directory.files", directory_files, tags=dirtags) - # total file size - self.gauge("system.disk.directory.bytes", directory_bytes, tags=dirtags) diff --git a/pkg/py/checks/disk.py b/pkg/py/checks/disk.py deleted file mode 100644 index 2af44cc793b9..000000000000 --- a/pkg/py/checks/disk.py +++ /dev/null @@ -1,249 +0,0 @@ -# stdlib -import os -import re - -# 3p -try: - import psutil -except ImportError: - psutil = None - -# project -from checks import AgentCheck -from config import _is_affirmative -from util import Platform -from utils.subprocess_output import get_subprocess_output - - -class Disk(AgentCheck): - """ Collects metrics about the machine's disks. """ - # -T for filesystem info - DF_COMMAND = ['df', '-T'] - METRIC_DISK = 'system.disk.{0}' - METRIC_INODE = 'system.fs.inodes.{0}' - - def __init__(self, name, init_config, agentConfig, instances=None): - if instances is not None and len(instances) > 1: - raise Exception("Disk check only supports one configured instance.") - AgentCheck.__init__(self, name, init_config, - agentConfig, instances=instances) - # Get the configuration once for all - self._load_conf(instances[0]) - - def check(self, instance): - """Get disk space/inode stats""" - # Windows and Mac will always have psutil - # (we have packaged for both of them) - if self._psutil(): - self.collect_metrics_psutil() - else: - # FIXME: implement all_partitions (df -a) - self.collect_metrics_manually() - - @classmethod - def _psutil(cls): - return psutil is not None - - def _load_conf(self, instance): - self._excluded_filesystems = instance.get('excluded_filesystems', []) - self._excluded_disks = instance.get('excluded_disks', []) - self._tag_by_filesystem = _is_affirmative( - instance.get('tag_by_filesystem', False)) - self._all_partitions = _is_affirmative( - instance.get('all_partitions', False)) - - # Force exclusion of CDROM (iso9660) from disk check - self._excluded_filesystems.append('iso9660') - - # FIXME: 6.x, drop use_mount option in datadog.conf - self._load_legacy_option(instance, 'use_mount', False, - operation=_is_affirmative) - # FIXME: 6.x, drop device_blacklist_re option in datadog.conf - self._load_legacy_option(instance, 'excluded_disk_re', '^$', - legacy_name='device_blacklist_re', - operation=re.compile) - - def _load_legacy_option(self, instance, option, default, - legacy_name=None, operation=lambda l: l): - value = instance.get(option, default) - legacy_name = legacy_name or option - - if value == default and legacy_name in self.agentConfig: - self.log.warn( - "Using `{0}` in datadog.conf has been deprecated" - " in favor of `{1}` in disk.yaml".format(legacy_name, option) - ) - value = self.agentConfig.get(legacy_name) or default - setattr(self, '_{0}'.format(option), operation(value)) - - def collect_metrics_psutil(self): - self._valid_disks = {} - for part in psutil.disk_partitions(all=True): - # we check all exclude conditions - if self._exclude_disk_psutil(part): - continue - # Get disk metrics here to be able to exclude on total usage - try: - disk_usage = psutil.disk_usage(part.mountpoint) - except Exception, e: - self.log.debug("Unable to get disk metrics for %s: %s", - part.mountpoint, e) - continue - # Exclude disks with total disk size 0 - if disk_usage.total == 0: - continue - # For later, latency metrics - self._valid_disks[part.device] = (part.fstype, part.mountpoint) - self.log.debug('Passed: {0}'.format(part.device)) - - tags = [part.fstype] if self._tag_by_filesystem else [] - device_name = part.mountpoint if self._use_mount else part.device - - # Note: psutil (0.3.0 to at least 3.1.1) calculates in_use as (used / total) - # The problem here is that total includes reserved space the user - # doesn't have access to. This causes psutil to calculate a misleadng - # percentage for in_use; a lower percentage than df shows. - - # Calculate in_use w/o reserved space; consistent w/ df's Use% metric. - pmets = self._collect_part_metrics(part, disk_usage) - used = 'system.disk.used' - free = 'system.disk.free' - pmets['system.disk.in_use'] = pmets[used] / (pmets[used] + pmets[free]) - - # legacy check names c: vs psutil name C:\\ - if Platform.is_win32(): - device_name = device_name.strip('\\').lower() - for metric_name, metric_value in pmets.iteritems(): - self.gauge(metric_name, metric_value, - tags=tags, device_name=device_name) - # And finally, latency metrics, a legacy gift from the old Windows Check - if Platform.is_win32(): - self.collect_latency_metrics() - - def _exclude_disk_psutil(self, part): - # skip cd-rom drives with no disk in it; they may raise - # ENOENT, pop-up a Windows GUI error for a non-ready - # partition or just hang; - # and all the other excluded disks - return ((Platform.is_win32() and ('cdrom' in part.opts or - part.fstype == '')) or - self._exclude_disk(part.device, part.fstype)) - - # We don't want all those incorrect devices - def _exclude_disk(self, name, filesystem): - return (((not name or name == 'none') and not self._all_partitions) or - name in self._excluded_disks or - self._excluded_disk_re.match(name) or - filesystem in self._excluded_filesystems) - - def _collect_part_metrics(self, part, usage): - metrics = {} - for name in ['total', 'used', 'free']: - # For legacy reasons, the standard unit it kB - metrics[self.METRIC_DISK.format(name)] = getattr(usage, name) / 1024.0 - # FIXME: 6.x, use percent, a lot more logical than in_use - metrics[self.METRIC_DISK.format('in_use')] = usage.percent / 100.0 - if Platform.is_unix(): - metrics.update(self._collect_inodes_metrics(part.mountpoint)) - - return metrics - - def _collect_inodes_metrics(self, mountpoint): - metrics = {} - inodes = os.statvfs(mountpoint) - if inodes.f_files != 0: - total = inodes.f_files - free = inodes.f_ffree - metrics[self.METRIC_INODE.format('total')] = total - metrics[self.METRIC_INODE.format('free')] = free - metrics[self.METRIC_INODE.format('used')] = total - free - # FIXME: 6.x, use percent, a lot more logical than in_use - metrics[self.METRIC_INODE.format('in_use')] = \ - (total - free) / float(total) - return metrics - - def collect_latency_metrics(self): - for disk_name, disk in psutil.disk_io_counters(True).iteritems(): - self.log.debug('IO Counters: {0} -> {1}'.format(disk_name, disk)) - # x100 to have it as a percentage, - # /1000 as psutil returns the value in ms - read_time_pct = disk.read_time * 100.0 / 1000.0 - write_time_pct = disk.write_time * 100.0 / 1000.0 - self.rate(self.METRIC_DISK.format('read_time_pct'), - read_time_pct, device_name=disk_name) - self.rate(self.METRIC_DISK.format('write_time_pct'), - write_time_pct, device_name=disk_name) - - # no psutil, let's use df - def collect_metrics_manually(self): - df_out, _, _ = get_subprocess_output(self.DF_COMMAND + ['-k'], self.log) - self.log.debug(df_out) - for device in self._list_devices(df_out): - self.log.debug("Passed: {0}".format(device)) - tags = [device[1]] if self._tag_by_filesystem else [] - device_name = device[-1] if self._use_mount else device[0] - for metric_name, value in self._collect_metrics_manually(device).iteritems(): - self.gauge(metric_name, value, tags=tags, - device_name=device_name) - - def _collect_metrics_manually(self, device): - result = {} - - used = float(device[3]) - free = float(device[4]) - - # device is - # ["/dev/sda1", "ext4", 524288, 171642, 352646, "33%", "/"] - result[self.METRIC_DISK.format('total')] = float(device[2]) - result[self.METRIC_DISK.format('used')] = used - result[self.METRIC_DISK.format('free')] = free - - # Rather than grabbing in_use, let's calculate it to be more precise - result[self.METRIC_DISK.format('in_use')] = used / (used + free) - - result.update(self._collect_inodes_metrics(device[-1])) - return result - - def _keep_device(self, device): - # device is for Unix - # [/dev/disk0s2, ext4, 244277768, 88767396, 155254372, 37%, /] - # First, skip empty lines. - # then filter our fake hosts like 'map -hosts'. - # Filesystem Type 1024-blocks Used Available Capacity Mounted on - # /dev/disk0s2 ext4 244277768 88767396 155254372 37% / - # map -hosts tmpfs 0 0 0 100% /net - # and finally filter out fake devices - return (device and len(device) > 1 and - device[2].isdigit() and - not self._exclude_disk(device[0], device[1])) - - def _flatten_devices(self, devices): - # Some volumes are stored on their own line. Rejoin them here. - previous = None - for parts in devices: - if len(parts) == 1: - previous = parts[0] - elif previous and self._is_number(parts[0]): - # collate with previous line - parts.insert(0, previous) - previous = None - else: - previous = None - return devices - - def _list_devices(self, df_output): - """ - Given raw output for the df command, transform it into a normalized - list devices. A 'device' is a list with fields corresponding to the - output of df output on each platform. - """ - all_devices = [l.strip().split() for l in df_output.splitlines()] - - # Skip the header row and empty lines. - raw_devices = [l for l in all_devices[1:] if l] - - # Flatten the disks that appear in the mulitple lines. - flattened_devices = self._flatten_devices(raw_devices) - - # Filter fake or unwanteddisks. - return [d for d in flattened_devices if self._keep_device(d)] diff --git a/pkg/py/checks/docker.py b/pkg/py/checks/docker.py deleted file mode 100644 index 1386f565369d..000000000000 --- a/pkg/py/checks/docker.py +++ /dev/null @@ -1,471 +0,0 @@ -# stdlib -import urllib2 -import urllib -import httplib -import socket -import os -import re -import time -from urlparse import urlsplit -from util import json -from collections import defaultdict - -# project -from checks import AgentCheck -from config import _is_affirmative - -EVENT_TYPE = SOURCE_TYPE_NAME = 'docker' - -CGROUP_METRICS = [ - { - "cgroup": "memory", - "file": "memory.stat", - "metrics": { - # Default metrics - "cache": ("docker.mem.cache", "gauge", True), - "rss": ("docker.mem.rss", "gauge", True), - "swap": ("docker.mem.swap", "gauge", True), - # Optional metrics - "active_anon": ("docker.mem.active_anon", "gauge", False), - "active_file": ("docker.mem.active_file", "gauge", False), - "inactive_anon": ("docker.mem.inactive_anon", "gauge", False), - "inactive_file": ("docker.mem.inactive_file", "gauge", False), - "mapped_file": ("docker.mem.mapped_file", "gauge", False), - "pgfault": ("docker.mem.pgfault", "rate", False), - "pgmajfault": ("docker.mem.pgmajfault", "rate", False), - "pgpgin": ("docker.mem.pgpgin", "rate", False), - "pgpgout": ("docker.mem.pgpgout", "rate", False), - "unevictable": ("docker.mem.unevictable", "gauge", False), - } - }, - { - "cgroup": "cpuacct", - "file": "cpuacct.stat", - "metrics": { - "user": ("docker.cpu.user", "rate", True), - "system": ("docker.cpu.system", "rate", True), - }, - }, -] - -DOCKER_METRICS = { - "SizeRw": ("docker.disk.size", "gauge"), -} - -DOCKER_TAGS = [ - "Command", - "Image", -] - -NEW_TAGS_MAP = { - "name": "container_name", - "image": "docker_image", - "command": "container_command", -} - -DEFAULT_SOCKET_TIMEOUT = 5 - -class DockerJSONDecodeError(Exception): - """ Raised when there is trouble parsing the API response sent by Docker Remote API """ - pass - -class UnixHTTPConnection(httplib.HTTPConnection): - """Class used in conjuction with UnixSocketHandler to make urllib2 - compatible with Unix sockets.""" - - socket_timeout = DEFAULT_SOCKET_TIMEOUT - - def __init__(self, unix_socket): - self._unix_socket = unix_socket - - def connect(self): - sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - sock.connect(self._unix_socket) - sock.settimeout(self.socket_timeout) - self.sock = sock - - def __call__(self, *args, **kwargs): - httplib.HTTPConnection.__init__(self, *args, **kwargs) - return self - - -class UnixSocketHandler(urllib2.AbstractHTTPHandler): - """Class that makes Unix sockets work with urllib2 without any additional - dependencies.""" - def unix_open(self, req): - full_path = "%s%s" % urlsplit(req.get_full_url())[1:3] - path = os.path.sep - for part in full_path.split("/"): - path = os.path.join(path, part) - if not os.path.exists(path): - break - unix_socket = path - # add a host or else urllib2 complains - url = req.get_full_url().replace(unix_socket, "/localhost") - new_req = urllib2.Request(url, req.get_data(), dict(req.header_items())) - new_req.timeout = req.timeout - return self.do_open(UnixHTTPConnection(unix_socket), new_req) - - unix_request = urllib2.AbstractHTTPHandler.do_request_ - - -class Docker(AgentCheck): - """Collect metrics and events from Docker API and cgroups""" - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - - # Initialize a HTTP opener with Unix socket support - socket_timeout = int(init_config.get('socket_timeout', 0)) or DEFAULT_SOCKET_TIMEOUT - UnixHTTPConnection.socket_timeout = socket_timeout - self.url_opener = urllib2.build_opener(UnixSocketHandler()) - - # Locate cgroups directories - self._mountpoints = {} - self._cgroup_filename_pattern = None - docker_root = init_config.get('docker_root', '/') - for metric in CGROUP_METRICS: - self._mountpoints[metric["cgroup"]] = self._find_cgroup(metric["cgroup"], docker_root) - - self._last_event_collection_ts = defaultdict(lambda: None) - - def check(self, instance): - # Report image metrics - self.warning('Using the "docker" check is deprecated and will be removed' - ' in a future version of the agent. Please use the "docker_daemon" one instead') - if _is_affirmative(instance.get('collect_images_stats', True)): - self._count_images(instance) - - # Get the list of containers and the index of their names - containers, ids_to_names = self._get_and_count_containers(instance) - - # Report container metrics from cgroups - skipped_container_ids = self._report_containers_metrics(containers, instance) - - # Send events from Docker API - if _is_affirmative(instance.get('collect_events', True)): - self._process_events(instance, ids_to_names, skipped_container_ids) - - - # Containers - - def _count_images(self, instance): - # It's not an important metric, keep going if it fails - try: - tags = instance.get("tags", []) - active_images = len(self._get_images(instance, get_all=False)) - all_images = len(self._get_images(instance, get_all=True)) - - self.gauge("docker.images.available", active_images, tags=tags) - self.gauge("docker.images.intermediate", (all_images - active_images), tags=tags) - except Exception, e: - self.warning("Failed to count Docker images. Exception: {0}".format(e)) - - def _get_and_count_containers(self, instance): - tags = instance.get("tags", []) - with_size = _is_affirmative(instance.get('collect_container_size', False)) - - service_check_name = 'docker.service_up' - try: - running_containers = self._get_containers(instance, with_size=with_size) - all_containers = self._get_containers(instance, get_all=True) - except (socket.timeout, urllib2.URLError), e: - self.service_check(service_check_name, AgentCheck.CRITICAL, - message="Unable to list Docker containers: {0}".format(e)) - raise Exception("Failed to collect the list of containers. Exception: {0}".format(e)) - self.service_check(service_check_name, AgentCheck.OK) - - running_containers_ids = set([container['Id'] for container in running_containers]) - - for container in all_containers: - container_tags = list(tags) - for key in DOCKER_TAGS: - tag = self._make_tag(key, container[key], instance) - if tag: - container_tags.append(tag) - if container['Id'] in running_containers_ids: - self.set("docker.containers.running", container['Id'], tags=container_tags) - else: - self.set("docker.containers.stopped", container['Id'], tags=container_tags) - - # The index of the names is used to generate and format events - ids_to_names = {} - for container in all_containers: - ids_to_names[container['Id']] = self._get_container_name(container) - - return running_containers, ids_to_names - - def _get_container_name(self, container): - # Use either the first container name or the container ID to name the container in our events - if container.get('Names', []): - return container['Names'][0].lstrip("/") - return container['Id'][:11] - - def _prepare_filters(self, instance): - # The reasoning is to check exclude first, so we can skip if there is no exclude - if not instance.get("exclude"): - return False - - # Compile regex - instance["exclude_patterns"] = [re.compile(rule) for rule in instance.get("exclude", [])] - instance["include_patterns"] = [re.compile(rule) for rule in instance.get("include", [])] - - return True - - def _is_container_excluded(self, instance, tags): - if self._tags_match_patterns(tags, instance.get("exclude_patterns")): - if self._tags_match_patterns(tags, instance.get("include_patterns")): - return False - return True - return False - - def _tags_match_patterns(self, tags, filters): - for rule in filters: - for tag in tags: - if re.match(rule, tag): - return True - return False - - def _report_containers_metrics(self, containers, instance): - skipped_container_ids = [] - collect_uncommon_metrics = _is_affirmative(instance.get("collect_all_metrics", False)) - tags = instance.get("tags", []) - - # Pre-compile regex to include/exclude containers - use_filters = self._prepare_filters(instance) - - for container in containers: - container_tags = list(tags) - for name in container["Names"]: - container_tags.append(self._make_tag("name", name.lstrip("/"), instance)) - for key in DOCKER_TAGS: - tag = self._make_tag(key, container[key], instance) - if tag: - container_tags.append(tag) - - # Check if the container is included/excluded via its tags - if use_filters and self._is_container_excluded(instance, container_tags): - skipped_container_ids.append(container['Id']) - continue - - for key, (dd_key, metric_type) in DOCKER_METRICS.iteritems(): - if key in container: - getattr(self, metric_type)(dd_key, int(container[key]), tags=container_tags) - for cgroup in CGROUP_METRICS: - stat_file = self._get_cgroup_file(cgroup["cgroup"], container['Id'], cgroup['file']) - stats = self._parse_cgroup_file(stat_file) - if stats: - for key, (dd_key, metric_type, common_metric) in cgroup['metrics'].iteritems(): - if key in stats and (common_metric or collect_uncommon_metrics): - getattr(self, metric_type)(dd_key, int(stats[key]), tags=container_tags) - if use_filters: - self.log.debug("List of excluded containers: {0}".format(skipped_container_ids)) - - return skipped_container_ids - - def _make_tag(self, key, value, instance): - tag_name = key.lower() - if tag_name == "command" and not instance.get("tag_by_command", False): - return None - if instance.get("new_tag_names", False): - tag_name = self._new_tags_conversion(tag_name) - - return "%s:%s" % (tag_name, value.strip()) - - def _new_tags_conversion(self, tag): - # Prefix tags to avoid conflict with AWS tags - return NEW_TAGS_MAP.get(tag, tag) - - - # Events - - def _process_events(self, instance, ids_to_names, skipped_container_ids): - try: - api_events = self._get_events(instance) - aggregated_events = self._pre_aggregate_events(api_events, skipped_container_ids) - events = self._format_events(aggregated_events, ids_to_names) - self._report_events(events) - except (socket.timeout, urllib2.URLError): - self.warning('Timeout during socket connection. Events will be missing.') - - def _pre_aggregate_events(self, api_events, skipped_container_ids): - # Aggregate events, one per image. Put newer events first. - events = defaultdict(list) - for event in api_events: - # Skip events related to filtered containers - if event['id'] in skipped_container_ids: - self.log.debug("Excluded event: container {0} status changed to {1}".format( - event['id'], event['status'])) - continue - # Known bug: from may be missing - if 'from' in event: - events[event['from']].insert(0, event) - - return events - - def _format_events(self, aggregated_events, ids_to_names): - events = [] - for image_name, event_group in aggregated_events.iteritems(): - max_timestamp = 0 - status = defaultdict(int) - status_change = [] - for event in event_group: - max_timestamp = max(max_timestamp, int(event['time'])) - status[event['status']] += 1 - container_name = event['id'][:12] - if event['id'] in ids_to_names: - container_name = "%s %s" % (container_name, ids_to_names[event['id']]) - status_change.append([container_name, event['status']]) - - status_text = ", ".join(["%d %s" % (count, st) for st, count in status.iteritems()]) - msg_title = "%s %s on %s" % (image_name, status_text, self.hostname) - msg_body = ("%%%\n" - "{image_name} {status} on {hostname}\n" - "```\n{status_changes}\n```\n" - "%%%").format( - image_name=image_name, - status=status_text, - hostname=self.hostname, - status_changes="\n".join( - ["%s \t%s" % (change[1].upper(), change[0]) for change in status_change]) - ) - events.append({ - 'timestamp': max_timestamp, - 'host': self.hostname, - 'event_type': EVENT_TYPE, - 'msg_title': msg_title, - 'msg_text': msg_body, - 'source_type_name': EVENT_TYPE, - 'event_object': 'docker:%s' % image_name, - }) - - return events - - def _report_events(self, events): - for ev in events: - self.log.debug("Creating event: %s" % ev['msg_title']) - self.event(ev) - - - # Docker API - - def _get_containers(self, instance, with_size=False, get_all=False): - """Gets the list of running/all containers in Docker.""" - return self._get_json("%(url)s/containers/json" % instance, params={'size': with_size, 'all': get_all}) - - def _get_images(self, instance, with_size=True, get_all=False): - """Gets the list of images in Docker.""" - return self._get_json("%(url)s/images/json" % instance, params={'all': get_all}) - - def _get_events(self, instance): - """Get the list of events """ - now = int(time.time()) - try: - result = self._get_json( - "%s/events" % instance["url"], - params={ - "until": now, - "since": self._last_event_collection_ts[instance["url"]] or now - 60, - }, - multi=True - ) - self._last_event_collection_ts[instance["url"]] = now - if type(result) == dict: - result = [result] - return result - except DockerJSONDecodeError: - return [] - - def _get_json(self, uri, params=None, multi=False): - """Utility method to get and parse JSON streams.""" - if params: - uri = "%s?%s" % (uri, urllib.urlencode(params)) - self.log.debug("Connecting to Docker API at: %s" % uri) - req = urllib2.Request(uri, None) - - try: - request = self.url_opener.open(req) - except urllib2.URLError, e: - if "Errno 13" in str(e): - raise Exception("Unable to connect to socket. dd-agent user must be part of the 'docker' group") - raise - - response = request.read() - response = response.replace('\n', '') # Some Docker API versions occassionally send newlines in responses - self.log.debug('Docker API response: %s', response) - if multi and "}{" in response: # docker api sometimes returns juxtaposed json dictionaries - response = "[{0}]".format(response.replace("}{", "},{")) - - if not response: - return [] - - try: - return json.loads(response) - except Exception as e: - self.log.error('Failed to parse Docker API response: %s', response) - raise DockerJSONDecodeError - - # Cgroups - - def _find_cgroup_filename_pattern(self): - if self._mountpoints: - # We try with different cgroups so that it works even if only one is properly working - for mountpoint in self._mountpoints.values(): - stat_file_path_lxc = os.path.join(mountpoint, "lxc") - stat_file_path_docker = os.path.join(mountpoint, "docker") - stat_file_path_coreos = os.path.join(mountpoint, "system.slice") - - if os.path.exists(stat_file_path_lxc): - return os.path.join('%(mountpoint)s/lxc/%(id)s/%(file)s') - elif os.path.exists(stat_file_path_docker): - return os.path.join('%(mountpoint)s/docker/%(id)s/%(file)s') - elif os.path.exists(stat_file_path_coreos): - return os.path.join('%(mountpoint)s/system.slice/docker-%(id)s.scope/%(file)s') - - raise Exception("Cannot find Docker cgroup directory. Be sure your system is supported.") - - def _get_cgroup_file(self, cgroup, container_id, filename): - # This can't be initialized at startup because cgroups may not be mounted yet - if not self._cgroup_filename_pattern: - self._cgroup_filename_pattern = self._find_cgroup_filename_pattern() - - return self._cgroup_filename_pattern % (dict( - mountpoint=self._mountpoints[cgroup], - id=container_id, - file=filename, - )) - - def _find_cgroup(self, hierarchy, docker_root): - """Finds the mount point for a specified cgroup hierarchy. Works with - old style and new style mounts.""" - with open(os.path.join(docker_root, "/proc/mounts"), 'r') as fp: - mounts = map(lambda x: x.split(), fp.read().splitlines()) - - cgroup_mounts = filter(lambda x: x[2] == "cgroup", mounts) - if len(cgroup_mounts) == 0: - raise Exception("Can't find mounted cgroups. If you run the Agent inside a container," - " please refer to the documentation.") - # Old cgroup style - if len(cgroup_mounts) == 1: - return os.path.join(docker_root, cgroup_mounts[0][1]) - - candidate = None - for _, mountpoint, _, opts, _, _ in cgroup_mounts: - if hierarchy in opts: - if mountpoint.startswith("/host/"): - return os.path.join(docker_root, mountpoint) - candidate = mountpoint - if candidate is not None: - return os.path.join(docker_root, candidate) - raise Exception("Can't find mounted %s cgroups." % hierarchy) - - - def _parse_cgroup_file(self, stat_file): - """Parses a cgroup pseudo file for key/values.""" - self.log.debug("Opening cgroup file: %s" % stat_file) - try: - with open(stat_file, 'r') as fp: - return dict(map(lambda x: x.split(), fp.read().splitlines())) - except IOError: - # It is possible that the container got stopped between the API call and now - self.log.info("Can't open %s. Metrics for this container are skipped." % stat_file) diff --git a/pkg/py/checks/docker_daemon.py b/pkg/py/checks/docker_daemon.py deleted file mode 100644 index 028945d18c88..000000000000 --- a/pkg/py/checks/docker_daemon.py +++ /dev/null @@ -1,722 +0,0 @@ -# stdlib -import os -import re -import requests -import time -import socket -import urllib2 -from collections import defaultdict, Counter, deque - -# project -from checks import AgentCheck -from config import _is_affirmative -from utils.dockerutil import find_cgroup, find_cgroup_filename_pattern, get_client, MountException, \ - set_docker_settings, image_tag_extractor, container_name_extractor -from utils.kubeutil import get_kube_labels -from utils.platform import Platform - - -EVENT_TYPE = 'docker' -SERVICE_CHECK_NAME = 'docker.service_up' -SIZE_REFRESH_RATE = 5 # Collect container sizes every 5 iterations of the check -MAX_CGROUP_LISTING_RETRIES = 3 -CONTAINER_ID_RE = re.compile('[0-9a-f]{64}') -POD_NAME_LABEL = "io.kubernetes.pod.name" - -GAUGE = AgentCheck.gauge -RATE = AgentCheck.rate -HISTORATE = AgentCheck.generate_historate_func(["container_name"]) -HISTO = AgentCheck.generate_histogram_func(["container_name"]) -FUNC_MAP = { - GAUGE: {True: HISTO, False: GAUGE}, - RATE: {True: HISTORATE, False: RATE} -} - -CGROUP_METRICS = [ - { - "cgroup": "memory", - "file": "memory.stat", - "metrics": { - "cache": ("docker.mem.cache", GAUGE), - "rss": ("docker.mem.rss", GAUGE), - "swap": ("docker.mem.swap", GAUGE), - }, - "to_compute": { - # We only get these metrics if they are properly set, i.e. they are a "reasonable" value - "docker.mem.limit": (["hierarchical_memory_limit"], lambda x: float(x) if float(x) < 2 ** 60 else None, GAUGE), - "docker.mem.sw_limit": (["hierarchical_memsw_limit"], lambda x: float(x) if float(x) < 2 ** 60 else None, GAUGE), - "docker.mem.in_use": (["rss", "hierarchical_memory_limit"], lambda x,y: float(x)/float(y) if float(y) < 2 ** 60 else None, GAUGE), - "docker.mem.sw_in_use": (["swap", "rss", "hierarchical_memsw_limit"], lambda x,y,z: float(x + y)/float(z) if float(z) < 2 ** 60 else None, GAUGE) - - } - }, - { - "cgroup": "cpuacct", - "file": "cpuacct.stat", - "metrics": { - "user": ("docker.cpu.user", RATE), - "system": ("docker.cpu.system", RATE), - }, - }, - { - "cgroup": "blkio", - "file": 'blkio.throttle.io_service_bytes', - "metrics": { - "io_read": ("docker.io.read_bytes", RATE), - "io_write": ("docker.io.write_bytes", RATE), - }, - }, -] - -DEFAULT_CONTAINER_TAGS = [ - "docker_image", - "image_name", - "image_tag", -] - -DEFAULT_PERFORMANCE_TAGS = [ - "container_name", - "docker_image", - "image_name", - "image_tag", -] - -DEFAULT_IMAGE_TAGS = [ - 'image_name', - 'image_tag' -] - - -TAG_EXTRACTORS = { - "docker_image": lambda c: [c["Image"]], - "image_name": lambda c: image_tag_extractor(c, 0), - "image_tag": lambda c: image_tag_extractor(c, 1), - "container_command": lambda c: [c["Command"]], - "container_name": container_name_extractor, -} - -CONTAINER = "container" -PERFORMANCE = "performance" -FILTERED = "filtered" -IMAGE = "image" - - -def get_mountpoints(docker_root): - mountpoints = {} - for metric in CGROUP_METRICS: - mountpoints[metric["cgroup"]] = find_cgroup(metric["cgroup"], docker_root) - return mountpoints - -def get_filters(include, exclude): - # The reasoning is to check exclude first, so we can skip if there is no exclude - if not exclude: - return - - filtered_tag_names = [] - exclude_patterns = [] - include_patterns = [] - - # Compile regex - for rule in exclude: - exclude_patterns.append(re.compile(rule)) - filtered_tag_names.append(rule.split(':')[0]) - for rule in include: - include_patterns.append(re.compile(rule)) - filtered_tag_names.append(rule.split(':')[0]) - - return set(exclude_patterns), set(include_patterns), set(filtered_tag_names) - - -class DockerDaemon(AgentCheck): - """Collect metrics and events from Docker API and cgroups.""" - - def __init__(self, name, init_config, agentConfig, instances=None): - if instances is not None and len(instances) > 1: - raise Exception("Docker check only supports one configured instance.") - AgentCheck.__init__(self, name, init_config, - agentConfig, instances=instances) - - self.init_success = False - self.init() - - def is_k8s(self): - return self.is_check_enabled("kubernetes") - - def init(self): - try: - # We configure the check with the right cgroup settings for this host - # Just needs to be done once - instance = self.instances[0] - set_docker_settings(self.init_config, instance) - - self.client = get_client() - self._docker_root = self.init_config.get('docker_root', '/') - self._mountpoints = get_mountpoints(self._docker_root) - self.cgroup_listing_retries = 0 - self._latest_size_query = 0 - self._filtered_containers = set() - self._disable_net_metrics = False - - # At first run we'll just collect the events from the latest 60 secs - self._last_event_collection_ts = int(time.time()) - 60 - - # Set tagging options - self.custom_tags = instance.get("tags", []) - self.collect_labels_as_tags = instance.get("collect_labels_as_tags", []) - self.kube_labels = {} - - self.use_histogram = _is_affirmative(instance.get('use_histogram', False)) - performance_tags = instance.get("performance_tags", DEFAULT_PERFORMANCE_TAGS) - - self.tag_names = { - CONTAINER: instance.get("container_tags", DEFAULT_CONTAINER_TAGS), - PERFORMANCE: performance_tags, - IMAGE: instance.get('image_tags', DEFAULT_IMAGE_TAGS) - - } - - # Set filtering settings - if not instance.get("exclude"): - self._filtering_enabled = False - if instance.get("include"): - self.log.warning("You must specify an exclude section to enable filtering") - else: - self._filtering_enabled = True - include = instance.get("include", []) - exclude = instance.get("exclude", []) - self._exclude_patterns, self._include_patterns, _filtered_tag_names = get_filters(include, exclude) - self.tag_names[FILTERED] = _filtered_tag_names - - - # Other options - self.collect_image_stats = _is_affirmative(instance.get('collect_images_stats', False)) - self.collect_container_size = _is_affirmative(instance.get('collect_container_size', False)) - self.collect_events = _is_affirmative(instance.get('collect_events', True)) - self.collect_image_size = _is_affirmative(instance.get('collect_image_size', False)) - self.collect_ecs_tags = _is_affirmative(instance.get('ecs_tags', True)) and Platform.is_ecs_instance() - - self.ecs_tags = {} - - except Exception, e: - self.log.critical(e) - self.warning("Initialization failed. Will retry at next iteration") - else: - self.init_success = True - - def check(self, instance): - """Run the Docker check for one instance.""" - if not self.init_success: - # Initialization can fail if cgroups are not ready. So we retry if needed - # https://github.com/DataDog/dd-agent/issues/1896 - self.init() - if not self.init_success: - # Initialization failed, will try later - return - - # Report image metrics - if self.collect_image_stats: - self._count_and_weigh_images() - - if self.collect_ecs_tags: - self.refresh_ecs_tags() - - if self.is_k8s(): - self.kube_labels = get_kube_labels() - - # Get the list of containers and the index of their names - containers_by_id = self._get_and_count_containers() - containers_by_id = self._crawl_container_pids(containers_by_id) - - # Report performance container metrics (cpu, mem, net, io) - self._report_performance_metrics(containers_by_id) - - if self.collect_container_size: - self._report_container_size(containers_by_id) - - # Send events from Docker API - if self.collect_events: - self._process_events(containers_by_id) - - def _count_and_weigh_images(self): - try: - tags = self._get_tags() - active_images = self.client.images(all=False) - active_images_len = len(active_images) - all_images_len = len(self.client.images(quiet=True, all=True)) - self.gauge("docker.images.available", active_images_len, tags=tags) - self.gauge("docker.images.intermediate", (all_images_len - active_images_len), tags=tags) - - if self.collect_image_size: - self._report_image_size(active_images) - - except Exception, e: - # It's not an important metric, keep going if it fails - self.warning("Failed to count Docker images. Exception: {0}".format(e)) - - def _get_and_count_containers(self): - """List all the containers from the API, filter and count them.""" - - # Querying the size of containers is slow, we don't do it at each run - must_query_size = self.collect_container_size and self._latest_size_query == 0 - self._latest_size_query = (self._latest_size_query + 1) % SIZE_REFRESH_RATE - - running_containers_count = Counter() - all_containers_count = Counter() - - try: - containers = self.client.containers(all=True, size=must_query_size) - except Exception, e: - message = "Unable to list Docker containers: {0}".format(e) - self.service_check(SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - message=message) - raise Exception(message) - - else: - self.service_check(SERVICE_CHECK_NAME, AgentCheck.OK) - - # Filter containers according to the exclude/include rules - self._filter_containers(containers) - - containers_by_id = {} - - for container in containers: - container_name = container_name_extractor(container)[0] - - container_status_tags = self._get_tags(container, CONTAINER) - - all_containers_count[tuple(sorted(container_status_tags))] += 1 - if self._is_container_running(container): - running_containers_count[tuple(sorted(container_status_tags))] += 1 - - # Check if the container is included/excluded via its tags - if self._is_container_excluded(container): - self.log.debug("Container {0} is excluded".format(container_name)) - continue - - containers_by_id[container['Id']] = container - - for tags, count in running_containers_count.iteritems(): - self.gauge("docker.containers.running", count, tags=list(tags)) - - for tags, count in all_containers_count.iteritems(): - stopped_count = count - running_containers_count[tags] - self.gauge("docker.containers.stopped", stopped_count, tags=list(tags)) - - return containers_by_id - - def _is_container_running(self, container): - """Tell if a container is running, according to its status. - - There is no "nice" API field to figure it out. We just look at the "Status" field, knowing how it is generated. - See: https://github.com/docker/docker/blob/v1.6.2/daemon/state.go#L35 - """ - return container["Status"].startswith("Up") or container["Status"].startswith("Restarting") - - def _get_tags(self, entity=None, tag_type=None): - """Generate the tags for a given entity (container or image) according to a list of tag names.""" - # Start with custom tags - tags = list(self.custom_tags) - - # Collect pod names as tags on kubernetes - if self.is_k8s() and POD_NAME_LABEL not in self.collect_labels_as_tags: - self.collect_labels_as_tags.append(POD_NAME_LABEL) - - if entity is not None: - pod_name = None - - # Get labels as tags - labels = entity.get("Labels") - if labels is not None: - for k in self.collect_labels_as_tags: - if k in labels: - v = labels[k] - if k == POD_NAME_LABEL and self.is_k8s(): - pod_name = v - k = "pod_name" - if "-" in pod_name: - replication_controller = "-".join(pod_name.split("-")[:-1]) - if "/" in replication_controller: - namespace, replication_controller = replication_controller.split("/", 1) - tags.append("kube_namespace:%s" % namespace) - - tags.append("kube_replication_controller:%s" % replication_controller) - - if not v: - tags.append(k) - else: - tags.append("%s:%s" % (k,v)) - if k == POD_NAME_LABEL and self.is_k8s() and k not in labels: - tags.append("pod_name:no_pod") - - # Get entity specific tags - if tag_type is not None: - tag_names = self.tag_names[tag_type] - for tag_name in tag_names: - tag_value = self._extract_tag_value(entity, tag_name) - if tag_value is not None: - for t in tag_value: - tags.append('%s:%s' % (tag_name, str(t).strip())) - - # Add ECS tags - if self.collect_ecs_tags: - entity_id = entity.get("Id") - if entity_id in self.ecs_tags: - ecs_tags = self.ecs_tags[entity_id] - tags.extend(ecs_tags) - - # Add kube labels - if self.is_k8s(): - kube_tags = self.kube_labels.get(pod_name) - if kube_tags: - tags.extend(list(kube_tags)) - - - return tags - - def _extract_tag_value(self, entity, tag_name): - """Extra tag information from the API result (containers or images). - Cache extracted tags inside the entity object. - """ - if tag_name not in TAG_EXTRACTORS: - self.warning("{0} isn't a supported tag".format(tag_name)) - return - - # Check for already extracted tags - if "_tag_values" not in entity: - entity["_tag_values"] = {} - - if tag_name not in entity["_tag_values"]: - entity["_tag_values"][tag_name] = TAG_EXTRACTORS[tag_name](entity) - - return entity["_tag_values"][tag_name] - - def refresh_ecs_tags(self): - ecs_config = self.client.inspect_container('ecs-agent') - ip = ecs_config.get('NetworkSettings', {}).get('IPAddress') - ports = ecs_config.get('NetworkSettings', {}).get('Ports') - port = ports.keys()[0].split('/')[0] if ports else None - ecs_tags = {} - if ip and port: - tasks = requests.get('http://%s:%s/v1/tasks' % (ip, port)).json() - for task in tasks.get('Tasks', []): - for container in task.get('Containers', []): - tags = ['task_name:%s' % task['Family'], 'task_version:%s' % task['Version']] - ecs_tags[container['DockerId']] = tags - - self.ecs_tags = ecs_tags - - def _filter_containers(self, containers): - if not self._filtering_enabled: - return - - self._filtered_containers = set() - for container in containers: - container_tags = self._get_tags(container, FILTERED) - if self._are_tags_filtered(container_tags): - container_name = container_name_extractor(container)[0] - self._filtered_containers.add(container_name) - self.log.debug("Container {0} is filtered".format(container["Names"][0])) - - - def _are_tags_filtered(self, tags): - if self._tags_match_patterns(tags, self._exclude_patterns): - if self._tags_match_patterns(tags, self._include_patterns): - return False - return True - return False - - def _tags_match_patterns(self, tags, filters): - for rule in filters: - for tag in tags: - if re.match(rule, tag): - return True - return False - - def _is_container_excluded(self, container): - """Check if a container is excluded according to the filter rules. - - Requires _filter_containers to run first. - """ - container_name = container_name_extractor(container)[0] - return container_name in self._filtered_containers - - def _report_container_size(self, containers_by_id): - container_list_with_size = None - for container in containers_by_id.itervalues(): - if self._is_container_excluded(container): - continue - - tags = self._get_tags(container, PERFORMANCE) - m_func = FUNC_MAP[GAUGE][self.use_histogram] - if "SizeRw" in container: - - m_func(self, 'docker.container.size_rw', container['SizeRw'], - tags=tags) - if "SizeRootFs" in container: - m_func( - self, 'docker.container.size_rootfs', container['SizeRootFs'], - tags=tags) - - def _report_image_size(self, images): - for image in images: - tags = self._get_tags(image, IMAGE) - if 'VirtualSize' in image: - self.gauge('docker.image.virtual_size', image['VirtualSize'], tags=tags) - if 'Size' in image: - self.gauge('docker.image.size', image['Size'], tags=tags) - - # Performance metrics - - def _report_performance_metrics(self, containers_by_id): - - containers_without_proc_root = [] - for container in containers_by_id.itervalues(): - if self._is_container_excluded(container) or not self._is_container_running(container): - continue - - tags = self._get_tags(container, PERFORMANCE) - self._report_cgroup_metrics(container, tags) - if "_proc_root" not in container: - containers_without_proc_root.append(container_name_extractor(container)[0]) - continue - self._report_net_metrics(container, tags) - - if containers_without_proc_root: - message = "Couldn't find pid directory for container: {0}. They'll be missing network metrics".format( - ",".join(containers_without_proc_root)) - if not self.is_k8s(): - self.warning(message) - else: - # On kubernetes, this is kind of expected. Network metrics will be collected by the kubernetes integration anyway - self.log.debug(message) - - - def _report_cgroup_metrics(self, container, tags): - try: - for cgroup in CGROUP_METRICS: - stat_file = self._get_cgroup_file(cgroup["cgroup"], container['Id'], cgroup['file']) - stats = self._parse_cgroup_file(stat_file) - if stats: - for key, (dd_key, metric_func) in cgroup['metrics'].iteritems(): - metric_func = FUNC_MAP[metric_func][self.use_histogram] - if key in stats: - metric_func(self, dd_key, int(stats[key]), tags=tags) - - # Computed metrics - for mname, (key_list, fct, metric_func) in cgroup.get('to_compute', {}).iteritems(): - values = [stats[key] for key in key_list if key in stats] - if len(values) != len(key_list): - self.log.debug("Couldn't compute {0}, some keys were missing.".format(mname)) - continue - value = fct(*values) - metric_func = FUNC_MAP[metric_func][self.use_histogram] - if value is not None: - metric_func(self, mname, value, tags=tags) - - except MountException as ex: - if self.cgroup_listing_retries > MAX_CGROUP_LISTING_RETRIES: - raise ex - else: - self.warning("Couldn't find the cgroup files. Skipping the CGROUP_METRICS for now." - "Will retry {0} times before failing.".format(MAX_CGROUP_LISTING_RETRIES - self.cgroup_listing_retries)) - self.cgroup_listing_retries += 1 - else: - self.cgroup_listing_retries = 0 - - def _report_net_metrics(self, container, tags): - """Find container network metrics by looking at /proc/$PID/net/dev of the container process.""" - if self._disable_net_metrics: - self.log.debug("Network metrics are disabled. Skipping") - return - - proc_net_file = os.path.join(container['_proc_root'], 'net/dev') - try: - with open(proc_net_file, 'r') as fp: - lines = fp.readlines() - """Two first lines are headers: - Inter-| Receive | Transmit - face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed - """ - for l in lines[2:]: - cols = l.split(':', 1) - interface_name = str(cols[0]).strip() - if interface_name == 'eth0': - x = cols[1].split() - m_func = FUNC_MAP[RATE][self.use_histogram] - m_func(self, "docker.net.bytes_rcvd", long(x[0]), tags) - m_func(self, "docker.net.bytes_sent", long(x[8]), tags) - break - except Exception, e: - # It is possible that the container got stopped between the API call and now - self.warning("Failed to report IO metrics from file {0}. Exception: {1}".format(proc_net_file, e)) - - def _process_events(self, containers_by_id): - try: - api_events = self._get_events() - aggregated_events = self._pre_aggregate_events(api_events, containers_by_id) - events = self._format_events(aggregated_events, containers_by_id) - except (socket.timeout, urllib2.URLError): - self.warning('Timeout when collecting events. Events will be missing.') - return - except Exception, e: - self.warning("Unexpected exception when collecting events: {0}. " - "Events will be missing".format(e)) - return - - for ev in events: - self.log.debug("Creating event: %s" % ev['msg_title']) - self.event(ev) - - def _get_events(self): - """Get the list of events.""" - now = int(time.time()) - events = [] - event_generator = self.client.events(since=self._last_event_collection_ts, - until=now, decode=True) - for event in event_generator: - if event != '': - events.append(event) - self._last_event_collection_ts = now - return events - - def _pre_aggregate_events(self, api_events, containers_by_id): - # Aggregate events, one per image. Put newer events first. - events = defaultdict(deque) - for event in api_events: - # Skip events related to filtered containers - container = containers_by_id.get(event['id']) - if container is not None and self._is_container_excluded(container): - self.log.debug("Excluded event: container {0} status changed to {1}".format( - event['id'], event['status'])) - continue - # Known bug: from may be missing - if 'from' in event: - events[event['from']].appendleft(event) - return events - - def _format_events(self, aggregated_events, containers_by_id): - events = [] - for image_name, event_group in aggregated_events.iteritems(): - max_timestamp = 0 - status = defaultdict(int) - status_change = [] - container_names = set() - for event in event_group: - max_timestamp = max(max_timestamp, int(event['time'])) - status[event['status']] += 1 - container_name = event['id'][:11] - if event['id'] in containers_by_id: - container_name = container_name_extractor(containers_by_id[event['id']])[0] - - container_names.add(container_name) - status_change.append([container_name, event['status']]) - - status_text = ", ".join(["%d %s" % (count, st) for st, count in status.iteritems()]) - msg_title = "%s %s on %s" % (image_name, status_text, self.hostname) - msg_body = ( - "%%%\n" - "{image_name} {status} on {hostname}\n" - "```\n{status_changes}\n```\n" - "%%%" - ).format( - image_name=image_name, - status=status_text, - hostname=self.hostname, - status_changes="\n".join( - ["%s \t%s" % (change[1].upper(), change[0]) for change in status_change]) - ) - events.append({ - 'timestamp': max_timestamp, - 'host': self.hostname, - 'event_type': EVENT_TYPE, - 'msg_title': msg_title, - 'msg_text': msg_body, - 'source_type_name': EVENT_TYPE, - 'event_object': 'docker:%s' % image_name, - 'tags': ['container_name:%s' % c_name for c_name in container_names] - }) - - return events - - # Cgroups - - def _get_cgroup_file(self, cgroup, container_id, filename): - """Find a specific cgroup file, containing metrics to extract.""" - params = { - "mountpoint": self._mountpoints[cgroup], - "id": container_id, - "file": filename, - } - - return find_cgroup_filename_pattern(self._mountpoints, container_id) % (params) - - def _parse_cgroup_file(self, stat_file): - """Parse a cgroup pseudo file for key/values.""" - self.log.debug("Opening cgroup file: %s" % stat_file) - try: - with open(stat_file, 'r') as fp: - if 'blkio' in stat_file: - return self._parse_blkio_metrics(fp.read().splitlines()) - else: - return dict(map(lambda x: x.split(' ', 1), fp.read().splitlines())) - except IOError: - # It is possible that the container got stopped between the API call and now - self.log.info("Can't open %s. Metrics for this container are skipped." % stat_file) - - def _parse_blkio_metrics(self, stats): - """Parse the blkio metrics.""" - metrics = { - 'io_read': 0, - 'io_write': 0, - } - for line in stats: - if 'Read' in line: - metrics['io_read'] += int(line.split()[2]) - if 'Write' in line: - metrics['io_write'] += int(line.split()[2]) - return metrics - - # proc files - def _crawl_container_pids(self, container_dict): - """Crawl `/proc` to find container PIDs and add them to `containers_by_id`.""" - proc_path = os.path.join(self._docker_root, 'proc') - pid_dirs = [_dir for _dir in os.listdir(proc_path) if _dir.isdigit()] - - if len(pid_dirs) == 0: - self.warning("Unable to find any pid directory in {0}. " - "If you are running the agent in a container, make sure to " - 'share the volume properly: "/proc:/host/proc:ro". ' - "See https://github.com/DataDog/docker-dd-agent/blob/master/README.md for more information. " - "Network metrics will be missing".format(proc_path)) - self._disable_net_metrics = True - return container_dict - - self._disable_net_metrics = False - - for folder in pid_dirs: - - try: - path = os.path.join(proc_path, folder, 'cgroup') - with open(path, 'r') as f: - content = [line.strip().split(':') for line in f.readlines()] - except Exception, e: - self.warning("Cannot read %s : %s" % (path, str(e))) - continue - - try: - for line in content: - if line[1] in ('cpu,cpuacct', 'cpuacct,cpu', 'cpuacct') and 'docker' in line[2]: - cpuacct = line[2] - break - else: - continue - - match = CONTAINER_ID_RE.search(cpuacct) - if match: - container_id = match.group(0) - container_dict[container_id]['_pid'] = folder - container_dict[container_id]['_proc_root'] = os.path.join(proc_path, folder) - except Exception, e: - self.warning("Cannot parse %s content: %s" % (path, str(e))) - continue - return container_dict diff --git a/pkg/py/checks/elastic.py b/pkg/py/checks/elastic.py deleted file mode 100644 index c2fda307eca8..000000000000 --- a/pkg/py/checks/elastic.py +++ /dev/null @@ -1,537 +0,0 @@ -# stdlib -from collections import defaultdict, namedtuple -import time -import urlparse - -# 3p -import requests - -# project -from checks import AgentCheck -from config import _is_affirmative -from util import headers - - -class NodeNotFound(Exception): - pass - - -ESInstanceConfig = namedtuple( - 'ESInstanceConfig', [ - 'pshard_stats', - 'cluster_stats', - 'password', - 'service_check_tags', - 'tags', - 'timeout', - 'url', - 'username', - ]) - - -class ESCheck(AgentCheck): - SERVICE_CHECK_CONNECT_NAME = 'elasticsearch.can_connect' - SERVICE_CHECK_CLUSTER_STATUS = 'elasticsearch.cluster_health' - - DEFAULT_TIMEOUT = 5 - - # Clusterwise metrics, pre aggregated on ES, compatible with all ES versions - PRIMARY_SHARD_METRICS = { - "elasticsearch.primaries.docs.count": ("gauge", "_all.primaries.docs.count"), - "elasticsearch.primaries.docs.deleted": ("gauge", "_all.primaries.docs.deleted"), - "elasticsearch.primaries.store.size": ("gauge", "_all.primaries.store.size_in_bytes"), - "elasticsearch.primaries.indexing.index.total": ("gauge", "_all.primaries.indexing.index_total"), - "elasticsearch.primaries.indexing.index.time": ("gauge", "_all.primaries.indexing.index_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.primaries.indexing.index.current": ("gauge", "_all.primaries.indexing.index_current"), - "elasticsearch.primaries.indexing.delete.total": ("gauge", "_all.primaries.indexing.delete_total"), - "elasticsearch.primaries.indexing.delete.time": ("gauge", "_all.primaries.indexing.delete_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.primaries.indexing.delete.current": ("gauge", "_all.primaries.indexing.delete_current"), - "elasticsearch.primaries.get.total": ("gauge", "_all.primaries.get.total"), - "elasticsearch.primaries.get.time": ("gauge", "_all.primaries.get.time_in_millis", lambda v: float(v)/1000), - "elasticsearch.primaries.get.current": ("gauge", "_all.primaries.get.current"), - "elasticsearch.primaries.get.exists.total": ("gauge", "_all.primaries.get.exists_total"), - "elasticsearch.primaries.get.exists.time": ("gauge", "_all.primaries.get.exists_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.primaries.get.missing.total": ("gauge", "_all.primaries.get.missing_total"), - "elasticsearch.primaries.get.missing.time": ("gauge", "_all.primaries.get.missing_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.primaries.search.query.total": ("gauge", "_all.primaries.search.query_total"), - "elasticsearch.primaries.search.query.time": ("gauge", "_all.primaries.search.query_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.primaries.search.query.current": ("gauge", "_all.primaries.search.query_current"), - "elasticsearch.primaries.search.fetch.total": ("gauge", "_all.primaries.search.fetch_total"), - "elasticsearch.primaries.search.fetch.time": ("gauge", "_all.primaries.search.fetch_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.primaries.search.fetch.current": ("gauge", "_all.primaries.search.fetch_current") - } - - PRIMARY_SHARD_METRICS_POST_1_0 = { - "elasticsearch.primaries.merges.current": ("gauge", "_all.primaries.merges.current"), - "elasticsearch.primaries.merges.current.docs": ("gauge", "_all.primaries.merges.current_docs"), - "elasticsearch.primaries.merges.current.size": ("gauge", "_all.primaries.merges.current_size_in_bytes"), - "elasticsearch.primaries.merges.total": ("gauge", "_all.primaries.merges.total"), - "elasticsearch.primaries.merges.total.time": ("gauge", "_all.primaries.merges.total_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.primaries.merges.total.docs": ("gauge", "_all.primaries.merges.total_docs"), - "elasticsearch.primaries.merges.total.size": ("gauge", "_all.primaries.merges.total_size_in_bytes"), - "elasticsearch.primaries.refresh.total": ("gauge", "_all.primaries.refresh.total"), - "elasticsearch.primaries.refresh.total.time": ("gauge", "_all.primaries.refresh.total_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.primaries.flush.total": ("gauge", "_all.primaries.flush.total"), - "elasticsearch.primaries.flush.total.time": ("gauge", "_all.primaries.flush.total_time_in_millis", lambda v: float(v)/1000) - } - - STATS_METRICS = { # Metrics that are common to all Elasticsearch versions - "elasticsearch.docs.count": ("gauge", "indices.docs.count"), - "elasticsearch.docs.deleted": ("gauge", "indices.docs.deleted"), - "elasticsearch.store.size": ("gauge", "indices.store.size_in_bytes"), - "elasticsearch.indexing.index.total": ("gauge", "indices.indexing.index_total"), - "elasticsearch.indexing.index.time": ("gauge", "indices.indexing.index_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.indexing.index.current": ("gauge", "indices.indexing.index_current"), - "elasticsearch.indexing.delete.total": ("gauge", "indices.indexing.delete_total"), - "elasticsearch.indexing.delete.time": ("gauge", "indices.indexing.delete_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.indexing.delete.current": ("gauge", "indices.indexing.delete_current"), - "elasticsearch.get.total": ("gauge", "indices.get.total"), - "elasticsearch.get.time": ("gauge", "indices.get.time_in_millis", lambda v: float(v)/1000), - "elasticsearch.get.current": ("gauge", "indices.get.current"), - "elasticsearch.get.exists.total": ("gauge", "indices.get.exists_total"), - "elasticsearch.get.exists.time": ("gauge", "indices.get.exists_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.get.missing.total": ("gauge", "indices.get.missing_total"), - "elasticsearch.get.missing.time": ("gauge", "indices.get.missing_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.search.query.total": ("gauge", "indices.search.query_total"), - "elasticsearch.search.query.time": ("gauge", "indices.search.query_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.search.query.current": ("gauge", "indices.search.query_current"), - "elasticsearch.search.fetch.total": ("gauge", "indices.search.fetch_total"), - "elasticsearch.search.fetch.time": ("gauge", "indices.search.fetch_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.search.fetch.current": ("gauge", "indices.search.fetch_current"), - "elasticsearch.merges.current": ("gauge", "indices.merges.current"), - "elasticsearch.merges.current.docs": ("gauge", "indices.merges.current_docs"), - "elasticsearch.merges.current.size": ("gauge", "indices.merges.current_size_in_bytes"), - "elasticsearch.merges.total": ("gauge", "indices.merges.total"), - "elasticsearch.merges.total.time": ("gauge", "indices.merges.total_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.merges.total.docs": ("gauge", "indices.merges.total_docs"), - "elasticsearch.merges.total.size": ("gauge", "indices.merges.total_size_in_bytes"), - "elasticsearch.refresh.total": ("gauge", "indices.refresh.total"), - "elasticsearch.refresh.total.time": ("gauge", "indices.refresh.total_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.flush.total": ("gauge", "indices.flush.total"), - "elasticsearch.flush.total.time": ("gauge", "indices.flush.total_time_in_millis", lambda v: float(v)/1000), - "elasticsearch.process.open_fd": ("gauge", "process.open_file_descriptors"), - "elasticsearch.transport.rx_count": ("gauge", "transport.rx_count"), - "elasticsearch.transport.tx_count": ("gauge", "transport.tx_count"), - "elasticsearch.transport.rx_size": ("gauge", "transport.rx_size_in_bytes"), - "elasticsearch.transport.tx_size": ("gauge", "transport.tx_size_in_bytes"), - "elasticsearch.transport.server_open": ("gauge", "transport.server_open"), - "elasticsearch.thread_pool.bulk.active": ("gauge", "thread_pool.bulk.active"), - "elasticsearch.thread_pool.bulk.threads": ("gauge", "thread_pool.bulk.threads"), - "elasticsearch.thread_pool.bulk.queue": ("gauge", "thread_pool.bulk.queue"), - "elasticsearch.thread_pool.flush.active": ("gauge", "thread_pool.flush.active"), - "elasticsearch.thread_pool.flush.threads": ("gauge", "thread_pool.flush.threads"), - "elasticsearch.thread_pool.flush.queue": ("gauge", "thread_pool.flush.queue"), - "elasticsearch.thread_pool.generic.active": ("gauge", "thread_pool.generic.active"), - "elasticsearch.thread_pool.generic.threads": ("gauge", "thread_pool.generic.threads"), - "elasticsearch.thread_pool.generic.queue": ("gauge", "thread_pool.generic.queue"), - "elasticsearch.thread_pool.get.active": ("gauge", "thread_pool.get.active"), - "elasticsearch.thread_pool.get.threads": ("gauge", "thread_pool.get.threads"), - "elasticsearch.thread_pool.get.queue": ("gauge", "thread_pool.get.queue"), - "elasticsearch.thread_pool.index.active": ("gauge", "thread_pool.index.active"), - "elasticsearch.thread_pool.index.threads": ("gauge", "thread_pool.index.threads"), - "elasticsearch.thread_pool.index.queue": ("gauge", "thread_pool.index.queue"), - "elasticsearch.thread_pool.management.active": ("gauge", "thread_pool.management.active"), - "elasticsearch.thread_pool.management.threads": ("gauge", "thread_pool.management.threads"), - "elasticsearch.thread_pool.management.queue": ("gauge", "thread_pool.management.queue"), - "elasticsearch.thread_pool.merge.active": ("gauge", "thread_pool.merge.active"), - "elasticsearch.thread_pool.merge.threads": ("gauge", "thread_pool.merge.threads"), - "elasticsearch.thread_pool.merge.queue": ("gauge", "thread_pool.merge.queue"), - "elasticsearch.thread_pool.percolate.active": ("gauge", "thread_pool.percolate.active"), - "elasticsearch.thread_pool.percolate.threads": ("gauge", "thread_pool.percolate.threads"), - "elasticsearch.thread_pool.percolate.queue": ("gauge", "thread_pool.percolate.queue"), - "elasticsearch.thread_pool.refresh.active": ("gauge", "thread_pool.refresh.active"), - "elasticsearch.thread_pool.refresh.threads": ("gauge", "thread_pool.refresh.threads"), - "elasticsearch.thread_pool.refresh.queue": ("gauge", "thread_pool.refresh.queue"), - "elasticsearch.thread_pool.search.active": ("gauge", "thread_pool.search.active"), - "elasticsearch.thread_pool.search.threads": ("gauge", "thread_pool.search.threads"), - "elasticsearch.thread_pool.search.queue": ("gauge", "thread_pool.search.queue"), - "elasticsearch.thread_pool.snapshot.active": ("gauge", "thread_pool.snapshot.active"), - "elasticsearch.thread_pool.snapshot.threads": ("gauge", "thread_pool.snapshot.threads"), - "elasticsearch.thread_pool.snapshot.queue": ("gauge", "thread_pool.snapshot.queue"), - "elasticsearch.http.current_open": ("gauge", "http.current_open"), - "elasticsearch.http.total_opened": ("gauge", "http.total_opened"), - "jvm.mem.heap_committed": ("gauge", "jvm.mem.heap_committed_in_bytes"), - "jvm.mem.heap_used": ("gauge", "jvm.mem.heap_used_in_bytes"), - "jvm.mem.heap_in_use": ("gauge", "jvm.mem.heap_used_percent"), - "jvm.mem.heap_max": ("gauge", "jvm.mem.heap_max_in_bytes"), - "jvm.mem.non_heap_committed": ("gauge", "jvm.mem.non_heap_committed_in_bytes"), - "jvm.mem.non_heap_used": ("gauge", "jvm.mem.non_heap_used_in_bytes"), - "jvm.threads.count": ("gauge", "jvm.threads.count"), - "jvm.threads.peak_count": ("gauge", "jvm.threads.peak_count"), - } - - JVM_METRICS_POST_0_90_10 = { - "jvm.gc.collectors.young.count": ("gauge", "jvm.gc.collectors.young.collection_count"), - "jvm.gc.collectors.young.collection_time": ("gauge", "jvm.gc.collectors.young.collection_time_in_millis", lambda v: float(v)/1000), - "jvm.gc.collectors.old.count": ("gauge", "jvm.gc.collectors.old.collection_count"), - "jvm.gc.collectors.old.collection_time": ("gauge", "jvm.gc.collectors.old.collection_time_in_millis", lambda v: float(v)/1000) - } - - JVM_METRICS_PRE_0_90_10 = { - "jvm.gc.concurrent_mark_sweep.count": ("gauge", "jvm.gc.collectors.ConcurrentMarkSweep.collection_count"), - "jvm.gc.concurrent_mark_sweep.collection_time": ("gauge", "jvm.gc.collectors.ConcurrentMarkSweep.collection_time_in_millis", lambda v: float(v)/1000), - "jvm.gc.par_new.count": ("gauge", "jvm.gc.collectors.ParNew.collection_count"), - "jvm.gc.par_new.collection_time": ("gauge", "jvm.gc.collectors.ParNew.collection_time_in_millis", lambda v: float(v)/1000), - "jvm.gc.collection_count": ("gauge", "jvm.gc.collection_count"), - "jvm.gc.collection_time": ("gauge", "jvm.gc.collection_time_in_millis", lambda v: float(v)/1000), - } - - ADDITIONAL_METRICS_POST_0_90_5 = { - "elasticsearch.search.fetch.open_contexts": ("gauge", "indices.search.open_contexts"), - "elasticsearch.cache.filter.evictions": ("gauge", "indices.filter_cache.evictions"), - "elasticsearch.cache.filter.size": ("gauge", "indices.filter_cache.memory_size_in_bytes"), - "elasticsearch.id_cache.size": ("gauge", "indices.id_cache.memory_size_in_bytes"), - "elasticsearch.fielddata.size": ("gauge", "indices.fielddata.memory_size_in_bytes"), - "elasticsearch.fielddata.evictions": ("gauge", "indices.fielddata.evictions"), - } - - ADDITIONAL_METRICS_PRE_0_90_5 = { - "elasticsearch.cache.field.evictions": ("gauge", "indices.cache.field_evictions"), - "elasticsearch.cache.field.size": ("gauge", "indices.cache.field_size_in_bytes"), - "elasticsearch.cache.filter.count": ("gauge", "indices.cache.filter_count"), - "elasticsearch.cache.filter.evictions": ("gauge", "indices.cache.filter_evictions"), - "elasticsearch.cache.filter.size": ("gauge", "indices.cache.filter_size_in_bytes"), - } - - CLUSTER_HEALTH_METRICS = { - "elasticsearch.number_of_nodes": ("gauge", "number_of_nodes"), - "elasticsearch.number_of_data_nodes": ("gauge", "number_of_data_nodes"), - "elasticsearch.active_primary_shards": ("gauge", "active_primary_shards"), - "elasticsearch.active_shards": ("gauge", "active_shards"), - "elasticsearch.relocating_shards": ("gauge", "relocating_shards"), - "elasticsearch.initializing_shards": ("gauge", "initializing_shards"), - "elasticsearch.unassigned_shards": ("gauge", "unassigned_shards"), - "elasticsearch.cluster_status": ("gauge", "status", lambda v: {"red": 0, "yellow": 1, "green": 2}.get(v, -1)), - } - - CLUSTER_PENDING_TASKS = { - "elasticsearch.pending_tasks_total": ("gauge", "pending_task_total"), - "elasticsearch.pending_tasks_priority_high": ("gauge", "pending_tasks_priority_high"), - "elasticsearch.pending_tasks_priority_urgent": ("gauge", "pending_tasks_priority_urgent") - } - - SOURCE_TYPE_NAME = 'elasticsearch' - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - - # Host status needs to persist across all checks - self.cluster_status = {} - - def get_instance_config(self, instance): - url = instance.get('url') - if url is None: - raise Exception("An url must be specified in the instance") - - pshard_stats = _is_affirmative(instance.get('pshard_stats', False)) - - cluster_stats = _is_affirmative(instance.get('cluster_stats', False)) - if 'is_external' in instance: - cluster_stats = _is_affirmative(instance.get('is_external', False)) - - # Support URLs that have a path in them from the config, for - # backwards-compatibility. - parsed = urlparse.urlparse(url) - if parsed[2] != "": - url = "%s://%s" % (parsed[0], parsed[1]) - port = parsed.port - host = parsed.hostname - service_check_tags = [ - 'host:%s' % host, - 'port:%s' % port - ] - - # Tag by URL so we can differentiate the metrics - # from multiple instances - tags = ['url:%s' % url] - tags.extend(instance.get('tags', [])) - - timeout = instance.get('timeout') or self.DEFAULT_TIMEOUT - - config = ESInstanceConfig( - pshard_stats=pshard_stats, - cluster_stats=cluster_stats, - password=instance.get('password'), - service_check_tags=service_check_tags, - tags=tags, - timeout=timeout, - url=url, - username=instance.get('username') - ) - return config - - def check(self, instance): - config = self.get_instance_config(instance) - - # Check ES version for this instance and define parameters - # (URLs and metrics) accordingly - version = self._get_es_version(config) - - health_url, nodes_url, stats_url, pshard_stats_url, pending_tasks_url, stats_metrics, \ - pshard_stats_metrics = self._define_params(version, config.cluster_stats) - - # Load clusterwise data - if config.pshard_stats: - pshard_stats_url = urlparse.urljoin(config.url, pshard_stats_url) - pshard_stats_data = self._get_data(pshard_stats_url, config) - self._process_pshard_stats_data(pshard_stats_data, config, pshard_stats_metrics) - - # Load stats data. - stats_url = urlparse.urljoin(config.url, stats_url) - stats_data = self._get_data(stats_url, config) - self._process_stats_data(nodes_url, stats_data, stats_metrics, config) - - # Load the health data. - health_url = urlparse.urljoin(config.url, health_url) - health_data = self._get_data(health_url, config) - self._process_health_data(health_data, config) - - # Load the pending_tasks data. - pending_tasks_url = urlparse.urljoin(config.url, pending_tasks_url) - pending_tasks_data = self._get_data(pending_tasks_url, config) - self._process_pending_tasks_data(pending_tasks_data, config) - - # If we're here we did not have any ES conn issues - self.service_check( - self.SERVICE_CHECK_CONNECT_NAME, - AgentCheck.OK, - tags=config.service_check_tags - ) - - def _get_es_version(self, config): - """ Get the running version of elasticsearch. - """ - try: - data = self._get_data(config.url, config, send_sc=False) - version = map(int, data['version']['number'].split('.')[0:3]) - except Exception, e: - self.warning( - "Error while trying to get Elasticsearch version " - "from %s %s" - % (config.url, str(e)) - ) - version = [1, 0, 0] - - self.service_metadata('version', version) - self.log.debug("Elasticsearch version is %s" % version) - return version - - def _define_params(self, version, cluster_stats): - """ Define the set of URLs and METRICS to use depending on the - running ES version. - """ - - pshard_stats_url = "/_stats" - - if version >= [0, 90, 10]: - # ES versions 0.90.10 and above - health_url = "/_cluster/health?pretty=true" - nodes_url = "/_nodes?network=true" - pending_tasks_url = "/_cluster/pending_tasks?pretty=true" - - # For "external" clusters, we want to collect from all nodes. - if cluster_stats: - stats_url = "/_nodes/stats?all=true" - else: - stats_url = "/_nodes/_local/stats?all=true" - - additional_metrics = self.JVM_METRICS_POST_0_90_10 - else: - health_url = "/_cluster/health?pretty=true" - nodes_url = "/_cluster/nodes?network=true" - pending_tasks_url = None - if cluster_stats: - stats_url = "/_cluster/nodes/stats?all=true" - else: - stats_url = "/_cluster/nodes/_local/stats?all=true" - - additional_metrics = self.JVM_METRICS_PRE_0_90_10 - - stats_metrics = dict(self.STATS_METRICS) - stats_metrics.update(additional_metrics) - - if version >= [0, 90, 5]: - # ES versions 0.90.5 and above - additional_metrics = self.ADDITIONAL_METRICS_POST_0_90_5 - else: - # ES version 0.90.4 and below - additional_metrics = self.ADDITIONAL_METRICS_PRE_0_90_5 - - stats_metrics.update(additional_metrics) - - # Version specific stats metrics about the primary shards - pshard_stats_metrics = dict(self.PRIMARY_SHARD_METRICS) - - if version >= [1, 0, 0]: - additional_metrics = self.PRIMARY_SHARD_METRICS_POST_1_0 - - pshard_stats_metrics.update(additional_metrics) - - return health_url, nodes_url, stats_url, pshard_stats_url, pending_tasks_url, \ - stats_metrics, pshard_stats_metrics - - def _get_data(self, url, config, send_sc=True): - """ Hit a given URL and return the parsed json - """ - # Load basic authentication configuration, if available. - if config.username and config.password: - auth = (config.username, config.password) - else: - auth = None - - try: - resp = requests.get( - url, - timeout=config.timeout, - headers=headers(self.agentConfig), - auth=auth - ) - resp.raise_for_status() - except Exception as e: - if send_sc: - self.service_check( - self.SERVICE_CHECK_CONNECT_NAME, - AgentCheck.CRITICAL, - message="Error {0} when hitting {1}".format(e, url), - tags=config.service_check_tags - ) - raise - - return resp.json() - - def _process_pending_tasks_data(self, data, config): - p_tasks = defaultdict(int) - - for task in data.get('tasks', []): - p_tasks[task.get('priority')] += 1 - - node_data = { - 'pending_task_total': sum(p_tasks.values()), - 'pending_tasks_priority_high': p_tasks['high'], - 'pending_tasks_priority_urgent': p_tasks['urgent'], - } - - for metric in self.CLUSTER_PENDING_TASKS: - # metric description - desc = self.CLUSTER_PENDING_TASKS[metric] - self._process_metric(node_data, metric, *desc, tags=config.tags) - - def _process_stats_data(self, nodes_url, data, stats_metrics, config): - cluster_stats = config.cluster_stats - for node_name in data['nodes']: - node_data = data['nodes'][node_name] - # On newer version of ES it's "host" not "hostname" - node_hostname = node_data.get( - 'hostname', node_data.get('host', None)) - - # Override the metric hostname if we're hitting an external cluster - metric_hostname = node_hostname if cluster_stats else None - - for metric, desc in stats_metrics.iteritems(): - self._process_metric( - node_data, metric, *desc, tags=config.tags, - hostname=metric_hostname) - - def _process_pshard_stats_data(self, data, config, pshard_stats_metrics): - for metric, desc in pshard_stats_metrics.iteritems(): - self._process_metric(data, metric, *desc, tags=config.tags) - - def _process_metric(self, data, metric, xtype, path, xform=None, - tags=None, hostname=None): - """data: dictionary containing all the stats - metric: datadog metric - path: corresponding path in data, flattened, e.g. thread_pool.bulk.queue - xfom: a lambda to apply to the numerical value - """ - value = data - - # Traverse the nested dictionaries - for key in path.split('.'): - if value is not None: - value = value.get(key, None) - else: - break - - if value is not None: - if xform: - value = xform(value) - if xtype == "gauge": - self.gauge(metric, value, tags=tags, hostname=hostname) - else: - self.rate(metric, value, tags=tags, hostname=hostname) - else: - self._metric_not_found(metric, path) - - def _process_health_data(self, data, config): - if self.cluster_status.get(config.url) is None: - self.cluster_status[config.url] = data['status'] - if data['status'] in ["yellow", "red"]: - event = self._create_event(data['status'], tags=config.tags) - self.event(event) - - if data['status'] != self.cluster_status.get(config.url): - self.cluster_status[config.url] = data['status'] - event = self._create_event(data['status'], tags=config.tags) - self.event(event) - - for metric, desc in self.CLUSTER_HEALTH_METRICS.iteritems(): - self._process_metric(data, metric, *desc, tags=config.tags) - - # Process the service check - cluster_status = data['status'] - if cluster_status == 'green': - status = AgentCheck.OK - data['tag'] = "OK" - elif cluster_status == 'yellow': - status = AgentCheck.WARNING - data['tag'] = "WARN" - else: - status = AgentCheck.CRITICAL - data['tag'] = "ALERT" - - msg = "{tag} on cluster \"{cluster_name}\" "\ - "| active_shards={active_shards} "\ - "| initializing_shards={initializing_shards} "\ - "| relocating_shards={relocating_shards} "\ - "| unassigned_shards={unassigned_shards} "\ - "| timed_out={timed_out}" \ - .format(**data) - - self.service_check( - self.SERVICE_CHECK_CLUSTER_STATUS, - status, - message=msg, - tags=config.service_check_tags - ) - - def _metric_not_found(self, metric, path): - self.log.debug("Metric not found: %s -> %s", path, metric) - - def _create_event(self, status, tags=None): - hostname = self.hostname.decode('utf-8') - if status == "red": - alert_type = "error" - msg_title = "%s is %s" % (hostname, status) - - elif status == "yellow": - alert_type = "warning" - msg_title = "%s is %s" % (hostname, status) - - else: - # then it should be green - alert_type = "success" - msg_title = "%s recovered as %s" % (hostname, status) - - msg = "ElasticSearch: %s just reported as %s" % (hostname, status) - - return { - 'timestamp': int(time.time()), - 'event_type': 'elasticsearch', - 'host': hostname, - 'msg_text': msg, - 'msg_title': msg_title, - 'alert_type': alert_type, - 'source_type_name': "elasticsearch", - 'event_object': hostname, - 'tags': tags - } diff --git a/pkg/py/checks/etcd.py b/pkg/py/checks/etcd.py deleted file mode 100644 index b21266cb11cd..000000000000 --- a/pkg/py/checks/etcd.py +++ /dev/null @@ -1,178 +0,0 @@ -# 3rd party -import requests - -# project -from checks import AgentCheck -from config import _is_affirmative -from util import headers - - -class Etcd(AgentCheck): - - DEFAULT_TIMEOUT = 5 - - SERVICE_CHECK_NAME = 'etcd.can_connect' - - STORE_RATES = { - 'getsSuccess': 'etcd.store.gets.success', - 'getsFail': 'etcd.store.gets.fail', - 'setsSuccess': 'etcd.store.sets.success', - 'setsFail': 'etcd.store.sets.fail', - 'deleteSuccess': 'etcd.store.delete.success', - 'deleteFail': 'etcd.store.delete.fail', - 'updateSuccess': 'etcd.store.update.success', - 'updateFail': 'etcd.store.update.fail', - 'createSuccess': 'etcd.store.create.success', - 'createFail': 'etcd.store.create.fail', - 'compareAndSwapSuccess': 'etcd.store.compareandswap.success', - 'compareAndSwapFail': 'etcd.store.compareandswap.fail', - 'compareAndDeleteSuccess': 'etcd.store.compareanddelete.success', - 'compareAndDeleteFail': 'etcd.store.compareanddelete.fail', - 'expireCount': 'etcd.store.expire.count' - } - - STORE_GAUGES = { - 'watchers': 'etcd.store.watchers' - } - - SELF_GAUGES = { - 'sendPkgRate': 'etcd.self.send.pkgrate', - 'sendBandwidthRate': 'etcd.self.send.bandwidthrate', - 'recvPkgRate': 'etcd.self.recv.pkgrate', - 'recvBandwidthRate': 'etcd.self.recv.bandwidthrate' - } - - SELF_RATES = { - 'recvAppendRequestCnt': 'etcd.self.recv.appendrequest.count', - 'sendAppendRequestCnt': 'etcd.self.send.appendrequest.count' - } - - LEADER_COUNTS = { - # Rates - 'fail': 'etcd.leader.counts.fail', - 'success': 'etcd.leader.counts.success', - } - - LEADER_LATENCY = { - # Gauges - 'current': 'etcd.leader.latency.current', - 'average': 'etcd.leader.latency.avg', - 'minimum': 'etcd.leader.latency.min', - 'maximum': 'etcd.leader.latency.max', - 'standardDeviation': 'etcd.leader.latency.stddev', - } - - def check(self, instance): - if 'url' not in instance: - raise Exception('etcd instance missing "url" value.') - - # Load values from the instance config - url = instance['url'] - instance_tags = instance.get('tags', []) - - # Load the ssl configuration - ssl_params = { - 'ssl_keyfile': instance.get('ssl_keyfile'), - 'ssl_certfile': instance.get('ssl_certfile'), - 'ssl_cert_validation': _is_affirmative(instance.get('ssl_cert_validation', True)), - 'ssl_ca_certs': instance.get('ssl_ca_certs'), - } - - for key, param in ssl_params.items(): - if param is None: - del ssl_params[key] - # Append the instance's URL in case there are more than one, that - # way they can tell the difference! - instance_tags.append("url:{0}".format(url)) - timeout = float(instance.get('timeout', self.DEFAULT_TIMEOUT)) - is_leader = False - - # Gather self metrics - self_response = self._get_self_metrics(url, ssl_params, timeout) - if self_response is not None: - if self_response['state'] == 'StateLeader': - is_leader = True - instance_tags.append('etcd_state:leader') - else: - instance_tags.append('etcd_state:follower') - - for key in self.SELF_RATES: - if key in self_response: - self.rate(self.SELF_RATES[key], self_response[key], tags=instance_tags) - else: - self.log.warn("Missing key {0} in stats.".format(key)) - - for key in self.SELF_GAUGES: - if key in self_response: - self.gauge(self.SELF_GAUGES[key], self_response[key], tags=instance_tags) - else: - self.log.warn("Missing key {0} in stats.".format(key)) - - # Gather store metrics - store_response = self._get_store_metrics(url, ssl_params, timeout) - if store_response is not None: - for key in self.STORE_RATES: - if key in store_response: - self.rate(self.STORE_RATES[key], store_response[key], tags=instance_tags) - else: - self.log.warn("Missing key {0} in stats.".format(key)) - - for key in self.STORE_GAUGES: - if key in store_response: - self.gauge(self.STORE_GAUGES[key], store_response[key], tags=instance_tags) - else: - self.log.warn("Missing key {0} in stats.".format(key)) - - # Gather leader metrics - if is_leader: - leader_response = self._get_leader_metrics(url, ssl_params, timeout) - if leader_response is not None and len(leader_response.get("followers", {})) > 0: - # Get the followers - followers = leader_response.get("followers") - for fol in followers: - # counts - for key in self.LEADER_COUNTS: - self.rate(self.LEADER_COUNTS[key], - followers[fol].get("counts").get(key), - tags=instance_tags + ['follower:{0}'.format(fol)]) - # latency - for key in self.LEADER_LATENCY: - self.gauge(self.LEADER_LATENCY[key], - followers[fol].get("latency").get(key), - tags=instance_tags + ['follower:{0}'.format(fol)]) - - # Service check - if self_response is not None and store_response is not None: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.OK, - tags=["url:{0}".format(url)]) - - def _get_self_metrics(self, url, ssl_params, timeout): - return self._get_json(url + "/v2/stats/self", ssl_params, timeout) - - def _get_store_metrics(self, url, ssl_params, timeout): - return self._get_json(url + "/v2/stats/store", ssl_params, timeout) - - def _get_leader_metrics(self, url, ssl_params, timeout): - return self._get_json(url + "/v2/stats/leader", ssl_params, timeout) - - def _get_json(self, url, ssl_params, timeout): - try: - certificate = None - if 'ssl_certfile' in ssl_params and 'ssl_keyfile' in ssl_params: - certificate = (ssl_params['ssl_certfile'], ssl_params['ssl_keyfile']) - verify = ssl_params.get('ssl_ca_certs', True) if ssl_params['ssl_cert_validation'] else False - r = requests.get(url, verify=verify, cert=certificate, timeout=timeout, headers=headers(self.agentConfig)) - except requests.exceptions.Timeout: - # If there's a timeout - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - message="Timeout when hitting %s" % url, - tags=["url:{0}".format(url)]) - raise - - if r.status_code != 200: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - message="Got %s when hitting %s" % (r.status_code, url), - tags=["url:{0}".format(url)]) - raise Exception("Http status code {0} on url {1}".format(r.status_code, url)) - - return r.json() diff --git a/pkg/py/checks/fluentd.py b/pkg/py/checks/fluentd.py deleted file mode 100644 index 915eaa491e3b..000000000000 --- a/pkg/py/checks/fluentd.py +++ /dev/null @@ -1,61 +0,0 @@ -# stdlib -import urlparse - -# 3rd party -import requests - -# project -from checks import AgentCheck -from util import headers - - -class Fluentd(AgentCheck): - SERVICE_CHECK_NAME = 'fluentd.is_ok' - GAUGES = ['retry_count', 'buffer_total_queued_size', 'buffer_queue_length'] - _AVAILABLE_TAGS = frozenset(['plugin_id', 'type']) - - """Tracks basic fluentd metrics via the monitor_agent plugin - * number of retry_count - * number of buffer_queue_length - * number of buffer_total_queued_size - - $ curl http://localhost:24220/api/plugins.json - {"plugins":[{"type": "monitor_agent", ...}, {"type": "forward", ...}]} - """ - def check(self, instance): - if 'monitor_agent_url' not in instance: - raise Exception('Fluentd instance missing "monitor_agent_url" value.') - - try: - url = instance.get('monitor_agent_url') - plugin_ids = instance.get('plugin_ids', []) - - # Fallback with `tag_by: plugin_id` - tag_by = instance.get('tag_by') - tag_by = tag_by if tag_by in self._AVAILABLE_TAGS else 'plugin_id' - - parsed_url = urlparse.urlparse(url) - monitor_agent_host = parsed_url.hostname - monitor_agent_port = parsed_url.port or 24220 - service_check_tags = ['fluentd_host:%s' % monitor_agent_host, 'fluentd_port:%s' - % monitor_agent_port] - - r = requests.get(url, headers=headers(self.agentConfig)) - r.raise_for_status() - status = r.json() - - for p in status['plugins']: - tag = "%s:%s" % (tag_by, p.get(tag_by)) - for m in self.GAUGES: - if p.get(m) is None: - continue - # Filter unspecified plugins to keep backward compatibility. - if len(plugin_ids) == 0 or p.get('plugin_id') in plugin_ids: - self.gauge('fluentd.%s' % (m), p.get(m), [tag]) - except Exception, e: - msg = "No stats could be retrieved from %s : %s" % (url, str(e)) - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - tags=service_check_tags, message=msg) - raise - else: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.OK, tags=service_check_tags) diff --git a/pkg/py/checks/gearmand.py b/pkg/py/checks/gearmand.py deleted file mode 100644 index 8b88ff61a139..000000000000 --- a/pkg/py/checks/gearmand.py +++ /dev/null @@ -1,75 +0,0 @@ -# 3rd party -import gearman - -# project -from checks import AgentCheck - -class Gearman(AgentCheck): - SERVICE_CHECK_NAME = 'gearman.can_connect' - - def get_library_versions(self): - return {"gearman": gearman.__version__} - - def _get_client(self,host,port): - self.log.debug("Connecting to gearman at address %s:%s" % (host, port)) - return gearman.GearmanAdminClient(["%s:%s" % - (host, port)]) - - def _get_metrics(self, client, tags): - data = client.get_status() - running = 0 - queued = 0 - workers = 0 - - for stat in data: - running += stat['running'] - queued += stat['queued'] - workers += stat['workers'] - - unique_tasks = len(data) - - self.gauge("gearman.unique_tasks", unique_tasks, tags=tags) - self.gauge("gearman.running", running, tags=tags) - self.gauge("gearman.queued", queued, tags=tags) - self.gauge("gearman.workers", workers, tags=tags) - - self.log.debug("running %d, queued %d, unique tasks %d, workers: %d" - % (running, queued, unique_tasks, workers)) - - def _get_conf(self, instance): - host = instance.get('server', None) - port = instance.get('port', None) - - if host is None: - self.warning("Host not set, assuming 127.0.0.1") - host = "127.0.0.1" - - if port is None: - self.warning("Port is not set, assuming 4730") - port = 4730 - - tags = instance.get('tags', []) - - return host, port, tags - - def check(self, instance): - self.log.debug("Gearman check start") - - host, port, tags = self._get_conf(instance) - service_check_tags = ["server:{0}".format(host), - "port:{0}".format(port)] - - client = self._get_client(host, port) - self.log.debug("Connected to gearman") - - tags += service_check_tags - - try: - self._get_metrics(client, tags) - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.OK, - message="Connection to %s:%s succeeded." % (host, port), - tags=service_check_tags) - except Exception as e: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - message=str(e), tags=service_check_tags) - raise diff --git a/pkg/py/checks/gunicorn.py b/pkg/py/checks/gunicorn.py deleted file mode 100644 index 570d3cd95469..000000000000 --- a/pkg/py/checks/gunicorn.py +++ /dev/null @@ -1,123 +0,0 @@ -""" -Collects metrics from the gunicorn web server. - -http://gunicorn.org/ -""" -# stdlib -import time - -# 3rd party -import psutil - -# project -from checks import AgentCheck - - -class GUnicornCheck(AgentCheck): - - # Config - PROC_NAME = 'proc_name' - - # Number of seconds to sleep between cpu time checks. - CPU_SLEEP_SECS = 0.1 - - # Worker state tags. - IDLE_TAGS = ["state:idle"] - WORKING_TAGS = ["state:working"] - SVC_NAME = "gunicorn.is_running" - - def get_library_versions(self): - return {"psutil": psutil.__version__} - - def check(self, instance): - """ Collect metrics for the given gunicorn instance. """ - self.log.debug("Running instance: %s", instance) - - # Validate the config. - if not instance or self.PROC_NAME not in instance: - raise GUnicornCheckError("instance must specify: %s" % self.PROC_NAME) - - # Load the gunicorn master procedure. - proc_name = instance.get(self.PROC_NAME) - master_proc = self._get_master_proc_by_name(proc_name) - - # Fetch the worker procs and count their states. - worker_procs = master_proc.get_children() - working, idle = self._count_workers(worker_procs) - - # if no workers are running, alert CRITICAL, otherwise OK - msg = "%s working and %s idle workers for %s" % (working, idle, proc_name) - status = AgentCheck.CRITICAL if working == 0 and idle == 0 else AgentCheck.OK - - self.service_check(self.SVC_NAME, status, tags=['app:' + proc_name], message=msg) - - # Submit the data. - self.log.debug("instance %s procs - working:%s idle:%s" % (proc_name, working, idle)) - self.gauge("gunicorn.workers", working, self.WORKING_TAGS) - self.gauge("gunicorn.workers", idle, self.IDLE_TAGS) - - def _count_workers(self, worker_procs): - working = 0 - idle = 0 - - if not worker_procs: - return working, idle - - # Count how much sleep time is used by the workers. - cpu_time_by_pid = {} - for proc in worker_procs: - # cpu time is the sum of user + system time. - try: - cpu_time_by_pid[proc.pid] = sum(proc.get_cpu_times()) - except psutil.NoSuchProcess: - self.warning('Process %s disappeared while scanning' % proc.name) - continue - - # Let them do a little bit more work. - time.sleep(self.CPU_SLEEP_SECS) - - # Processes which have used more CPU are considered active (this is a very - # naive check, but gunicorn exposes no stats API) - for proc in worker_procs: - if proc.pid not in cpu_time_by_pid: - # The process is not running anymore, we didn't collect initial cpu times - continue - try: - cpu_time = sum(proc.get_cpu_times()) - except Exception: - # couldn't collect cpu time. assume it's dead. - self.log.debug("Couldn't collect cpu time for %s" % proc) - continue - if cpu_time == cpu_time_by_pid[proc.pid]: - idle += 1 - else: - working += 1 - - return working, idle - - def _get_master_proc_by_name(self, name): - """ Return a psutil process for the master gunicorn process with the given name. """ - master_name = GUnicornCheck._get_master_proc_name(name) - master_procs = [p for p in psutil.process_iter() if p.cmdline() and p.cmdline()[0] == master_name] - if len(master_procs) == 0: - # process not found, it's dead. - self.service_check(self.SVC_NAME, AgentCheck.CRITICAL, tags=['app:' + name], - message="No gunicorn process with name %s found" % name) - raise GUnicornCheckError("Found no master process with name: %s" % master_name) - elif len(master_procs) > 1: - raise GUnicornCheckError("Found more than one master process with name: %s" % master_name) - else: - return master_procs[0] - - @staticmethod - def _get_master_proc_name(name): - """ Return the name of the master gunicorn process for the given proc name. """ - # Here's an example of a process list for a gunicorn box with name web1 - # root 22976 0.1 0.1 60364 13424 ? Ss 19:30 0:00 gunicorn: master [web1] - # web 22984 20.7 2.3 521924 176136 ? Sl 19:30 1:58 gunicorn: worker [web1] - # web 22985 26.4 6.1 795288 449596 ? Sl 19:30 2:32 gunicorn: worker [web1] - return "gunicorn: master [%s]" % name - - -class GUnicornCheckError(Exception): - pass diff --git a/pkg/py/checks/haproxy.py b/pkg/py/checks/haproxy.py deleted file mode 100644 index 5ca3ed8ba9c3..000000000000 --- a/pkg/py/checks/haproxy.py +++ /dev/null @@ -1,438 +0,0 @@ -# stdlib -from collections import defaultdict -import re -import time - -# 3rd party -import requests - -# project -from checks import AgentCheck -from config import _is_affirmative -from util import headers - -STATS_URL = "/;csv;norefresh" -EVENT_TYPE = SOURCE_TYPE_NAME = 'haproxy' - - -class Services(object): - BACKEND = 'BACKEND' - FRONTEND = 'FRONTEND' - ALL = (BACKEND, FRONTEND) - ALL_STATUSES = ( - 'up', 'open', 'no check', 'down', 'maint', 'nolb' - ) - STATUSES_TO_SERVICE_CHECK = { - 'UP': AgentCheck.OK, - 'DOWN': AgentCheck.CRITICAL, - 'no check': AgentCheck.UNKNOWN, - 'MAINT': AgentCheck.OK, - } - - -class HAProxy(AgentCheck): - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - - # Host status needs to persist across all checks - self.host_status = defaultdict(lambda: defaultdict(lambda: None)) - - METRICS = { - "qcur": ("gauge", "queue.current"), - "scur": ("gauge", "session.current"), - "slim": ("gauge", "session.limit"), - "spct": ("gauge", "session.pct"), # Calculated as: (scur/slim)*100 - "stot": ("rate", "session.rate"), - "bin": ("rate", "bytes.in_rate"), - "bout": ("rate", "bytes.out_rate"), - "dreq": ("rate", "denied.req_rate"), - "dresp": ("rate", "denied.resp_rate"), - "ereq": ("rate", "errors.req_rate"), - "econ": ("rate", "errors.con_rate"), - "eresp": ("rate", "errors.resp_rate"), - "wretr": ("rate", "warnings.retr_rate"), - "wredis": ("rate", "warnings.redis_rate"), - "req_rate": ("gauge", "requests.rate"), # HA Proxy 1.4 and higher - "hrsp_1xx": ("rate", "response.1xx"), # HA Proxy 1.4 and higher - "hrsp_2xx": ("rate", "response.2xx"), # HA Proxy 1.4 and higher - "hrsp_3xx": ("rate", "response.3xx"), # HA Proxy 1.4 and higher - "hrsp_4xx": ("rate", "response.4xx"), # HA Proxy 1.4 and higher - "hrsp_5xx": ("rate", "response.5xx"), # HA Proxy 1.4 and higher - "hrsp_other": ("rate", "response.other"), # HA Proxy 1.4 and higher - "qtime": ("gauge", "queue.time"), # HA Proxy 1.5 and higher - "ctime": ("gauge", "connect.time"), # HA Proxy 1.5 and higher - "rtime": ("gauge", "response.time"), # HA Proxy 1.5 and higher - "ttime": ("gauge", "session.time"), # HA Proxy 1.5 and higher - } - - SERVICE_CHECK_NAME = 'haproxy.backend_up' - - def check(self, instance): - url = instance.get('url') - username = instance.get('username') - password = instance.get('password') - collect_aggregates_only = _is_affirmative( - instance.get('collect_aggregates_only', True) - ) - collect_status_metrics = _is_affirmative( - instance.get('collect_status_metrics', False) - ) - collect_status_metrics_by_host = _is_affirmative( - instance.get('collect_status_metrics_by_host', False) - ) - tag_service_check_by_host = _is_affirmative( - instance.get('tag_service_check_by_host', False) - ) - services_incl_filter = instance.get('services_include', []) - services_excl_filter = instance.get('services_exclude', []) - - self.log.debug('Processing HAProxy data for %s' % url) - - data = self._fetch_data(url, username, password) - - process_events = instance.get('status_check', self.init_config.get('status_check', False)) - - self._process_data( - data, collect_aggregates_only, process_events, - url=url, collect_status_metrics=collect_status_metrics, - collect_status_metrics_by_host=collect_status_metrics_by_host, - tag_service_check_by_host=tag_service_check_by_host, - services_incl_filter=services_incl_filter, - services_excl_filter=services_excl_filter - ) - - def _fetch_data(self, url, username, password): - ''' Hit a given URL and return the parsed json ''' - # Try to fetch data from the stats URL - - auth = (username, password) - url = "%s%s" % (url, STATS_URL) - - self.log.debug("HAProxy Fetching haproxy search data from: %s" % url) - - r = requests.get(url, auth=auth, headers=headers(self.agentConfig)) - r.raise_for_status() - - return r.content.splitlines() - - def _process_data(self, data, collect_aggregates_only, process_events, url=None, - collect_status_metrics=False, collect_status_metrics_by_host=False, - tag_service_check_by_host=False, services_incl_filter=None, - services_excl_filter=None): - ''' Main data-processing loop. For each piece of useful data, we'll - either save a metric, save an event or both. ''' - - # Split the first line into an index of fields - # The line looks like: - # "# pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max," - fields = [f.strip() for f in data[0][2:].split(',') if f] - - self.hosts_statuses = defaultdict(int) - - back_or_front = None - - # Skip the first line, go backwards to set back_or_front - for line in data[:0:-1]: - if not line.strip(): - continue - - # Store each line's values in a dictionary - data_dict = self._line_to_dict(fields, line) - - if self._is_aggregate(data_dict): - back_or_front = data_dict['svname'] - - self._update_data_dict(data_dict, back_or_front) - - self._update_hosts_statuses_if_needed( - collect_status_metrics, collect_status_metrics_by_host, - data_dict, self.hosts_statuses - ) - - if self._should_process(data_dict, collect_aggregates_only): - # update status - # Send the list of data to the metric and event callbacks - self._process_metrics( - data_dict, url, - services_incl_filter=services_incl_filter, - services_excl_filter=services_excl_filter - ) - if process_events: - self._process_event( - data_dict, url, - services_incl_filter=services_incl_filter, - services_excl_filter=services_excl_filter - ) - self._process_service_check( - data_dict, url, - tag_by_host=tag_service_check_by_host, - services_incl_filter=services_incl_filter, - services_excl_filter=services_excl_filter - ) - - if collect_status_metrics: - self._process_status_metric( - self.hosts_statuses, collect_status_metrics_by_host, - services_incl_filter=services_incl_filter, - services_excl_filter=services_excl_filter - ) - self._process_backend_hosts_metric( - self.hosts_statuses, - services_incl_filter=services_incl_filter, - services_excl_filter=services_excl_filter - ) - - return data - - def _line_to_dict(self, fields, line): - data_dict = {} - for i, val in enumerate(line.split(',')[:]): - if val: - try: - # Try converting to a long, if failure, just leave it - val = float(val) - except Exception: - pass - data_dict[fields[i]] = val - return data_dict - - def _update_data_dict(self, data_dict, back_or_front): - """ - Adds spct if relevant, adds service - """ - data_dict['back_or_front'] = back_or_front - # The percentage of used sessions based on 'scur' and 'slim' - if 'slim' in data_dict and 'scur' in data_dict: - try: - data_dict['spct'] = (data_dict['scur'] / data_dict['slim']) * 100 - except (TypeError, ZeroDivisionError): - pass - - def _is_aggregate(self, data_dict): - return data_dict['svname'] in Services.ALL - - def _update_hosts_statuses_if_needed(self, collect_status_metrics, - collect_status_metrics_by_host, - data_dict, hosts_statuses): - if data_dict['svname'] == Services.BACKEND: - return - if collect_status_metrics and 'status' in data_dict and 'pxname' in data_dict: - if collect_status_metrics_by_host and 'svname' in data_dict: - key = (data_dict['pxname'], data_dict['svname'], data_dict['status']) - else: - key = (data_dict['pxname'], data_dict['status']) - hosts_statuses[key] += 1 - - def _should_process(self, data_dict, collect_aggregates_only): - """ - if collect_aggregates_only, we process only the aggregates - else we process all except Services.BACKEND - """ - if collect_aggregates_only: - if self._is_aggregate(data_dict): - return True - return False - elif data_dict['svname'] == Services.BACKEND: - return False - return True - - def _is_service_excl_filtered(self, service_name, services_incl_filter, - services_excl_filter): - if self._tag_match_patterns(service_name, services_excl_filter): - if self._tag_match_patterns(service_name, services_incl_filter): - return False - return True - return False - - def _tag_match_patterns(self, tag, filters): - if not filters: - return False - for rule in filters: - if re.search(rule, tag): - return True - return False - - def _process_backend_hosts_metric(self, hosts_statuses, services_incl_filter=None, - services_excl_filter=None): - agg_statuses = defaultdict(lambda: {'available': 0, 'unavailable': 0}) - for host_status, count in hosts_statuses.iteritems(): - try: - service, hostname, status = host_status - except Exception: - service, status = host_status - - if self._is_service_excl_filtered(service, services_incl_filter, services_excl_filter): - continue - status = status.lower() - if 'up' in status: - agg_statuses[service]['available'] += count - elif 'down' in status or 'maint' in status or 'nolb' in status: - agg_statuses[service]['unavailable'] += count - else: - # create the entries for this service anyway - agg_statuses[service] - - for service in agg_statuses: - tags = ['service:%s' % service] - self.gauge( - 'haproxy.backend_hosts', - agg_statuses[service]['available'], - tags=tags + ['available:true']) - self.gauge( - 'haproxy.backend_hosts', - agg_statuses[service]['unavailable'], - tags=tags + ['available:false']) - return agg_statuses - - def _process_status_metric(self, hosts_statuses, collect_status_metrics_by_host, - services_incl_filter=None, services_excl_filter=None): - agg_statuses = defaultdict(lambda: {'available': 0, 'unavailable': 0}) - for host_status, count in hosts_statuses.iteritems(): - try: - service, hostname, status = host_status - except Exception: - service, status = host_status - status = status.lower() - - tags = ['service:%s' % service] - if self._is_service_excl_filtered(service, services_incl_filter, services_excl_filter): - continue - - if collect_status_metrics_by_host: - tags.append('backend:%s' % hostname) - self._gauge_all_statuses("haproxy.count_per_status", count, status, tags=tags) - - if 'up' in status or 'open' in status: - agg_statuses[service]['available'] += count - if 'down' in status or 'maint' in status or 'nolb' in status: - agg_statuses[service]['unavailable'] += count - - for service in agg_statuses: - for status, count in agg_statuses[service].iteritems(): - tags = ['status:%s' % status, 'service:%s' % service] - self.gauge("haproxy.count_per_status", count, tags=tags) - - def _gauge_all_statuses(self, metric_name, count, status, tags): - self.gauge(metric_name, count, tags + ['status:%s' % status]) - for state in Services.ALL_STATUSES: - if state != status: - self.gauge(metric_name, 0, tags + ['status:%s' % state.replace(" ", "_")]) - - def _process_metrics(self, data, url, services_incl_filter=None, - services_excl_filter=None): - """ - Data is a dictionary related to one host - (one line) extracted from the csv. - It should look like: - {'pxname':'dogweb', 'svname':'i-4562165', 'scur':'42', ...} - """ - hostname = data['svname'] - service_name = data['pxname'] - back_or_front = data['back_or_front'] - tags = ["type:%s" % back_or_front, "instance_url:%s" % url] - tags.append("service:%s" % service_name) - - if self._is_service_excl_filtered(service_name, services_incl_filter, - services_excl_filter): - return - - if back_or_front == Services.BACKEND: - tags.append('backend:%s' % hostname) - - for key, value in data.items(): - if HAProxy.METRICS.get(key): - suffix = HAProxy.METRICS[key][1] - name = "haproxy.%s.%s" % (back_or_front.lower(), suffix) - if HAProxy.METRICS[key][0] == 'rate': - self.rate(name, value, tags=tags) - else: - self.gauge(name, value, tags=tags) - - def _process_event(self, data, url, services_incl_filter=None, - services_excl_filter=None): - ''' - Main event processing loop. An event will be created for a service - status change. - Service checks on the server side can be used to provide the same functionality - ''' - hostname = data['svname'] - service_name = data['pxname'] - key = "%s:%s" % (hostname, service_name) - status = self.host_status[url][key] - - if self._is_service_excl_filtered(service_name, services_incl_filter, - services_excl_filter): - return - - if status is None: - self.host_status[url][key] = data['status'] - return - - if status != data['status'] and data['status'] in ('UP', 'DOWN'): - # If the status of a host has changed, we trigger an event - try: - lastchg = int(data['lastchg']) - except Exception: - lastchg = 0 - - # Create the event object - ev = self._create_event( - data['status'], hostname, lastchg, service_name, - data['back_or_front'] - ) - self.event(ev) - - # Store this host status so we can check against it later - self.host_status[url][key] = data['status'] - - def _create_event(self, status, hostname, lastchg, service_name, back_or_front): - HAProxy_agent = self.hostname.decode('utf-8') - if status == "DOWN": - alert_type = "error" - title = "%s reported %s:%s %s" % (HAProxy_agent, service_name, hostname, status) - else: - if status == "UP": - alert_type = "success" - else: - alert_type = "info" - title = "%s reported %s:%s back and %s" % (HAProxy_agent, service_name, hostname, status) - - tags = ["service:%s" % service_name] - if back_or_front == Services.BACKEND: - tags.append('backend:%s' % hostname) - return { - 'timestamp': int(time.time() - lastchg), - 'event_type': EVENT_TYPE, - 'host': HAProxy_agent, - 'msg_title': title, - 'alert_type': alert_type, - "source_type_name": SOURCE_TYPE_NAME, - "event_object": hostname, - "tags": tags - } - - def _process_service_check(self, data, url, tag_by_host=False, - services_incl_filter=None, services_excl_filter=None): - ''' Report a service check, tagged by the service and the backend. - Statuses are defined in `STATUSES_TO_SERVICE_CHECK` mapping. - ''' - service_name = data['pxname'] - status = data['status'] - haproxy_hostname = self.hostname.decode('utf-8') - check_hostname = haproxy_hostname if tag_by_host else '' - - if self._is_service_excl_filtered(service_name, services_incl_filter, - services_excl_filter): - return - - if status in Services.STATUSES_TO_SERVICE_CHECK: - service_check_tags = ["service:%s" % service_name] - hostname = data['svname'] - if data['back_or_front'] == Services.BACKEND: - service_check_tags.append('backend:%s' % hostname) - - status = Services.STATUSES_TO_SERVICE_CHECK[status] - message = "%s reported %s:%s %s" % (haproxy_hostname, service_name, - hostname, status) - self.service_check(self.SERVICE_CHECK_NAME, status, message=message, - hostname=check_hostname, tags=service_check_tags) diff --git a/pkg/py/checks/hdfs.py b/pkg/py/checks/hdfs.py deleted file mode 100644 index 0d8c6bde394b..000000000000 --- a/pkg/py/checks/hdfs.py +++ /dev/null @@ -1,91 +0,0 @@ -# 3rd party -import snakebite.client -import snakebite.version - -# project -from checks import AgentCheck - -# This is only available on snakebite >= 2.2.0 -# but snakebite 2.x is only compatible with hadoop >= 2.2.0 -# So we bundle snakebite 1.3.9 and let the possibility to upgrade to a newer version -# if people want to use HA Mode -try: - # FIXME: Can be remove when we upgrade pylint (drop py 2.6) - # pylint: disable=E0611 - from snakebite.namenode import Namenode -except ImportError: - Namenode = None - - -DEFAULT_PORT = 8020 - - -class HDFSCheck(AgentCheck): - """Report on free space and space used in HDFS. - """ - - def get_client(self, instance): - - if 'namenode' in instance: - # backward compatibility for old style configuration of that check - host, port = instance['namenode'], instance.get('port', DEFAULT_PORT) - return snakebite.client.Client(host, port) - - if type(instance['namenodes']) != list or len(instance['namenodes']) == 0: - raise ValueError('"namenodes parameter should be a list of dictionaries.') - - for namenode in instance['namenodes']: - if type(namenode) != dict: - raise ValueError('"namenodes parameter should be a list of dictionaries.') - - if "url" not in namenode: - raise ValueError('Each namenode should specify a "url" parameter.') - - if len(instance['namenodes']) == 1: - host, port = instance['namenodes'][0]['url'], instance['namenodes'][0].get('port', DEFAULT_PORT) - return snakebite.client.Client(host, port) - - else: - # We are running on HA mode - if Namenode is None: - # We are running snakebite 1.x which is not compatible with the HA mode - # Let's display a warning and use regular mode - self.warning("HA Mode is not available with snakebite < 2.2.0" - "Upgrade to the latest version of snakebiteby running: " - "sudo /opt/datadog-agent/embedded/bin/pip install --upgrade snakebite") - - host, port = instance['namenodes'][0]['url'], instance['namenodes'][0].get('port', DEFAULT_PORT) - return snakebite.client.Client(host, port) - else: - self.log.debug("Running in HA Mode") - nodes = [] - for namenode in instance['namenodes']: - nodes.append(Namenode(namenode['url'], namenode.get('port', DEFAULT_PORT))) - - return snakebite.client.HAClient(nodes) - - def check(self, instance): - if 'namenode' not in instance and 'namenodes' not in instance: - raise ValueError('Missing key \'namenode\' in HDFSCheck config') - - tags = instance.get('tags', None) - - hdfs = self.get_client(instance) - stats = hdfs.df() - # {'used': 2190859321781L, - # 'capacity': 76890897326080L, - # 'under_replicated': 0L, - # 'missing_blocks': 0L, - # 'filesystem': 'hdfs://hostname:port', - # 'remaining': 71186818453504L, - # 'corrupt_blocks': 0L} - - self.gauge('hdfs.used', stats['used'], tags=tags) - self.gauge('hdfs.free', stats['remaining'], tags=tags) - self.gauge('hdfs.capacity', stats['capacity'], tags=tags) - self.gauge('hdfs.in_use', float(stats['used']) / - float(stats['capacity']), tags=tags) - self.gauge('hdfs.under_replicated', stats['under_replicated'], - tags=tags) - self.gauge('hdfs.missing_blocks', stats['missing_blocks'], tags=tags) - self.gauge('hdfs.corrupt_blocks', stats['corrupt_blocks'], tags=tags) diff --git a/pkg/py/checks/http_check.py b/pkg/py/checks/http_check.py deleted file mode 100644 index d18a71e49f55..000000000000 --- a/pkg/py/checks/http_check.py +++ /dev/null @@ -1,415 +0,0 @@ -# stdlib -from datetime import datetime -import os.path -import re -import socket -import ssl -import time -import warnings -from urlparse import urlparse - -# 3rd party -import requests -import tornado - -from requests.adapters import HTTPAdapter -from requests.packages import urllib3 -from requests.packages.urllib3.util import ssl_ - -from requests.packages.urllib3.exceptions import ( - SecurityWarning, -) -from requests.packages.urllib3.packages.ssl_match_hostname import \ - match_hostname - -# project -from checks.network_checks import EventType, NetworkCheck, Status -from config import _is_affirmative -from util import headers as agent_headers - - -class WeakCiphersHTTPSConnection(urllib3.connection.VerifiedHTTPSConnection): - - SUPPORTED_CIPHERS = ( - 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:' - 'ECDH+HIGH:DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:' - 'RSA+3DES:ECDH+RC4:DH+RC4:RSA+RC4:!aNULL:!eNULL:!EXP:-MD5:RSA+RC4+MD5' - ) - - def __init__(self, host, port, ciphers=None, **kwargs): - self.ciphers = ciphers if ciphers is not None else self.SUPPORTED_CIPHERS - super(WeakCiphersHTTPSConnection, self).__init__(host, port, **kwargs) - - def connect(self): - # Add certificate verification - conn = self._new_conn() - - resolved_cert_reqs = ssl_.resolve_cert_reqs(self.cert_reqs) - resolved_ssl_version = ssl_.resolve_ssl_version(self.ssl_version) - - hostname = self.host - if getattr(self, '_tunnel_host', None): - # _tunnel_host was added in Python 2.6.3 - # (See: - # http://hg.python.org/cpython/rev/0f57b30a152f) - # - # However this check is still necessary in 2.7.x - - self.sock = conn - # Calls self._set_hostport(), so self.host is - # self._tunnel_host below. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - # Override the host with the one we're requesting data from. - hostname = self._tunnel_host - - # Wrap socket using verification with the root certs in trusted_root_certs - self.sock = ssl_.ssl_wrap_socket(conn, self.key_file, self.cert_file, - cert_reqs=resolved_cert_reqs, - ca_certs=self.ca_certs, - server_hostname=hostname, - ssl_version=resolved_ssl_version, - ciphers=self.ciphers) - - if self.assert_fingerprint: - ssl_.assert_fingerprint(self.sock.getpeercert(binary_form=True), self.assert_fingerprint) - elif resolved_cert_reqs != ssl.CERT_NONE \ - and self.assert_hostname is not False: - cert = self.sock.getpeercert() - if not cert.get('subjectAltName', ()): - warnings.warn(( - 'Certificate has no `subjectAltName`, falling back to check for a `commonName` for now. ' - 'This feature is being removed by major browsers and deprecated by RFC 2818. ' - '(See https://github.com/shazow/urllib3/issues/497 for details.)'), - SecurityWarning - ) - match_hostname(cert, self.assert_hostname or hostname) - - self.is_verified = (resolved_cert_reqs == ssl.CERT_REQUIRED - or self.assert_fingerprint is not None) - - -class WeakCiphersHTTPSConnectionPool(urllib3.connectionpool.HTTPSConnectionPool): - - ConnectionCls = WeakCiphersHTTPSConnection - - -class WeakCiphersPoolManager(urllib3.poolmanager.PoolManager): - - def _new_pool(self, scheme, host, port): - if scheme == 'https': - return WeakCiphersHTTPSConnectionPool(host, port, **(self.connection_pool_kw)) - return super(WeakCiphersPoolManager, self)._new_pool(scheme, host, port) - - -class WeakCiphersAdapter(HTTPAdapter): - """"Transport adapter" that allows us to use TLS_RSA_WITH_RC4_128_MD5.""" - - def init_poolmanager(self, connections, maxsize, block=False, **pool_kwargs): - # Rewrite of the - # requests.adapters.HTTPAdapter.init_poolmanager method - # to use WeakCiphersPoolManager instead of - # urllib3's PoolManager - self._pool_connections = connections - self._pool_maxsize = maxsize - self._pool_block = block - - self.poolmanager = WeakCiphersPoolManager(num_pools=connections, - maxsize=maxsize, block=block, strict=True, **pool_kwargs) - - -def get_ca_certs_path(): - """ - Get a path to the trusted certificates of the system - """ - CA_CERTS = [ - '/opt/datadog-agent/embedded/ssl/certs/cacert.pem', - os.path.join(os.path.dirname(tornado.__file__), 'ca-certificates.crt'), - '/etc/ssl/certs/ca-certificates.crt', - ] - - for f in CA_CERTS: - if os.path.exists(f): - return f - return None - - -class HTTPCheck(NetworkCheck): - SOURCE_TYPE_NAME = 'system' - SC_STATUS = 'http.can_connect' - SC_SSL_CERT = 'http.ssl_cert' - - def __init__(self, name, init_config, agentConfig, instances): - self.ca_certs = init_config.get('ca_certs', get_ca_certs_path()) - NetworkCheck.__init__(self, name, init_config, agentConfig, instances) - - def _load_conf(self, instance): - # Fetches the conf - tags = instance.get('tags', []) - username = instance.get('username') - password = instance.get('password') - http_response_status_code = str(instance.get('http_response_status_code', "(1|2|3)\d\d")) - timeout = int(instance.get('timeout', 10)) - config_headers = instance.get('headers', {}) - headers = agent_headers(self.agentConfig) - headers.update(config_headers) - url = instance.get('url') - content_match = instance.get('content_match') - response_time = _is_affirmative(instance.get('collect_response_time', True)) - if not url: - raise Exception("Bad configuration. You must specify a url") - include_content = _is_affirmative(instance.get('include_content', False)) - ssl = _is_affirmative(instance.get('disable_ssl_validation', True)) - ssl_expire = _is_affirmative(instance.get('check_certificate_expiration', True)) - instance_ca_certs = instance.get('ca_certs', self.ca_certs) - weakcipher = _is_affirmative(instance.get('weakciphers', False)) - - return url, username, password, http_response_status_code, timeout, include_content,\ - headers, response_time, content_match, tags, ssl, ssl_expire, instance_ca_certs,\ - weakcipher - - def _check(self, instance): - addr, username, password, http_response_status_code, timeout, include_content, headers,\ - response_time, content_match, tags, disable_ssl_validation,\ - ssl_expire, instance_ca_certs, weakcipher = self._load_conf(instance) - start = time.time() - - service_checks = [] - try: - parsed_uri = urlparse(addr) - self.log.debug("Connecting to %s" % addr) - if disable_ssl_validation and parsed_uri.scheme == "https": - self.warning("Skipping SSL certificate validation for %s based on configuration" - % addr) - - auth = None - if username is not None and password is not None: - auth = (username, password) - - sess = requests.Session() - if weakcipher: - base_addr = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri) - sess.mount(base_addr, WeakCiphersAdapter()) - self.log.debug("Weak Ciphers will be used for {0}. Suppoted Cipherlist: {1}".format( - base_addr, WeakCiphersHTTPSConnection.SUPPORTED_CIPHERS)) - - r = sess.request('GET', addr, auth=auth, timeout=timeout, headers=headers, - verify=False if disable_ssl_validation else instance_ca_certs) - - except (socket.timeout, requests.exceptions.ConnectionError, requests.exceptions.Timeout) as e: - length = int((time.time() - start) * 1000) - self.log.info("%s is DOWN, error: %s. Connection failed after %s ms" - % (addr, str(e), length)) - service_checks.append(( - self.SC_STATUS, - Status.DOWN, - "%s. Connection failed after %s ms" % (str(e), length) - )) - - except socket.error, e: - length = int((time.time() - start) * 1000) - self.log.info("%s is DOWN, error: %s. Connection failed after %s ms" - % (addr, repr(e), length)) - service_checks.append(( - self.SC_STATUS, - Status.DOWN, - "Socket error: %s. Connection failed after %s ms" % (repr(e), length) - )) - - except Exception, e: - length = int((time.time() - start) * 1000) - self.log.error("Unhandled exception %s. Connection failed after %s ms" - % (str(e), length)) - raise - - # Only report this metric if the site is not down - if response_time and not service_checks: - # Stop the timer as early as possible - running_time = time.time() - start - # Store tags in a temporary list so that we don't modify the global tags data structure - tags_list = list(tags) - tags_list.append('url:%s' % addr) - self.gauge('network.http.response_time', running_time, tags=tags_list) - - # Check HTTP response status code - if not (service_checks or re.match(http_response_status_code, str(r.status_code))): - self.log.info("Incorrect HTTP return code. Expected %s, got %s" - % (http_response_status_code, str(r.status_code))) - - service_checks.append(( - self.SC_STATUS, - Status.DOWN, - "Incorrect HTTP return code. Expected %s, got %s" - % (http_response_status_code, str(r.status_code)) - )) - - if not service_checks: - # Host is UP - # Check content matching is set - if content_match: - content = r.content - if re.search(content_match, content, re.UNICODE): - self.log.debug("%s is found in return content" % content_match) - service_checks.append(( - self.SC_STATUS, Status.UP, "UP" - )) - else: - self.log.info("%s not found in content" % content_match) - self.log.debug("Content returned:\n%s" % content) - service_checks.append(( - self.SC_STATUS, - Status.DOWN, - 'Content "%s" not found in response' % content_match - )) - else: - self.log.debug("%s is UP" % addr) - service_checks.append(( - self.SC_STATUS, Status.UP, "UP" - )) - - if ssl_expire and parsed_uri.scheme == "https": - status, msg = self.check_cert_expiration(instance, timeout, instance_ca_certs) - service_checks.append(( - self.SC_SSL_CERT, status, msg - )) - - return service_checks - - # FIXME: 5.3 drop this function - def _create_status_event(self, sc_name, status, msg, instance): - # Create only this deprecated event for old check - if sc_name != self.SC_STATUS: - return - # Get the instance settings - url = instance.get('url', None) - name = instance.get('name', None) - nb_failures = self.statuses[name][sc_name].count(Status.DOWN) - nb_tries = len(self.statuses[name][sc_name]) - tags = instance.get('tags', []) - tags_list = [] - tags_list.extend(tags) - tags_list.append('url:%s' % url) - - # Get a custom message that will be displayed in the event - custom_message = instance.get('message', "") - if custom_message: - custom_message += " \n" - - # Let the possibility to override the source type name - instance_source_type_name = instance.get('source_type', None) - if instance_source_type_name is None: - source_type = "%s.%s" % (NetworkCheck.SOURCE_TYPE_NAME, name) - else: - source_type = "%s.%s" % (NetworkCheck.SOURCE_TYPE_NAME, instance_source_type_name) - - # Get the handles you want to notify - notify = instance.get('notify', self.init_config.get('notify', [])) - notify_message = "" - if notify: - notify_list = [] - for handle in notify: - notify_list.append("@%s" % handle.strip()) - notify_message = " ".join(notify_list) + " \n" - - if status == Status.DOWN: - # format the HTTP response body into the event - if isinstance(msg, tuple): - code, reason, content = msg - - # truncate and html-escape content - if len(content) > 200: - content = content[:197] + '...' - - msg = u"%d %s\n\n%s" % (code, reason, content) - msg = msg.rstrip() - - title = "[Alert] %s reported that %s is down" % (self.hostname, name) - alert_type = "error" - msg = u"%s %s %s reported that %s (%s) failed %s time(s) within %s last attempt(s)."\ - " Last error: %s" % (notify_message, custom_message, self.hostname, - name, url, nb_failures, nb_tries, msg) - event_type = EventType.DOWN - - else: # Status is UP - title = "[Recovered] %s reported that %s is up" % (self.hostname, name) - alert_type = "success" - msg = u"%s %s %s reported that %s (%s) recovered" \ - % (notify_message, custom_message, self.hostname, name, url) - event_type = EventType.UP - - return { - 'timestamp': int(time.time()), - 'event_type': event_type, - 'host': self.hostname, - 'msg_text': msg, - 'msg_title': title, - 'alert_type': alert_type, - "source_type_name": source_type, - "event_object": name, - "tags": tags_list - } - - def report_as_service_check(self, sc_name, status, instance, msg=None): - instance_name = self.normalize(instance['name']) - url = instance.get('url', None) - sc_tags = ['url:{0}'.format(url), "instance:{0}".format(instance_name)] - custom_tags = instance.get('tags', []) - tags = sc_tags + custom_tags - - if sc_name == self.SC_STATUS: - # format the HTTP response body into the event - if isinstance(msg, tuple): - code, reason, content = msg - - # truncate and html-escape content - if len(content) > 200: - content = content[:197] + '...' - - msg = u"%d %s\n\n%s" % (code, reason, content) - msg = msg.rstrip() - - self.service_check(sc_name, - NetworkCheck.STATUS_TO_SERVICE_CHECK[status], - tags=tags, - message=msg - ) - - def check_cert_expiration(self, instance, timeout, instance_ca_certs): - warning_days = int(instance.get('days_warning', 14)) - critical_days = int(instance.get('days_critical', 7)) - url = instance.get('url') - - o = urlparse(url) - host = o.hostname - - port = o.port or 443 - - try: - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.settimeout(float(timeout)) - sock.connect((host, port)) - ssl_sock = ssl.wrap_socket(sock, cert_reqs=ssl.CERT_REQUIRED, - ca_certs=instance_ca_certs) - cert = ssl_sock.getpeercert() - - except Exception as e: - return Status.DOWN, "%s" % (str(e)) - - exp_date = datetime.strptime(cert['notAfter'], "%b %d %H:%M:%S %Y %Z") - days_left = exp_date - datetime.utcnow() - - if days_left.days < 0: - return Status.DOWN, "Expired by {0} days".format(days_left.days) - - elif days_left.days < critical_days: - return Status.CRITICAL, "This cert TTL is critical: only {0} days before it expires"\ - .format(days_left.days) - - elif days_left.days < warning_days: - return Status.WARNING, "This cert is almost expired, only {0} days left"\ - .format(days_left.days) - - else: - return Status.UP, "Days left: {0}".format(days_left.days) diff --git a/pkg/py/checks/iis.py b/pkg/py/checks/iis.py deleted file mode 100644 index 073455633937..000000000000 --- a/pkg/py/checks/iis.py +++ /dev/null @@ -1,114 +0,0 @@ -''' -Check the performance counters from IIS -''' -# 3rd party -import wmi - -# project -from checks import AgentCheck - - -class IIS(AgentCheck): - METRICS = [ - ('iis.uptime', 'gauge', 'ServiceUptime'), - - # Network - ('iis.net.bytes_sent', 'rate', 'TotalBytesSent'), - ('iis.net.bytes_rcvd', 'rate', 'TotalBytesReceived'), - ('iis.net.bytes_total', 'rate', 'TotalBytesTransferred'), - ('iis.net.num_connections', 'gauge', 'CurrentConnections'), - ('iis.net.files_sent', 'rate', 'TotalFilesSent'), - ('iis.net.files_rcvd', 'rate', 'TotalFilesReceived'), - ('iis.net.connection_attempts', 'rate', 'TotalConnectionAttemptsAllInstances'), - - # HTTP Methods - ('iis.httpd_request_method.get', 'rate', 'TotalGetRequests'), - ('iis.httpd_request_method.post', 'rate', 'TotalPostRequests'), - ('iis.httpd_request_method.head', 'rate', 'TotalHeadRequests'), - ('iis.httpd_request_method.put', 'rate', 'TotalPutRequests'), - ('iis.httpd_request_method.delete', 'rate', 'TotalDeleteRequests'), - ('iis.httpd_request_method.options', 'rate', 'TotalOptionsRequests'), - ('iis.httpd_request_method.trace', 'rate', 'TotalTraceRequests'), - - # Errors - ('iis.errors.not_found', 'rate', 'TotalNotFoundErrors'), - ('iis.errors.locked', 'rate', 'TotalLockedErrors'), - - # Users - ('iis.users.anon', 'rate', 'TotalAnonymousUsers'), - ('iis.users.nonanon', 'rate', 'TotalNonAnonymousUsers'), - - # Requests - ('iis.requests.cgi', 'rate', 'TotalCGIRequests'), - ('iis.requests.isapi', 'rate', 'TotalISAPIExtensionRequests'), - ] - SERVICE_CHECK = "iis.site_up" - - def __init__(self, name, init_config, agentConfig, instances): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - self.wmi_conns = {} - - def _get_wmi_conn(self, host, user, password): - key = "%s:%s:%s" % (host, user, password) - if key not in self.wmi_conns: - self.wmi_conns[key] = wmi.WMI(host, user=user, password=password) - return self.wmi_conns[key] - - def check(self, instance): - # Connect to the WMI provider - host = instance.get('host', None) - user = instance.get('username', None) - password = instance.get('password', None) - instance_tags = instance.get('tags', []) - sites = instance.get('sites', ['_Total']) - w = self._get_wmi_conn(host, user, password) - - try: - wmi_cls = w.Win32_PerfFormattedData_W3SVC_WebService() - if not wmi_cls: - raise Exception('Missing data from Win32_PerfFormattedData_W3SVC_WebService') - except Exception: - self.log.exception('Unable to fetch Win32_PerfFormattedData_W3SVC_WebService class') - return - - expected_sites = set(sites) - # Iterate over every IIS site - for iis_site in wmi_cls: - # Skip any sites we don't specifically want. - if iis_site.Name not in sites: - continue - - # Tag with the site name if we're not using the aggregate - if iis_site.Name != '_Total': - tags = instance_tags + ['site:%s' % iis_site.Name] - else: - tags = instance_tags - - status = AgentCheck.CRITICAL if iis_site.ServiceUptime == 0 else AgentCheck.OK - self.service_check("iis.site_up", status, tags=['site:%s' % iis_site.Name]) - expected_sites.remove(iis_site.Name) - - for metric, mtype, wmi_val in self.METRICS: - if not hasattr(iis_site, wmi_val): - if wmi_val == 'TotalBytesTransferred' and hasattr(iis_site, - 'TotalBytesTransfered'): - # Windows 2008 sp2 reports it as TotalbytesTransfered - # instead of TotalBytesTransferred (single r) - wmi_val = 'TotalBytesTransfered' - elif wmi_val == 'TotalConnectionAttemptsAllInstances' \ - and hasattr(iis_site, 'TotalConnectionAttemptsallinstances'): - wmi_val = 'TotalConnectionAttemptsallinstances' - else: - self.warning("Unable to fetch metric %s. Missing %s in " - "Win32_PerfFormattedData_W3SVC_WebService" - % (metric, wmi_val)) - continue - - # Submit the metric value with the correct type - value = float(getattr(iis_site, wmi_val)) - metric_func = getattr(self, mtype) - metric_func(metric, value, tags=tags) - - for remaining_site in expected_sites: - self.service_check("iis.site_up", AgentCheck.CRITICAL, - tags=['site:%s' % remaining_site]) diff --git a/pkg/py/checks/jenkins.py b/pkg/py/checks/jenkins.py deleted file mode 100644 index 813b24d5a68e..000000000000 --- a/pkg/py/checks/jenkins.py +++ /dev/null @@ -1,182 +0,0 @@ -# stdlib -from collections import defaultdict -from glob import glob -import os -import time -from xml.etree.ElementTree import ElementTree - -# project -from checks import AgentCheck -from util import get_hostname - - -class Skip(Exception): - """ - Raised by :class:`Jenkins` when it comes across - a build or job that should be excluded from being checked. - """ - def __init__(self, reason, dir_name): - message = 'skipping build or job at %s because %s' % (dir_name, reason) - Exception.__init__(self, message) - - -class Jenkins(AgentCheck): - datetime_format = '%Y-%m-%d_%H-%M-%S' - - def __init__(self, name, init_config, agentConfig): - AgentCheck.__init__(self, name, init_config, agentConfig) - self.high_watermarks = {} - - def _timestamp_from_build_file(self, dir_name, tree): - timestamp = tree.find('timestamp') - if timestamp is None or not timestamp.text: - raise Skip('the timestamp cannot be found', dir_name) - else: - return int(timestamp.text) / 1000.0 - - def _timestamp_from_dirname(self, dir_name): - if not os.path.isdir(dir_name): - raise Skip('its not a build directory', dir_name) - - try: - # Parse the timestamp from the directory name - date_str = os.path.basename(dir_name) - time_tuple = time.strptime(date_str, self.datetime_format) - return time.mktime(time_tuple) - except ValueError: - return None - - def _get_build_metadata(self, dir_name, watermark): - if os.path.exists(os.path.join(dir_name, 'jenkins_build.tar.gz')): - raise Skip('the build has already been archived', dir_name) - timestamp = self._timestamp_from_dirname(dir_name) - # This is not the latest build - if timestamp is not None and timestamp <= watermark: - return None - # Read the build.xml metadata file that Jenkins generates - build_metadata = os.path.join(dir_name, 'build.xml') - - if not os.access(build_metadata, os.R_OK): - self.log.debug("Can't read build file at %s" % (build_metadata)) - raise Exception("Can't access build.xml at %s" % (build_metadata)) - else: - tree = ElementTree() - tree.parse(build_metadata) - if timestamp is None: - try: - timestamp = self._timestamp_from_build_file(dir_name, tree) - # This is not the latest build - if timestamp <= watermark: - return None - except ValueError: - return None - keys = ['result', 'number', 'duration'] - - kv_pairs = ((k, tree.find(k)) for k in keys) - d = dict([(k, v.text) for k, v in kv_pairs if v is not None]) - d['timestamp'] = timestamp - - try: - d['branch'] = tree.find('actions')\ - .find('hudson.plugins.git.util.BuildData')\ - .find('buildsByBranchName')\ - .find('entry')\ - .find('hudson.plugins.git.util.Build')\ - .find('revision')\ - .find('branches')\ - .find('hudson.plugins.git.Branch')\ - .find('name')\ - .text - except Exception: - pass - return d - - def _get_build_results(self, instance_key, job_dir): - job_name = os.path.basename(job_dir) - try: - dirs = glob(os.path.join(job_dir, 'builds', '*_*')) - # Before Jenkins v1.597 the build folders were named with a timestamp (eg: 2015-03-10_19-59-29) - # Starting from Jenkins v1.597 they are named after the build ID (1, 2, 3...) - # So we need try both format when trying to find the latest build and parsing build.xml - if len(dirs) == 0: - dirs = glob(os.path.join(job_dir, 'builds', '[0-9]*')) - if len(dirs) > 0: - # versions of Jenkins > 1.597 need to be sorted by build number (integer) - try: - dirs = sorted(dirs, key=lambda x: int(x.split('/')[-1]), reverse=True) - except ValueError: - dirs = sorted(dirs, reverse=True) - # We try to get the last valid build - for dir_name in dirs: - watermark = self.high_watermarks[instance_key][job_name] - try: - build_metadata = self._get_build_metadata(dir_name, watermark) - except Exception: - build_metadata = None - if build_metadata is not None: - build_result = build_metadata.get('result') - if build_result is None: - break - - output = { - 'job_name': job_name, - 'event_type': 'build result' - } - - output.update(build_metadata) - if 'number' not in output: - output['number'] = dir_name.split('/')[-1] - self.high_watermarks[instance_key][job_name] = output.get('timestamp') - self.log.debug("Processing %s results '%s'" % (job_name, output)) - yield output - - # If it not a new build, stop here - else: - break - except Exception, e: - self.log.error("Error while working on job %s, exception: %s" % (job_name, e)) - - def check(self, instance, create_event=True): - if self.high_watermarks.get(instance.get('name'), None) is None: - # On the first run of check(), prime the high_watermarks dict - # so that we only send events that occured after the agent - # started. - # (Setting high_watermarks in the next statement prevents - # any kind of infinite loop (assuming nothing ever sets - # high_watermarks to None again!)) - self.high_watermarks[instance.get('name')] = defaultdict(lambda: 0) - self.check(instance, create_event=False) - - jenkins_home = instance.get('jenkins_home') - - if not jenkins_home: - raise Exception("No jenkins_home directory set in the config file") - - jenkins_jobs_dir = os.path.join(jenkins_home, 'jobs', '*') - job_dirs = glob(jenkins_jobs_dir) - - if not job_dirs: - raise Exception('No jobs found in `%s`! ' - 'Check `jenkins_home` in your config' % (jenkins_jobs_dir)) - - for job_dir in job_dirs: - for output in self._get_build_results(instance.get('name'), job_dir): - output['host'] = get_hostname(self.agentConfig) - if create_event: - self.log.debug("Creating event for job: %s" % output['job_name']) - self.event(output) - - tags = [ - 'job_name:%s' % output['job_name'], - 'result:%s' % output['result'], - 'build_number:%s' % output['number'] - ] - - if 'branch' in output: - tags.append('branch:%s' % output['branch']) - self.gauge("jenkins.job.duration", float(output['duration'])/1000.0, tags=tags) - - if output['result'] == 'SUCCESS': - self.increment('jenkins.job.success', tags=tags) - else: - self.increment('jenkins.job.failure', tags=tags) diff --git a/pkg/py/checks/kafka_consumer.py b/pkg/py/checks/kafka_consumer.py deleted file mode 100644 index 8497768d3bc9..000000000000 --- a/pkg/py/checks/kafka_consumer.py +++ /dev/null @@ -1,124 +0,0 @@ -# stdlib -from collections import defaultdict - -# 3p -from kafka.client import KafkaClient -from kafka.common import OffsetRequest -from kazoo.client import KazooClient -from kazoo.exceptions import NoNodeError - -# project -from checks import AgentCheck - -DEFAULT_KAFKA_TIMEOUT = 5 -DEFAULT_ZK_TIMEOUT = 5 - - -class KafkaCheck(AgentCheck): - - SOURCE_TYPE_NAME = 'kafka' - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances=instances) - self.zk_timeout = int( - init_config.get('zk_timeout', DEFAULT_ZK_TIMEOUT)) - self.kafka_timeout = int( - init_config.get('kafka_timeout', DEFAULT_KAFKA_TIMEOUT)) - - def check(self, instance): - consumer_groups = self.read_config(instance, 'consumer_groups', - cast=self._validate_consumer_groups) - zk_connect_str = self.read_config(instance, 'zk_connect_str') - kafka_host_ports = self.read_config(instance, 'kafka_connect_str') - - # Construct the Zookeeper path pattern - zk_prefix = instance.get('zk_prefix', '') - zk_path_tmpl = zk_prefix + '/consumers/%s/offsets/%s/%s' - - # Connect to Zookeeper - zk_conn = KazooClient(zk_connect_str, timeout=self.zk_timeout) - zk_conn.start() - - try: - # Query Zookeeper for consumer offsets - consumer_offsets = {} - topics = defaultdict(set) - for consumer_group, topic_partitions in consumer_groups.iteritems(): - for topic, partitions in topic_partitions.iteritems(): - # Remember the topic partitions that we've see so that we can - # look up their broker offsets later - topics[topic].update(set(partitions)) - for partition in partitions: - zk_path = zk_path_tmpl % (consumer_group, topic, partition) - try: - consumer_offset = int(zk_conn.get(zk_path)[0]) - key = (consumer_group, topic, partition) - consumer_offsets[key] = consumer_offset - except NoNodeError: - self.log.warn('No zookeeper node at %s' % zk_path) - except Exception: - self.log.exception('Could not read consumer offset from %s' % zk_path) - finally: - try: - zk_conn.stop() - zk_conn.close() - except Exception: - self.log.exception('Error cleaning up Zookeeper connection') - - # Connect to Kafka - kafka_conn = KafkaClient(kafka_host_ports, timeout=self.kafka_timeout) - - try: - # Query Kafka for the broker offsets - broker_offsets = {} - for topic, partitions in topics.items(): - offset_responses = kafka_conn.send_offset_request([ - OffsetRequest(topic, p, -1, 1) for p in partitions]) - - for resp in offset_responses: - broker_offsets[(resp.topic, resp.partition)] = resp.offsets[0] - finally: - try: - kafka_conn.close() - except Exception: - self.log.exception('Error cleaning up Kafka connection') - - # Report the broker data - for (topic, partition), broker_offset in broker_offsets.items(): - broker_tags = ['topic:%s' % topic, 'partition:%s' % partition] - broker_offset = broker_offsets.get((topic, partition)) - self.gauge('kafka.broker_offset', broker_offset, tags=broker_tags) - - # Report the consumer - for (consumer_group, topic, partition), consumer_offset in consumer_offsets.items(): - - # Get the broker offset - broker_offset = broker_offsets.get((topic, partition)) - - # Report the consumer offset and lag - tags = ['topic:%s' % topic, 'partition:%s' % partition, - 'consumer_group:%s' % consumer_group] - self.gauge('kafka.consumer_offset', consumer_offset, tags=tags) - self.gauge('kafka.consumer_lag', broker_offset - consumer_offset, - tags=tags) - - # Private config validation/marshalling functions - - def _validate_consumer_groups(self, val): - try: - consumer_group, topic_partitions = val.items()[0] - assert isinstance(consumer_group, (str, unicode)) - topic, partitions = topic_partitions.items()[0] - assert isinstance(topic, (str, unicode)) - assert isinstance(partitions, (list, tuple)) - return val - except Exception, e: - self.log.exception(e) - raise Exception('''The `consumer_groups` value must be a mapping of mappings, like this: -consumer_groups: - myconsumer0: # consumer group name - mytopic0: [0, 1] # topic: list of partitions - myconsumer1: - mytopic0: [0, 1, 2] - mytopic1: [10, 12] -''') diff --git a/pkg/py/checks/kubernetes.py b/pkg/py/checks/kubernetes.py deleted file mode 100644 index 6a57c813dd33..000000000000 --- a/pkg/py/checks/kubernetes.py +++ /dev/null @@ -1,249 +0,0 @@ -"""kubernetes check -Collects metrics from cAdvisor instance -""" -# stdlib -import numbers -import socket -import struct -from fnmatch import fnmatch -import re - -# 3rd party -import requests - -# project -from checks import AgentCheck -from config import _is_affirmative -from utils.kubeutil import set_kube_settings, get_kube_settings, get_kube_labels -from utils.http import retrieve_json - -NAMESPACE = "kubernetes" -DEFAULT_MAX_DEPTH = 10 - -DEFAULT_USE_HISTOGRAM = False -DEFAULT_PUBLISH_ALIASES = False -DEFAULT_ENABLED_RATES = [ - 'diskio.io_service_bytes.stats.total', - 'network.??_bytes', - 'cpu.*.total'] - -NET_ERRORS = ['rx_errors', 'tx_errors', 'rx_dropped', 'tx_dropped'] - -DEFAULT_ENABLED_GAUGES = [ - 'memory.usage', - 'filesystem.usage'] - -GAUGE = AgentCheck.gauge -RATE = AgentCheck.rate -HISTORATE = AgentCheck.generate_historate_func(["container_name"]) -HISTO = AgentCheck.generate_histogram_func(["container_name"]) -FUNC_MAP = { - GAUGE: {True: HISTO, False: GAUGE}, - RATE: {True: HISTORATE, False: RATE} -} - -class Kubernetes(AgentCheck): - """ Collect metrics and events from kubelet """ - - pod_names_by_container = {} - - def __init__(self, name, init_config, agentConfig, instances=None): - if instances is not None and len(instances) > 1: - raise Exception('Kubernetes check only supports one configured instance.') - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - self.kube_settings = set_kube_settings(instances[0]) - - def _get_default_router(self): - try: - with open('/proc/net/route') as f: - for line in f.readlines(): - fields = line.strip().split() - if fields[1] == '00000000': - return socket.inet_ntoa(struct.pack('= self.max_depth: - self.log.warning('Reached max depth on metric=%s' % metric) - return - - if isinstance(dat, numbers.Number): - if self.enabled_rates and any([fnmatch(metric, pat) for pat in self.enabled_rates]): - self.publish_rate(self, metric, float(dat), tags) - elif self.enabled_gauges and any([fnmatch(metric, pat) for pat in self.enabled_gauges]): - self.publish_gauge(self, metric, float(dat), tags) - - elif isinstance(dat, dict): - for k,v in dat.iteritems(): - self._publish_raw_metrics(metric + '.%s' % k.lower(), v, tags, depth + 1) - - elif isinstance(dat, list): - self._publish_raw_metrics(metric, dat[-1], tags, depth + 1) - - @staticmethod - def _shorten_name(name): - # shorten docker image id - return re.sub('([0-9a-fA-F]{64,})', lambda x: x.group(1)[0:12], name) - - def _update_container_metrics(self, instance, subcontainer, kube_labels): - tags = instance.get('tags', []) # add support for custom tags - - if len(subcontainer.get('aliases', [])) >= 1: - # The first alias seems to always match the docker container name - container_name = subcontainer['aliases'][0] - else: - # We default to the container id - container_name = subcontainer['name'] - - tags.append('container_name:%s' % container_name) - - pod_name_set = False - try: - for label_name,label in subcontainer['spec']['labels'].iteritems(): - label_name = label_name.replace('io.kubernetes.pod.name', 'pod_name') - if label_name == "pod_name": - pod_name_set = True - pod_labels = kube_labels.get(label) - if pod_labels: - tags.extend(list(pod_labels)) - - if "-" in label: - replication_controller = "-".join( - label.split("-")[:-1]) - if "/" in replication_controller: - namespace, replication_controller = replication_controller.split("/", 1) - tags.append("kube_namespace:%s" % namespace) - - tags.append("kube_replication_controller:%s" % replication_controller) - tags.append('%s:%s' % (label_name, label)) - except KeyError: - pass - - if not pod_name_set: - tags.append("pod_name:no_pod") - - if self.publish_aliases and subcontainer.get("aliases"): - for alias in subcontainer['aliases'][1:]: - # we don't add the first alias as it will be the container_name - tags.append('container_alias:%s' % (self._shorten_name(alias))) - - stats = subcontainer['stats'][-1] # take the latest - self._publish_raw_metrics(NAMESPACE, stats, tags) - - if subcontainer.get("spec", {}).get("has_filesystem"): - fs = stats['filesystem'][-1] - fs_utilization = float(fs['usage'])/float(fs['capacity']) - self.publish_gauge(self, NAMESPACE + '.filesystem.usage_pct', fs_utilization, tags) - - if subcontainer.get("spec", {}).get("has_network"): - net = stats['network'] - self.publish_rate(self, NAMESPACE + '.network_errors', - sum(float(net[x]) for x in NET_ERRORS), - tags) - - def _retrieve_metrics(self, url): - return retrieve_json(url) - - def _retrieve_kube_labels(self): - return get_kube_labels() - - - def _update_metrics(self, instance, kube_settings): - metrics = self._retrieve_metrics(kube_settings["metrics_url"]) - kube_labels = self._retrieve_kube_labels() - if not metrics: - raise Exception('No metrics retrieved cmd=%s' % self.metrics_cmd) - - for subcontainer in metrics: - try: - self._update_container_metrics(instance, subcontainer, kube_labels) - except Exception, e: - self.log.error("Unable to collect metrics for container: {0} ({1}".format( - subcontainer.get('name'), e)) diff --git a/pkg/py/checks/kyototycoon.py b/pkg/py/checks/kyototycoon.py deleted file mode 100644 index c312fc8d1bc5..000000000000 --- a/pkg/py/checks/kyototycoon.py +++ /dev/null @@ -1,115 +0,0 @@ -# stdlib -from collections import defaultdict -import re - -# 3rd party -import requests - -# project -from checks import AgentCheck - -db_stats = re.compile(r'^db_(\d)+$') -whitespace = re.compile(r'\s') - - -class KyotoTycoonCheck(AgentCheck): - """Report statistics about the Kyoto Tycoon DBM-style - database server (http://fallabs.com/kyototycoon/) - """ - SOURCE_TYPE_NAME = 'kyoto tycoon' - SERVICE_CHECK_NAME = 'kyototycoon.can_connect' - - GAUGES = { - 'repl_delay': 'replication.delay', - 'serv_thread_count': 'threads', - } - - RATES = { - 'serv_conn_count': 'connections', - 'cnt_get': 'ops.get.hits', - 'cnt_get_misses': 'ops.get.misses', - 'cnt_set': 'ops.set.hits', - 'cnt_set_misses': 'ops.set.misses', - 'cnt_remove': 'ops.del.hits', - 'cnt_remove_misses': 'ops.del.misses', - } - - DB_GAUGES = { - 'count': 'records', - 'size': 'size', - } - TOTALS = { - 'cnt_get': 'ops.get.total', - 'cnt_get_misses': 'ops.get.total', - 'cnt_set': 'ops.set.total', - 'cnt_set_misses': 'ops.set.total', - 'cnt_remove': 'ops.del.total', - 'cnt_remove_misses': 'ops.del.total', - } - - def check(self, instance): - url = instance.get('report_url') - if not url: - raise Exception('Invalid Kyoto Tycoon report url %r' % url) - - tags = instance.get('tags', {}) - name = instance.get('name') - - # generate the formatted list of tags - tags = ['%s:%s' % (k, v) for k, v in tags.items()] - if name is not None: - tags.append('instance:%s' % name) - - service_check_tags = [] - if name is not None: - service_check_tags.append('instance:%s' % name) - - - try: - r = requests.get(url) - r.raise_for_status() - except requests.exceptions.HTTPError as e: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - tags=service_check_tags, message=str(e.message)) - raise - except Exception as e: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - tags=service_check_tags, message=str(e)) - raise - else: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.OK, - tags=service_check_tags) - - body = r.content - - totals = defaultdict(int) - for line in body.splitlines(): - if '\t' not in line: - continue - - key, value = line.strip().split('\t', 1) - if key in self.GAUGES: - name = self.GAUGES[key] - self.gauge('kyototycoon.%s' % name, float(value), tags=tags) - - elif key in self.RATES: - name = self.RATES[key] - self.rate('kyototycoon.%s_per_s' % name, float(value), tags=tags) - - elif db_stats.match(key): - # Also produce a per-db metrics tagged with the db - # number in addition to the default tags - m = db_stats.match(key) - dbnum = int(m.group(1)) - mytags = tags + ['db:%d' % dbnum] - for part in whitespace.split(value): - k, v = part.split('=', 1) - if k in self.DB_GAUGES: - name = self.DB_GAUGES[k] - self.gauge('kyototycoon.%s' % name, float(v), tags=mytags) - - if key in self.TOTALS: - totals[self.TOTALS[key]] += float(value) - - for key, value in totals.items(): - self.rate('kyototycoon.%s_per_s' % key, value, tags=tags) diff --git a/pkg/py/checks/lighttpd.py b/pkg/py/checks/lighttpd.py deleted file mode 100644 index a517ed5dfaee..000000000000 --- a/pkg/py/checks/lighttpd.py +++ /dev/null @@ -1,159 +0,0 @@ -# stdlib -import re -import urlparse - -# 3rd party -import requests - -# project -from checks import AgentCheck -from util import headers - -VERSION_REGEX = re.compile(r".*/(\d)") - - -class Lighttpd(AgentCheck): - """Tracks basic connection/requests/workers metrics - - See http://redmine.lighttpd.net/projects/1/wiki/Docs_ModStatus for Lighttpd details - See http://redmine.lighttpd.net/projects/lighttpd2/wiki/Mod_status for Lighttpd2 details - """ - - SERVICE_CHECK_NAME = 'lighttpd.can_connect' - - URL_SUFFIX_PER_VERSION = { - 1: '?auto', - 2: '?format=plain', - 'Unknown': '?auto' - } - - GAUGES = { - 'IdleServers': 'lighttpd.performance.idle_server', - 'BusyServers': 'lighttpd.performance.busy_servers', - 'Uptime': 'lighttpd.performance.uptime', - 'Total kBytes': 'lighttpd.net.bytes', - 'Total Accesses': 'lighttpd.net.hits', - 'memory_usage': 'lighttpd.performance.memory_usage', - 'requests_avg': 'lighttpd.net.requests_avg', - 'traffic_out_avg': 'lighttpd.net.bytes_out_avg', - 'traffic_in_avg': 'lighttpd.net.bytes_in_avg', - 'connections_avg': 'lighttpd.net.connections_avg', - 'connection_state_start': 'lighttpd.connections.state_start', - 'connection_state_read_header': 'lighttpd.connections.state_read_header', - 'connection_state_handle_request': 'lighttpd.connections.state_handle_request', - 'connection_state_write_response': 'lighttpd.connections.state_write_response', - 'connection_state_keep_alive': 'lighttpd.connections.state_keep_alive', - 'requests_avg_5sec': 'lighttpd.net.requests_avg_5sec', - 'traffic_out_avg_5sec': 'lighttpd.net.bytes_out_avg_5sec', - 'traffic_in_avg_5sec': 'lighttpd.net.bytes_in_avg_5sec', - 'connections_avg_5sec': 'lighttpd.net.connections_avg_5sec', - } - - COUNTERS = { - 'requests_abs': 'lighttpd.net.requests_total', - 'traffic_out_abs': 'lighttpd.net.bytes_out', - 'traffic_in_abs': 'lighttpd.net.bytes_in', - 'connections_abs': 'lighttpd.net.connections_total', - 'status_1xx': 'lighttpd.response.status_1xx', - 'status_2xx': 'lighttpd.response.status_2xx', - 'status_3xx': 'lighttpd.response.status_3xx', - 'status_4xx': 'lighttpd.response.status_4xx', - 'status_5xx': 'lighttpd.response.status_5xx', - } - - RATES = { - 'Total kBytes': 'lighttpd.net.bytes_per_s', - 'Total Accesses': 'lighttpd.net.request_per_s' - } - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - self.assumed_url = {} - - def check(self, instance): - if 'lighttpd_status_url' not in instance: - raise Exception("Missing 'lighttpd_status_url' variable in Lighttpd config") - - url = self.assumed_url.get(instance['lighttpd_status_url'], instance['lighttpd_status_url']) - - tags = instance.get('tags', []) - self.log.debug("Connecting to %s" % url) - - auth = None - if 'user' in instance and 'password' in instance: - auth = (instance['user'], instance['password']) - - # Submit a service check for status page availability. - parsed_url = urlparse.urlparse(url) - lighttpd_url = parsed_url.hostname - lighttpd_port = parsed_url.port or 80 - service_check_tags = ['host:%s' % lighttpd_url, 'port:%s' % lighttpd_port] - try: - r = requests.get(url, auth=auth, headers=headers(self.agentConfig)) - r.raise_for_status() - except Exception: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - tags=service_check_tags) - raise - else: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.OK, - tags=service_check_tags) - - headers_resp = r.headers - server_version = self._get_server_version(headers_resp) - response = r.content - - metric_count = 0 - # Loop through and extract the numerical values - for line in response.split('\n'): - values = line.split(': ') - if len(values) == 2: # match - metric, value = values - try: - value = float(value) - except ValueError: - continue - - # Special case: kBytes => bytes - if metric == 'Total kBytes': - value = value * 1024 - - # Send metric as a gauge, if applicable - if metric in self.GAUGES: - metric_count += 1 - metric_name = self.GAUGES[metric] - self.gauge(metric_name, value, tags=tags) - - # Send metric as a rate, if applicable - if metric in self.RATES: - metric_count += 1 - metric_name = self.RATES[metric] - self.rate(metric_name, value, tags=tags) - - # Send metric as a counter, if applicable - if metric in self.COUNTERS: - metric_count += 1 - metric_name = self.COUNTERS[metric] - self.increment(metric_name, value, tags=tags) - - if metric_count == 0: - url_suffix = self.URL_SUFFIX_PER_VERSION[server_version] - if self.assumed_url.get(instance['lighttpd_status_url']) is None and url[-len(url_suffix):] != url_suffix: - self.assumed_url[instance['lighttpd_status_url']] = '%s%s' % (url, url_suffix) - self.warning("Assuming url was not correct. Trying to add %s suffix to the url" % url_suffix) - self.check(instance) - else: - raise Exception("No metrics were fetched for this instance. Make sure " - "that %s is the proper url." % instance['lighttpd_status_url']) - - def _get_server_version(self, headers): - server_version = headers.get("server", "") - - match = VERSION_REGEX.match(server_version) - if match is None: - self.log.debug("Lighttpd server version is Unknown") - return "Unknown" - - version = int(match.group(1)) - self.log.debug("Lighttpd server version is %s" % version) - return version diff --git a/pkg/py/checks/marathon.py b/pkg/py/checks/marathon.py deleted file mode 100644 index f4900d752ef5..000000000000 --- a/pkg/py/checks/marathon.py +++ /dev/null @@ -1,81 +0,0 @@ -# stdlib -from urlparse import urljoin - -# 3rd party -import requests - -# project -from checks import AgentCheck - - -class Marathon(AgentCheck): - - DEFAULT_TIMEOUT = 5 - SERVICE_CHECK_NAME = 'marathon.can_connect' - - APP_METRICS = [ - 'backoffFactor', - 'backoffSeconds', - 'cpus', - 'disk', - 'instances', - 'mem', - 'taskRateLimit', - 'tasksRunning', - 'tasksStaged' - ] - - def check(self, instance): - if 'url' not in instance: - raise Exception('Marathon instance missing "url" value.') - - # Load values from the instance config - url = instance['url'] - user = instance.get('user') - password = instance.get('password') - if user is not None and password is not None: - auth = (user,password) - else: - auth = None - instance_tags = instance.get('tags', []) - default_timeout = self.init_config.get('default_timeout', self.DEFAULT_TIMEOUT) - timeout = float(instance.get('timeout', default_timeout)) - - response = self.get_json(urljoin(url, "/v2/apps"), timeout, auth) - if response is not None: - self.gauge('marathon.apps', len(response['apps']), tags=instance_tags) - for app in response['apps']: - tags = ['app_id:' + app['id'], 'version:' + app['version']] + instance_tags - for attr in self.APP_METRICS: - if attr in app: - self.gauge('marathon.' + attr, app[attr], tags=tags) - - query_url = urljoin(url, "/v2/apps/{0}/versions".format(app['id'])) - versions_reply = self.get_json(query_url, timeout, auth) - - if versions_reply is not None: - self.gauge('marathon.versions', len(versions_reply['versions']), tags=tags) - - def get_json(self, url, timeout, auth): - try: - r = requests.get(url, timeout=timeout, auth=auth) - r.raise_for_status() - except requests.exceptions.Timeout: - # If there's a timeout - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - message='%s timed out after %s seconds.' % (url, timeout), - tags = ["url:{0}".format(url)]) - raise Exception("Timeout when hitting %s" % url) - - except requests.exceptions.HTTPError: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - message='%s returned a status of %s' % (url, r.status_code), - tags = ["url:{0}".format(url)]) - raise Exception("Got %s when hitting %s" % (r.status_code, url)) - - else: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.OK, - tags = ["url:{0}".format(url)] - ) - - return r.json() diff --git a/pkg/py/checks/mcache.py b/pkg/py/checks/mcache.py deleted file mode 100644 index 91dc4f284802..000000000000 --- a/pkg/py/checks/mcache.py +++ /dev/null @@ -1,201 +0,0 @@ -# 3rd party -import memcache - -# project -from checks import AgentCheck - -# Ref: http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt -# Name Type Meaning -# ---------------------------------- -# pid 32u Process id of this server process -# uptime 32u Number of seconds this server has been running -# time 32u current UNIX time according to the server -# version string Version string of this server -# pointer_size 32 Default size of pointers on the host OS -# (generally 32 or 64) -# rusage_user 32u:32u Accumulated user time for this process -# (seconds:microseconds) -# rusage_system 32u:32u Accumulated system time for this process -# (seconds:microseconds) -# curr_items 32u Current number of items stored by the server -# total_items 32u Total number of items stored by this server -# ever since it started -# bytes 64u Current number of bytes used by this server -# to store items -# curr_connections 32u Number of open connections -# total_connections 32u Total number of connections opened since -# the server started running -# connection_structures 32u Number of connection structures allocated -# by the server -# cmd_get 64u Cumulative number of retrieval requests -# cmd_set 64u Cumulative number of storage requests -# get_hits 64u Number of keys that have been requested and -# found present -# get_misses 64u Number of items that have been requested -# and not found -# delete_misses 64u Number of deletions reqs for missing keys -# delete_hits 64u Number of deletion reqs resulting in -# an item being removed. -# evictions 64u Number of valid items removed from cache -# to free memory for new items -# bytes_read 64u Total number of bytes read by this server -# from network -# bytes_written 64u Total number of bytes sent by this server to -# network -# limit_maxbytes 32u Number of bytes this server is allowed to -# use for storage. -# threads 32u Number of worker threads requested. -# (see doc/threads.txt) -# listen_disabled_num 32u How many times the server has reached maxconns -# (see https://code.google.com/p/memcached/wiki/Timeouts) -# >>> mc.get_stats() -# [('127.0.0.1:11211 (1)', {'pid': '2301', 'total_items': '2', -# 'uptime': '80', 'listen_disabled_num': '0', 'version': '1.2.8', -# 'limit_maxbytes': '67108864', 'rusage_user': '0.002532', -# 'bytes_read': '51', 'accepting_conns': '1', 'rusage_system': -# '0.007445', 'cmd_get': '0', 'curr_connections': '4', 'threads': '2', -# 'total_connections': '5', 'cmd_set': '2', 'curr_items': '0', -# 'get_misses': '0', 'cmd_flush': '0', 'evictions': '0', 'bytes': '0', -# 'connection_structures': '5', 'bytes_written': '25', 'time': -# '1306364220', 'pointer_size': '64', 'get_hits': '0'})] - -# For Membase it gets worse -# http://www.couchbase.org/wiki/display/membase/Membase+Statistics -# https://github.com/membase/ep-engine/blob/master/docs/stats.org - - -class Memcache(AgentCheck): - - SOURCE_TYPE_NAME = 'memcached' - - DEFAULT_PORT = 11211 - - GAUGES = [ - "total_items", - "curr_items", - "limit_maxbytes", - "uptime", - "bytes", - "curr_connections", - "connection_structures", - "threads", - "pointer_size" - ] - - RATES = [ - "rusage_user", - "rusage_system", - "cmd_get", - "cmd_set", - "cmd_flush", - "get_hits", - "get_misses", - "delete_misses", - "delete_hits", - "evictions", - "bytes_read", - "bytes_written", - "cas_misses", - "cas_hits", - "cas_badval", - "total_connections", - "listen_disabled_num" - ] - - SERVICE_CHECK = 'memcache.can_connect' - - def get_library_versions(self): - return {"memcache": memcache.__version__} - - def _get_metrics(self, server, port, tags): - mc = None # client - service_check_tags = ["host:%s" % server, "port:%s" % port] - try: - self.log.debug("Connecting to %s:%s tags:%s", server, port, tags) - mc = memcache.Client(["%s:%s" % (server, port)]) - raw_stats = mc.get_stats() - - assert len(raw_stats) == 1 and len(raw_stats[0]) == 2,\ - "Malformed response: %s" % raw_stats - - - # Access the dict - stats = raw_stats[0][1] - for metric in stats: - # Check if metric is a gauge or rate - if metric in self.GAUGES: - our_metric = self.normalize(metric.lower(), 'memcache') - self.gauge(our_metric, float(stats[metric]), tags=tags) - - # Tweak the name if it's a rate so that we don't use the exact - # same metric name as the memcache documentation - if metric in self.RATES: - our_metric = self.normalize( - "{0}_rate".format(metric.lower()), 'memcache') - self.rate(our_metric, float(stats[metric]), tags=tags) - - # calculate some metrics based on other metrics. - # stats should be present, but wrap in try/except - # and log an exception just in case. - try: - self.gauge( - "memcache.get_hit_percent", - 100.0 * float(stats["get_hits"]) / float(stats["cmd_get"]), - tags=tags, - ) - except ZeroDivisionError: - pass - - try: - self.gauge( - "memcache.fill_percent", - 100.0 * float(stats["bytes"]) / float(stats["limit_maxbytes"]), - tags=tags, - ) - except ZeroDivisionError: - pass - - try: - self.gauge( - "memcache.avg_item_size", - float(stats["bytes"]) / float(stats["curr_items"]), - tags=tags, - ) - except ZeroDivisionError: - pass - - uptime = stats.get("uptime", 0) - self.service_check( - self.SERVICE_CHECK, AgentCheck.OK, - tags=service_check_tags, - message="Server has been up for %s seconds" % uptime) - except AssertionError: - self.service_check( - self.SERVICE_CHECK, AgentCheck.CRITICAL, - tags=service_check_tags, - message="Unable to fetch stats from server") - raise Exception( - "Unable to retrieve stats from memcache instance: {0}:{1}." - "Please check your configuration".format(server, port)) - - if mc is not None: - mc.disconnect_all() - self.log.debug("Disconnected from memcached") - del mc - - def check(self, instance): - socket = instance.get('socket') - server = instance.get('url') - if not server and not socket: - raise Exception('Either "url" or "socket" must be configured') - - if socket: - server = 'unix' - port = socket - else: - port = int(instance.get('port', self.DEFAULT_PORT)) - custom_tags = instance.get('tags') or [] - - tags = ["url:{0}:{1}".format(server, port)] + custom_tags - - self._get_metrics(server, port, tags) diff --git a/pkg/py/checks/mesos.py b/pkg/py/checks/mesos.py deleted file mode 100644 index 14784e2ba749..000000000000 --- a/pkg/py/checks/mesos.py +++ /dev/null @@ -1,127 +0,0 @@ -# stdlib -from hashlib import md5 -import time - -# 3rd party -import requests - -# project -from checks import AgentCheck - - -class Mesos(AgentCheck): - SERVICE_CHECK_NAME = "mesos.can_connect" - - def check(self, instance): - """ - DEPRECATED: - This generic Mesosphere check is deprecated not actively developed anymore. It will be - removed in a future version of the Datadog Agent. - Please head over to the Mesosphere master and slave specific checks. - """ - self.warning("This check is deprecated in favor of Mesos master and slave specific checks." - " It will be removed in a future version of the Datadog Agent.") - - if 'url' not in instance: - raise Exception('Mesos instance missing "url" value.') - - # Load values from the instance config - url = instance['url'] - instance_tags = instance.get('tags', []) - default_timeout = self.init_config.get('default_timeout', 5) - timeout = float(instance.get('timeout', default_timeout)) - - response = self.get_master_roles(url, timeout) - if response is not None: - for role in response['roles']: - tags = ['role:' + role['name']] + instance_tags - self.gauge('mesos.role.frameworks', len(role['frameworks']), tags=tags) - self.gauge('mesos.role.weight', role['weight'], tags=tags) - resources = role['resources'] - for attr in ['cpus','mem']: - if attr in resources: - self.gauge('mesos.role.' + attr, resources[attr], tags=tags) - - response = self.get_master_stats(url, timeout) - if response is not None: - tags = instance_tags - for key in iter(response): - self.gauge('mesos.stats.' + key, response[key], tags=tags) - - response = self.get_master_state(url, timeout) - if response is not None: - tags = instance_tags - for attr in ['deactivated_slaves','failed_tasks','finished_tasks','killed_tasks','lost_tasks','staged_tasks','started_tasks']: - self.gauge('mesos.state.' + attr, response[attr], tags=tags) - - for framework in response['frameworks']: - tags = ['framework:' + framework['id']] + instance_tags - resources = framework['resources'] - for attr in ['cpus','mem']: - if attr in resources: - self.gauge('mesos.state.framework.' + attr, resources[attr], tags=tags) - - for slave in response['slaves']: - tags = ['mesos','slave:' + slave['id']] + instance_tags - resources = slave['resources'] - for attr in ['cpus','mem','disk']: - if attr in resources: - self.gauge('mesos.state.slave.' + attr, resources[attr], tags=tags) - - def get_master_roles(self, url, timeout): - return self.get_json(url + "/master/roles.json", timeout) - - def get_master_stats(self, url, timeout): - return self.get_json(url + "/master/stats.json", timeout) - - def get_master_state(self, url, timeout): - return self.get_json(url + "/master/state.json", timeout) - - def get_json(self, url, timeout): - # Use a hash of the URL as an aggregation key - aggregation_key = md5(url).hexdigest() - tags = ["url:%s" % url] - msg = None - status = None - try: - r = requests.get(url, timeout=timeout) - if r.status_code != 200: - self.status_code_event(url, r, aggregation_key) - status = AgentCheck.CRITICAL - msg = "Got %s when hitting %s" % (r.status_code, url) - else: - status = AgentCheck.OK - msg = "Mesos master instance detected at %s " % url - except requests.exceptions.Timeout as e: - # If there's a timeout - self.timeout_event(url, timeout, aggregation_key) - msg = "%s seconds timeout when hitting %s" % (timeout, url) - status = AgentCheck.CRITICAL - except Exception as e: - msg = str(e) - status = AgentCheck.CRITICAL - finally: - self.service_check(self.SERVICE_CHECK_NAME, status, tags=tags, message=msg) - if status is AgentCheck.CRITICAL: - self.warning(msg) - return None - - return r.json() - - def timeout_event(self, url, timeout, aggregation_key): - self.event({ - 'timestamp': int(time.time()), - 'event_type': 'http_check', - 'msg_title': 'URL timeout', - 'msg_text': '%s timed out after %s seconds.' % (url, timeout), - 'aggregation_key': aggregation_key - }) - - def status_code_event(self, url, r, aggregation_key): - self.event({ - 'timestamp': int(time.time()), - 'event_type': 'http_check', - 'msg_title': 'Invalid reponse code for %s' % url, - 'msg_text': '%s returned a status of %s' % (url, r.status_code), - 'aggregation_key': aggregation_key - }) diff --git a/pkg/py/checks/mesos_master.py b/pkg/py/checks/mesos_master.py deleted file mode 100644 index ca01d8ccdad2..000000000000 --- a/pkg/py/checks/mesos_master.py +++ /dev/null @@ -1,233 +0,0 @@ -"""Mesos Master check - -Collects metrics from mesos master node, only the leader is sending metrics. -""" -# stdlib -from hashlib import md5 - -# 3rd party -import requests - -# project -from checks import AgentCheck, CheckException - - -class MesosMaster(AgentCheck): - GAUGE = AgentCheck.gauge - MONOTONIC_COUNT = AgentCheck.monotonic_count - SERVICE_CHECK_NAME = "mesos_master.can_connect" - service_check_needed = True - - - FRAMEWORK_METRICS = { - 'cpus' : ('mesos.framework.cpu', GAUGE), - 'mem' : ('mesos.framework.mem', GAUGE), - 'disk' : ('mesos.framework.disk', GAUGE), - } - - ROLE_RESOURCES_METRICS = { - 'cpus' : ('mesos.role.cpu', GAUGE), - 'mem' : ('mesos.role.mem', GAUGE), - 'disk' : ('mesos.role.disk', GAUGE), - } - - # These metrics are aggregated only on the elected master - CLUSTER_TASKS_METRICS = { - 'master/tasks_error' : ('mesos.cluster.tasks_error', GAUGE), - 'master/tasks_failed' : ('mesos.cluster.tasks_failed', MONOTONIC_COUNT), - 'master/tasks_finished' : ('mesos.cluster.tasks_finished', MONOTONIC_COUNT), - 'master/tasks_killed' : ('mesos.cluster.tasks_killed', MONOTONIC_COUNT), - 'master/tasks_lost' : ('mesos.cluster.tasks_lost', MONOTONIC_COUNT), - 'master/tasks_running' : ('mesos.cluster.tasks_running', GAUGE), - 'master/tasks_staging' : ('mesos.cluster.tasks_staging', GAUGE), - 'master/tasks_starting' : ('mesos.cluster.tasks_starting', GAUGE), - } - - # These metrics are aggregated only on the elected master - CLUSTER_SLAVES_METRICS = { - 'master/slave_registrations' : ('mesos.cluster.slave_registrations', GAUGE), - 'master/slave_removals' : ('mesos.cluster.slave_removals', GAUGE), - 'master/slave_reregistrations' : ('mesos.cluster.slave_reregistrations', GAUGE), - 'master/slave_shutdowns_canceled' : ('mesos.cluster.slave_shutdowns_canceled', GAUGE), - 'master/slave_shutdowns_scheduled' : ('mesos.cluster.slave_shutdowns_scheduled', GAUGE), - 'master/slaves_active' : ('mesos.cluster.slaves_active', GAUGE), - 'master/slaves_connected' : ('mesos.cluster.slaves_connected', GAUGE), - 'master/slaves_disconnected' : ('mesos.cluster.slaves_disconnected', GAUGE), - 'master/slaves_inactive' : ('mesos.cluster.slaves_inactive', GAUGE), - 'master/recovery_slave_removals' : ('mesos.cluster.recovery_slave_removals', GAUGE), - } - - # These metrics are aggregated only on the elected master - CLUSTER_RESOURCES_METRICS = { - 'master/cpus_percent' : ('mesos.cluster.cpus_percent', GAUGE), - 'master/cpus_total' : ('mesos.cluster.cpus_total', GAUGE), - 'master/cpus_used' : ('mesos.cluster.cpus_used', GAUGE), - 'master/disk_percent' : ('mesos.cluster.disk_percent', GAUGE), - 'master/disk_total' : ('mesos.cluster.disk_total', GAUGE), - 'master/disk_used' : ('mesos.cluster.disk_used', GAUGE), - 'master/mem_percent' : ('mesos.cluster.mem_percent', GAUGE), - 'master/mem_total' : ('mesos.cluster.mem_total', GAUGE), - 'master/mem_used' : ('mesos.cluster.mem_used', GAUGE), - } - - # These metrics are aggregated only on the elected master - CLUSTER_REGISTRAR_METRICS = { - 'registrar/queued_operations' : ('mesos.registrar.queued_operations', GAUGE), - 'registrar/registry_size_bytes' : ('mesos.registrar.registry_size_bytes', GAUGE), - 'registrar/state_fetch_ms' : ('mesos.registrar.state_fetch_ms', GAUGE), - 'registrar/state_store_ms' : ('mesos.registrar.state_store_ms', GAUGE), - 'registrar/state_store_ms/count' : ('mesos.registrar.state_store_ms.count', GAUGE), - 'registrar/state_store_ms/max' : ('mesos.registrar.state_store_ms.max', GAUGE), - 'registrar/state_store_ms/min' : ('mesos.registrar.state_store_ms.min', GAUGE), - 'registrar/state_store_ms/p50' : ('mesos.registrar.state_store_ms.p50', GAUGE), - 'registrar/state_store_ms/p90' : ('mesos.registrar.state_store_ms.p90', GAUGE), - 'registrar/state_store_ms/p95' : ('mesos.registrar.state_store_ms.p95', GAUGE), - 'registrar/state_store_ms/p99' : ('mesos.registrar.state_store_ms.p99', GAUGE), - 'registrar/state_store_ms/p999' : ('mesos.registrar.state_store_ms.p999', GAUGE), - 'registrar/state_store_ms/p9999' : ('mesos.registrar.state_store_ms.p9999', GAUGE), - } - - # These metrics are aggregated only on the elected master - CLUSTER_FRAMEWORK_METRICS = { - 'master/frameworks_active' : ('mesos.cluster.frameworks_active', GAUGE), - 'master/frameworks_connected' : ('mesos.cluster.frameworks_connected', GAUGE), - 'master/frameworks_disconnected' : ('mesos.cluster.frameworks_disconnected', GAUGE), - 'master/frameworks_inactive' : ('mesos.cluster.frameworks_inactive', GAUGE), - } - - # These metrics are aggregated on all nodes in the cluster - SYSTEM_METRICS = { - 'system/cpus_total' : ('mesos.stats.system.cpus_total', GAUGE), - 'system/load_15min' : ('mesos.stats.system.load_15min', GAUGE), - 'system/load_1min' : ('mesos.stats.system.load_1min', GAUGE), - 'system/load_5min' : ('mesos.stats.system.load_5min', GAUGE), - 'system/mem_free_bytes' : ('mesos.stats.system.mem_free_bytes', GAUGE), - 'system/mem_total_bytes' : ('mesos.stats.system.mem_total_bytes', GAUGE), - 'master/elected' : ('mesos.stats.elected', GAUGE), - 'master/uptime_secs' : ('mesos.stats.uptime_secs', GAUGE), - } - - # These metrics are aggregated only on the elected master - STATS_METRICS = { - 'master/dropped_messages' : ('mesos.cluster.dropped_messages', GAUGE), - 'master/outstanding_offers' : ('mesos.cluster.outstanding_offers', GAUGE), - 'master/event_queue_dispatches' : ('mesos.cluster.event_queue_dispatches', GAUGE), - 'master/event_queue_http_requests' : ('mesos.cluster.event_queue_http_requests', GAUGE), - 'master/event_queue_messages' : ('mesos.cluster.event_queue_messages', GAUGE), - 'master/invalid_framework_to_executor_messages' : ('mesos.cluster.invalid_framework_to_executor_messages', GAUGE), - 'master/invalid_status_update_acknowledgements' : ('mesos.cluster.invalid_status_update_acknowledgements', GAUGE), - 'master/invalid_status_updates' : ('mesos.cluster.invalid_status_updates', GAUGE), - 'master/valid_framework_to_executor_messages' : ('mesos.cluster.valid_framework_to_executor_messages', GAUGE), - 'master/valid_status_update_acknowledgements' : ('mesos.cluster.valid_status_update_acknowledgements', GAUGE), - 'master/valid_status_updates' : ('mesos.cluster.valid_status_updates', GAUGE), - } - - def _get_json(self, url, timeout): - # Use a hash of the URL as an aggregation key - aggregation_key = md5(url).hexdigest() - tags = ["url:%s" % url] - msg = None - status = None - try: - r = requests.get(url, timeout=timeout) - if r.status_code != 200: - status = AgentCheck.CRITICAL - msg = "Got %s when hitting %s" % (r.status_code, url) - else: - status = AgentCheck.OK - msg = "Mesos master instance detected at %s " % url - except requests.exceptions.Timeout as e: - # If there's a timeout - msg = "%s seconds timeout when hitting %s" % (timeout, url) - status = AgentCheck.CRITICAL - except Exception as e: - msg = str(e) - status = AgentCheck.CRITICAL - finally: - if self.service_check_needed: - self.service_check(self.SERVICE_CHECK_NAME, status, tags=tags, - message=msg) - self.service_check_needed = False - if status is AgentCheck.CRITICAL: - self.service_check(self.SERVICE_CHECK_NAME, status, tags=tags, - message=msg) - raise CheckException("Cannot connect to mesos, please check your configuration.") - - return r.json() - - def _get_master_state(self, url, timeout): - return self._get_json(url + '/state.json', timeout) - - def _get_master_stats(self, url, timeout): - if self.version >= [0, 22, 0]: - endpoint = '/metrics/snapshot' - else: - endpoint = '/stats.json' - return self._get_json(url + endpoint, timeout) - - def _get_master_roles(self, url, timeout): - return self._get_json(url + '/roles.json', timeout) - - def _check_leadership(self, url, timeout): - state_metrics = self._get_master_state(url, timeout) - self.leader = False - - if state_metrics is not None: - self.version = map(int, state_metrics['version'].split('.')) - if state_metrics['leader'] == state_metrics['pid']: - self.leader = True - - return state_metrics - - def check(self, instance): - if 'url' not in instance: - raise Exception('Mesos instance missing "url" value.') - - url = instance['url'] - instance_tags = instance.get('tags', []) - default_timeout = self.init_config.get('default_timeout', 5) - timeout = float(instance.get('timeout', default_timeout)) - - state_metrics = self._check_leadership(url, timeout) - if state_metrics: - tags = [ - 'mesos_pid:{0}'.format(state_metrics['pid']), - 'mesos_node:master', - ] - if 'cluster' in state_metrics: - tags.append('mesos_cluster:{0}'.format(state_metrics['cluster'])) - - tags += instance_tags - - if self.leader: - self.GAUGE('mesos.cluster.total_frameworks', len(state_metrics['frameworks']), tags=tags) - - for framework in state_metrics['frameworks']: - framework_tags = ['framework_name:' + framework['name']] + tags - self.GAUGE('mesos.framework.total_tasks', len(framework['tasks']), tags=framework_tags) - resources = framework['used_resources'] - for key_name, (metric_name, metric_func) in self.FRAMEWORK_METRICS.iteritems(): - metric_func(self, metric_name, resources[key_name], tags=framework_tags) - - role_metrics = self._get_master_roles(url, timeout) - if role_metrics is not None: - for role in role_metrics['roles']: - role_tags = ['mesos_role:' + role['name']] + tags - self.GAUGE('mesos.role.frameworks.count', len(role['frameworks']), tags=role_tags) - self.GAUGE('mesos.role.weight', role['weight'], tags=role_tags) - for key_name, (metric_name, metric_func) in self.ROLE_RESOURCES_METRICS.iteritems(): - metric_func(self, metric_name, role['resources'][key_name], tags=role_tags) - - stats_metrics = self._get_master_stats(url, timeout) - if stats_metrics is not None: - metrics = [self.SYSTEM_METRICS] - if self.leader: - metrics += [self.CLUSTER_TASKS_METRICS, self.CLUSTER_SLAVES_METRICS, - self.CLUSTER_RESOURCES_METRICS, self.CLUSTER_REGISTRAR_METRICS, - self.CLUSTER_FRAMEWORK_METRICS, self.STATS_METRICS] - for m in metrics: - for key_name, (metric_name, metric_func) in m.iteritems(): - metric_func(self, metric_name, stats_metrics[key_name], tags=tags) - - - self.service_check_needed = True diff --git a/pkg/py/checks/mesos_slave.py b/pkg/py/checks/mesos_slave.py deleted file mode 100644 index 9eb8de5a19a8..000000000000 --- a/pkg/py/checks/mesos_slave.py +++ /dev/null @@ -1,187 +0,0 @@ -"""Mesos Slave check - -Collects metrics from mesos slave node. -""" -# stdlib -from hashlib import md5 - -# 3rd party -import requests - -# project -from checks import AgentCheck, CheckException - - -class MesosSlave(AgentCheck): - GAUGE = AgentCheck.gauge - MONOTONIC_COUNT = AgentCheck.monotonic_count - SERVICE_CHECK_NAME = "mesos_slave.can_connect" - service_check_needed = True - - TASK_STATUS = { - 'TASK_STARTING' : AgentCheck.OK, - 'TASK_RUNNING' : AgentCheck.OK, - 'TASK_FINISHED' : AgentCheck.OK, - 'TASK_FAILED' : AgentCheck.CRITICAL, - 'TASK_KILLED' : AgentCheck.WARNING, - 'TASK_LOST' : AgentCheck.CRITICAL, - 'TASK_STAGING' : AgentCheck.OK, - 'TASK_ERROR' : AgentCheck.CRITICAL, - } - - TASK_METRICS = { - 'cpus' : ('mesos.state.task.cpu', GAUGE), - 'mem' : ('mesos.state.task.mem', GAUGE), - 'disk' : ('mesos.state.task.disk', GAUGE), - } - - SLAVE_TASKS_METRICS = { - 'slave/tasks_failed' : ('mesos.slave.tasks_failed', MONOTONIC_COUNT), - 'slave/tasks_finished' : ('mesos.slave.tasks_finished', MONOTONIC_COUNT), - 'slave/tasks_killed' : ('mesos.slave.tasks_killed', MONOTONIC_COUNT), - 'slave/tasks_lost' : ('mesos.slave.tasks_lost', MONOTONIC_COUNT), - 'slave/tasks_running' : ('mesos.slave.tasks_running', GAUGE), - 'slave/tasks_staging' : ('mesos.slave.tasks_staging', GAUGE), - 'slave/tasks_starting' : ('mesos.slave.tasks_starting', GAUGE), - } - - SYSTEM_METRICS = { - 'system/cpus_total' : ('mesos.stats.system.cpus_total', GAUGE), - 'system/load_15min' : ('mesos.stats.system.load_15min', GAUGE), - 'system/load_1min' : ('mesos.stats.system.load_1min', GAUGE), - 'system/load_5min' : ('mesos.stats.system.load_5min', GAUGE), - 'system/mem_free_bytes' : ('mesos.stats.system.mem_free_bytes', GAUGE), - 'system/mem_total_bytes' : ('mesos.stats.system.mem_total_bytes', GAUGE), - 'slave/registered' : ('mesos.stats.registered', GAUGE), - 'slave/uptime_secs' : ('mesos.stats.uptime_secs', GAUGE), - } - - SLAVE_RESOURCE_METRICS = { - 'slave/cpus_percent' : ('mesos.slave.cpus_percent', GAUGE), - 'slave/cpus_total' : ('mesos.slave.cpus_total', GAUGE), - 'slave/cpus_used' : ('mesos.slave.cpus_used', GAUGE), - 'slave/disk_percent' : ('mesos.slave.disk_percent', GAUGE), - 'slave/disk_total' : ('mesos.slave.disk_total', GAUGE), - 'slave/disk_used' : ('mesos.slave.disk_used', GAUGE), - 'slave/mem_percent' : ('mesos.slave.mem_percent', GAUGE), - 'slave/mem_total' : ('mesos.slave.mem_total', GAUGE), - 'slave/mem_used' : ('mesos.slave.mem_used', GAUGE), - } - - SLAVE_EXECUTORS_METRICS = { - 'slave/executors_registering' : ('mesos.slave.executors_registering', GAUGE), - 'slave/executors_running' : ('mesos.slave.executors_running', GAUGE), - 'slave/executors_terminated' : ('mesos.slave.executors_terminated', GAUGE), - 'slave/executors_terminating' : ('mesos.slave.executors_terminating', GAUGE), - } - - STATS_METRICS = { - 'slave/frameworks_active' : ('mesos.slave.frameworks_active', GAUGE), - 'slave/invalid_framework_messages' : ('mesos.slave.invalid_framework_messages', GAUGE), - 'slave/invalid_status_updates' : ('mesos.slave.invalid_status_updates', GAUGE), - 'slave/recovery_errors' : ('mesos.slave.recovery_errors', GAUGE), - 'slave/valid_framework_messages' : ('mesos.slave.valid_framework_messages', GAUGE), - 'slave/valid_status_updates' : ('mesos.slave.valid_status_updates', GAUGE), - } - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - self.cluster_name = None - - def _get_json(self, url, timeout): - # Use a hash of the URL as an aggregation key - aggregation_key = md5(url).hexdigest() - tags = ["url:%s" % url] - msg = None - status = None - try: - r = requests.get(url, timeout=timeout) - if r.status_code != 200: - status = AgentCheck.CRITICAL - msg = "Got %s when hitting %s" % (r.status_code, url) - else: - status = AgentCheck.OK - msg = "Mesos master instance detected at %s " % url - except requests.exceptions.Timeout as e: - # If there's a timeout - msg = "%s seconds timeout when hitting %s" % (timeout, url) - status = AgentCheck.CRITICAL - except Exception as e: - msg = str(e) - status = AgentCheck.CRITICAL - finally: - if self.service_check_needed: - self.service_check(self.SERVICE_CHECK_NAME, status, tags=tags, message=msg) - self.service_check_needed = False - if status is AgentCheck.CRITICAL: - raise CheckException("Cannot connect to mesos, please check your configuration.") - - return r.json() - - def _get_state(self, url, timeout): - return self._get_json(url + '/state.json', timeout) - - def _get_stats(self, url, timeout): - if self.version >= [0, 22, 0]: - endpoint = '/metrics/snapshot' - else: - endpoint = '/stats.json' - return self._get_json(url + endpoint, timeout) - - def _get_constant_attributes(self, url, timeout): - state_metrics = None - if self.cluster_name is None: - state_metrics = self._get_state(url, timeout) - if state_metrics is not None: - self.version = map(int, state_metrics['version'].split('.')) - master_state = self._get_state('http://' + state_metrics['master_hostname'] + ':5050', timeout) - if master_state is not None: - self.cluster_name = master_state.get('cluster') - - return state_metrics - - def check(self, instance): - if 'url' not in instance: - raise Exception('Mesos instance missing "url" value.') - - url = instance['url'] - instance_tags = instance.get('tags', []) - tasks = instance.get('tasks', []) - default_timeout = self.init_config.get('default_timeout', 5) - timeout = float(instance.get('timeout', default_timeout)) - - state_metrics = self._get_constant_attributes(url, timeout) - tags = None - - if state_metrics is None: - state_metrics = self._get_state(url, timeout) - if state_metrics: - tags = [ - 'mesos_pid:{0}'.format(state_metrics['pid']), - 'mesos_node:slave', - ] - if self.cluster_name: - tags.append('mesos_cluster:{0}'.format(self.cluster_name)) - - tags += instance_tags - - for task in tasks: - for framework in state_metrics['frameworks']: - for executor in framework['executors']: - for t in executor['tasks']: - if task.lower() in t['name'].lower() and t['slave_id'] == state_metrics['id']: - task_tags = ['task_name:' + t['name']] + tags - self.service_check(t['name'] + '.ok', self.TASK_STATUS[t['state']], tags=task_tags) - for key_name, (metric_name, metric_func) in self.TASK_METRICS.iteritems(): - metric_func(self, metric_name, t['resources'][key_name], tags=task_tags) - - stats_metrics = self._get_stats(url, timeout) - if stats_metrics: - tags = tags if tags else instance_tags - metrics = [self.SLAVE_TASKS_METRICS, self.SYSTEM_METRICS, self.SLAVE_RESOURCE_METRICS, - self.SLAVE_EXECUTORS_METRICS, self.STATS_METRICS] - for m in metrics: - for key_name, (metric_name, metric_func) in m.iteritems(): - metric_func(self, metric_name, stats_metrics[key_name], tags=tags) - - self.service_check_needed = True diff --git a/pkg/py/checks/mongo.py b/pkg/py/checks/mongo.py deleted file mode 100644 index c222db68e324..000000000000 --- a/pkg/py/checks/mongo.py +++ /dev/null @@ -1,450 +0,0 @@ -# stdlib -import time - -# 3p -import pymongo - -# project -from checks import AgentCheck -from config import _is_affirmative -from util import get_hostname - -DEFAULT_TIMEOUT = 30 -GAUGE = AgentCheck.gauge -RATE = AgentCheck.rate - - -class MongoDb(AgentCheck): - SERVICE_CHECK_NAME = 'mongodb.can_connect' - SOURCE_TYPE_NAME = 'mongodb' - - COMMON_METRICS = { - "asserts.msg": RATE, - "asserts.regular": RATE, - "asserts.rollovers": RATE, - "asserts.user": RATE, - "asserts.warning": RATE, - "connections.available": GAUGE, - "connections.current": GAUGE, - "connections.totalCreated": GAUGE, - "cursors.timedOut": GAUGE, - "cursors.totalOpen": GAUGE, - "extra_info.heap_usage_bytes": RATE, - "extra_info.page_faults": RATE, - "globalLock.activeClients.readers": GAUGE, - "globalLock.activeClients.total": GAUGE, - "globalLock.activeClients.writers": GAUGE, - "globalLock.currentQueue.readers": GAUGE, - "globalLock.currentQueue.total": GAUGE, - "globalLock.currentQueue.writers": GAUGE, - "globalLock.totalTime": GAUGE, - "mem.bits": GAUGE, - "mem.mapped": GAUGE, - "mem.mappedWithJournal": GAUGE, - "mem.resident": GAUGE, - "mem.virtual": GAUGE, - "metrics.document.deleted": RATE, - "metrics.document.inserted": RATE, - "metrics.document.returned": RATE, - "metrics.document.updated": RATE, - "metrics.getLastError.wtime.num": RATE, - "metrics.getLastError.wtime.totalMillis": RATE, - "metrics.getLastError.wtimeouts": RATE, - "metrics.operation.fastmod": RATE, - "metrics.operation.idhack": RATE, - "metrics.operation.scanAndOrder": RATE, - "metrics.queryExecutor.scanned": RATE, - "metrics.record.moves": RATE, - "metrics.repl.apply.batches.num": RATE, - "metrics.repl.apply.batches.totalMillis": RATE, - "metrics.repl.apply.ops": RATE, - "metrics.repl.buffer.count": GAUGE, - "metrics.repl.buffer.maxSizeBytes": GAUGE, - "metrics.repl.buffer.sizeBytes": GAUGE, - "metrics.repl.network.bytes": RATE, - "metrics.repl.network.getmores.num": RATE, - "metrics.repl.network.getmores.totalMillis": RATE, - "metrics.repl.network.ops": RATE, - "metrics.repl.network.readersCreated": RATE, - "metrics.repl.oplog.insert.num": RATE, - "metrics.repl.oplog.insert.totalMillis": RATE, - "metrics.repl.oplog.insertBytes": RATE, - "metrics.repl.preload.indexes.num": RATE, - "metrics.repl.preload.indexes.totalMillis": RATE, - "metrics.ttl.deletedDocuments": RATE, - "metrics.ttl.passes": RATE, - "opcounters.command": RATE, - "opcounters.delete": RATE, - "opcounters.getmore": RATE, - "opcounters.insert": RATE, - "opcounters.query": RATE, - "opcounters.update": RATE, - "opcountersRepl.command": RATE, - "opcountersRepl.delete": RATE, - "opcountersRepl.getmore": RATE, - "opcountersRepl.insert": RATE, - "opcountersRepl.query": RATE, - "opcountersRepl.update": RATE, - "replSet.health": GAUGE, - "replSet.replicationLag": GAUGE, - "replSet.state": GAUGE, - "stats.avgObjSize": GAUGE, - "stats.collections": GAUGE, - "stats.dataSize": GAUGE, - "stats.fileSize": GAUGE, - "stats.indexes": GAUGE, - "stats.indexSize": GAUGE, - "stats.nsSizeMB": GAUGE, - "stats.numExtents": GAUGE, - "stats.objects": GAUGE, - "stats.storageSize": GAUGE, - "uptime": GAUGE, - } - - V2_ONLY_METRICS = { - "globalLock.lockTime": GAUGE, - "globalLock.ratio": GAUGE, # < 2.2 - "indexCounters.accesses": RATE, - "indexCounters.btree.accesses": RATE, # < 2.4 - "indexCounters.btree.hits": RATE, # < 2.4 - "indexCounters.btree.misses": RATE, # < 2.4 - "indexCounters.btree.missRatio": GAUGE, # < 2.4 - "indexCounters.hits": RATE, - "indexCounters.misses": RATE, - "indexCounters.missRatio": GAUGE, - "indexCounters.resets": RATE, - } - - TCMALLOC_METRICS = { - "tcmalloc.generic.current_allocated_bytes": GAUGE, - "tcmalloc.generic.heap_size": GAUGE, - "tcmalloc.tcmalloc.aggressive_memory_decommit": GAUGE, - "tcmalloc.tcmalloc.central_cache_free_bytes": GAUGE, - "tcmalloc.tcmalloc.current_total_thread_cache_bytes": GAUGE, - "tcmalloc.tcmalloc.max_total_thread_cache_bytes": GAUGE, - "tcmalloc.tcmalloc.pageheap_free_bytes": GAUGE, - "tcmalloc.tcmalloc.pageheap_unmapped_bytes": GAUGE, - "tcmalloc.tcmalloc.thread_cache_free_bytes": GAUGE, - "tcmalloc.tcmalloc.transfer_cache_free_bytes": GAUGE, - } - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - self._last_state_by_server = {} - self.metrics_to_collect_by_instance = {} - - def get_library_versions(self): - return {"pymongo": pymongo.version} - - def check_last_state(self, state, clean_server_name, agentConfig): - if self._last_state_by_server.get(clean_server_name, -1) != state: - self._last_state_by_server[clean_server_name] = state - return self.create_event(state, clean_server_name, agentConfig) - - def create_event(self, state, clean_server_name, agentConfig): - """Create an event with a message describing the replication - state of a mongo node""" - - def get_state_description(state): - if state == 0: - return 'Starting Up' - elif state == 1: - return 'Primary' - elif state == 2: - return 'Secondary' - elif state == 3: - return 'Recovering' - elif state == 4: - return 'Fatal' - elif state == 5: - return 'Starting up (forking threads)' - elif state == 6: - return 'Unknown' - elif state == 7: - return 'Arbiter' - elif state == 8: - return 'Down' - elif state == 9: - return 'Rollback' - - status = get_state_description(state) - hostname = get_hostname(agentConfig) - msg_title = "%s is %s" % (clean_server_name, status) - msg = "MongoDB %s just reported as %s" % (clean_server_name, status) - - self.event({ - 'timestamp': int(time.time()), - 'event_type': 'Mongo', - 'api_key': agentConfig.get('api_key', ''), - 'msg_title': msg_title, - 'msg_text': msg, - 'host': hostname - }) - - @classmethod - def _build_metric_list_to_collect(cls, collect_tcmalloc_metrics=False): - """ - Build the metric list to collect based on the instance preferences. - """ - metrics_to_collect = {} - - # Defaut metrics - metrics_to_collect.update(cls.COMMON_METRICS) - metrics_to_collect.update(cls.V2_ONLY_METRICS) - - # Optional metrics - if collect_tcmalloc_metrics: - metrics_to_collect.update(cls.TCMALLOC_METRICS) - - return metrics_to_collect - - def _get_metrics_to_collect(self, instance_key, **instance_preferences): - """ - Return and cache the list of metrics to collect. - """ - if instance_key not in self.metrics_to_collect_by_instance: - self.metrics_to_collect_by_instance[instance_key] = \ - self._build_metric_list_to_collect(**instance_preferences) - return self.metrics_to_collect_by_instance[instance_key] - - def _normalize(self, metric_name, submit_method): - """ - Normalize the metric name considering its type. - """ - if submit_method == RATE: - return self.normalize(metric_name.lower(), 'mongodb') + "ps" - - return self.normalize(metric_name.lower(), 'mongodb') - - def check(self, instance): - """ - Returns a dictionary that looks a lot like what's sent back by - db.serverStatus() - """ - if 'server' not in instance: - raise Exception("Missing 'server' in mongo config") - - server = instance['server'] - - ssl_params = { - 'ssl': instance.get('ssl', None), - 'ssl_keyfile': instance.get('ssl_keyfile', None), - 'ssl_certfile': instance.get('ssl_certfile', None), - 'ssl_cert_reqs': instance.get('ssl_cert_reqs', None), - 'ssl_ca_certs': instance.get('ssl_ca_certs', None) - } - - for key, param in ssl_params.items(): - if param is None: - del ssl_params[key] - - # Configuration a URL, mongodb://user:pass@server/db - parsed = pymongo.uri_parser.parse_uri(server) - username = parsed.get('username') - password = parsed.get('password') - db_name = parsed.get('database') - clean_server_name = server.replace(password, "*" * 5) if password is not None else server - - tags = instance.get('tags', []) - tags.append('server:%s' % clean_server_name) - - # Get the list of metrics to collect - collect_tcmalloc_metrics = _is_affirmative( - instance.get('collect_tcmalloc_metrics', False) - ) - metrics_to_collect = self._get_metrics_to_collect( - server, - collect_tcmalloc_metrics=collect_tcmalloc_metrics, - ) - - # de-dupe tags to avoid a memory leak - tags = list(set(tags)) - - if not db_name: - self.log.info('No MongoDB database found in URI. Defaulting to admin.') - db_name = 'admin' - - service_check_tags = [ - "db:%s" % db_name - ] - - nodelist = parsed.get('nodelist') - if nodelist: - host = nodelist[0][0] - port = nodelist[0][1] - service_check_tags = service_check_tags + [ - "host:%s" % host, - "port:%s" % port - ] - - do_auth = True - if username is None or password is None: - self.log.debug("Mongo: cannot extract username and password from config %s" % server) - do_auth = False - - timeout = float(instance.get('timeout', DEFAULT_TIMEOUT)) * 1000 - try: - cli = pymongo.mongo_client.MongoClient( - server, - socketTimeoutMS=timeout, - read_preference=pymongo.ReadPreference.PRIMARY_PREFERRED, - **ssl_params) - # some commands can only go against the admin DB - admindb = cli['admin'] - db = cli[db_name] - except Exception: - self.service_check( - self.SERVICE_CHECK_NAME, - AgentCheck.CRITICAL, - tags=service_check_tags) - raise - - if do_auth and not db.authenticate(username, password): - message = "Mongo: cannot connect with config %s" % server - self.service_check( - self.SERVICE_CHECK_NAME, - AgentCheck.CRITICAL, - tags=service_check_tags, - message=message) - raise Exception(message) - - self.service_check( - self.SERVICE_CHECK_NAME, - AgentCheck.OK, - tags=service_check_tags) - - status = db["$cmd"].find_one({"serverStatus": 1, "tcmalloc": collect_tcmalloc_metrics}) - if status['ok'] == 0: - raise Exception(status['errmsg'].__str__()) - - status['stats'] = db.command('dbstats') - dbstats = {} - dbstats[db_name] = {'stats': status['stats']} - - # Handle replica data, if any - # See - # http://www.mongodb.org/display/DOCS/Replica+Set+Commands#ReplicaSetCommands-replSetGetStatus # noqa - try: - data = {} - dbnames = [] - - replSet = admindb.command('replSetGetStatus') - if replSet: - primary = None - current = None - - # need a new connection to deal with replica sets - setname = replSet.get('set') - cli = pymongo.mongo_client.MongoClient( - server, - socketTimeoutMS=timeout, - replicaset=setname, - read_preference=pymongo.ReadPreference.NEAREST, - **ssl_params) - db = cli[db_name] - - if do_auth and not db.authenticate(username, password): - message = ("Mongo: cannot connect with config %s" % server) - self.service_check( - self.SERVICE_CHECK_NAME, - AgentCheck.CRITICAL, - tags=service_check_tags, - message=message) - raise Exception(message) - - # find nodes: master and current node (ourself) - for member in replSet.get('members'): - if member.get('self'): - current = member - if int(member.get('state')) == 1: - primary = member - - # If we have both we can compute a lag time - if current is not None and primary is not None: - lag = primary['optimeDate'] - current['optimeDate'] - # Python 2.7 has this built in, python < 2.7 don't... - if hasattr(lag, 'total_seconds'): - data['replicationLag'] = lag.total_seconds() - else: - data['replicationLag'] = ( - lag.microseconds + - (lag.seconds + lag.days * 24 * 3600) * 10**6 - ) / 10.0**6 - - if current is not None: - data['health'] = current['health'] - - data['state'] = replSet['myState'] - self.check_last_state( - data['state'], - clean_server_name, - self.agentConfig) - status['replSet'] = data - - except Exception as e: - if "OperationFailure" in repr(e) and "replSetGetStatus" in str(e): - pass - else: - raise e - - # If these keys exist, remove them for now as they cannot be serialized - try: - status['backgroundFlushing'].pop('last_finished') - except KeyError: - pass - try: - status.pop('localTime') - except KeyError: - pass - - dbnames = cli.database_names() - for db_n in dbnames: - db_aux = cli[db_n] - dbstats[db_n] = {'stats': db_aux.command('dbstats')} - - # Go through the metrics and save the values - for metric_name, submit_method in metrics_to_collect.iteritems(): - # each metric is of the form: x.y.z with z optional - # and can be found at status[x][y][z] - value = status - - if metric_name.startswith('stats'): - continue - else: - try: - for c in metric_name.split("."): - value = value[c] - except KeyError: - continue - - # value is now status[x][y][z] - if not isinstance(value, (int, long, float)): - raise TypeError( - u"{0} value is a {1}, it should be an int, a float or a long instead." - .format(metric_name, type(value))) - - # Submit the metric - metric_name = self._normalize(metric_name, submit_method) - submit_method(self, metric_name, value, tags=tags) - - for st, value in dbstats.iteritems(): - for metric_name, submit_method in metrics_to_collect.iteritems(): - if not metric_name.startswith('stats.'): - continue - - try: - val = value['stats'][metric_name.split('.')[1]] - except KeyError: - continue - - # value is now status[x][y][z] - if not isinstance(val, (int, long, float)): - raise TypeError( - u"{0} value is a {1}, it should be an int, a float or a long instead." - .format(metric_name, type(val)) - ) - - # Submit the metric - metric_name = self._normalize(metric_name, submit_method) - metrics_tags = tags + ['cluster:db:%s' % st] - submit_method(self, metric_name, val, tags=metrics_tags) diff --git a/pkg/py/checks/mysql.py b/pkg/py/checks/mysql.py deleted file mode 100644 index 769b2a2aec58..000000000000 --- a/pkg/py/checks/mysql.py +++ /dev/null @@ -1,396 +0,0 @@ -# stdlib -import os -import sys -import re -import traceback - -# 3p -import pymysql - -# project -from checks import AgentCheck -from utils.platform import Platform -from utils.subprocess_output import get_subprocess_output - -GAUGE = "gauge" -RATE = "rate" - -STATUS_VARS = { - 'Connections': ('mysql.net.connections', RATE), - 'Max_used_connections': ('mysql.net.max_connections', GAUGE), - 'Open_files': ('mysql.performance.open_files', GAUGE), - 'Table_locks_waited': ('mysql.performance.table_locks_waited', GAUGE), - 'Threads_connected': ('mysql.performance.threads_connected', GAUGE), - 'Threads_running': ('mysql.performance.threads_running', GAUGE), - 'Innodb_data_reads': ('mysql.innodb.data_reads', RATE), - 'Innodb_data_writes': ('mysql.innodb.data_writes', RATE), - 'Innodb_os_log_fsyncs': ('mysql.innodb.os_log_fsyncs', RATE), - 'Slow_queries': ('mysql.performance.slow_queries', RATE), - 'Questions': ('mysql.performance.questions', RATE), - 'Queries': ('mysql.performance.queries', RATE), - 'Com_select': ('mysql.performance.com_select', RATE), - 'Com_insert': ('mysql.performance.com_insert', RATE), - 'Com_update': ('mysql.performance.com_update', RATE), - 'Com_delete': ('mysql.performance.com_delete', RATE), - 'Com_insert_select': ('mysql.performance.com_insert_select', RATE), - 'Com_update_multi': ('mysql.performance.com_update_multi', RATE), - 'Com_delete_multi': ('mysql.performance.com_delete_multi', RATE), - 'Com_replace_select': ('mysql.performance.com_replace_select', RATE), - 'Qcache_hits': ('mysql.performance.qcache_hits', RATE), - 'Innodb_mutex_spin_waits': ('mysql.innodb.mutex_spin_waits', RATE), - 'Innodb_mutex_spin_rounds': ('mysql.innodb.mutex_spin_rounds', RATE), - 'Innodb_mutex_os_waits': ('mysql.innodb.mutex_os_waits', RATE), - 'Created_tmp_tables': ('mysql.performance.created_tmp_tables', RATE), - 'Created_tmp_disk_tables': ('mysql.performance.created_tmp_disk_tables', RATE), - 'Created_tmp_files': ('mysql.performance.created_tmp_files', RATE), - 'Innodb_row_lock_waits': ('mysql.innodb.row_lock_waits', RATE), - 'Innodb_row_lock_time': ('mysql.innodb.row_lock_time', RATE), - 'Innodb_current_row_locks': ('mysql.innodb.current_row_locks', GAUGE), - 'Open_tables': ('mysql.performance.open_tables', GAUGE), -} - - -class MySql(AgentCheck): - SERVICE_CHECK_NAME = 'mysql.can_connect' - MAX_CUSTOM_QUERIES = 20 - DEFAULT_TIMEOUT = 5 - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - self.mysql_version = {} - self.greater_502 = {} - - def get_library_versions(self): - return {"pymysql": pymysql.__version__} - - def check(self, instance): - host, port, user, password, mysql_sock, defaults_file, tags, options, queries = \ - self._get_config(instance) - - default_timeout = self.init_config.get('default_timeout', self.DEFAULT_TIMEOUT) - - if (not host or not user) and not defaults_file: - raise Exception("Mysql host and user are needed.") - - db = self._connect(host, port, mysql_sock, user, password, defaults_file) - - # Metadata collection - self._collect_metadata(db, host) - - # Metric collection - self._collect_metrics(host, db, tags, options, queries) - if Platform.is_linux(): - self._collect_system_metrics(host, db, tags) - - # Close connection - db.close() - - def _get_config(self, instance): - host = instance.get('server', '') - user = instance.get('user', '') - port = int(instance.get('port', 0)) - password = instance.get('pass', '') - mysql_sock = instance.get('sock', '') - defaults_file = instance.get('defaults_file', '') - tags = instance.get('tags', None) - options = instance.get('options', {}) - queries = instance.get('queries', []) - - return host, port, user, password, mysql_sock, defaults_file, tags, options, queries - - def _connect(self, host, port, mysql_sock, user, password, defaults_file): - service_check_tags = [ - 'host:%s' % host, - 'port:%s' % port - ] - - try: - if defaults_file != '': - db = pymysql.connect(read_default_file=defaults_file) - elif mysql_sock != '': - db = pymysql.connect( - unix_socket=mysql_sock, - user=user, - passwd=password - ) - service_check_tags = [ - 'host:%s' % mysql_sock, - 'port:unix_socket' - ] - elif port: - db = pymysql.connect( - host=host, - port=port, - user=user, - passwd=password - ) - else: - db = pymysql.connect( - host=host, - user=user, - passwd=password - ) - self.log.debug("Connected to MySQL") - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.OK, - tags=service_check_tags) - except Exception: - self.service_check(self.SERVICE_CHECK_NAME, AgentCheck.CRITICAL, - tags=service_check_tags) - raise - - return db - - def _collect_metrics(self, host, db, tags, options, queries): - cursor = db.cursor() - cursor.execute("SHOW /*!50002 GLOBAL */ STATUS;") - status_results = dict(cursor.fetchall()) - self._rate_or_gauge_statuses(STATUS_VARS, status_results, tags) - cursor.execute("SHOW VARIABLES LIKE 'Key%';") - variables_results = dict(cursor.fetchall()) - cursor.close() - del cursor - - # Compute key cache utilization metric - key_blocks_unused = self._collect_scalar('Key_blocks_unused', status_results) - key_cache_block_size = self._collect_scalar('key_cache_block_size', variables_results) - key_buffer_size = self._collect_scalar('key_buffer_size', variables_results) - key_cache_utilization = 1 - ((key_blocks_unused * key_cache_block_size) / key_buffer_size) - self.gauge("mysql.performance.key_cache_utilization", key_cache_utilization, tags=tags) - - # Compute InnoDB buffer metrics - # Be sure InnoDB is enabled - if 'Innodb_page_size' in status_results: - page_size = self._collect_scalar('Innodb_page_size', status_results) - innodb_buffer_pool_pages_total = self._collect_scalar('Innodb_buffer_pool_pages_total', - status_results) - innodb_buffer_pool_pages_free = self._collect_scalar('Innodb_buffer_pool_pages_free', - status_results) - innodb_buffer_pool_pages_total = innodb_buffer_pool_pages_total * page_size - innodb_buffer_pool_pages_free = innodb_buffer_pool_pages_free * page_size - innodb_buffer_pool_pages_used = \ - innodb_buffer_pool_pages_total - innodb_buffer_pool_pages_free - - self.gauge("mysql.innodb.buffer_pool_free", innodb_buffer_pool_pages_free, tags=tags) - self.gauge("mysql.innodb.buffer_pool_used", innodb_buffer_pool_pages_used, tags=tags) - self.gauge("mysql.innodb.buffer_pool_total", innodb_buffer_pool_pages_total, tags=tags) - - if innodb_buffer_pool_pages_total != 0: - innodb_buffer_pool_pages_utilization = \ - innodb_buffer_pool_pages_used / innodb_buffer_pool_pages_total - self.gauge("mysql.innodb.buffer_pool_utilization", - innodb_buffer_pool_pages_utilization, tags=tags) - - if 'galera_cluster' in options and options['galera_cluster']: - value = self._collect_scalar('wsrep_cluster_size', status_results) - self.gauge('mysql.galera.wsrep_cluster_size', value, tags=tags) - - if 'replication' in options and options['replication']: - # get slave running form global status page - slave_running = self._collect_string('Slave_running', status_results) - if slave_running is not None: - if slave_running.lower().strip() == 'on': - slave_running = 1 - else: - slave_running = 0 - self.gauge("mysql.replication.slave_running", slave_running, tags=tags) - self._collect_dict( - GAUGE, - {"Seconds_behind_master": "mysql.replication.seconds_behind_master"}, - "SHOW SLAVE STATUS", db, tags=tags - ) - - # Collect custom query metrics - # Max of 20 queries allowed - if isinstance(queries, list): - for index, check in enumerate(queries[:self.MAX_CUSTOM_QUERIES]): - self._collect_dict(check['type'], {check['field']: check['metric']}, check['query'], db, tags=tags) - - if len(queries) > self.MAX_CUSTOM_QUERIES: - self.warning("Maximum number (%s) of custom queries reached. Skipping the rest." - % self.MAX_CUSTOM_QUERIES) - - - def _collect_metadata(self, db, host): - self._get_version(db, host) - - def _rate_or_gauge_statuses(self, statuses, dbResults, tags): - for status, metric in statuses.iteritems(): - metric_name, metric_type = metric - value = self._collect_scalar(status, dbResults) - if value is not None: - if metric_type == RATE: - self.rate(metric_name, value, tags=tags) - elif metric_type == GAUGE: - self.gauge(metric_name, value, tags=tags) - - def _version_greater_502(self, db, host): - # show global status was introduced in 5.0.2 - # some patch version numbers contain letters (e.g. 5.0.51a) - # so let's be careful when we compute the version number - if host in self.greater_502: - return self.greater_502[host] - - greater_502 = False - try: - mysql_version = self._get_version(db, host) - self.log.debug("MySQL version %s" % mysql_version) - - major = int(mysql_version[0]) - minor = int(mysql_version[1]) - patchlevel = int(re.match(r"([0-9]+)", mysql_version[2]).group(1)) - - if (major, minor, patchlevel) > (5, 0, 2): - greater_502 = True - - except Exception, exception: - self.warning("Cannot compute mysql version, assuming older than 5.0.2: %s" - % str(exception)) - - self.greater_502[host] = greater_502 - - return greater_502 - - def _get_version(self, db, host): - if host in self.mysql_version: - version = self.mysql_version[host] - self.service_metadata('version', ".".join(version)) - return version - - # Get MySQL version - cursor = db.cursor() - cursor.execute('SELECT VERSION()') - result = cursor.fetchone() - cursor.close() - del cursor - # Version might include a description e.g. 4.1.26-log. - # See http://dev.mysql.com/doc/refman/4.1/en/information-functions.html#function_version - version = result[0].split('-') - version = version[0].split('.') - self.mysql_version[host] = version - self.service_metadata('version', ".".join(version)) - return version - - def _collect_scalar(self, key, dict): - return self._collect_type(key, dict, float) - - def _collect_string(self, key, dict): - return self._collect_type(key, dict, unicode) - - def _collect_type(self, key, dict, the_type): - self.log.debug("Collecting data with %s" % key) - if key not in dict: - self.log.debug("%s returned None" % key) - return None - self.log.debug("Collecting done, value %s" % dict[key]) - return the_type(dict[key]) - - def _collect_dict(self, metric_type, field_metric_map, query, db, tags): - """ - Query status and get a dictionary back. - Extract each field out of the dictionary - and stuff it in the corresponding metric. - - query: show status... - field_metric_map: {"Seconds_behind_master": "mysqlSecondsBehindMaster"} - """ - try: - cursor = db.cursor() - cursor.execute(query) - result = cursor.fetchone() - if result is not None: - for field in field_metric_map.keys(): - # Get the agent metric name from the column name - metric = field_metric_map[field] - # Find the column name in the cursor description to identify the column index - # http://www.python.org/dev/peps/pep-0249/ - # cursor.description is a tuple of (column_name, ..., ...) - try: - col_idx = [d[0].lower() for d in cursor.description].index(field.lower()) - self.log.debug("Collecting metric: %s" % metric) - if result[col_idx] is not None: - self.log.debug("Collecting done, value %s" % result[col_idx]) - if metric_type == GAUGE: - self.gauge(metric, float(result[col_idx]), tags=tags) - elif metric_type == RATE: - self.rate(metric, float(result[col_idx]), tags=tags) - else: - self.gauge(metric, float(result[col_idx]), tags=tags) - else: - self.log.debug("Received value is None for index %d" % col_idx) - except ValueError: - self.log.exception("Cannot find %s in the columns %s" - % (field, cursor.description)) - cursor.close() - del cursor - except Exception: - self.warning("Error while running %s\n%s" % (query, traceback.format_exc())) - self.log.exception("Error while running %s" % query) - - def _collect_system_metrics(self, host, db, tags): - pid = None - # The server needs to run locally, accessed by TCP or socket - if host in ["localhost", "127.0.0.1"] or db.port == long(0): - pid = self._get_server_pid(db) - - if pid: - self.log.debug("pid: %s" % pid) - # At last, get mysql cpu data out of procfs - try: - # See http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html - # for meaning: we get 13 & 14: utime and stime, in clock ticks and convert - # them with the right sysconf value (SC_CLK_TCK) - proc_file = open("/proc/%d/stat" % pid) - data = proc_file.readline() - proc_file.close() - fields = data.split(' ') - ucpu = fields[13] - kcpu = fields[14] - clk_tck = os.sysconf(os.sysconf_names["SC_CLK_TCK"]) - - # Convert time to s (number of second of CPU used by mysql) - # It's a counter, it will be divided by the period, multiply by 100 - # to get the percentage of CPU used by mysql over the period - self.rate("mysql.performance.user_time", - int((float(ucpu) / float(clk_tck)) * 100), tags=tags) - self.rate("mysql.performance.kernel_time", - int((float(kcpu) / float(clk_tck)) * 100), tags=tags) - except Exception: - self.warning("Error while reading mysql (pid: %s) procfs data\n%s" - % (pid, traceback.format_exc())) - - def _get_server_pid(self, db): - pid = None - - # Try to get pid from pid file, it can fail for permission reason - pid_file = None - try: - cursor = db.cursor() - cursor.execute("SHOW VARIABLES LIKE 'pid_file'") - pid_file = cursor.fetchone()[1] - cursor.close() - del cursor - except Exception: - self.warning("Error while fetching pid_file variable of MySQL.") - - if pid_file is not None: - self.log.debug("pid file: %s" % str(pid_file)) - try: - f = open(pid_file) - pid = int(f.readline()) - f.close() - except IOError: - self.log.debug("Cannot read mysql pid file %s" % pid_file) - - # If pid has not been found, read it from ps - if pid is None: - try: - if sys.platform.startswith("linux"): - ps, _, _ = get_subprocess_output(['ps', '-C', 'mysqld', '-o', 'pid'], self.log) - pslines = ps.strip().splitlines() - # First line is header, second line is mysql pid - if len(pslines) == 2: - pid = int(pslines[1]) - except Exception: - self.log.exception("Error while fetching mysql pid from ps") - - return pid diff --git a/pkg/py/checks/nagios.py b/pkg/py/checks/nagios.py deleted file mode 100644 index f98cf31469c8..000000000000 --- a/pkg/py/checks/nagios.py +++ /dev/null @@ -1,395 +0,0 @@ -# stdlib -from collections import namedtuple -import re - -# project -from checks import AgentCheck -from utils.tailfile import TailFile - -# fields order for each event type, as named tuples -EVENT_FIELDS = { - 'CURRENT HOST STATE': namedtuple('E_CurrentHostState', 'host, event_state, event_soft_hard, return_code, payload'), - 'CURRENT SERVICE STATE': namedtuple('E_CurrentServiceState', 'host, check_name, event_state, event_soft_hard, return_code, payload'), - 'SERVICE ALERT': namedtuple('E_ServiceAlert', 'host, check_name, event_state, event_soft_hard, return_code, payload'), - 'PASSIVE SERVICE CHECK': namedtuple('E_PassiveServiceCheck', 'host, check_name, return_code, payload'), - 'HOST ALERT': namedtuple('E_HostAlert', 'host, event_state, event_soft_hard, return_code, payload'), - - # [1305744274] SERVICE NOTIFICATION: ops;ip-10-114-237-165;Metric ETL;ACKNOWLEDGEMENT (CRITICAL);notify-service-by-email;HTTP CRITICAL: HTTP/1.1 503 Service Unavailable - 394 bytes in 0.010 second response time;datadog;alq - 'SERVICE NOTIFICATION': namedtuple('E_ServiceNotification', 'contact, host, check_name, event_state, notification_type, payload'), - - # [1296509331] SERVICE FLAPPING ALERT: ip-10-114-97-27;cassandra JVM Heap;STARTED; Service appears to have started flapping (23.4% change >= 20.0% threshold) - # [1296662511] SERVICE FLAPPING ALERT: ip-10-114-97-27;cassandra JVM Heap;STOPPED; Service appears to have stopped flapping (3.8% change < 5.0% threshold) - 'SERVICE FLAPPING ALERT': namedtuple('E_FlappingAlert', 'host, check_name, flap_start_stop, payload'), - - # Reference for external commands: http://old.nagios.org/developerinfo/externalcommands/commandlist.php - # Command Format: - # ACKNOWLEDGE_SVC_PROBLEM;;;;;;; - # [1305832665] EXTERNAL COMMAND: ACKNOWLEDGE_SVC_PROBLEM;ip-10-202-161-236;Resources ETL;2;1;0;datadog;alq checking - 'ACKNOWLEDGE_SVC_PROBLEM': namedtuple('E_ServiceAck', 'host, check_name, sticky_ack, notify_ack, persistent_ack, ack_author, payload'), - - # Command Format: - # ACKNOWLEDGE_HOST_PROBLEM;;;;;; - 'ACKNOWLEDGE_HOST_PROBLEM': namedtuple('E_HostAck', 'host, sticky_ack, notify_ack, persistent_ack, ack_author, payload'), - - # Comment Format: - # PROCESS_SERVICE_CHECK_RESULT;;;; - # We ignore it because Nagios will log a "PASSIVE SERVICE CHECK" after - # receiving this, and we don't want duplicate events to be counted. - 'PROCESS_SERVICE_CHECK_RESULT': False, - - # Host Downtime - # [1297894825] HOST DOWNTIME ALERT: ip-10-114-89-59;STARTED; Host has entered a period of scheduled downtime - # [1297894825] SERVICE DOWNTIME ALERT: ip-10-114-237-165;intake;STARTED; Service has entered a period of scheduled downtime - - 'HOST DOWNTIME ALERT': namedtuple('E_HostDowntime', 'host, downtime_start_stop, payload'), - 'SERVICE DOWNTIME ALERT': namedtuple('E_ServiceDowntime', 'host, check_name, downtime_start_stop, payload'), -} - -# Regex for the Nagios event log -RE_LINE_REG = re.compile('^\[(\d+)\] EXTERNAL COMMAND: (\w+);(.*)$') -RE_LINE_EXT = re.compile('^\[(\d+)\] ([^:]+): (.*)$') - - -class Nagios(AgentCheck): - - NAGIOS_CONF_KEYS = [ - re.compile('^(?Plog_file)\s*=\s*(?P.+)$'), - re.compile('^(?Phost_perfdata_file_template)\s*=\s*(?P.+)$'), - re.compile('^(?Pservice_perfdata_file_template)\s*=\s*(?P.+)$'), - re.compile('^(?Phost_perfdata_file)\s*=\s*(?P.+)$'), - re.compile('^(?Pservice_perfdata_file)\s*=\s*(?P.+)$'), - ] - - def __init__(self, name, init_config, agentConfig, instances=None): - AgentCheck.__init__(self, name, init_config, agentConfig, instances) - self.nagios_tails = {} - check_freq = init_config.get("check_freq", 15) - if instances is not None: - for instance in instances: - tailers = [] - nagios_conf = {} - instance_key = None - - if 'nagios_conf' in instance: # conf.d check - conf_path = instance['nagios_conf'] - nagios_conf = self.parse_nagios_config(conf_path) - instance_key = conf_path - # Retrocompatibility Code - elif 'nagios_perf_cfg' in instance: - conf_path = instance['nagios_perf_cfg'] - nagios_conf = self.parse_nagios_config(conf_path) - instance["collect_host_performance_data"] = True - instance["collect_service_performance_data"] = True - instance_key = conf_path - if 'nagios_log' in instance: - nagios_conf["log_file"] = instance['nagios_log'] - if instance_key is None: - instance_key = instance['nagios_log'] - # End of retrocompatibility code - if not nagios_conf: - self.log.warning("Missing path to nagios_conf") - continue - - if 'log_file' in nagios_conf and \ - instance.get('collect_events', True): - self.log.debug("Starting to tail the event log") - tailers.append(NagiosEventLogTailer( - log_path=nagios_conf['log_file'], - file_template=None, - logger=self.log, - hostname=self.hostname, - event_func=self.event, - gauge_func=self.gauge, - freq=check_freq, - passive_checks=instance.get('passive_checks_events', False))) - if 'host_perfdata_file' in nagios_conf and \ - 'host_perfdata_file_template' in nagios_conf and \ - instance.get('collect_host_performance_data', False): - self.log.debug("Starting to tail the host_perfdata file") - tailers.append(NagiosHostPerfDataTailer( - log_path=nagios_conf['host_perfdata_file'], - file_template=nagios_conf['host_perfdata_file_template'], - logger=self.log, - hostname=self.hostname, - event_func=self.event, - gauge_func=self.gauge, - freq=check_freq)) - if 'service_perfdata_file' in nagios_conf and \ - 'service_perfdata_file_template' in nagios_conf and \ - instance.get('collect_service_performance_data', False): - self.log.debug("Starting to tail the service_perfdata file") - tailers.append(NagiosServicePerfDataTailer( - log_path=nagios_conf['service_perfdata_file'], - file_template=nagios_conf['service_perfdata_file_template'], - logger=self.log, - hostname=self.hostname, - event_func=self.event, - gauge_func=self.gauge, - freq=check_freq)) - - self.nagios_tails[instance_key] = tailers - - def parse_nagios_config(self, filename): - output = {} - - f = None - try: - f = open(filename) - for line in f: - line = line.strip() - if not line: - continue - for key in self.NAGIOS_CONF_KEYS: - m = key.match(line) - if m: - output[m.group('key')] = m.group('value') - break - return output - except Exception as e: - # Can't parse, assume it's just not working - # Don't return an incomplete config - self.log.exception(e) - raise Exception("Could not parse Nagios config file") - finally: - if f is not None: - f.close() - - def check(self, instance): - ''' - Parse until the end of each tailer associated with this instance. - We match instance and tailers based on the path to the Nagios configuration file - - Special case: Compatibility with the old conf when no conf file is specified - but the path to the event_log is given - ''' - instance_key = instance.get('nagios_conf', - instance.get('nagios_perf_cfg', - instance.get('nagios_log', - None))) - # Bad configuration: This instance does not contain any necessary configuration - if not instance_key or instance_key not in self.nagios_tails: - raise Exception('No Nagios configuration file specified') - for tailer in self.nagios_tails[instance_key]: - tailer.check() - - -class NagiosTailer(object): - - def __init__(self, log_path, file_template, logger, hostname, event_func, gauge_func, freq): - ''' - :param log_path: string, path to the file to parse - :param file_template: string, format of the perfdata file - :param logger: Logger object - :param hostname: string, name of the host this agent is running on - :param event_func: function to create event, should accept dict - :param gauge_func: function to report a gauge - :param freq: int, size of bucket to aggregate perfdata metrics - ''' - self.log_path = log_path - self.log = logger - self.gen = None - self.tail = None - self.hostname = hostname - self._event = event_func - self._gauge = gauge_func - self._line_parsed = 0 - self._freq = freq - - if file_template is not None: - self.compile_file_template(file_template) - - self.tail = TailFile(self.log, self.log_path, self._parse_line) - self.gen = self.tail.tail(line_by_line=False, move_end=True) - self.gen.next() - - def check(self): - self._line_parsed = 0 - # read until the end of file - try: - self.log.debug("Start nagios check for file %s" % (self.log_path)) - self.gen.next() - self.log.debug("Done nagios check for file %s (parsed %s line(s))" % - (self.log_path, self._line_parsed)) - except StopIteration, e: - self.log.exception(e) - self.log.warning("Can't tail %s file" % (self.log_path)) - - def compile_file_template(self, file_template): - try: - # Escape characters that will be interpreted as regex bits - # e.g. [ and ] in "[SERVICEPERFDATA]" - regex = re.sub(r'[[\]*]', r'.', file_template) - regex = re.sub(r'\$([^\$]*)\$', r'(?P<\1>[^\$]*)', regex) - self.line_pattern = re.compile(regex) - except Exception, e: - raise InvalidDataTemplate("%s (%s)" % (file_template, e)) - - -class NagiosEventLogTailer(NagiosTailer): - - def __init__(self, log_path, file_template, logger, hostname, event_func, - gauge_func, freq, passive_checks=False): - ''' - :param log_path: string, path to the file to parse - :param file_template: string, format of the perfdata file - :param logger: Logger object - :param hostname: string, name of the host this agent is running on - :param event_func: function to create event, should accept dict - :param gauge_func: function to report a gauge - :param freq: int, size of bucket to aggregate perfdata metrics - :param passive_checks: bool, enable or not passive checks events - ''' - self.passive_checks = passive_checks - super(NagiosEventLogTailer, self).__init__( - log_path, file_template, - logger, hostname, event_func, gauge_func, freq - ) - - def _parse_line(self, line): - """Actual nagios parsing - Return True if we found an event, False otherwise - """ - # first isolate the timestamp and the event type - try: - self._line_parsed = self._line_parsed + 1 - - m = RE_LINE_REG.match(line) - if m is None: - m = RE_LINE_EXT.match(line) - if m is None: - return False - self.log.debug("Matching line found %s" % line) - (tstamp, event_type, remainder) = m.groups() - tstamp = int(tstamp) - - # skip passive checks reports by default for spamminess - if event_type == 'PASSIVE SERVICE CHECK' and not self.passive_checks: - return False - # then retrieve the event format for each specific event type - fields = EVENT_FIELDS.get(event_type, None) - if fields is None: - self.log.warning("Ignoring unknown nagios event for line: %s" % (line[:-1])) - return False - elif fields is False: - # Ignore and skip - self.log.debug("Ignoring Nagios event for line: %s" % (line[:-1])) - return False - - # and parse the rest of the line - parts = map(lambda p: p.strip(), remainder.split(';')) - # Chop parts we don't recognize - parts = parts[:len(fields._fields)] - - event = self.create_event(tstamp, event_type, self.hostname, fields._make(parts)) - - self._event(event) - self.log.debug("Nagios event: %s" % (event)) - - return True - except Exception: - self.log.exception("Unable to create a nagios event from line: [%s]" % (line)) - return False - - def create_event(self, timestamp, event_type, hostname, fields): - """Factory method called by the parsers - """ - d = fields._asdict() - d.update({'timestamp': timestamp, - 'event_type': event_type}) - - # if host is localhost, turn that into the internal host name - host = d.get('host', None) - if host == "localhost": - d["host"] = hostname - return d - - -class NagiosPerfDataTailer(NagiosTailer): - perfdata_field = '' # Should be overriden by subclasses - metric_prefix = 'nagios' - pair_pattern = re.compile(r"".join([ - r"'?(?P