Şirketimdeki uygulanabilir, bazı hizmetler için Nagios şablonlarını oluşturmak üzere yapılandırıldı.Bir Jinja yapılandırma dosyası, genel değerler temelinde hizmet denetimleri eklemek için nasıl yapılandırılır?
Örneğin:
define service {
use rabbit-critical-service ; Name of service template to use
service_description RabbitMQ {{ queue_name }} queue size
check_command check_graphite_data!1000!15000!rabbitmq._.rabbitmq_messages.{{ queue_name }}.value
host_name {{ rabbitmq_server }}
notifications_enabled 1
servicegroups rabbitmq
}
şablon, tüm sıraların aynı eşik değerleri ile otomatik olarak kontrolünü oluşturur. Sıra isimleri ansible_playbooks/roles/nagios/defaults/main.yml
altında farklı bir dosyada yapılandırılır ve otomatik olarak Jinja kullanılarak oluşturulur.
Bazı özel çekler için yapılandırmanın farklı eşikleri dahil etmesinin kolay bir şekilde düzenlenmesini mümkün kılma görevini verdim ancak nasıl yapılacağını anlamakta zorlanıyorum.
{% if queue_size_specific_vars is not defined %}
create the check using the current configuration...
{% else %}
create the check using the specific configuration which will be found in the `default/main.yml` file in the newly created generic value "queue_size_specific_vars" which is supposed to include two values, one for warning value and one for critical value.
{% endif %}
Benim sorulara
şunlardır:
- How do I achieve my goal (while taking into consideration two values instead of one)?
- I'm not sure this is the best way to achieve my goal, do you know a better way to do so?
Düzenleme # 1:
Öyle görünüyor böyle service_check şablon şey ekleme :
böyle bir şey düşündü Kendimi düzgün bir şekilde açıklamadım, size şablonun daha büyük bir kısmını göstereyim:
{% for queue_name in queues %}
define service {
use rabbit-critical-service ; Name of service template to use
service_description RabbitMQ {{ queue_name }} queue active consumers
check_command check_graphite_data!0.9!0.9!rabbitmq._.rabbitmq_consumers.{{ queue_name }}!reverse
host_name {{ rabbitmq_server }}
notifications_enabled 1
servicegroups rabbitmq
max_check_attempts 4
}
{% if vars_production is not defined %}
define service {
use generic-service
service_description RabbitMQ {{ queue_name }} queue read/write ratio
check_command check_graphite!'http://{{ graphite_server }}:{{ graphite_port }}/render/?from=-10minutes&target=scale(divideSeries(offset(prod-rabbit-1.rabbitmq._.rabbitmq_messages.{{queue_name}}.value,1),offset(derivative(sumSeries(prod-rabbit-1.rabbitmq._.rabbitmq_deliver_get.{{queue_name}})),1)),100)&rawData'!1500!2000!avg
host_name {{ rabbitmq_server }}
notifications_enabled 1
servicegroups rabbitmq
max_check_attempts 4
}
{% endif %}
define service {
use rabbit-critical-service ; Name of service template to use
service_description RabbitMQ {{ queue_name }} queue size
check_command check_graphite_data!1000!15000!rabbitmq._.rabbitmq_messages.{{ queue_name }}.value
host_name {{ rabbitmq_server }}
notifications_enabled 1
servicegroups rabbitmq
}
{% endfor %}
Uygulamam gereken değişiklik, ana bilgisayar adına değil, sıraya göre olmalıdır, çünkü ansible "yalnızca" bilir ve "bilmez" kuyrukları "bilir".
Sırasıyla "RabbitMQ {{queue_name}} sıra boyutunu" belirleme seçeneğine ihtiyacımız var ve tüm geri kalan öğeler varsayılan değerlere sahip olacak. Yapmam beklenen değişiklik, şablon dosyasında yer almalıdır.
Örnek:
{% if special_queue_exists %}
do ....
{% else %}
create it in the normal method
{% endif %}
Düzenleme # 2: Zaten bütün sıraları içeren dosya var, bunu diyelim :
Müdürüm beni bu andıran bir şekilde bunu yapmak isteyen dosya "queues_file". Ve belirli kontrol değerlerinin bir listesini içerecek başka bir dosya oluşturmamı istiyor (uyar ve kritik), bu dosyayı "specific_values" olarak adlandıralım.
Ve sonra böyle bir şey yapmak: o zaman
queues_with_specific_metrics:
- entities:
- warn: "1000"
- crit: "20000"
Ve (döngü itibaren) üzerinde çalıştırıyorum kuyruk belirli tertibata sahip olursa "specific_values" dosya içinde ve eğer öyleyse kontrol etmek, daha sonra "specific_values" dosyasındaki ayarlar varsayılan olanları geçersiz kılar. Sonra böyle bir şey yapabilirsiniz:
{{ queues_with_specific_metrics.queue.warn | default(1000) }}
Ben yanıtlayıcı 've Jinja acemi değilim ve ben değil bunun için üzgünüm, bu yüzden anlaşılabilir olmamın sebebi budur.
Edit # 3: Önerilerinizi yaptığınız gibi düzenledim, ancak if deyimini nasıl yazacağımı bilmiyorum ...
Varsayılanlar/main.yml, tüm sıra adlarının bir listesini içerir.
spec_params.yml
adlı yeni bir dosya açtım ve varsayılan klasörde main.yml
dosyası olarak bulunuyor.
spec_params.yml
dosyası:
nagios_specific_queue_params:
queue1: {}
entities:
warn: 2000
crit: 20000
Ve rabbitmq.cfg.j2
alakalı bölümü:
fatal: [monitoring] => {'msg': "TypeError: argument of type 'StrictUndefined' is not iterable", 'failed': True}
fatal: [monitoring] => {'msg': 'One or more items failed.', 'failed': True, 'changed': False, 'results'
herhangi bir fikir neden:
{% if queue_name in nagios_specific_queue_params %}
define service {
use rabbit-critical-service ; Name of service template to use
service_description RabbitMQ {{ queue_name }} queue size
check_command check_graphite_data!{{ queues[queue_name] ['warn'] |default(1000) }}!{{ queues[queue_name] ['crit'] | default(15000) }}!rabbitmq._.rabbitmq_messages.{{ queue_name }}.value
host_name {{ rabbitmq_server }}
notifications_enabled 1
servicegroups rabbitmq
}
{% else %}
define service {
use rabbit-critical-service ; Name of service template to use
service_description RabbitMQ {{ queue_name }} queue size
check_command check_graphite_data!1000!15000!rabbitmq._.rabbitmq_messages.{{ queue_name }}.value
host_name {{ rabbitmq_server }}
notifications_enabled 1
servicegroups rabbitmq
}
{% endif %}
Ben şu hatayı olsun taktik kitabı çalıştırdığınızda başarısız? peşin
Teşekkür rolleri // varsayılan içinde
Hala neye ulaşmaya çalıştığınızı anlamıyorum. Neden "special_queue_exists" yapıyorsun?Farklı olan ya da bu "farklı" sıra mevcut olduğunda ne olması gerektiğine dair bir örnek olacağını düşünüyorum. – shaps
Düzenleme # 2'yi tekrar kontrol edin, tekrar teşekkürler! –
Tam olarak söylediklerini yapabilirsin, ama 'queues_with_specific_metrics [queue] [' warn '] | varsayılan (1000) '(" Sıraya "yazılması, döngüden aldığınız sıra adıdır). Bu, queue_with_specific_metrics – shaps