コード例 #1
0
    def __init__(self, config_file=None):
        if not config_file:
            self.config_file = '/etc/openshift_tools/container_metrics.yml'
        else:
            self.config_file = config_file

        self.config = None

        self.parse_config()

        self.cli = AutoVersionClient(base_url='unix://var/run/docker.sock', timeout=120)
        self.docker_util = DockerUtil(self.cli)
        self.zagg_sender = ZaggSender(verbose=True)
コード例 #2
0
                #print docker_p.memory_info().vms
                docker_memoryusage['rss'] = docker_p.memory_info().rss
                docker_memoryusage['vms'] = docker_p.memory_info().vms
        except psutil.NoSuchProcess:
            print 'error'

    return docker_memoryusage

if __name__ == "__main__":
    keys = None
    ms = MetricSender()

    try:
        cli = DockerClient(version='auto', base_url='unix://var/run/docker.sock', timeout=120)

        du = DockerUtil(cli)
        du_dds = du.get_disk_usage()
        docker_memoryusages = getRssVmsofDocker()

        keys = {
            'docker.storage.is_loopback': int(du.is_loopback),
            'docker.ping': 1, # Docker is up
        }

        # These storage metrics are only available in devicemapper and loopback
        if du.is_devicemapper or du.is_loopback:
            keys['docker.storage.data.space.used'] = du_dds.data_space_used
            keys['docker.storage.data.space.available'] = du_dds.data_space_available
            keys['docker.storage.data.space.percent_available'] = du_dds.data_space_percent_available
            keys['docker.storage.data.space.total'] = du_dds.data_space_total
コード例 #3
0
class DockerContainerUsageCli(object):
    ''' This is the class that actually pulls eveyrthing together into a cli script.
    '''
    def __init__(self, config_file=None):
        if not config_file:
            self.config_file = '/etc/openshift_tools/container_metrics.yml'
        else:
            self.config_file = config_file

        self.config = None

        self.parse_config()

        self.cli = AutoVersionClient(base_url='unix://var/run/docker.sock',
                                     timeout=120)
        self.docker_util = DockerUtil(self.cli)
        self.metric_sender = MetricSender(verbose=True)

    def parse_config(self):
        """ parse config file """

        if not self.config:
            if not os.path.exists(self.config_file):
                raise IOError(self.config_file + " does not exist.")

            self.config = yaml.load(file(self.config_file))

    def format_ctr_name(self, ctr_name):
        ''' Takes a container name and if there's a name_format_regex specified, it applies it '''
        for item in self.config['usage_checks']:
            name_match_regex = item['name_match_regex']

            if item.has_key('name_format_regex') and re.match(
                    name_match_regex, ctr_name):
                try:
                    name_format_regex = item['name_format_regex']
                    new_name = re.sub(name_match_regex, name_format_regex,
                                      ctr_name)
                    return new_name
                except sre_constants.error as ex:
                    # Just use the full name (we don't want to die because of name formatting)
                    print "\nError: %s: [%s]. Using full name [%s].\n" % (
                        ex.message, name_format_regex, ctr_name)
                    return ctr_name

        return ctr_name

    def main(self):
        ''' The main entrypoint of the cli '''
        ctr_regexes = [
            uchk['name_match_regex'] for uchk in self.config['usage_checks']
        ]
        use_cgroups = self.config.get('use_cgroups', False)

        ctrs = self.docker_util.get_ctrs_matching_names(ctr_regexes)

        for ctr_name, ctr in ctrs.iteritems():
            (cpu_stats, mem_stats) = self.docker_util.get_ctr_stats(
                ctr, use_cgroups=use_cgroups)

            formatted_ctr_name = self.format_ctr_name(ctr_name)

            # Add the container hostnames as macros for the dynamic item.
            self.metric_sender.add_dynamic_metric(ZBX_DOCKER_DISC_KEY,
                                                  ZBX_DOCKER_DISC_MACRO,
                                                  [formatted_ctr_name])
            data = {
                '%s[%s]' % (ZBX_CTR_CPU_USED_PCT_KEY, formatted_ctr_name):
                cpu_stats.used_pct,
                '%s[%s]' % (ZBX_CTR_MEM_USED_KEY, formatted_ctr_name):
                mem_stats.used,
                '%s[%s]' % (ZBX_CTR_MEM_LIMIT_KEY, formatted_ctr_name):
                mem_stats.limit,
                '%s[%s]' % (ZBX_CTR_MEM_LIMIT_USED_PCT_KEY, formatted_ctr_name):
                mem_stats.limit_used_pct,
                '%s[%s]' % (ZBX_CTR_MEM_FAILCNT_KEY, formatted_ctr_name):
                mem_stats.failcnt,
            }

            print "%s:" % formatted_ctr_name
            for k, v in data.iteritems():
                print "  %s: %s" % (k, v)
            print

            self.metric_sender.add_metric(data)

        # Actually send the metrics
        self.metric_sender.send_metrics()
コード例 #4
0
# pylint: disable=invalid-name


from docker import AutoVersionClient
from docker.errors import DockerException
from openshift_tools.monitoring.zagg_sender import ZaggSender
from openshift_tools.timeout import TimeoutException
from openshift_tools.monitoring.dockerutil import DockerUtil
import json

if __name__ == "__main__":
    keys = None
    zs = ZaggSender()
    try:
        cli = AutoVersionClient(base_url='unix://var/run/docker.sock')
        du = DockerUtil(cli)
        du_dds = du.get_disk_usage()

        keys = {
            'docker.storage.data.space.used': du_dds.data_space_used,
            'docker.storage.data.space.available': du_dds.data_space_available,
            'docker.storage.data.space.percent_available': du_dds.data_space_percent_available,
            'docker.storage.data.space.total': du_dds.data_space_total,

            'docker.storage.metadata.space.used': du_dds.metadata_space_used,
            'docker.storage.metadata.space.available': du_dds.metadata_space_available,
            'docker.storage.metadata.space.percent_available': du_dds.metadata_space_percent_available,
            'docker.storage.metadata.space.total': du_dds.metadata_space_total,

            'docker.storage.is_loopback': int(du_dds.is_loopback),
            'docker.ping': 1, # Docker is up
コード例 #5
0

from docker import AutoVersionClient
from docker.errors import DockerException
from openshift_tools.monitoring.zagg_sender import ZaggSender
from openshift_tools.timeout import TimeoutException
from openshift_tools.monitoring.dockerutil import DockerUtil
import json
import time

if __name__ == "__main__":
    keys = None
    zs = ZaggSender()
    try:
        cli = AutoVersionClient(base_url="unix://var/run/docker.sock")
        du = DockerUtil(cli, max_wait=360)

        # Wait up to 6 minutes
        time_start = time.time()
        du.get_disk_usage()
        time_stop = time.time()
        elapsed_ms = int((time_stop - time_start) * 1000)

        keys = {"docker.info_elapsed_ms": elapsed_ms}
    except (DockerException, TimeoutException) as ex:
        print "\nERROR talking to docker: %s\n" % ex.message
        keys = {"docker.info_elapsed_ms": 360000}  # 360000 = 6 minutes

    zs.add_zabbix_keys(keys)

    print "Sending these metrics:"
コード例 #6
0

from docker import APIClient as DockerClient
from docker.errors import DockerException
from openshift_tools.monitoring.metric_sender import MetricSender
from openshift_tools.timeout import TimeoutException
from openshift_tools.monitoring.dockerutil import DockerUtil
import json
import time

if __name__ == "__main__":
    keys = None
    mts = MetricSender()
    try:
        cli = DockerClient(version='auto', base_url='unix://var/run/docker.sock', timeout=120)
        du = DockerUtil(cli, max_wait=360)

        # Wait up to 6 minutes
        time_start = time.time()
        du.get_disk_usage()
        time_stop = time.time()
        elapsed_ms = int((time_stop - time_start) * 1000)

        keys = {
            'docker.info_elapsed_ms': elapsed_ms
        }
    except (DockerException, TimeoutException) as ex:
        print "\nERROR talking to docker: %s\n" % ex.message
        keys = {
            'docker.info_elapsed_ms': 360000 # 360000 = 6 minutes
        }