Puppet + Opsview:テンプレートベースの自動監視

挑戦する



監視にはOpsviewを使用し、構成管理にはPuppetを使用します。 Opsviewには、特定のタイプのホストに対して特定のサービスチェックを定義できるホストテンプレートがあります。 たとえば、 IISテンプレートを持つホストの場合、現在の接続数や平均接続速度など、このホストのすべての種類のIISパラメーターがチェックされます。

マニフェストで割り当てられているクラスに応じて、ホストにテンプレートを自動的に割り当てるタスクがありました。 これはすべて、いつものように、自動化と怠のニーズを満たすためです。 最終目標-クラスをホストに割り当て、約15分後に返さ​​れ、既にIISがインストールされ、構成済みのサイト(既に展開されたコンテンツを含むオプションとして)で、すべて監視され、これらのデータに基づいてグラフが構築され、アラートは何かを知らせます起こった。







難しさ



ここでの主な困難は、いつものように、誰も私のためにこれをしなかったことです。 インフラストラクチャ用のワンクリックIIS監視モジュールはありません。 実際の難しさは、Opsview構成を制御するモジュールに、別のモジュールでサイトを作成したことを伝え、監視する必要があるURIパラメーターとホストテンプレートの名前を渡す方法にあります(この場合、これは少なくともIISテンプレートになります)。 私の試みと試行には以下が含まれました。



グローバル変数



パペットスコープ(ロシア語など)が機能しないため、グローバル変数に追加することはできず、コピーのみを作成できます。テンプレート名は無数にあるため、蓄積する必要があります。 。



Rubyテンプレート



テンプレートを介してグローバル変数を実装するオプションもあります(これは、対応する値を割り当てるブラケット<%でruby code%>を記述する場合ですが、これはバグと見なされ、将来のPuppetバージョンで修正できます(他のスコープで変数値を設定できるチップを削除しました) 。



プラス署名



「〜>」を使用してリソースパラメータを割り当てる可能性をすばやく確認しました-値が一緒に接着されているようですが、再びすべてがグローバル変数になったか、このホストにテンプレートを追加するすべての場所で監視しているホストを記述しました、このリソースの初期パラメーターを常に知ることはできないため、これは完全に可能ではありませんが、それらは必須です-たとえば、メインクラスopsview :: nodeなどで形成されるホスト名)。



プロバイダーの変更



Opsview管理プロバイダーは、正しく実装された場合に正しい決定であるかもしれないことを完了することを考えていました(ここでも、すべての場所でリソース全体を宣言する必要がある可能性が高いと思われます)。



実装



環境は異種(ロシア語では「zoo」)であるため、少なくともWindowsとLinuxの観点から考える必要があります。





FACTER_host_temates = IIS Server; Windows Server WMI; Basic Networkの形式で必要なノードに環境変数を設定すると、次のパペットの実行はマニフェストでグローバル変数として使用できるファクトになります。これが必要なことです! 別のプロバイダーを作成しませんでしたが、美しいwindows_envモジュールを使用する新しいタイプをすぐに作成しました。 すべてが非常に単純です。リソースの名前は一意でなければならないことに注意する必要があります。したがって、追加のパラメーターを使用する必要があります(デフォルトでは、環境変数の名前はリソースの名前から取得されます)。 実際のリソース宣言では、リソース名を使用して環境変数の名前を渡すことができます。 標準のWindows「;」がセパレータとして使用されます



Linux



タスクの2番目の部分は同じことをすることでしたが、Linuxの下で行われました。 nixの環境変数の管理は簡単で、パペットリソースにbashコマンドをラップするのに複雑なことは何もないことを知っています。松葉杖。」 これを行うには、デフォルトのプロファイルにファイルを作成します。このファイルでは、すべての値を持つ環境変数が(コロンを介して)エクスポートされます。 これらはすべて正しいオペレーティングシステムに分解され、再び何も開始されないようにチェックが追加されました。



結果はそのようなマニフェストです
define fact ($fact_name=$name, $value, $ensure = present) { case $::osfamily { 'windows': { windows_env { "${fact_name}:${value}": variable => "FACTER_${fact_name}", ensure => $ensure, mergemode => insert, value => $value, notify => Service['puppet'], #Restart service after environment update } } 'RedHat': { $splitvalue = join($value,":") file { "/etc/profile.d/FACTER_${fact_name}.sh": ensure => present, content => "export FACTER_${fact_name}=\"${$splitvalue}\"", mode => 775, } exec { "FACTER_${fact_name}=${splitvalue}": command => "/bin/bash -c \"source /etc/profile\"", unless => "/bin/echo \${FACTER_${fact_name}} | /bin/grep -q \"${splitvalue}\"", subscribe => File["/etc/profile.d/FACTER_${fact_name}.sh"], } } default: { case $::operatingsystem { 'Gentoo': { #No Gentoo in production. } } } } }
      
      







パッケージでのリソースの使用:: iisクラス
 fact {"host_templates_iis_base": fact_name => "host_templates", value => ['Web Cluster','OS - Windows Server 2008 WMI - IIS Server'], ensure => present, }
      
      







メインクラスopsview ::ノード
 #       if $::kernel == "windows" { $delimeter=";" } else { $delimeter=":" } #       if $::host_templates { #    ,    - $host_templates = split($::host_templates,$delimeter) } else { $host_templates =[] } #  $host_templates   null    . ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #      opsview_monitored @@opsview_monitored { "$::hostname": ip => $ip, hosttemplates => $host_templates, hostattributes => $hostattributes, hostgroup => $hostgroup, enable_snmp => $enable_snmp, snmp_community => $snmp_community, snmp_port => $snmp_port, notification_interval => $notification_interval, servicechecks => $servicechecks, icon_name => $icon_name, keywords => $keywords, reload_opsview => "1", require => [Class['packages::opsview']], }
      
      







おわりに



タスクが完了すると、この実装により、テンプレートの名前を配列に蓄積して適用できます。

短所:ファクトは次のパペットの実行時にのみ利用可能になりますファクトがメインクラスopsview ::ノードで正しく処理される(または存在しない)場合、大きな問題ではありません。 これらのパラメーターは、低い間隔で(追加される場合)追加されます。

利点:ファクトはopsviewテンプレートだけでなく、属性、キーワード、その他の累積的なパペットパラメーターの追加など、他の多くのタスクにも使用できます。 Puppetファクトは、手動でインストールできるだけでなく、コードを使用してインストールすることもできます。これにより、多くの興味深いことの基礎としてそれらを使用できます。



いつものように、この決定は完全に機能しているものの、最も「正しい」決定のふりをするものではなく、この問題について誰かが考えている場合は、コメントを歓迎します。 多くの場合、問題が解決しないと解決策がまだ存在しないため、既存のpuppetlabs /レジストリはエスケープの有無にかかわらず「\」文字を含むキーを使用したくないため、最近、Windowsレジストリを管理する独自のプロバイダを作成する必要がありました。

誰かがこの投稿に興味を持っているなら、構成の管理における私の経験を喜んで共有します。



All Articles