[Labs-l] Down instances & proposed Nagios changes/issues

208.97.132.231 damian at damianzaremba.co.uk
Sun Sep 30 18:44:33 UTC 2012


Complaining bit
==========
Once again I'm trying to clear up monitoring so we can improve it. The 
following instances are currently reporting as down (some have been for 
quite a while);

* test5 - i-00000026.eqiad.wmflabs
** Ryan - ping/nrpe is restricted from pmtpa to eqiad, is this intended? 
Do we want 1 Nagios instance per Region or centralized monitoring. Not 
an issue currently but needs deciding/sorting before bringing the region 
online.
* wlm-mysql-master - i-0000040c.pmtpa.wmflabs
* wep - i-000000c2.pmtpa.wmflabs
* analytics - i-000000e2.pmtpa.wmflabs
* deployment-backup - i-000000f8.pmtpa.wmflabs
* deployment-feed - i-00000118.pmtpa.wmflabs
* configtest-main - i-000002dd.pmtpa.wmflabs
* deployment-cache-bits02 - i-0000031c.pmtpa.wmflabs
* puppet-abogott - i-00000389.pmtpa.wmflabs
* mobile-wlm2 - i-0000038e.pmtpa.wmflabs
* conventionextension-test - i-000003c0.pmtpa.wmflabs
* lynwood - i-000003e5.pmtpa.wmflabs
* wlm-apache1 - i-0000040b.pmtpa.wmflabs

If any of these are yours could you either;
a) Reply, if it's still pending file recovery from the block storage 
migration (these should all be done).
b) Delete, if it's not used and has no plan for being used.
c) Start, if its purpose is to be used and is just stopped from the last 
outage (block storage migration).
d) Reply, if it needs to be down for some reason (I'll mark it as such 
in monitoring, so it doesn't spam the channel)
e) Reply, if it's online and functioning as expected (there might be a 
security group etc issue)

Current problems with monitoring
=====================
While monitoring everything based on puppet classes makes perfect sense 
for production, currently because most things are not 
packaged/puppetized and we're half dev and half 'semi-production' 
monitoring rather sucks.

Due to the current state of labs I suggest that we add an attribute to 
instance entries in LDAP that allows monitoring to be enabled and 
default to not monitoring.

Now while that may seem silly, currently we can't really enable the 
relay bot without flooding the channel with nonsense which makes 
monitoring redundant.

Actually limiting spam to things we care about (public http instances, 
mysql servers etc) we can easily see when things are actually breaking.

Downsides
---------
We loose a general overview of instances, which causes a more reactive 
approach - however we're no so proactive currently.

Implementation choices
===============
a) Based on puppet classes (current usage)
Pros;
* Monitoring is standard
* Monitoring is automatic

Cons;
* We're suppose to be developing, not standardizing (at this point)
* Important services get masked by dev instances
* We're not really monitoring services (they're not puppetized, yet)

b) Based on user input (possibly stored in ldap as an entry under the host)
Pros;
* People can test/develop monitoring
* We can monitor things not yet puppetized
* We can ignore unimportant things

Cons;
* Monitoring isn't standard
* Monitoring isn't automatic
* We're breaking from production in style

While I'd love to spend my time convincing people using puppet is the 
way forward, quite frankly the current state of the repo is a mess. It's 
partly not usable in labs AFAIK (due to the way parameters are handled 
and is general a mix of bad/confusing code that's whitespace hell.

As we move over to role classes with parametrized classes in modules it 
should be easier and quicker to get changes in.

Until there is a push monitoring is either mostly redundant or we can 
work on improving it. As we have semi-production stuff I think we should 
improve it.

The issues become around if we want to enable user based monitoring and 
treat nagios as a dev environment along side puppet classes, keep puppet 
classes exclusively, use user input exclusively or split the usage into 
2 and have puppet based for 'production' services and user based for dev.

It would be 'easy' to allow 'extra' monitoring data to be specified on 
an instances subpage, or even bang it in LDAP - however this could 
encourage a path that we don't want.

Features I'd like to see
==============
* User access to the web interface (ldap authenticated, based on project 
membership)
* More extensive monitoring of services (think about the beta project 
and how crappy the monitoring for it is currently)
* Optional subscription of alerts on a per project bases (think about 
semi-production stuff where it would be nice to get an email saying it's 
borked)
* Puppetization of the setup
* Expansion of the groups/templates to include everything in puppet 
that's monitored in production (currently it's a very small common list).
* Grouping based on region
* Grouping based on host (this is currently exposed via labsconsole, we 
could scrape it for info or talk to nova directly I guess. Harder than 
the above)
* A bot that doesn't die randomly
* A way to shard monitoring (per region) for when we get so many 
instances it's not possible to have a single crappy box

Features I'd be interested in exploring
=======================
* Using saltstack to grab monitoring info (for example puppet last run 
time, this can be calculated from a state file and pushed back to the 
monitoring instance or polled using minion to minion salt access). SNMP 
traps kinda suck, rely on people updating their puppet clones etc. 
Without adding sudo access to nrpe and writing a script for it there's 
no other way to get root level access to grab the file data. Extending 
saltstack (if we do end up using it widely) and creating a 'feedback 
loop' would be nice
* Being able to monitor misc data/servers (think labsconsole - currently 
things like controllers are monitored on production Nagios, this data 
isn't however relayed to #wikimedia-labs or widly open to the labs 
community). While monitoring infrastructure from within its self isn't a 
good idea generally from a centralized community point it might be nice.
* Adding other software (Graphite) to the 'common use' 'monitoring 
stack'. For example in bots it would be nice to a) monitoring the 
processes/random data in nagios but also b) push metrics out and have 
historical graphs. Downside is graphite isn't currently packaged for 
ubuntu in public repos, it is somewhere for prod though. Also would need 
some form of proxy to determine project name prefix for data coming in.
* Adding a real api to labsconsole to expose the data we have in there 
as well as allowing the creation/configuration and deletion of 
instances. JSON output of SMW searches rather sucks a little due to the 
filtering etc.
* Exposing current status/uptime stats per project and instance on 
labsconsole (not sure how easy it would be to transclude this/images 
from ganglia). The instance pages are mostly useless and uninteresting 
to look at. For example on the beta project it would be interesting to 
be able to say 'it's been up 99.98% this month with a response time of 
xxxms'. With data we can at least have an idea when things are going 
crappy rather than 'it's broken', 'now it's not'.

TL;DR
Our monitoring currently sucks, we need to get to a place where rolling 
out a cluster based on puppet classes gets auto monitored but also allow 
development without masking useful alerts.

I'm not too sure on the perfect solution right now, however I'd love 
some feedback/ideas from everyone else and to publicise what monitoring 
we do have generally.

Damian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.wikimedia.org/pipermail/labs-l/attachments/20120930/aa6a3cec/attachment.html>


More information about the Labs-l mailing list