Rename package to monasca-agent.
Change-Id: I713954bdb7ae1cacb98d0ed43bb90be6f1099964
3
.gitignore
vendored
@ -4,11 +4,8 @@
|
|||||||
.settings
|
.settings
|
||||||
*.pyc
|
*.pyc
|
||||||
agent.conf
|
agent.conf
|
||||||
Monitoring_Agent.egg-info
|
|
||||||
build
|
build
|
||||||
dist
|
dist
|
||||||
mon-agent_4.2.0-0_all.deb
|
|
||||||
artifacts
|
artifacts
|
||||||
root
|
root
|
||||||
mon_agent.egg-info
|
|
||||||
.tox/
|
.tox/
|
64
CHANGELOG.md
@ -1,66 +1,6 @@
|
|||||||
Change Log
|
Change Log
|
||||||
=======
|
=======
|
||||||
|
|
||||||
# 1.0.7 / 2014-07-14
|
# 1.0.0 / 2014-07-16
|
||||||
## Changes
|
## Changes
|
||||||
- Added additional support for Ceilometer, Neutron, Keystone, and Glance auto-configuration
|
- New package renamed and moved over to StackForge from https://github.com/hpcloud-mon/mon-agent
|
||||||
- Increased PEP8 compliance and Python 3 compatibility
|
|
||||||
- Fixed Laconic filter import
|
|
||||||
- Fixed mon-agent not (re)starting on boot
|
|
||||||
- Fixed process plugin not returning data
|
|
||||||
- Keystone code cleanup
|
|
||||||
- Fixed one minor bug in MonAPI class
|
|
||||||
- Fixed __init__ in mon-setup
|
|
||||||
|
|
||||||
# 1.0.6 / 2014-06-19
|
|
||||||
## Changes
|
|
||||||
- Improved token handling in forwarder and http_status check.
|
|
||||||
- Updated the agent to allow plugins to override the default dimensions in the plugin config
|
|
||||||
- Added detection and auto-configuration of Nova, Swift and Cinder OpenStack processes and APIs
|
|
||||||
- Fixed crash in collector where plugins take more than 120 seconds to run
|
|
||||||
- Changed "active" plugins http_check, host_alive, and nagios_wrapper to use ServiceCheck class for threadpool support
|
|
||||||
|
|
||||||
# 1.0.5 / 2014-06-12
|
|
||||||
## Changes
|
|
||||||
- Initial support for mon-setup
|
|
||||||
- Changed project_id to project_name in the configuration
|
|
||||||
|
|
||||||
# 1.0.4 / 2014-06-09
|
|
||||||
## Changes
|
|
||||||
- host_alive and nagios_wrapper plugins can now support separate dimensions per instance
|
|
||||||
|
|
||||||
# 1.0.3 / 2014-05-28
|
|
||||||
## Changes
|
|
||||||
- Fixed http_check does not handle exception for unroutable network
|
|
||||||
- Fixed forwarder crashing with missing or malformed dimensions
|
|
||||||
- Removed deprecated "mon_" prefix from http_check metrics
|
|
||||||
- Fixed request format for Keystone token retrieval
|
|
||||||
- Changed supervisor to run as the mon-agent user, not root
|
|
||||||
|
|
||||||
|
|
||||||
# 1.0.2 / 2014-05-19
|
|
||||||
## Changes
|
|
||||||
- Integrated mon_client library
|
|
||||||
- Fixed bug in keystone processing
|
|
||||||
|
|
||||||
# 1.0.1 / 2014-05-12
|
|
||||||
## Changes
|
|
||||||
- Fixed subsequent dimensions missing in certain plugins
|
|
||||||
|
|
||||||
# 1.0.0 / 2014-04-28
|
|
||||||
## Changes
|
|
||||||
- Fork from Datadog agent 4.2.0
|
|
||||||
- removed most datadog branding
|
|
||||||
- removed embeded code
|
|
||||||
- Cleaned up name of collector/forwarder
|
|
||||||
- remove pup
|
|
||||||
- some pep8 changes, lots to go
|
|
||||||
- removed custom emitters
|
|
||||||
- removed data dog emitter, insert initial mon emitter
|
|
||||||
- collector only sends to forwarder now (previously you could optionally have it bypass the forwarder and send to datadogs)
|
|
||||||
- moved non-code files to root of project
|
|
||||||
- removed rpm build
|
|
||||||
- Rearranged code so things are more logically grouped
|
|
||||||
- Setup a standard message format for communicating to the forwarder
|
|
||||||
- Converted from tags to dimensions throughout the collector
|
|
||||||
- Rebranded dogstatsd and converted to dimensions
|
|
||||||
|
10
README.md
@ -1,16 +1,16 @@
|
|||||||
#mon-agent
|
#monasca-agent
|
||||||
|
|
||||||
The Monitoring Agent is a system for gathering metrics and sending them to
|
The Monasca Monitoring Agent is a system for gathering metrics and sending them to
|
||||||
the Monitoring API. In its basic configuration, the Agent collects metrics
|
the Monitoring API. In its basic configuration, the Agent collects metrics
|
||||||
on various aspects of the host system, but may be extended with Python-based
|
on various aspects of the host system, but may be extended with Python-based
|
||||||
plugins or statsd-compatible clients. Many plugins are included, and some of
|
plugins or statsd-compatible clients. Many plugins are included, and some of
|
||||||
these may be used to gather metrics against remote systems and services as well.
|
these may be used to gather metrics against remote systems and services as well.
|
||||||
|
|
||||||
For information on deploying and using the Monitoring Agent, please see the
|
For information on deploying and using the Monasca Monitoring Agent, please see the
|
||||||
[Wiki](https://github.com/hpcloud-mon/mon-agent/wiki)
|
[Wiki](https://github.com/hpcloud-mon/mon-agent/wiki)
|
||||||
|
|
||||||
# Simple Installation
|
# Simple Installation
|
||||||
- `pip install mon-agent`
|
- `pip install monasca-agent`
|
||||||
- Run configuration `mon-setup -u me -p pass --project_name myproject -s mini-mon --keystone_url https://keystone --mon_url https://mon-api`
|
- Run configuration `monasca-setup -u me -p pass --project_name myproject -s mini-mon --keystone_url https://keystone --monasca_url https://mon-api`
|
||||||
|
|
||||||
Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
|
Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[Api]
|
[Api]
|
||||||
# Monitoring API URL: URL for the monitoring API
|
# Monitoring API URL: URL for the monitoring API
|
||||||
# Example: https://region-a.geo-1.monitoring.hpcloudsvc.com/v1.1/metrics
|
# Example: https://region-a.geo-1.monitoring.hpcloudsvc.com/v1.1/metrics
|
||||||
url: {args.mon_url}
|
url: {args.monasca_url}
|
||||||
# Keystone Username
|
# Keystone Username
|
||||||
username: {args.username}
|
username: {args.username}
|
||||||
# Keystone Password
|
# Keystone Password
|
||||||
@ -33,7 +33,7 @@ use_mount: no
|
|||||||
# listen_port: 17123
|
# listen_port: 17123
|
||||||
|
|
||||||
# Additional directory to look for checks
|
# Additional directory to look for checks
|
||||||
# additional_checksd: /etc/mon-agent/checks.d/
|
# additional_checksd: /etc/monasca/agent/checks.d/
|
||||||
|
|
||||||
# Allow non-local traffic to this Agent
|
# Allow non-local traffic to this Agent
|
||||||
# This is required when using this Agent as a proxy for other Agents
|
# This is required when using this Agent as a proxy for other Agents
|
||||||
@ -117,9 +117,9 @@ monstatsd_port : 8125
|
|||||||
|
|
||||||
log_level: INFO
|
log_level: INFO
|
||||||
|
|
||||||
collector_log_file: /var/log/mon-agent/collector.log
|
collector_log_file: /var/log/monasca/agent/collector.log
|
||||||
forwarder_log_file: /var/log/mon-agent/forwarder.log
|
forwarder_log_file: /var/log/monasca/agent/forwarder.log
|
||||||
monstatsd_log_file: /var/log/mon-agent/monstatsd.log
|
monstatsd_log_file: /var/log/monasca/agent/monstatsd.log
|
||||||
|
|
||||||
# if syslog is enabled but a host and port are not set, a local domain socket
|
# if syslog is enabled but a host and port are not set, a local domain socket
|
||||||
# connection will be attempted
|
# connection will be attempted
|
||||||
|
@ -149,8 +149,9 @@ class ProcessCheck(AgentCheck):
|
|||||||
read_bytes += io_counters.read_bytes
|
read_bytes += io_counters.read_bytes
|
||||||
write_bytes += io_counters.write_bytes
|
write_bytes += io_counters.write_bytes
|
||||||
except psutil.AccessDenied:
|
except psutil.AccessDenied:
|
||||||
self.log.debug('mon-agent user does not have access ' +
|
self.log.debug('monasca-agent user does not have ' +
|
||||||
'to I/O counters for process %d: %s'
|
'access to I/O counters for process' +
|
||||||
|
' %d: %s'
|
||||||
% (pid, p.name))
|
% (pid, p.name))
|
||||||
read_count = None
|
read_count = None
|
||||||
write_count = None
|
write_count = None
|
||||||
@ -163,7 +164,7 @@ class ProcessCheck(AgentCheck):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
if got_denied:
|
if got_denied:
|
||||||
self.warning("The Monitoring Agent was denied access",
|
self.warning("The Monitoring Agent was denied access " +
|
||||||
"when trying to get the number of file descriptors")
|
"when trying to get the number of file descriptors")
|
||||||
|
|
||||||
# Memory values are in Byte
|
# Memory values are in Byte
|
||||||
|
@ -1,14 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
'''
|
|
||||||
Datadog
|
|
||||||
www.datadoghq.com
|
|
||||||
----
|
|
||||||
Make sense of your IT Data
|
|
||||||
|
|
||||||
Licensed under Simplified BSD License (see LICENSE)
|
|
||||||
(C) Boxed Ice 2010 all rights reserved
|
|
||||||
(C) Datadog, Inc. 2010-2013 all rights reserved
|
|
||||||
'''
|
|
||||||
|
|
||||||
# set up logging before importing any other components
|
# set up logging before importing any other components
|
||||||
from monagent.common.config import get_version, initialize_logging
|
from monagent.common.config import get_version, initialize_logging
|
||||||
@ -28,7 +18,7 @@ import glob
|
|||||||
# Check we're not using an old version of Python. We need 2.4 above because some modules (like subprocess)
|
# Check we're not using an old version of Python. We need 2.4 above because some modules (like subprocess)
|
||||||
# were only introduced in 2.4.
|
# were only introduced in 2.4.
|
||||||
if int(sys.version_info[1]) <= 3:
|
if int(sys.version_info[1]) <= 3:
|
||||||
sys.stderr.write("Mon Agent requires python 2.4 or later.\n")
|
sys.stderr.write("Monasca Agent requires python 2.4 or later.\n")
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
# Custom modules
|
# Custom modules
|
||||||
@ -38,11 +28,11 @@ from monagent.common.config import get_config, get_parsed_args, load_check_direc
|
|||||||
from monagent.common.daemon import Daemon, AgentSupervisor
|
from monagent.common.daemon import Daemon, AgentSupervisor
|
||||||
from monagent.common.emitter import http_emitter
|
from monagent.common.emitter import http_emitter
|
||||||
from monagent.common.util import Watchdog, PidFile, get_os
|
from monagent.common.util import Watchdog, PidFile, get_os
|
||||||
from jmxfetch import JMXFetch
|
from jmxfetch import JMXFetch, JMX_LIST_COMMANDS
|
||||||
|
|
||||||
|
|
||||||
# Constants
|
# Constants
|
||||||
PID_NAME = "mon-agent"
|
PID_NAME = "monasca-agent"
|
||||||
WATCHDOG_MULTIPLIER = 10
|
WATCHDOG_MULTIPLIER = 10
|
||||||
RESTART_INTERVAL = 4 * 24 * 60 * 60 # Defaults to 4 days
|
RESTART_INTERVAL = 4 * 24 * 60 * 60 # Defaults to 4 days
|
||||||
START_COMMANDS = ['start', 'restart', 'foreground']
|
START_COMMANDS = ['start', 'restart', 'foreground']
|
||||||
@ -216,7 +206,7 @@ def main():
|
|||||||
sys.stderr.write("Unknown command: %s\n" % command)
|
sys.stderr.write("Unknown command: %s\n" % command)
|
||||||
return 3
|
return 3
|
||||||
|
|
||||||
pid_file = PidFile('mon-agent')
|
pid_file = PidFile('monasca-agent')
|
||||||
|
|
||||||
if options.clean:
|
if options.clean:
|
||||||
pid_file.clean()
|
pid_file.clean()
|
||||||
@ -303,7 +293,6 @@ def main():
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
elif 'jmx' == command:
|
elif 'jmx' == command:
|
||||||
from collector.jmxfetch import JMX_LIST_COMMANDS, JMXFetch
|
|
||||||
|
|
||||||
if len(args) < 2 or args[1] not in JMX_LIST_COMMANDS.keys():
|
if len(args) < 2 or args[1] not in JMX_LIST_COMMANDS.keys():
|
||||||
print "#" * 80
|
print "#" * 80
|
||||||
@ -314,7 +303,7 @@ def main():
|
|||||||
print "You have to specify one of the following command:"
|
print "You have to specify one of the following command:"
|
||||||
for command, desc in JMX_LIST_COMMANDS.iteritems():
|
for command, desc in JMX_LIST_COMMANDS.iteritems():
|
||||||
print " - %s [OPTIONAL: LIST OF CHECKS]: %s" % (command, desc)
|
print " - %s [OPTIONAL: LIST OF CHECKS]: %s" % (command, desc)
|
||||||
print "Example: sudo /etc/init.d/mon-agent jmx list_matching_attributes tomcat jmx solr"
|
print "Example: sudo /etc/init.d/monasca-agent jmx list_matching_attributes tomcat jmx solr"
|
||||||
print "\n"
|
print "\n"
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -33,6 +33,8 @@ DEFAULT_CHECK_FREQUENCY = 15 # seconds
|
|||||||
DEFAULT_STATSD_FREQUENCY = 2 # seconds
|
DEFAULT_STATSD_FREQUENCY = 2 # seconds
|
||||||
DEFAULT_STATSD_BUCKET_SIZE = 10 # seconds
|
DEFAULT_STATSD_BUCKET_SIZE = 10 # seconds
|
||||||
LOGGING_MAX_BYTES = 5 * 1024 * 1024
|
LOGGING_MAX_BYTES = 5 * 1024 * 1024
|
||||||
|
DEFAULT_CONFIG_DIR = '/etc/monasca/agent'
|
||||||
|
DEFAULT_LOG_DIR = '/var/log/monasca/agent'
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
windows_file_handler_added = False
|
windows_file_handler_added = False
|
||||||
@ -118,7 +120,7 @@ def _windows_checksd_path():
|
|||||||
|
|
||||||
|
|
||||||
def _unix_config_path():
|
def _unix_config_path():
|
||||||
path = os.path.join('/etc/mon-agent', AGENT_CONF)
|
path = os.path.join(DEFAULT_CONFIG_DIR, AGENT_CONF)
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
return path
|
return path
|
||||||
elif os.path.exists('./%s' % AGENT_CONF):
|
elif os.path.exists('./%s' % AGENT_CONF):
|
||||||
@ -127,7 +129,7 @@ def _unix_config_path():
|
|||||||
|
|
||||||
|
|
||||||
def _unix_confd_path():
|
def _unix_confd_path():
|
||||||
path = os.path.join('/etc/mon-agent', 'conf.d')
|
path = os.path.join(DEFAULT_CONFIG_DIR, 'conf.d')
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
return path
|
return path
|
||||||
raise PathNotFound(path)
|
raise PathNotFound(path)
|
||||||
@ -200,7 +202,7 @@ def get_config(parse_args=True, cfg_path=None, options=None):
|
|||||||
'listen_port': None,
|
'listen_port': None,
|
||||||
'version': get_version(),
|
'version': get_version(),
|
||||||
'watchdog': True,
|
'watchdog': True,
|
||||||
'additional_checksd': '/etc/mon-agent/checks_d/',
|
'additional_checksd': DEFAULT_CONFIG_DIR + '/checks_d/',
|
||||||
}
|
}
|
||||||
|
|
||||||
monstatsd_interval = DEFAULT_STATSD_FREQUENCY
|
monstatsd_interval = DEFAULT_STATSD_FREQUENCY
|
||||||
@ -366,7 +368,7 @@ def set_win32_cert_path():
|
|||||||
crt_path = os.path.join(prog_path, 'ca-certificates.crt')
|
crt_path = os.path.join(prog_path, 'ca-certificates.crt')
|
||||||
else:
|
else:
|
||||||
cur_path = os.path.dirname(__file__)
|
cur_path = os.path.dirname(__file__)
|
||||||
crt_path = os.path.join(cur_path, 'packaging', 'mon-agent', 'win32',
|
crt_path = os.path.join(cur_path, 'packaging', 'monasca-agent', 'win32',
|
||||||
'install_files', 'ca-certificates.crt')
|
'install_files', 'ca-certificates.crt')
|
||||||
import tornado.simple_httpclient
|
import tornado.simple_httpclient
|
||||||
log.info("Windows certificate path: %s" % crt_path)
|
log.info("Windows certificate path: %s" % crt_path)
|
||||||
@ -681,10 +683,10 @@ def get_logging_config(cfg_path=None):
|
|||||||
if system_os != 'windows':
|
if system_os != 'windows':
|
||||||
logging_config = {
|
logging_config = {
|
||||||
'log_level': None,
|
'log_level': None,
|
||||||
'collector_log_file': '/var/log/mon-agent/collector.log',
|
'collector_log_file': DEFAULT_LOG_DIR + '/collector.log',
|
||||||
'forwarder_log_file': '/var/log/mon-agent/forwarder.log',
|
'forwarder_log_file': DEFAULT_LOG_DIR + '/forwarder.log',
|
||||||
'monstatsd_log_file': '/var/log/mon-agent/monstatsd.log',
|
'monstatsd_log_file': DEFAULT_LOG_DIR + '/monstatsd.log',
|
||||||
'jmxfetch_log_file': '/var/log/mon-agent/jmxfetch.log',
|
'jmxfetch_log_file': DEFAULT_LOG_DIR + '/jmxfetch.log',
|
||||||
'log_to_event_viewer': False,
|
'log_to_event_viewer': False,
|
||||||
'log_to_syslog': True,
|
'log_to_syslog': True,
|
||||||
'syslog_host': None,
|
'syslog_host': None,
|
||||||
|
@ -234,7 +234,7 @@ class PidFile(object):
|
|||||||
|
|
||||||
""" A small helper class for pidfiles. """
|
""" A small helper class for pidfiles. """
|
||||||
|
|
||||||
PID_DIR = '/var/run/mon-agent'
|
PID_DIR = '/var/run/monasca-agent'
|
||||||
|
|
||||||
def __init__(self, program, pid_dir=None):
|
def __init__(self, program, pid_dir=None):
|
||||||
self.pid_file = "%s.pid" % program
|
self.pid_file = "%s.pid" % program
|
||||||
|
@ -1 +1 @@
|
|||||||
__version__ = '1.0.7'
|
__version__ = '1.0.0'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from monclient import exc as exc, client
|
from monascaclient import exc as exc, client
|
||||||
from monagent.common.keystone import Keystone
|
from monagent.common.keystone import Keystone
|
||||||
from monagent.common.util import get_hostname
|
from monagent.common.util import get_hostname
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ class MonAPI(object):
|
|||||||
# with the data
|
# with the data
|
||||||
if response.status_code == 401:
|
if response.status_code == 401:
|
||||||
# Get a new token/client and retry
|
# Get a new token/client and retry
|
||||||
self.mon_client = self.get_client()
|
self.mon_client.replace_token(self.keystone.refresh_token())
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
error_msg = "Successful web service call but there" + \
|
error_msg = "Successful web service call but there" + \
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# mon-setup
|
# monasca-setup
|
||||||
|
|
||||||
This script will detect running services and configure mon-agent to watch them as well as starting the agent and
|
This script will detect running services and configure monasca-agent to watch them as well as starting the agent and
|
||||||
configuring it to start up on boot.
|
configuring it to start up on boot.
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import collections
|
|||||||
|
|
||||||
class Plugins(collections.defaultdict):
|
class Plugins(collections.defaultdict):
|
||||||
|
|
||||||
"""A container for the plugin configurations used by the mon-agent.
|
"""A container for the plugin configurations used by the monasca-agent.
|
||||||
This is essentially a defaultdict(dict) but put into a class primarily to make the interface clear, also
|
This is essentially a defaultdict(dict) but put into a class primarily to make the interface clear, also
|
||||||
to add a couple of helper methods.
|
to add a couple of helper methods.
|
||||||
Each plugin config is stored with the key being its config name (excluding .yaml).
|
Each plugin config is stored with the key being its config name (excluding .yaml).
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
"""Classes for detection of running resources to be monitored.
|
"""Classes for detection of running resources to be monitored.
|
||||||
Detection classes should be platform independent
|
Detection classes should be platform independent
|
||||||
"""
|
"""
|
||||||
from monclient import client
|
|
||||||
|
|
||||||
|
|
||||||
class Plugin(object):
|
class Plugin(object):
|
||||||
|
|
||||||
"""Abstract class implemented by the mon-agent plugin detection classes
|
"""Abstract class implemented by the monasca-agent plugin detection classes
|
||||||
"""
|
"""
|
||||||
# todo these should include dependency detection
|
# todo these should include dependency detection
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ class Postfix(Plugin):
|
|||||||
"""If postfix is running install the default config
|
"""If postfix is running install the default config
|
||||||
"""
|
"""
|
||||||
# todo this is is disabled as postfix requires passwordless sudo for the
|
# todo this is is disabled as postfix requires passwordless sudo for the
|
||||||
# mon-agent user, a bad practice
|
# monasca-agent user, a bad practice
|
||||||
|
|
||||||
def _detect(self):
|
def _detect(self):
|
||||||
"""Run detection, set self.available True if the service is detected."""
|
"""Run detection, set self.available True if the service is detected."""
|
||||||
|
@ -10,7 +10,7 @@ log = logging.getLogger(__name__)
|
|||||||
|
|
||||||
class ServicePlugin(Plugin):
|
class ServicePlugin(Plugin):
|
||||||
|
|
||||||
"""Base class implemented by the mon-agent plugin detection classes
|
"""Base class implemented by the monasca-agent plugin detection classes
|
||||||
for OpenStack Services
|
for OpenStack Services
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -12,7 +12,9 @@ import sys
|
|||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
import agent_config
|
import agent_config
|
||||||
from detection.plugins import kafka, mon, mysql, network, zookeeper, nova, glance, cinder, neutron, swift, ceilometer, keystone
|
from detection.plugins import kafka, mon, mysql, network, zookeeper
|
||||||
|
from detection.plugins import nova, glance, cinder, neutron, swift
|
||||||
|
from detection.plugins import keystone, ceilometer
|
||||||
from service import sysv
|
from service import sysv
|
||||||
|
|
||||||
# List of all detection plugins to run
|
# List of all detection plugins to run
|
||||||
@ -36,11 +38,11 @@ def main(argv=None):
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-s', '--service', help="Service this node is associated with.", required=True)
|
'-s', '--service', help="Service this node is associated with.", required=True)
|
||||||
parser.add_argument('--keystone_url', help="Keystone url", required=True)
|
parser.add_argument('--keystone_url', help="Keystone url", required=True)
|
||||||
parser.add_argument('--mon_url', help="Mon API url", required=True)
|
parser.add_argument('--monasca_url', help="Monasca API url", required=True)
|
||||||
parser.add_argument('--config_dir', help="Configuration directory", default='/etc/mon-agent')
|
parser.add_argument('--config_dir', help="Configuration directory", default='/etc/monasca/agent')
|
||||||
parser.add_argument('--log_dir', help="mon-agent log directory", default='/var/log/mon-agent')
|
parser.add_argument('--log_dir', help="monasca-agent log directory", default='/var/log/monasca/agent')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--template_dir', help="Alternative template directory", default='/usr/local/share/mon/agent')
|
'--template_dir', help="Alternative template directory", default='/usr/local/share/monasca/agent')
|
||||||
parser.add_argument('--headless', help="Run in a non-interactive mode", action="store_true")
|
parser.add_argument('--headless', help="Run in a non-interactive mode", action="store_true")
|
||||||
parser.add_argument('--overwrite',
|
parser.add_argument('--overwrite',
|
||||||
help="Overwrite existing plugin configuration." +
|
help="Overwrite existing plugin configuration." +
|
||||||
@ -49,7 +51,7 @@ def main(argv=None):
|
|||||||
parser.add_argument('--skip_enable', help="By default the service is enabled," +
|
parser.add_argument('--skip_enable', help="By default the service is enabled," +
|
||||||
" which requires the script run as root. Set this to skip that step.",
|
" which requires the script run as root. Set this to skip that step.",
|
||||||
action="store_true")
|
action="store_true")
|
||||||
parser.add_argument('--user', help="User name to run mon-agent as", default='mon-agent')
|
parser.add_argument('--user', help="User name to run monasca-agent as", default='monasca-agent')
|
||||||
parser.add_argument('-v', '--verbose', help="Verbose Output", action="store_true")
|
parser.add_argument('-v', '--verbose', help="Verbose Output", action="store_true")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
@ -63,7 +65,8 @@ def main(argv=None):
|
|||||||
|
|
||||||
# Service enable, includes setup of users/config directories so must be
|
# Service enable, includes setup of users/config directories so must be
|
||||||
# done before configuration
|
# done before configuration
|
||||||
agent_service = OS_SERVICE_MAP[detected_os](os.path.join(args.template_dir, 'mon-agent.init'), args.config_dir,
|
agent_service = OS_SERVICE_MAP[detected_os](os.path.join(args.template_dir, 'monasca-agent.init'),
|
||||||
|
args.config_dir,
|
||||||
args.log_dir, username=args.user)
|
args.log_dir, username=args.user)
|
||||||
if not args.skip_enable:
|
if not args.skip_enable:
|
||||||
agent_service.enable()
|
agent_service.enable()
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
"""Classes implementing different methods for running mon-agent on startup as well as starting the process immediately
|
"""Classes implementing different methods for running monasca-agent on startup as well as starting the process immediately
|
||||||
"""
|
"""
|
||||||
import psutil
|
import psutil
|
||||||
|
|
||||||
@ -7,40 +7,40 @@ class Service(object):
|
|||||||
|
|
||||||
"""Abstract base class implementing the interface for various service types."""
|
"""Abstract base class implementing the interface for various service types."""
|
||||||
|
|
||||||
def __init__(self, config_dir, log_dir, name='mon-agent'):
|
def __init__(self, config_dir, log_dir, name='monasca-agent'):
|
||||||
self.config_dir = config_dir
|
self.config_dir = config_dir
|
||||||
self.log_dir = log_dir
|
self.log_dir = log_dir
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
def enable(self):
|
def enable(self):
|
||||||
"""Sets mon-agent to start on boot.
|
"""Sets monasca-agent to start on boot.
|
||||||
Generally this requires running as super user
|
Generally this requires running as super user
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def start(self, restart=True):
|
def start(self, restart=True):
|
||||||
"""Starts mon-agent
|
"""Starts monasca-agent
|
||||||
If the agent is running and restart is True, restart
|
If the agent is running and restart is True, restart
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
"""Stops mon-agent
|
"""Stops monasca-agent
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def is_enabled(self):
|
def is_enabled(self):
|
||||||
"""Returns True if mon-agent is setup to start on boot, false otherwise
|
"""Returns True if monasca-agent is setup to start on boot, false otherwise
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def is_running():
|
def is_running():
|
||||||
"""Returns True if mon-agent is running, false otherwise
|
"""Returns True if monasca-agent is running, false otherwise
|
||||||
"""
|
"""
|
||||||
# Looking for the supervisor process not the individual components
|
# Looking for the supervisor process not the individual components
|
||||||
for process in psutil.process_iter():
|
for process in psutil.process_iter():
|
||||||
if '/etc/mon-agent/supervisor.conf' in process.cmdline():
|
if '/etc/monasca/agent/supervisor.conf' in process.cmdline():
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
@ -13,7 +13,7 @@ log = logging.getLogger(__name__)
|
|||||||
|
|
||||||
class SysV(Service):
|
class SysV(Service):
|
||||||
|
|
||||||
def __init__(self, init_template, config_dir, log_dir, name='mon-agent', username='mon-agent'):
|
def __init__(self, init_template, config_dir, log_dir, name='monasca-agent', username='monasca-agent'):
|
||||||
"""Setup this service with the given init template"""
|
"""Setup this service with the given init template"""
|
||||||
super(SysV, self).__init__(config_dir, log_dir, name)
|
super(SysV, self).__init__(config_dir, log_dir, name)
|
||||||
self.init_script = '/etc/init.d/%s' % self.name
|
self.init_script = '/etc/init.d/%s' % self.name
|
||||||
@ -21,10 +21,10 @@ class SysV(Service):
|
|||||||
self.username = username
|
self.username = username
|
||||||
|
|
||||||
def enable(self):
|
def enable(self):
|
||||||
"""Sets mon-agent to start on boot.
|
"""Sets monasca-agent to start on boot.
|
||||||
Generally this requires running as super user
|
Generally this requires running as super user
|
||||||
"""
|
"""
|
||||||
# Create mon-agent user/group if needed
|
# Create monasca-agent user/group if needed
|
||||||
try:
|
try:
|
||||||
user = pwd.getpwnam(self.username)
|
user = pwd.getpwnam(self.username)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@ -35,7 +35,7 @@ class SysV(Service):
|
|||||||
# todo log dir is hardcoded
|
# todo log dir is hardcoded
|
||||||
for path in (self.log_dir, self.config_dir, '%s/conf.d' % self.config_dir):
|
for path in (self.log_dir, self.config_dir, '%s/conf.d' % self.config_dir):
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
os.mkdir(path, 0o755)
|
os.makedirs(path, 0o755)
|
||||||
os.chown(path, 0, user.pw_gid)
|
os.chown(path, 0, user.pw_gid)
|
||||||
# the log dir needs to be writable by the user
|
# the log dir needs to be writable by the user
|
||||||
os.chown(self.log_dir, user.pw_uid, user.pw_gid)
|
os.chown(self.log_dir, user.pw_uid, user.pw_gid)
|
||||||
@ -46,14 +46,14 @@ class SysV(Service):
|
|||||||
os.chmod(self.init_script, 0o755)
|
os.chmod(self.init_script, 0o755)
|
||||||
|
|
||||||
for runlevel in ['2', '3', '4', '5']:
|
for runlevel in ['2', '3', '4', '5']:
|
||||||
link_path = '/etc/rc%s.d/S10mon-agent' % runlevel
|
link_path = '/etc/rc%s.d/S10monasca-agent' % runlevel
|
||||||
if not os.path.exists(link_path):
|
if not os.path.exists(link_path):
|
||||||
os.symlink(self.init_script, link_path)
|
os.symlink(self.init_script, link_path)
|
||||||
|
|
||||||
log.info('Enabled {0} service via SysV init script'.format(self.name))
|
log.info('Enabled {0} service via SysV init script'.format(self.name))
|
||||||
|
|
||||||
def start(self, restart=True):
|
def start(self, restart=True):
|
||||||
"""Starts mon-agent
|
"""Starts monasca-agent
|
||||||
If the agent is running and restart is True, restart
|
If the agent is running and restart is True, restart
|
||||||
"""
|
"""
|
||||||
if not self.is_enabled():
|
if not self.is_enabled():
|
||||||
@ -65,7 +65,7 @@ class SysV(Service):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
"""Stops mon-agent
|
"""Stops monasca-agent
|
||||||
"""
|
"""
|
||||||
if not self.is_enabled():
|
if not self.is_enabled():
|
||||||
log.error('The service is not enabled')
|
log.error('The service is not enabled')
|
||||||
@ -76,12 +76,12 @@ class SysV(Service):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def is_enabled(self):
|
def is_enabled(self):
|
||||||
"""Returns True if mon-agent is setup to start on boot, false otherwise
|
"""Returns True if monasca-agent is setup to start on boot, false otherwise
|
||||||
"""
|
"""
|
||||||
if not os.path.exists(self.init_script):
|
if not os.path.exists(self.init_script):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if len(glob('/etc/rc?.d/S??mon-agent')) > 0:
|
if len(glob('/etc/rc?.d/S??monasca-agent')) > 0:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
@ -37,7 +37,7 @@ source:
|
|||||||
cp -r $(SRC)/monagent $(ROOT)/
|
cp -r $(SRC)/monagent $(ROOT)/
|
||||||
cp -r $(SRC)/conf.d $(ROOT)/
|
cp -r $(SRC)/conf.d $(ROOT)/
|
||||||
cp -r $(SRC)/LICENSE* $(ROOT)/
|
cp -r $(SRC)/LICENSE* $(ROOT)/
|
||||||
cp -r $(SRC)/agent.conf.example $(ROOT)/
|
cp -r $(SRC)/agent.conf.template $(ROOT)/
|
||||||
find $(ROOT) -name "*.pyc" -exec rm {} \;
|
find $(ROOT) -name "*.pyc" -exec rm {} \;
|
||||||
|
|
||||||
|
|
||||||
@ -45,20 +45,21 @@ source:
|
|||||||
# the build directory.
|
# the build directory.
|
||||||
install_full: source
|
install_full: source
|
||||||
mkdir -p $(BUILD)
|
mkdir -p $(BUILD)
|
||||||
mkdir -p $(BUILD)/usr/share/mon/agent
|
mkdir -p $(BUILD)/usr/monasca/agent
|
||||||
mkdir -p $(BUILD)/etc/mon-agent
|
mkdir -p $(BUILD)/etc/monasca/agent
|
||||||
mkdir -p $(BUILD)/etc/mon-agent/conf.d
|
mkdir -p $(BUILD)/etc/monasca/agent/conf.d
|
||||||
mkdir -p $(BUILD)/usr/bin
|
mkdir -p $(BUILD)/usr/bin
|
||||||
mkdir -p $(BUILD)/var/log/mon-agent
|
mkdir -p $(BUILD)/var/log/monasca/agent
|
||||||
|
mkdir -p $(BUILD)/usr/share/monasca/agent
|
||||||
# Install the source to usr/share
|
# Install the source to usr/share
|
||||||
cp -r $(ROOT)/* $(BUILD)/usr/share/mon/agent/
|
cp -r $(ROOT)/* $(BUILD)/usr/share/monasca/agent
|
||||||
# Install the common executables.
|
# Install the common executables.
|
||||||
ln -sf ../share/mon/agent/monagent/monstatsd/daemon.py $(BUILD)/usr/bin/monstatsd
|
ln -sf ../share/monasca/agent/monagent/monstatsd/daemon.py $(BUILD)/usr/bin/monasca-statsd
|
||||||
ln -sf ../share/mon/agent/monagent/forwarder/daemon.py $(BUILD)/usr/bin/mon-forwarder
|
ln -sf ../share/monasca/agent/monagent/forwarder/daemon.py $(BUILD)/usr/bin/monasca-forwarder
|
||||||
ln -sf ../share/mon/agent/monagent/collector/daemon.py $(BUILD)/usr/bin/mon-collector
|
ln -sf ../share/monasca/agent/monagent/collector/daemon.py $(BUILD)/usr/bin/monasca-collector
|
||||||
chmod 755 $(BUILD)/usr/bin/monstatsd
|
chmod 755 $(BUILD)/usr/bin/monasca-statsd
|
||||||
chmod 755 $(BUILD)/usr/bin/mon-forwarder
|
chmod 755 $(BUILD)/usr/bin/monasca-forwarder
|
||||||
chmod 755 $(BUILD)/usr/bin/mon-collector
|
chmod 755 $(BUILD)/usr/bin/monasca-collector
|
||||||
|
|
||||||
# =====================
|
# =====================
|
||||||
# DEBIAN
|
# DEBIAN
|
||||||
@ -66,18 +67,18 @@ install_full: source
|
|||||||
|
|
||||||
install_deb: install_full
|
install_deb: install_full
|
||||||
mkdir -p $(BUILD)/etc/init.d
|
mkdir -p $(BUILD)/etc/init.d
|
||||||
cp mon-agent-deb/mon-agent.init $(BUILD)/etc/init.d/mon-agent
|
cp monasca-agent-deb/monasca-agent.init $(BUILD)/etc/init.d/monasca-agent
|
||||||
chmod 755 $(BUILD)/etc/init.d/mon-agent
|
chmod 755 $(BUILD)/etc/init.d/monasca-agent
|
||||||
# Install supervisor config.
|
# Install supervisor config.
|
||||||
cp mon-agent-deb/supervisor.conf $(BUILD)/etc/mon-agent/supervisor.conf
|
cp monasca-agent-deb/supervisor.conf $(BUILD)/etc/monasca/agent/supervisor.conf
|
||||||
|
|
||||||
|
|
||||||
# Make the mon agent debian package that includes supervisor, the forwarder
|
# Make the monasca agent debian package that includes supervisor, the forwarder
|
||||||
# etc.
|
# etc.
|
||||||
mon_agent_deb: clean install_deb
|
monasca_agent_deb: clean install_deb
|
||||||
FPM_EDITOR="echo 'Replaces: mon-agent (<= $(VERSION)), mon-agent, mon-agent-base (<= $(VERSION)), mon-agent-lib' >>" \
|
FPM_EDITOR="echo 'Replaces: monasca-agent (<= $(VERSION)), monasca-agent, monasca-agent-base (<= $(VERSION)), monasca-agent-lib' >>" \
|
||||||
$(FPM_BUILD) -t deb \
|
$(FPM_BUILD) -t deb \
|
||||||
-n mon-agent \
|
-n monasca-agent \
|
||||||
-d "python (>= 2.6)" \
|
-d "python (>= 2.6)" \
|
||||||
-d "python-tornado (>= 2.3)" \
|
-d "python-tornado (>= 2.3)" \
|
||||||
-d "supervisor (>= 3.0)" \
|
-d "supervisor (>= 3.0)" \
|
||||||
@ -89,24 +90,23 @@ $(FPM_BUILD) -t deb \
|
|||||||
-d "python-httplib2" \
|
-d "python-httplib2" \
|
||||||
-d "python-ntplib" \
|
-d "python-ntplib" \
|
||||||
-d "python-yaml" \
|
-d "python-yaml" \
|
||||||
-d "python-monclient" \
|
-d "python-monascaclient" \
|
||||||
--post-install mon-agent-deb/postinst \
|
--post-install monasca-agent-deb/postinst \
|
||||||
--post-uninstall mon-agent-deb/postrm \
|
--post-uninstall monasca-agent-deb/postrm \
|
||||||
--pre-uninstall mon-agent-deb/prerm \
|
--pre-uninstall monasca-agent-deb/prerm \
|
||||||
.
|
.
|
||||||
|
|
||||||
|
|
||||||
#===================
|
#===================
|
||||||
# JENKINS TARGETS
|
# JENKINS TARGETS
|
||||||
#===================
|
#===================
|
||||||
|
|
||||||
deb:
|
deb:
|
||||||
mkdir -p ../artifacts
|
mkdir -p ../artifacts
|
||||||
make mon_agent_deb
|
make monasca_agent_deb
|
||||||
cp *.deb ../artifacts
|
cp *.deb ../artifacts
|
||||||
|
|
||||||
installdeb:
|
installdeb:
|
||||||
dpkg -i --force-confdef --force-confnew `ls -t ../artifacts/mon-agent_*.deb | head -1`
|
dpkg -i --force-confdef --force-confnew `ls -t ../artifacts/monasca-agent_*.deb | head -1`
|
||||||
|
|
||||||
deb_repo:
|
deb_repo:
|
||||||
rm Packages.gz
|
rm Packages.gz
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
configure)
|
|
||||||
update-rc.d mon-agent defaults
|
|
||||||
adduser --system mon-agent --disabled-login --shell /bin/sh --no-create-home --quiet
|
|
||||||
usermod -d /usr/share/mon/agent mon-agent
|
|
||||||
chown root:root /etc/init.d/mon-agent
|
|
||||||
chown -R mon-agent:root /etc/mon-agent
|
|
||||||
chown -R mon-agent:root /var/log/mon-agent
|
|
||||||
chown -R root:root /usr/share/mon/agent
|
|
||||||
chown -h root:root /usr/bin/monstatsd
|
|
||||||
chown -h root:root /usr/bin/mon-collector
|
|
||||||
chown -h root:root /usr/bin/mon-forwarder
|
|
||||||
|
|
||||||
set +e
|
|
||||||
|
|
||||||
if which invoke-rc.d >/dev/null 2>&1; then
|
|
||||||
invoke-rc.d mon-agent restart
|
|
||||||
else
|
|
||||||
/etc/init.d/mon-agent restart
|
|
||||||
fi
|
|
||||||
|
|
||||||
RETVAL=$?
|
|
||||||
if [ $RETVAL -ne 0 ]; then
|
|
||||||
if [ $RETVAL -eq 3 ]; then
|
|
||||||
# No agent.conf file is present. The user is probably following
|
|
||||||
# the step-by-step instructions and will add the config file next.
|
|
||||||
echo "No /etc/mon-agent/agent.conf found, exiting"
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
exit $?
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
abort-upgrade|abort-remove|abort-deconfigure)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
|
|
||||||
exit 0
|
|
@ -1,9 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ "$1" = purge ]; then
|
|
||||||
update-rc.d mon-agent remove
|
|
||||||
deluser mon-agent
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
@ -1,13 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ -f /etc/init.d/mon-agent ]; then
|
|
||||||
if which invoke-rc.d >/dev/null 2>&1; then
|
|
||||||
invoke-rc.d mon-agent stop || true
|
|
||||||
else
|
|
||||||
/etc/init.d/mon-agent stop || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
exit 0
|
|
@ -1,8 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
|
|
||||||
if which invoke-rc.d >/dev/null 2>&1; then
|
|
||||||
invoke-rc.d mon-agent stop || true
|
|
||||||
else
|
|
||||||
/etc/init.d/mon-agent stop || true
|
|
||||||
fi
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
### BEGIN INIT INFO
|
### BEGIN INIT INFO
|
||||||
# Provides: mon-agent
|
# Provides: monasca-agent
|
||||||
# Short-Description: Start and start mon-agent
|
# Short-Description: Start and start monasca-agent
|
||||||
# Description: mon-agent is the monitoring Agent component OpenStack Monitoring
|
# Description: monasca-agent is the monitoring Agent component OpenStack Monitoring
|
||||||
# Required-Start: $remote_fs
|
# Required-Start: $remote_fs
|
||||||
# Required-Stop: $remote_fs
|
# Required-Stop: $remote_fs
|
||||||
# Default-Start: 2 3 4 5
|
# Default-Start: 2 3 4 5
|
||||||
@ -12,19 +12,19 @@
|
|||||||
|
|
||||||
. /lib/lsb/init-functions
|
. /lib/lsb/init-functions
|
||||||
PATH=$PATH:/sbin # add the location of start-stop-daemon on Debian
|
PATH=$PATH:/sbin # add the location of start-stop-daemon on Debian
|
||||||
export PYTHONPATH=$PYTHONPATH:/usr/share/mon/agent/
|
export PYTHONPATH=$PYTHONPATH:/usr/monasca/agent/
|
||||||
|
|
||||||
AGENTPATH="/usr/local/bin/mon-collector"
|
AGENTPATH="/usr/local/bin/monasca-collector"
|
||||||
AGENTCONF="/etc/mon-agent/agent.conf"
|
AGENTCONF="/etc/monasca/agent/agent.conf"
|
||||||
MONSTATSDPATH="/usr/local/bin/monstatsd"
|
MONSTATSDPATH="/usr/local/bin/monasca-statsd"
|
||||||
AGENTUSER="mon-agent"
|
AGENTUSER="monasca-agent"
|
||||||
FORWARDERPATH="/usr/local/bin/mon-forwarder"
|
FORWARDERPATH="/usr/local/bin/monasca-forwarder"
|
||||||
NAME="mon-agent"
|
NAME="monasca-agent"
|
||||||
DESC="Monitoring Agent"
|
DESC="Monasca Monitoring Agent"
|
||||||
AGENT_PID_PATH="/var/run/mon-agent.pid"
|
AGENT_PID_PATH="/var/run/monasca-agent.pid"
|
||||||
SUPERVISOR_PIDFILE="/var/run/mon-agent-supervisord.pid"
|
SUPERVISOR_PIDFILE="/var/run/monasca-agent-supervisord.pid"
|
||||||
SUPERVISOR_FILE="/etc/mon-agent/supervisor.conf"
|
SUPERVISOR_FILE="/etc/monasca/agent/supervisor.conf"
|
||||||
SUPERVISOR_SOCK="/var/tmp/mon-agent-supervisor.sock"
|
SUPERVISOR_SOCK="/var/tmp/monasca-agent-supervisor.sock"
|
||||||
SUPERVISORD=$(which supervisord)
|
SUPERVISORD=$(which supervisord)
|
||||||
|
|
||||||
# This script is considered a configuration file and will not be
|
# This script is considered a configuration file and will not be
|
||||||
@ -81,7 +81,7 @@ case "$1" in
|
|||||||
|
|
||||||
su $AGENTUSER -c "$AGENTPATH configcheck" > /dev/null
|
su $AGENTUSER -c "$AGENTPATH configcheck" > /dev/null
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
log_daemon_msg "Invalid check configuration. Please run sudo /etc/init.d/mon-agent configtest for more details."
|
log_daemon_msg "Invalid check configuration. Please run sudo /etc/init.d/monasca-agent configtest for more details."
|
||||||
log_daemon_msg "Resuming starting process."
|
log_daemon_msg "Resuming starting process."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ case "$1" in
|
|||||||
info)
|
info)
|
||||||
shift # Shift 'info' out of args so we can pass any
|
shift # Shift 'info' out of args so we can pass any
|
||||||
# addtional options to the real command
|
# addtional options to the real command
|
||||||
# (right now only mon-agent supports additional flags)
|
# (right now only monasca-agent supports additional flags)
|
||||||
su $AGENTUSER -c "$AGENTPATH info $@"
|
su $AGENTUSER -c "$AGENTPATH info $@"
|
||||||
COLLECTOR_RETURN=$?
|
COLLECTOR_RETURN=$?
|
||||||
su $AGENTUSER -c "$MONSTATSDPATH info"
|
su $AGENTUSER -c "$MONSTATSDPATH info"
|
47
packaging/monasca-agent-deb/postinst
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
configure)
|
||||||
|
update-rc.d monasca-agent defaults
|
||||||
|
adduser --system monasca-agent --disabled-login --shell /bin/sh --no-create-home --quiet
|
||||||
|
usermod -d /usr/share/monasca/agent monasca-agent
|
||||||
|
chown root:root /etc/init.d/monasca-agent
|
||||||
|
chown -R monasca-agent:root /etc/monasca/agent
|
||||||
|
chown -R monasca-agent:root /var/log/monasca/agent
|
||||||
|
chown -R root:root /usr/share/monasca/agent
|
||||||
|
chown -h root:root /usr/bin/monasca-statsd
|
||||||
|
chown -h root:root /usr/bin/monasca-collector
|
||||||
|
chown -h root:root /usr/bin/monasca-forwarder
|
||||||
|
|
||||||
|
set +e
|
||||||
|
|
||||||
|
if which invoke-rc.d >/dev/null 2>&1; then
|
||||||
|
invoke-rc.d monasca-agent restart
|
||||||
|
else
|
||||||
|
/etc/init.d/monasca-agent restart
|
||||||
|
fi
|
||||||
|
|
||||||
|
RETVAL=$?
|
||||||
|
if [ $RETVAL -ne 0 ]; then
|
||||||
|
if [ $RETVAL -eq 3 ]; then
|
||||||
|
# No agent.conf file is present. The user is probably following
|
||||||
|
# the step-by-step instructions and will add the config file next.
|
||||||
|
echo "No /etc/monasca/agent/agent.conf found, exiting"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
abort-upgrade|abort-remove|abort-deconfigure)
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
#DEBHELPER#
|
||||||
|
|
||||||
|
exit 0
|
9
packaging/monasca-agent-deb/postrm
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$1" = purge ]; then
|
||||||
|
update-rc.d monasca-agent remove
|
||||||
|
deluser monasca-agent
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
13
packaging/monasca-agent-deb/preinst
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ -f /etc/init.d/monasca-agent ]; then
|
||||||
|
if which invoke-rc.d >/dev/null 2>&1; then
|
||||||
|
invoke-rc.d monasca-agent stop || true
|
||||||
|
else
|
||||||
|
/etc/init.d/monasca-agent stop || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#DEBHELPER#
|
||||||
|
exit 0
|
8
packaging/monasca-agent-deb/prerm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
if which invoke-rc.d >/dev/null 2>&1; then
|
||||||
|
invoke-rc.d monasca-agent stop || true
|
||||||
|
else
|
||||||
|
/etc/init.d/monasca-agent stop || true
|
||||||
|
fi
|
||||||
|
|
@ -1,8 +1,8 @@
|
|||||||
[supervisorctl]
|
[supervisorctl]
|
||||||
serverurl = unix:///var/tmp/mon-agent-supervisor.sock
|
serverurl = unix:///var/tmp/monasca-agent-supervisor.sock
|
||||||
|
|
||||||
[unix_http_server]
|
[unix_http_server]
|
||||||
file=/var/tmp/mon-agent-supervisor.sock
|
file=/var/tmp/monasca-agent-supervisor.sock
|
||||||
|
|
||||||
[rpcinterface:supervisor]
|
[rpcinterface:supervisor]
|
||||||
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
||||||
@ -11,37 +11,37 @@ supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
|||||||
minfds = 1024
|
minfds = 1024
|
||||||
minprocs = 200
|
minprocs = 200
|
||||||
loglevel = info
|
loglevel = info
|
||||||
logfile = /var/log/mon-agent/supervisord.log
|
logfile = /var/log/monasca/agent/supervisord.log
|
||||||
logfile_maxbytes = 50MB
|
logfile_maxbytes = 50MB
|
||||||
nodaemon = false
|
nodaemon = false
|
||||||
pidfile = /var/run/mon-agent-supervisord.pid
|
pidfile = /var/run/monasca-agent-supervisord.pid
|
||||||
logfile_backups = 10
|
logfile_backups = 10
|
||||||
environment=PYTHONPATH='/usr/share/mon/agent:/usr/share/mon/agent',LANG=POSIX
|
environment=PYTHONPATH='/usr/share/monasca/agent',LANG=POSIX
|
||||||
|
|
||||||
[program:collector]
|
[program:collector]
|
||||||
command=/usr/bin/mon-collector foreground
|
command=/usr/bin/monasca-collector foreground
|
||||||
stdout_logfile=NONE
|
stdout_logfile=NONE
|
||||||
stderr_logfile=NONE
|
stderr_logfile=NONE
|
||||||
priority=999
|
priority=999
|
||||||
startsecs=2
|
startsecs=2
|
||||||
user=mon-agent
|
user=monasca-agent
|
||||||
environment=LC_ALL=POSIX,PYTHONPATH='/usr/share/mon/agent:$PYTHONPATH'
|
environment=LC_ALL=POSIX,PYTHONPATH='/usr/share/monasca/agent:$PYTHONPATH'
|
||||||
|
|
||||||
[program:forwarder]
|
[program:forwarder]
|
||||||
command=/usr/bin/mon-forwarder
|
command=/usr/bin/monasca-forwarder
|
||||||
stdout_logfile=NONE
|
stdout_logfile=NONE
|
||||||
stderr_logfile=NONE
|
stderr_logfile=NONE
|
||||||
startsecs=3
|
startsecs=3
|
||||||
priority=998
|
priority=998
|
||||||
user=mon-agent
|
user=monasca-agent
|
||||||
|
|
||||||
[program:monstatsd]
|
[program:monstatsd]
|
||||||
command=/usr/bin/monstatsd
|
command=/usr/bin/monasca-statsd
|
||||||
stdout_logfile=NONE
|
stdout_logfile=NONE
|
||||||
stderr_logfile=NONE
|
stderr_logfile=NONE
|
||||||
startsecs=3
|
startsecs=3
|
||||||
priority=998
|
priority=998
|
||||||
user=mon-agent
|
user=monasca-agent
|
||||||
|
|
||||||
[group:mon-agent]
|
[group:monasca-agent]
|
||||||
programs=forwarder,collector,monstatsd
|
programs=forwarder,collector,monstatsd
|
@ -1,9 +1,9 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
### BEGIN INIT INFO
|
### BEGIN INIT INFO
|
||||||
# Provides: mon-agent
|
# Provides: monasca-agent
|
||||||
# Short-Description: Start and start mon-agent
|
# Short-Description: Start and start monasca-agent
|
||||||
# Description: mon-agent is the monitoring Agent component OpenStack Monitoring
|
# Description: monasca-agent is the monitoring Agent component OpenStack Monitoring
|
||||||
# Required-Start: $remote_fs
|
# Required-Start: $remote_fs
|
||||||
# Required-Stop: $remote_fs
|
# Required-Stop: $remote_fs
|
||||||
# Default-Start: 2 3 4 5
|
# Default-Start: 2 3 4 5
|
||||||
@ -14,17 +14,17 @@
|
|||||||
PATH=$PATH:/usr/local/bin # supervisord might live here
|
PATH=$PATH:/usr/local/bin # supervisord might live here
|
||||||
PATH=$PATH:/sbin # add the location of start-stop-daemon on Debian
|
PATH=$PATH:/sbin # add the location of start-stop-daemon on Debian
|
||||||
|
|
||||||
AGENTPATH="/usr/local/bin/mon-collector"
|
AGENTPATH="/usr/local/bin/monasca-collector"
|
||||||
AGENTCONF="/etc/mon-agent/agent.conf"
|
AGENTCONF="/etc/monasca/agent/agent.conf"
|
||||||
MONSTATSDPATH="/usr/local/bin/monstatsd"
|
MONSTATSDPATH="/usr/local/bin/monasca-statsd"
|
||||||
AGENTUSER="mon-agent"
|
AGENTUSER="monasca-agent"
|
||||||
FORWARDERPATH="/usr/local/bin/mon-forwarder"
|
FORWARDERPATH="/usr/local/bin/monasca-forwarder"
|
||||||
NAME="mon-agent"
|
NAME="monasca-agent"
|
||||||
DESC="Monitoring Agent"
|
DESC="Monasca Monitoring Agent"
|
||||||
AGENT_PID_PATH="/var/tmp/mon-agent.pid"
|
AGENT_PID_PATH="/var/tmp/monasca-agent.pid"
|
||||||
SUPERVISOR_PIDFILE="/var/tmp/mon-agent-supervisord.pid"
|
SUPERVISOR_PIDFILE="/var/tmp/monasca-agent-supervisord.pid"
|
||||||
SUPERVISOR_FILE="/etc/mon-agent/supervisor.conf"
|
SUPERVISOR_FILE="/etc/monasca/agent/supervisor.conf"
|
||||||
SUPERVISOR_SOCK="/var/tmp/mon-agent-supervisor.sock"
|
SUPERVISOR_SOCK="/var/tmp/monasca-agent-supervisor.sock"
|
||||||
SUPERVISORD=$(which supervisord)
|
SUPERVISORD=$(which supervisord)
|
||||||
|
|
||||||
# This script is considered a configuration file and will not be
|
# This script is considered a configuration file and will not be
|
||||||
@ -81,7 +81,7 @@ case "$1" in
|
|||||||
|
|
||||||
su $AGENTUSER -c "$AGENTPATH configcheck" > /dev/null
|
su $AGENTUSER -c "$AGENTPATH configcheck" > /dev/null
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
log_daemon_msg "Invalid check configuration. Please run sudo /etc/init.d/mon-agent configtest for more details."
|
log_daemon_msg "Invalid check configuration. Please run sudo /etc/init.d/monasca-agent configtest for more details."
|
||||||
log_daemon_msg "Resuming starting process."
|
log_daemon_msg "Resuming starting process."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ case "$1" in
|
|||||||
info)
|
info)
|
||||||
shift # Shift 'info' out of args so we can pass any
|
shift # Shift 'info' out of args so we can pass any
|
||||||
# addtional options to the real command
|
# addtional options to the real command
|
||||||
# (right now only mon-agent supports additional flags)
|
# (right now only monasca-agent supports additional flags)
|
||||||
su $AGENTUSER -c "$AGENTPATH info $@"
|
su $AGENTUSER -c "$AGENTPATH info $@"
|
||||||
COLLECTOR_RETURN=$?
|
COLLECTOR_RETURN=$?
|
||||||
su $AGENTUSER -c "$MONSTATSDPATH info"
|
su $AGENTUSER -c "$MONSTATSDPATH info"
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 612 B After Width: | Height: | Size: 612 B |
Before Width: | Height: | Size: 522 B After Width: | Height: | Size: 522 B |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 970 B After Width: | Height: | Size: 970 B |
Before Width: | Height: | Size: 355 B After Width: | Height: | Size: 355 B |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
@ -1,8 +1,8 @@
|
|||||||
[supervisorctl]
|
[supervisorctl]
|
||||||
serverurl = unix:///var/tmp/mon-agent-supervisor.sock
|
serverurl = unix:///var/tmp/monasca-agent-supervisor.sock
|
||||||
|
|
||||||
[unix_http_server]
|
[unix_http_server]
|
||||||
file=/var/tmp/mon-agent-supervisor.sock
|
file=/var/tmp/monasca-agent-supervisor.sock
|
||||||
|
|
||||||
[rpcinterface:supervisor]
|
[rpcinterface:supervisor]
|
||||||
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
||||||
@ -11,35 +11,35 @@ supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
|||||||
minfds = 1024
|
minfds = 1024
|
||||||
minprocs = 200
|
minprocs = 200
|
||||||
loglevel = info
|
loglevel = info
|
||||||
logfile = /var/log/mon-agent/supervisord.log
|
logfile = /var/log/monasca/agent/supervisord.log
|
||||||
logfile_maxbytes = 50MB
|
logfile_maxbytes = 50MB
|
||||||
nodaemon = false
|
nodaemon = false
|
||||||
pidfile = /var/run/mon-agent-supervisord.pid
|
pidfile = /var/run/monasca-agent-supervisord.pid
|
||||||
logfile_backups = 10
|
logfile_backups = 10
|
||||||
|
|
||||||
[program:collector]
|
[program:collector]
|
||||||
command=/usr/local/bin/mon-collector foreground
|
command=/usr/local/bin/monasca-collector foreground
|
||||||
stdout_logfile=NONE
|
stdout_logfile=NONE
|
||||||
stderr_logfile=NONE
|
stderr_logfile=NONE
|
||||||
priority=999
|
priority=999
|
||||||
startsecs=2
|
startsecs=2
|
||||||
user=mon-agent
|
user=monasca-agent
|
||||||
|
|
||||||
[program:forwarder]
|
[program:forwarder]
|
||||||
command=/usr/local/bin/mon-forwarder
|
command=/usr/local/bin/monasca-forwarder
|
||||||
stdout_logfile=NONE
|
stdout_logfile=NONE
|
||||||
stderr_logfile=NONE
|
stderr_logfile=NONE
|
||||||
startsecs=3
|
startsecs=3
|
||||||
priority=998
|
priority=998
|
||||||
user=mon-agent
|
user=monasca-agent
|
||||||
|
|
||||||
[program:monstatsd]
|
[program:monstatsd]
|
||||||
command=/usr/local/bin/monstatsd
|
command=/usr/local/bin/monasca-statsd
|
||||||
stdout_logfile=NONE
|
stdout_logfile=NONE
|
||||||
stderr_logfile=NONE
|
stderr_logfile=NONE
|
||||||
startsecs=3
|
startsecs=3
|
||||||
priority=998
|
priority=998
|
||||||
user=mon-agent
|
user=monasca-agent
|
||||||
|
|
||||||
[group:mon-agent]
|
[group:monasca-agent]
|
||||||
programs=forwarder,collector,monstatsd
|
programs=forwarder,collector,monstatsd
|
||||||
|
24
setup.py
@ -26,7 +26,7 @@ install_requires = [
|
|||||||
'simplejson',
|
'simplejson',
|
||||||
'supervisor',
|
'supervisor',
|
||||||
'tornado',
|
'tornado',
|
||||||
'python-monclient',
|
'python-monascaclient',
|
||||||
]
|
]
|
||||||
|
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
@ -84,7 +84,7 @@ if sys.platform == 'win32':
|
|||||||
self.version = '1.0.0'
|
self.version = '1.0.0'
|
||||||
self.cmdline_style = 'pywin32'
|
self.cmdline_style = 'pywin32'
|
||||||
|
|
||||||
agent_svc = Target(name='Mon Agent', modules='win32.agent', dest_base='ddagent')
|
agent_svc = Target(name='Monasca Agent', modules='win32.agent', dest_base='monascaagent')
|
||||||
|
|
||||||
from monagent.collector.jmxfetch import JMX_FETCH_JAR_NAME
|
from monagent.collector.jmxfetch import JMX_FETCH_JAR_NAME
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ if sys.platform == 'win32':
|
|||||||
'dest_base': "agent-manager",
|
'dest_base': "agent-manager",
|
||||||
# The manager needs to be administrator to stop/start the service
|
# The manager needs to be administrator to stop/start the service
|
||||||
'uac_info': "requireAdministrator",
|
'uac_info': "requireAdministrator",
|
||||||
'icon_resources': [(1, r"packaging\mon-agent\win32\install_files\dd_agent_win_256.ico")],
|
'icon_resources': [(1, r"packaging\monasca-agent\win32\install_files\dd_agent_win_256.ico")],
|
||||||
}],
|
}],
|
||||||
'data_files': [
|
'data_files': [
|
||||||
("Microsoft.VC90.CRT", glob(r'C:\Python27\redist\*.*')),
|
("Microsoft.VC90.CRT", glob(r'C:\Python27\redist\*.*')),
|
||||||
@ -115,11 +115,11 @@ if sys.platform == 'win32':
|
|||||||
}
|
}
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='mon-agent',
|
name='monasca-agent',
|
||||||
maintainer="Tim Kuhlman",
|
maintainer="Tim Kuhlman",
|
||||||
maintainer_email="tim.kuhlman@hp.com",
|
maintainer_email="tim.kuhlman@hp.com",
|
||||||
version=__version__,
|
version=__version__,
|
||||||
description="Collects metrics from the host it is installed on and sends to the monitroing api",
|
description="Collects metrics from the host it is installed on and sends to the monitoring api",
|
||||||
classifiers=[
|
classifiers=[
|
||||||
"Development Status :: 5 - Production/Stable",
|
"Development Status :: 5 - Production/Stable",
|
||||||
"License :: OSI Approved :: Apache Software License",
|
"License :: OSI Approved :: Apache Software License",
|
||||||
@ -129,18 +129,18 @@ setup(
|
|||||||
keywords="openstack monitoring",
|
keywords="openstack monitoring",
|
||||||
install_requires=install_requires,
|
install_requires=install_requires,
|
||||||
setup_requires=setup_requires,
|
setup_requires=setup_requires,
|
||||||
url="https://github.com/hpcloud-mon/mon-agent",
|
url="https://github.com/stackforge/monasca-agent",
|
||||||
packages=find_packages(exclude=['tests', 'build*', 'packaging*']),
|
packages=find_packages(exclude=['tests', 'build*', 'packaging*']),
|
||||||
entry_points={
|
entry_points={
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
'mon-forwarder = monagent.forwarder.daemon:main',
|
'monasca-forwarder = monagent.forwarder.daemon:main',
|
||||||
'mon-collector = monagent.collector.daemon:main',
|
'monasca-collector = monagent.collector.daemon:main',
|
||||||
'monstatsd = monagent.monstatsd.daemon:main',
|
'monasca-statsd = monagent.monstatsd.daemon:main',
|
||||||
'mon-setup = monsetup.main:main'
|
'monasca-setup = monsetup.main:main'
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
data_files=[('share/mon/agent', ['agent.conf.template', 'packaging/supervisor.conf', 'packaging/mon-agent.init']),
|
data_files=[('share/monasca/agent', ['agent.conf.template', 'packaging/supervisor.conf', 'packaging/monasca-agent.init']),
|
||||||
('share/mon/agent/conf.d', glob('conf.d/*'))],
|
('share/monasca/agent/conf.d', glob('conf.d/*'))],
|
||||||
test_suite='nose.collector'
|
test_suite='nose.collector'
|
||||||
)
|
)
|
||||||
|
@ -2,7 +2,7 @@ Tests for the mon agent.
|
|||||||
|
|
||||||
Run with `nosestests -w tests`
|
Run with `nosestests -w tests`
|
||||||
|
|
||||||
For many tests to work an agent.conf must be in either /etc/mon-agent/agent.conf or in the working directory.
|
For many tests to work an agent.conf must be in either /etc/monasca/agent/agent.conf or in the working directory.
|
||||||
|
|
||||||
Many tests require specific applications enabled in order for the test to run, these are skipped by default. See
|
Many tests require specific applications enabled in order for the test to run, these are skipped by default. See
|
||||||
https://nose.readthedocs.org/en/latest/plugins/skip.html for details.
|
https://nose.readthedocs.org/en/latest/plugins/skip.html for details.
|