diff --git a/collectd/files/plugin/collectd_nginx_check.py b/collectd/files/plugin/collectd_nginx_check.py
new file mode 100644
index 0000000..9b8210e
--- /dev/null
+++ b/collectd/files/plugin/collectd_nginx_check.py
@@ -0,0 +1,62 @@
+#!/usr/bin/python
+# Copyright 2016 Mirantis, Inc.
+#
+# Licensed under the nginx License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.nginx.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import collectd
+import collectd_base as base
+import requests
+
+NAME = 'nginx'
+
+
+class NginxCheckPlugin(base.Base):
+
+    def __init__(self, *args, **kwargs):
+        super(NginxCheckPlugin, self).__init__(*args, **kwargs)
+        self.plugin = NAME
+        self.url = None
+
+    def config_callback(self, conf):
+        super(NginxCheckPlugin, self).config_callback(conf)
+
+        for node in conf.children:
+            if node.key == 'Url':
+                self.url = node.values[0]
+                break
+
+        if self.url is None:
+            self.logger.error("{}: Missing Url parameter".format(NAME))
+
+    def read_callback(self):
+        try:
+            requests.get(self.url, timeout=self.timeout)
+            self.dispatch_check_metric(self.OK)
+        except Exception as err:
+            msg = "{}: Failed to check service: {}".format(NAME, err)
+            self.logger.error(msg)
+            self.dispatch_check_metric(self.FAIL, msg)
+
+
+plugin = NginxCheckPlugin(collectd)
+
+
+def config_callback(conf):
+    plugin.config_callback(conf)
+
+
+def read_callback():
+    plugin.read_callback()
+
+collectd.register_config(config_callback)
+collectd.register_read(read_callback)
