提交 9c609ffd 编写于 作者: N nicolargo

Update doc for AMP

上级 16218325
......@@ -19,6 +19,11 @@ Bugs corrected:
* [Web UI] Fix folders plugin never displayed (issue #829)
* Correct issue IP plugin: VPN with no internet access (issue #842)
Deprecated:
* Python 2.6 is no longer supported
* Monitoring process list module is replaced by AMP
Version 2.6.1
=============
......
......@@ -253,19 +253,18 @@ queue=glances_queue
[amp_dropbox]
# Use the default AMP (no dedicated AMP Python script)
enable=true
enable=false
regex=.*dropbox.*
refresh=3
one_line=false
command=dropbox status
countmin=1
[amp_xeyes]
# Use the default AMP (no dedicated AMP Python script)
enable=true
regex=.*xeyes.*
[amp_python]
# Monitor all Python scripts
enable=false
regex=.*python.*
refresh=3
countmin=1
countmax=2
[amp_nginx]
......@@ -291,9 +290,3 @@ regex=\/sbin\/init
refresh=30
one_line=true
service_cmd=/usr/bin/service --status-all
[amp_python]
# Monitor all Python scripts
enable=true
regex=.*python.*
refresh=3
docs/_static/amps.png

55.6 KB | W: | H:

docs/_static/amps.png

78.6 KB | W: | H:

docs/_static/amps.png
docs/_static/amps.png
docs/_static/amps.png
docs/_static/amps.png
  • 2-up
  • Swipe
  • Onion skin
.. _amps:
Applications Monitoring Process
===============================
Thanks to Glances and it AMP module, you can add specific monitoring
to running process. AMP are defined in the Glances configuration file.
You can disable AMP using the --disable-amps option or pressing the `A` shortkey.
Simple AMP
----------
For example, a simple AMP which monitor the CPU/MEM of all Python processes
can be define using:
.. code-block:: ini
[amp_python]
enable=true
regex=.*python.*
refresh=3
Every 3 seconds (*refresh*) and if the *enable* key is true, Glances will
filter the running processes list thanks to the .*python.* regular
expression (*regex*). The default behavor for an AMP is to display:
the number of matching processes, the CPU and MEM:
.. image:: ../_static/amp-python.png
You can also define the minimum (*countmin*) and/or maximum (*countmax*) process
number. For example:
.. code-block:: ini
[amp_python]
enable=true
regex=.*python.*
refresh=3
countmin=1
countmax=2
With this configuration, if the number of running Python script is higher than 2
then the AMP is display with a purple color (red if < countmin):
.. image:: ../_static/amp-python-warning.png
User define AMP
---------------
If you need to execute a specific command line, you can use the *command* option.
For example, if you want to display the Dropbox process status, you can define the
following section in the Glances configuration file:
.. code-block:: ini
[amp_dropbox]
# Use the default AMP (no dedicated AMP Python script)
enable=true
regex=.*dropbox.*
refresh=3
one_line=false
command=dropbox status
countmin=1
The *dropbox status* command line will be executed and displayed in the Glances UI:
.. image:: ../_static/amp-python-dropbox.png
You can force Glances to display the result in one line setting the *one_line* to true.
Embeded AMP
-----------
Glances provides some specifics AMP scripts (replacing the *command* line) hosted
in the glances/amps folder. You can write your own AMP script to fill yours needs.
AMP scripts are located in the glances/amps folder and should be names glances_*.py.
An AMP script define an Amp class (GlancesAmp) with a mandatory update method.
The update method call the set_result method to set the AMP return string.
The return string is a string with one or more line (\n between lines).
You can write your owns AMP and enable its from the configuration file.
The configuration file section should be named [amp_*].
For example, if you want to enable the Nginx AMP, the following definition
should do the job (NGinx AMP is provided by the Glances team as an example):
.. code-block:: ini
[amp_nginx]
enable=true
regex=\/usr\/sbin\/nginx
refresh=60
one_line=false
status_url=http://localhost/nginx_status
Here is the result:
.. image:: ../_static/amps.png
In client/server mode, the AMP list is defined on the server side.
......@@ -3,63 +3,6 @@
Monitored Processes List
========================
The monitored processes list allows user, through the configuration
file, to group processes and quickly show if the number of running
processes is not good.
The monitored processes list is deprecated.
.. image:: ../_static/monitored.png
Each item is defined by:
- ``description``: description of the processes (max 16 chars).
- ``regex``: regular expression of the processes to monitor.
- ``command``: (optional) full path to shell command/script for extended
- stat. Should return a single line string. Use with caution.
- ``countmin``: (optional) minimal number of processes. A warning will
- be displayed if number of processes < count.
- ``countmax``: (optional) maximum number of processes. A warning will
be displayed if number of processes > count.
Up to ``10`` items can be defined.
For example, if you want to monitor the Nginx processes on a web server,
the following definition should do the job:
.. code-block:: ini
[monitor]
list_1_description=Nginx server
list_1_regex=.*nginx.*
list_1_command=nginx -v
list_1_countmin=1
list_1_countmax=4
If you also want to monitor the PHP-FPM daemon processes, you should add
another item:
.. code-block:: ini
[monitor]
list_1_description=Nginx server
list_1_regex=.*nginx.*
list_1_command=nginx -v
list_1_countmin=1
list_1_countmax=4
list_2_description=PHP-FPM
list_2_regex=.*php-fpm.*
list_2_countmin=1
list_2_countmax=20
In client/server mode, the list is defined on the server side.
A new method, called `getAllMonitored`, is available in the APIs and
get the JSON representation of the monitored processes list.
Alerts are set as following:
================= ============
# of process Status
================= ============
``0`` ``CRITICAL``
``min < p < max`` ``OK``
``p > max`` ``WARNING``
================= ============
Please use the Application Monitoring Process (AMP).
......@@ -95,11 +95,7 @@ Command-Line Options
disable process module
.. option:: --disable-monitor
disable monitoring process list module
.. option:: --disable-amp
.. option:: --disable-amps
disable application monitoring process module
......
# -*- coding: utf-8 -*-
#
# This file is part of Glances.
#
# Copyright (C) 2016 Nicolargo <nicolas@nicolargo.com>
#
# Glances is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Glances is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
Default AMP
=========
Monitor a process by executing a command line. This is the default AMP's behavor
if no AMP script is found.
Configuration file example
--------------------------
[amp_foo]
enable=true
regex=\/usr\/bin\/foo
refresh=10
one_line=false
command=foo status
"""
from subprocess import check_output, STDOUT
from glances.compat import u, to_ascii
from glances.logger import logger
from glances.amps.glances_amp import GlancesAmp
class Amp(GlancesAmp):
"""Glances' Default AMP."""
NAME = ''
VERSION = '1.0'
DESCRIPTION = ''
AUTHOR = 'Nicolargo'
EMAIL = 'contact@nicolargo.com'
def __init__(self, name=None, args=None):
"""Init the AMP."""
self.NAME = name.capitalize()
super(Amp, self).__init__(name=name, args=args)
def update(self, process_list):
"""Update the AMP"""
# Get the systemctl status
logger.debug('{0}: Update stats using service {1}'.format(self.NAME, self.get('service_cmd')))
try:
res = self.get('command')
except OSError as e:
logger.debug('{0}: Error while executing service ({1})'.format(self.NAME, e))
else:
if res is not None:
msg = u(check_output(res.split(), stderr=STDOUT))
self.set_result(to_ascii(msg.rstrip()))
else:
# Set the default message if command return None
# Default sum of CPU and MEM for the matching regex
self.set_result('CPU: {0:.1f}% | MEM: {1:.1f}%'.format(
sum([p['cpu_percent'] for p in process_list]),
sum([p['memory_percent'] for p in process_list])))
return self.result()
......@@ -138,8 +138,8 @@ Start the client browser (browser mode):\n\
help='disable network, disk I/O, FS and sensors modules')
parser.add_argument('--disable-process', action='store_true', default=False,
dest='disable_process', help='disable process module')
parser.add_argument('--disable-amp', action='store_true', default=False,
dest='disable_amp', help='disable applications monitoring process (AMP) module')
parser.add_argument('--disable-amps', action='store_true', default=False,
dest='disable_amps', help='disable applications monitoring process (AMP) module')
parser.add_argument('--disable-log', action='store_true', default=False,
dest='disable_log', help='disable log module')
parser.add_argument('--disable-bold', action='store_true', default=False,
......
......@@ -330,7 +330,7 @@ class _GlancesCurses(object):
glances_processes.sort_key = 'cpu_percent'
elif self.pressedkey == ord('A'):
# 'A' > enable/disable AMP module
self.args.disable_amp = not self.args.disable_amp
self.args.disable_amps = not self.args.disable_amps
elif self.pressedkey == ord('b'):
# 'b' > Switch between bit/s and Byte/s for network IO
self.args.byte = not self.args.byte
......
......@@ -59,7 +59,7 @@
<section id="alert" class="plugin" ng-show="!arguments.disable_log" ng-include src="'plugins/alert.html'"></section>
<div ng-show="!arguments.disable_process">
<section id="processcount" class="plugin" ng-include src="'plugins/processcount.html'"></section>
<div class="row">
<div class="row" ng-if="!arguments.disable_amps">
<div class="col-lg-18">
<section id="amps" class="plugin" ng-include src="'plugins/amps.html'"></section>
</div>
......
......@@ -64,6 +64,10 @@ glancesApp.controller('statsController', function ($scope, $rootScope, $interval
$scope.sorter.column = "cpu_percent";
$scope.sorter.auto = true;
break;
case $event.shiftKey && $event.keyCode == keycodes.A:
// D => Enable/disable AMPs
$scope.arguments.disable_amps = !$scope.arguments.disable_amps;
break;
case !$event.shiftKey && $event.keyCode == keycodes.c:
// c => Sort processes by CPU%
$scope.sorter.column = "cpu_percent";
......
......@@ -97,7 +97,7 @@ class Plugin(GlancesPlugin):
# Only process if stats exist and display plugin enable...
ret = []
if not self.stats or args.disable_process or args.disable_amp:
if not self.stats or args.disable_process or args.disable_amps:
return ret
# Build the string message
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册