Add mtail role for thot
							parent
							
								
									7dc4c33deb
								
							
						
					
					
						commit
						e7888a6b9c
					
				| 
						 | 
				
			
			@ -63,3 +63,8 @@
 | 
			
		|||
- hosts: redisdead.adm.crans.org
 | 
			
		||||
  roles:
 | 
			
		||||
    - prometheus-node-exporter-postfix
 | 
			
		||||
 | 
			
		||||
# Monitor logs with mtail
 | 
			
		||||
- hosts: thot.adm.crans.org
 | 
			
		||||
  roles:
 | 
			
		||||
    - mtail
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
---
 | 
			
		||||
- name: Restart mtail
 | 
			
		||||
  service:
 | 
			
		||||
    name: mtail
 | 
			
		||||
    state: restarted
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
---
 | 
			
		||||
- name: Install mtail
 | 
			
		||||
  apt:
 | 
			
		||||
    update_cache: true
 | 
			
		||||
    name: mtail
 | 
			
		||||
  register: apt_result
 | 
			
		||||
  retries: 3
 | 
			
		||||
  until: apt_result is succeeded
 | 
			
		||||
 | 
			
		||||
- name: Configure mtail
 | 
			
		||||
  template:
 | 
			
		||||
    src: default/mtail.j2
 | 
			
		||||
    dest: /etc/default/mtail
 | 
			
		||||
  notify: Restart mtail
 | 
			
		||||
 | 
			
		||||
- name: Copy mtail configurations
 | 
			
		||||
  template:
 | 
			
		||||
    src: "mtail/{{ item }}.j2"
 | 
			
		||||
    dest: "/etc/mtail/{{ item }}"
 | 
			
		||||
  loop:
 | 
			
		||||
    - dhcpd.mtail
 | 
			
		||||
  notify: Restart mtail
 | 
			
		||||
 | 
			
		||||
- name: Indicate role in motd
 | 
			
		||||
  template:
 | 
			
		||||
    src: update-motd.d/05-service.j2
 | 
			
		||||
    dest: /etc/update-motd.d/05-mtail
 | 
			
		||||
    mode: 0755
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
# {{ ansible_managed }}
 | 
			
		||||
# Set to 1 to start Mtail at boot.
 | 
			
		||||
ENABLED=1
 | 
			
		||||
 | 
			
		||||
## Log processing.
 | 
			
		||||
 | 
			
		||||
# List of files to monitor (mandatory).
 | 
			
		||||
LOGS=/var/log/cablage/global.log
 | 
			
		||||
 | 
			
		||||
## Metrics exporting.
 | 
			
		||||
 | 
			
		||||
# HTTP port to listen on. (default "3903")
 | 
			
		||||
#PORT=3903
 | 
			
		||||
 | 
			
		||||
# Path to collectd unixsock to write metrics to.
 | 
			
		||||
#COLLECTD_SOCKETPATH=
 | 
			
		||||
 | 
			
		||||
# Host:port to graphite carbon server to write metrics to.
 | 
			
		||||
#GRAPHITE_HOSTPORT=
 | 
			
		||||
 | 
			
		||||
# Host:port to statsd server to write metrics to.
 | 
			
		||||
#STATSD_HOSTPORT=
 | 
			
		||||
 | 
			
		||||
# Interval between metric pushes, in seconds (default 60)
 | 
			
		||||
#METRIC_PUSH_INTERVAL=
 | 
			
		||||
 | 
			
		||||
# Extra command-line arguments to pass to the server.
 | 
			
		||||
EXTRA_ARGS=""
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,143 @@
 | 
			
		|||
# {{ ansible_managed }}
 | 
			
		||||
# Copyright 2011 Google Inc. All Rights Reserved.
 | 
			
		||||
# This file is available under the Apache license.
 | 
			
		||||
 | 
			
		||||
# Define the exported metric names.  The `by' keyword indicates the metric has
 | 
			
		||||
# dimensions.  For example, `request_total' counts the frequency of each
 | 
			
		||||
# request's "command".  The name `command' will be exported as the label name
 | 
			
		||||
# for the metric.  The command provided in the code below will be exported as
 | 
			
		||||
# the label value.
 | 
			
		||||
counter dhcpd_request_total by command
 | 
			
		||||
counter dhcpd_config_file_errors
 | 
			
		||||
counter dhcpd_peer_disconnects
 | 
			
		||||
counter dhcpd_dhcpdiscovers
 | 
			
		||||
counter dhcpd_bind_xid_mismatch
 | 
			
		||||
counter dhcpd_duplicate_lease
 | 
			
		||||
counter dhcpd_bad_udp_checksum
 | 
			
		||||
counter dhcpd_unknown_subnet
 | 
			
		||||
counter dhcpd_dhcpdiscover_nofree by network
 | 
			
		||||
counter dhcpd_unknown_lease by ip
 | 
			
		||||
counter dhcpd_update_rejected
 | 
			
		||||
counter dhcpd_failover_peer_timeout
 | 
			
		||||
counter dhcpd_ip_already_in_use
 | 
			
		||||
counter dhcpd_ip_abandoned by reason
 | 
			
		||||
counter dhcpd_invalid_state_transition
 | 
			
		||||
counter dhcpd_negative_poolreq by pool
 | 
			
		||||
counter dhcpd_lease_conflicts
 | 
			
		||||
 | 
			
		||||
# The `syslog' decorator defines a procedure.  When a block of mtail code is
 | 
			
		||||
# "decorated", it is called before entering the block.  The block is entered
 | 
			
		||||
# when the keyword `next' is reached.
 | 
			
		||||
def syslog {
 | 
			
		||||
  /^(?P<date>(?P<legacy_date>\w+\s+\d+\s+\d+:\d+:\d+)|(?P<rfc3339_date>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+[+-]\d{2}:\d{2}))/ +
 | 
			
		||||
  /\s+(?:\w+@)?(?P<hostname>[\w\.-]+)\s+(?P<application>[\w\.-]+)(?:\[(?P<pid>\d+)\])?:\s+(?P<message>.*)/ {
 | 
			
		||||
    # If the legacy_date regexp matched, try this format.
 | 
			
		||||
    len($legacy_date) > 0 {
 | 
			
		||||
      strptime($2, "Jan _2 15:04:05")
 | 
			
		||||
    }
 | 
			
		||||
    # If the RFC3339 style matched, parse it this way.
 | 
			
		||||
    len($rfc3339_date) > 0 {
 | 
			
		||||
      strptime($rfc3339_date, "2006-01-02T15:04:05.999999999Z07:00")
 | 
			
		||||
    }
 | 
			
		||||
    # Call into the decorated block
 | 
			
		||||
    next
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Define some pattern constants for reuse in the patterns below.
 | 
			
		||||
const IP /\d+(\.\d+){3}/
 | 
			
		||||
const MATCH_IP /(?P<ip>/ + IP + /)/
 | 
			
		||||
const MATCH_NETWORK /(?P<network>\d+(\.\d+){1,3}\/\d+)/
 | 
			
		||||
const MATCH_MAC /(?P<mac>([\da-f]{2}:){5}[\da-f]{2})/
 | 
			
		||||
    
 | 
			
		||||
@syslog {
 | 
			
		||||
    # Request
 | 
			
		||||
    /(balanced|balancing|BOOTREPLY|BOOTREQUEST|DHCPACK|DHCPDECLINE|DHCPDISCOVER|DHCPINFORM|DHCPNAK|DHCPOFFER|DHCPRELEASE|DHCPREQUEST)/ {
 | 
			
		||||
        # The lowercased name of the command matched in the regex is used to
 | 
			
		||||
        # count the frequency of each command.  An external collector can use
 | 
			
		||||
        # this to compute the rate of each command independently.
 | 
			
		||||
        dhcpd_request_total[tolower($1)]++
 | 
			
		||||
 | 
			
		||||
        # DHCP Discover
 | 
			
		||||
        /DHCPDISCOVER from / + MATCH_MAC {
 | 
			
		||||
            # Counts the discovery requests.
 | 
			
		||||
            dhcpd_dhcpdiscovers++
 | 
			
		||||
 | 
			
		||||
            /network / + MATCH_NETWORK + /: no free leases/ {
 | 
			
		||||
                # If the range is full, your clients may be having a bad time.
 | 
			
		||||
                dhcpd_dhcpdiscover_nofree[$network]++
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Config file errors
 | 
			
		||||
    /Configuration file errors encountered -- exiting/ {
 | 
			
		||||
        # Counting config parse errors can he useful for detecting bad config
 | 
			
		||||
        # pushes that made it to production.
 | 
			
		||||
        dhcpd_config_file_errors++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Peer disconnects
 | 
			
		||||
    /peer ([^:]+): disconnected/ {
 | 
			
		||||
        dhcpd_peer_disconnects++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # XID mismatches
 | 
			
		||||
    /bind update on / + IP + / got ack from (?P<group>\w+): xid mismatch./ {
 | 
			
		||||
        dhcpd_bind_xid_mismatch++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Duplicate lease
 | 
			
		||||
    /uid lease / + MATCH_IP + / for client / + MATCH_MAC + / is duplicate on / + MATCH_NETWORK {
 | 
			
		||||
        dhcpd_duplicate_lease++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Bad UDP Checksum
 | 
			
		||||
    /(?P<count>\d+) bad udp checksums in \d+ packets/ {
 | 
			
		||||
        dhcpd_bad_udp_checksum += $count
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Unknown subnet
 | 
			
		||||
    /DHCPDISCOVER from / + MATCH_MAC + / via / + IP + /: unknown network segment/ {
 | 
			
		||||
        dhcpd_unknown_subnet++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Unknown lease
 | 
			
		||||
    /DHCPREQUEST for / + IP + /\(/ + IP + /\) from / + MATCH_MAC + / via / + IP + /: unknown lease / + MATCH_IP {
 | 
			
		||||
        dhcpd_unknown_lease[$ip]++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Update rejected
 | 
			
		||||
    /bind update on \S+ from \S+ rejected: incoming update is less critical than the outgoing update/ {
 | 
			
		||||
        dhcpd_update_rejected++
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /timeout waiting for failover peer \S+/ {
 | 
			
		||||
        dhcpd_failover_peer_timeout++
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /ICMP Echo reply while lease / + IP + /valid/ {
 | 
			
		||||
        dhcpd_ip_already_in_use++
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /unexpected ICMP Echo reply from / + IP {
 | 
			
		||||
        dhcpd_ip_already_in_use++
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /Abandoning IP address / + IP + /: (?P<reason>.*)/ {
 | 
			
		||||
        dhcpd_ip_abandoned[$reason]++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /bind update on \S+ from \S+ rejected: / + IP + /: invalid state transition/ {
 | 
			
		||||
        dhcpd_invalid_state_transition++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /peer (?P<pool>[^:]+): Got POOLREQ, answering negatively!/ {
 | 
			
		||||
        dhcpd_negative_poolreq[$pool]++
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /Lease conflict at/ {
 | 
			
		||||
        dhcpd_lease_conflicts++
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
#!/usr/bin/tail +3
 | 
			
		||||
# {{ ansible_managed }}
 | 
			
		||||
[0m> [38;5;82mmtail[0m a été déployé sur cette machine. Voir [38;5;6m/etc/mtail/[0m.
 | 
			
		||||
		Loading…
	
		Reference in New Issue