From 92ec33c272ad5d30c4cc6865ff78eebbc4723143 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Mon, 10 Oct 2016 21:10:10 +0200 Subject: [PATCH] Update docs for Docker limits and actions (issue #875) --- NEWS | 1 + conf/glances.conf | 12 +++++------ docs/aoa/docker.rst | 21 +++++++++++++++++++ docs/man/glances.1 | 2 +- glances/plugins/glances_plugin.py | 34 ++++++++++++++++++++++--------- 5 files changed, 53 insertions(+), 17 deletions(-) diff --git a/NEWS b/NEWS index 870784b9..45ff9bb6 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ Enhancements and new features: * Add CouchDB exporter (issue #928) * Highlight max stats in the processes list (issue #878) + * Docker alerts and actions (issue #875) * Glances API returns the processes PPID (issue #926) * Configure server cached time from the command line --cached-time (issue #901) diff --git a/conf/glances.conf b/conf/glances.conf index 2b851d4e..e55741f1 100644 --- a/conf/glances.conf +++ b/conf/glances.conf @@ -209,12 +209,12 @@ port_default_gateway=True [docker] # Thresholds for CPU and MEM (in %) -cpu_careful=50 -cpu_warning=70 -cpu_critical=90 -mem_careful=20 -mem_warning=50 -mem_critical=70 +#cpu_careful=50 +#cpu_warning=70 +#cpu_critical=90 +#mem_careful=20 +#mem_warning=50 +#mem_critical=70 # Per container thresholds #containername_cpu_careful=10 #containername_cpu_warning=20 diff --git a/docs/aoa/docker.rst b/docs/aoa/docker.rst index b5bcd047..c4585e75 100644 --- a/docs/aoa/docker.rst +++ b/docs/aoa/docker.rst @@ -8,4 +8,25 @@ Glances uses the Docker API through the `docker-py`_ library. .. image:: ../_static/docker.png +It is possible to define limits and actions from the configuration file +under the ``[docker]`` section: + +.. code-block:: ini + + [docker] + # Global containers' thresholds for CPU and MEM (in %) + cpu_careful=50 + cpu_warning=70 + cpu_critical=90 + mem_careful=20 + mem_warning=50 + mem_critical=70 + # Per container thresholds + containername_cpu_careful=10 + containername_cpu_warning=20 + containername_cpu_critical=30 + containername_cpu_critical_action=echo {{Image}} {{Id}} {{cpu}} > /tmp/container_{{name}}.alert + +You can use all the variables ({{foo}}) available in the Docker plugin. + .. _docker-py: https://github.com/docker/docker-py diff --git a/docs/man/glances.1 b/docs/man/glances.1 index 4e65242d..310c2031 100644 --- a/docs/man/glances.1 +++ b/docs/man/glances.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "GLANCES" "1" "Sep 24, 2016" "2.8_DEVELOP" "Glances" +.TH "GLANCES" "1" "Oct 10, 2016" "2.8_DEVELOP" "Glances" .SH NAME glances \- An eye on your system . diff --git a/glances/plugins/glances_plugin.py b/glances/plugins/glances_plugin.py index d936a921..63b80742 100644 --- a/glances/plugins/glances_plugin.py +++ b/glances/plugins/glances_plugin.py @@ -524,20 +524,31 @@ class GlancesPlugin(object): glances_logs.add(ret, stat_name.upper(), value) # Manage action + self.manage_action(stat_name, ret.lower(), header, action_key) + + # Default is ok + return ret + log_str + + def manage_action(self, + stat_name, + trigger, + header, + action_key): + """Manage the action for the current stat""" # Here is a command line for the current trigger ? try: - command = self.__get_limit_action(ret.lower(), stat_name=stat_name) + command = self.__get_limit_action(trigger, stat_name=stat_name) except KeyError: # Reset the trigger - self.actions.set(stat_name, ret.lower()) + self.actions.set(stat_name, trigger) else: # Define the action key for the stats dict # If not define, then it sets to header if action_key is None: action_key = header - # A command line is available for the current alert, run it - # Build the {{mustache}} dictionnary + # A command line is available for the current alert + # 1) Build the {{mustache}} dictionnary if isinstance(self.get_stats_action(), list): # If the stats are stored in a list of dict (fs plugin for exemple) # Return the dict for the current header @@ -549,19 +560,22 @@ class GlancesPlugin(object): else: # Use the stats dict mustache_dict = self.get_stats_action() - # Run the action + # 2) Run the action self.actions.run( - stat_name, ret.lower(), command, mustache_dict=mustache_dict) + stat_name, trigger, command, mustache_dict=mustache_dict) - # Default is ok - return ret + log_str - - def get_alert_log(self, current=0, minimum=0, maximum=100, header=""): + def get_alert_log(self, + current=0, + minimum=0, + maximum=100, + header="", + action_key=None): """Get the alert log.""" return self.get_alert(current=current, minimum=minimum, maximum=maximum, header=header, + action_key=action_key, log=True) def __get_limit(self, criticity, stat_name=""):