C ++ uygulamalarını izleme


10

Yeni bir merkezi izleme çözümü (Zenoss) uyguluyoruz. Sunucuları, ağları ve Java programlarını birleştirmek SNMP ve JMX ile çok kolaydır.

Ancak soru, büyük, heterojen (Solaris x86, RHEL Linux, Windows) ortamlarda özel C ++ uygulamalarını izlemek ve yönetmek için en iyi uygulamalar nelerdir?

Gördüğüm olasılıklar:

  1. Net SNMP
  • Avantajları
  1. her sunucuda tek, merkezi arka plan programı
  2. iyi bilinen standart
  3. izleme çözümlerine kolay entegrasyon
  4. zaten sunucularımızda Net SNMP artalan süreçleri çalıştırıyoruz
  • Dezavantajları:
    1. karmaşık uygulama (MIB'ler, Net SNMP kütüphanesi)
    2. C ++ geliştiricileri için yeni teknoloji
  • rsyslog
    • Avantajları
    1. her sunucuda tek, merkezi arka plan programı
    2. iyi bilinen standart
    3. izleme çözümlerine bilinmeyen entegrasyon (metne dayalı uyarılar yapabildiklerini biliyorum, ancak bellek kullanımı, kuyruk derinlikleri, diş kapasitesi vb. gibi telemetri göndermek için ne kadar iyi çalışır)
    4. basit uygulama
  • Dezavantajları:
    1. olası entegrasyon sorunları
    2. C ++ geliştiricileri için biraz yeni teknoloji
    3. izleme sağlayıcılarını değiştirirsek olası taşıma sorunları
    4. muhtemelen bir ad-hoc iletişim protokolü (veya RFC5424 yapılandırılmış veri kullanarak) içerir; Zenoss'un özel Zenpack kodlaması olmadan bunu destekleyip desteklemediğini bilmiyorum)
  • Gömülü JMX (bir JVM gömün ve JNI kullanın)
    • Avantajları
    1. Java ve C ++ için tutarlı yönetim arayüzü
    2. iyi bilinen standart
    3. izleme çözümlerine kolay entegrasyon
    4. biraz basit bir uygulama (bunu bugün başka amaçlar için yapıyoruz)
  • Dezavantajları:
    1. karmaşıklık (JNI, yerel C ++ ve Java arasında thunking katmanı, temel olarak yönetim kodunu iki kez yazıyor)
    2. olası kararlılık sorunları
    3. çok daha fazla bellek kullanan her işlemde bir JVM gerektirir
    4. JMX, C ++ geliştiricileri için yeni bir teknolojidir
    5. Her işlemin kendi JMX portu vardır (her makinede çok fazla işlem yürütürüz)
  • Yerel JMX arka plan programı, süreçler ona bağlanır
    • Avantajları
    1. her sunucuda tek, merkezi arka plan programı
    2. Java ve C ++ için tutarlı yönetim arayüzü
    3. iyi bilinen standart
    4. izleme çözümlerine kolay entegrasyon
  • Dezavantajları:
    1. karmaşıklık (temel olarak yönetim kodunu iki kez yazmak)
    2. böyle bir arka plan programı bulmalı veya yazmalı
    3. JMX arka plan programı ve C ++ işlemi arasında bir protokole ihtiyaç var
    4. JMX, C ++ geliştiricileri için yeni bir teknolojidir
  • CodeMesh JunC ++ iyonu
    • Avantajları
    1. Java ve C ++ için tutarlı yönetim arayüzü
    2. iyi bilinen standart
    3. izleme çözümlerine kolay entegrasyon
    4. paylaşılan JVM modunda çalıştırıldığında her sunucudaki tek, merkezi arka plan programı
    5. biraz basit uygulama (kod üretimi gerektirir)
  • Dezavantajları:
    1. karmaşıklık (kod oluşturma, proxy oluşturmak için bir GUI ve birkaç tur ince ayar gerektirir)
    2. olası JNI kararlılık sorunları
    3. her işlemde çok daha fazla bellek kullanan (gömülü modda) bir JVM gerektirir
    4. Solaris x86'yı (anlaşma kesici) desteklemez
    5. Solaris x86'yı desteklese bile, olası derleyici uyumluluğu sorunları vardır (Solaris'te STLPort ve Forte'un tek bir kombinasyonunu kullanıyoruz
    6. gömülü modda çalıştırıldığında her işlemin kendi JMX bağlantı noktası vardır (her makinede çok sayıda işlem yürütürüz)
    7. muhtemelen C ++ dışındaki işlemler için paylaşılan bir JMX sunucusunu engeller (?)

    Eksik olduğum makul standartlara sahip, basit bir çözüm var mı?

    Başka hiçbir makul çözüm göz önüne alındığında, bu çözümlerden hangisi genellikle özel C ++ programları için kullanılır?

    Benim içimde hissettiğim şey, Net SNMP'nin insanların bunu nasıl yaptığıdır, ancak bir karar vermeden önce başkalarının girdilerini ve deneyimlerini istiyorum.

    Yanıtlar:


    1

    Zenoss'a çok aşina değilim ama bu tür bir şey için nagios kullandığımızda c / c ++ işleminin bir soket üzerinde dinlemesini ve tanılama ve durum bilgisini teslim eden özel bir nagios eklentisi yazmasını isterdik.

    İlk adım, işleminizi dinletmek için kullanmak istediğiniz lib'i seçmektir .. Bunun için C ++ Socket Library gibi bir şey yapacaktır. Orada karmaşık bir şey yok .. sadece süreci dinlet.

    Ardından, belirli bir uyaran verildiğinde sürecinizin göndereceği yanıtı tanımlamanız gerekir. Bu gerçekten (en azından nagios ile) 'hizmeti' tanımlamak ve ardından sürece o hizmete karşılık gelen sinyali göndermek anlamına geliyordu. Yapabileceğiniz en basit şey, çalışan bir sürece başarılı bir şekilde bağlanıp bağlanamayacağınızı görmek için bir 'işlem ping' oluşturmaktır. Özel nagios eklentisinden daha fazlasını yaparsanız en azından işlem hala hayatta demektir.

    Yapabileceğiniz çok daha karmaşık şeyler var ama fikir yeterince basit. Yürütülebilir dosyalarınızdan birini (veya tümünü) her oluşturduğunuzda, nesnelerin içinde kapsüllenmiş kendi küçük işlem dinleme kodunuzu yazabilir ve standart c ++ öğelerinize standart bir şekilde çekebilirsiniz.

    Benim anlayış Zenoss yapabilirsiniz olduğunu da .

    Muhtemelen Zenoss python olduğundan, dinleme c ++ yürütülebilir programınıza bağlanmak için Twisted gibi bir şey kullanarak özel eklentinizi yazacaksınız .


    1

    Bu ürünleri tanıdığınız değilim ama windows için perfmon kullanarak bellek tüketimini izliyorum, programınızın bellek sızıntıları içerip içermediğini gösteren disk belleği olmayan havuz hataları gibi bazı özel sayaçlar var, küçük olabilirler ve bu nedenle uzun sürebilirler. izlemek için zaman ama bence bu basit bir kontrol yöntemi.

    Pencerelerde, uzaktan bile perfmon kullanarak çok şey yapabilir veya aynı sayaçlara takmak için WMI'dan yararlanabilir ve eylemler gerçekleştirmek için üzerinde bazı otomasyonlar yapabilirsiniz (wmi'de).


    1

    Son zamanlarda sizin gibi aynı süreci yaşadığımız için bunu alıyorum: C / C ++ hizmetlerinden metriklerin açığa çıkmasını ve daha sonra uzaktan izlenmesini sağlayan hafif, engellemeyen, açık kaynaklı bir çözüm arıyorduk ( biz yaklaşık ~ 3000).

    SNMP en yakına geldi ancak kaynağa ve izleme sistemine entegrasyon bir acıdır ve gerçek zamanlı süreçlerimiz için uygun değildir.

    Sonunda, CMX adında , paylaşılan bellek teknolojisini kullanan ve onu açık kaynak yapan yeni bir çözüm geliştirmeye karar verdik . Buradan kontrol edebilirsiniz: www.cern.ch/cmx .


    0

    Ben şeylerin c ++ tarafı süper aşina değilim ama Java biz CodaHale metrikleri Grafit ile birlikte kullanın . CodaHale, metrikleri örneğin yerel belleğinde örnek başına depolar, ardından metrikleri dakikada bir grafit sunucuya aktarmak için bir arka plan iş parçacığı kullanır (yapılandırılabilir). Grafitte, hatalı örnekleri tanımlamanın yanı sıra örnekler arasında toplayabiliriz. Bir grafit kümesini korumanın karmaşıklığını istemiyorsanız HostedGraphite'ı kullanabilirsiniz .

    Bu kurulum, metriklerin toplanması veya raporlanması için tek bir hata noktası anlamına gelmez (düğümler üzerinde zamana dayalı toplama ve dağıtılmış grafit kümesinde (veya barındırılan grafit) gerçekleşir.

    Son olarak, Seyren'i izleme verilerinin üstünde uyarılar sağlamak için kullanabilirsiniz .


    0

    Windows kullanıyorsanız, olay günlüğüne yazma eğilimindesiniz ve ardından olayları okumak için bir WMI veya benzeri bir işlem kullanırsınız. İzleme istiyorsanız, uygulamanıza performans izleme sayaçları ekler ve perfmon'un bunları okumasına izin verirsiniz. Her ikisi de Windows'taki sistem hizmetleridir.

    Linux'ta açıkçası daha esnek olma eğilimindedir, ancak her zaman nagios tarzı monitörlere veri gönderen özel bir soketle nagios tarzı monitörlerin uygulandığını gördüm.

    Tüm bunlar, SMNP'nin kullanıldığı birkaç yer gördüm ve açıkçası, bunu kullanmamanın bir nedenini göremiyorum - özellikle tamamen heterojen bir ortam çalıştırıyorsanız.

    Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
    Licensed under cc by-sa 3.0 with attribution required.