Skip to content

Instantly share code, notes, and snippets.

@mrpatrick
Last active September 8, 2020 07:39
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrpatrick/6829734 to your computer and use it in GitHub Desktop.
Save mrpatrick/6829734 to your computer and use it in GitHub Desktop.
Updated to use OpenSSL and cert tags as subprocess no longer works with latest dd-agent
import time
import datetime
from OpenSSL import crypto as c
from checks import AgentCheck
class SSLCheckExpireDays(AgentCheck):
def check(self, instance):
metric = "ssl.expire_in_days"
certfile = instance['cert']
cert_tag = 'cert:%s' % (certfile.split('/')[-1:],)
date_format = "%Y%m%d%H%M%SZ"
cert = c.load_certificate(c.FILETYPE_PEM, file(certfile).read())
output = cert.get_notAfter()
if output:
d0 = datetime.datetime.today()
d1 = datetime.datetime(*(time.strptime(output, date_format)[0:3]))
delta = d1 - d0
self.gauge(metric, int(delta.days), tags=[cert_tag])
else:
self.gauge(metric, -1, tags=[cert_tag])
init_config:
instances:
- cert: /etc/ssl/www.mywebsite1.com.crt
- cert: /etc/ssl/www.mywebsite2.com.crt
- cert: /etc/ssl/www.mywebsite3.com.crt
@mrpatrick
Copy link
Author

Thanks @estib - I've updated the check with your suggestion and replaced the external subprocess command to use OpenSSL lib instead (according to DD support, the latest agent no longer supports the subprocess method I was using).

@eedwards-sk
Copy link

v5/v6 agent compatible:

try:
    from checks import AgentCheck
except ImportError:
    from datadog_checks.checks import AgentCheck

fix tags ending up as arrays (cert:cert_name.pem instead of cert:['cert_name.pem'])

cert_tag = 'cert:%s' % (cert.split('/')[-1],)

@t-dk
Copy link

t-dk commented Mar 19, 2019

Hi.
Will this work for the windows agent ?
I mean the path to certificates is in a "linux" format. If so how is the path to certificates formatted?

@eugenecg
Copy link

eugenecg commented Sep 8, 2020

Yeah i also need to get this working for a windows agent, is this possible?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment