Openstackでの冗長ロギングとの戦い

内容:neutron-plugin-openvswitch-agentを使用するホストでのauth.logの悲惨な成長率。 原因の分析、除去の方法。 sudo、PAM、およびそのセッションの動作について少し。







何について話しますか? Openstackはクラウド構築プラットフォームです。 Neutronは、nova-networkingと呼ばれる最初の試みよりも高度で機能的であると考えられている、ネットワークを担当するサブシステム、 流行のヒップスターwebdvanolの名前です。 openvswitch-pluginは、Open vSwitchを使用して機能を実装するneutronプラグインです。GREトンネル、ボンディング、ポートミラーリング、iptablesスタイルの仮想スイッチ内のポートにルールを課すなどのスマートなことを実行できるソフトウェアスイッチです。



neutron-openvswitch-plugin-agentは、このプラグインのコンポーネントの1つであり、仮想マシンのネットワークトラフィックの伝送と少なくとも何らかの関係があるすべてのホストで動作します。 つまり、これらはすべて計算ノード(仮想マシンが動作する場所)、ネットワークノード(仮想マシンのインターネットを構成するノード)です。 APIサーバーと他のサービスサーバーのみがリストから除外されます。 クラウドの大部分がコンピューティング+ネットワーキングで構成されていることを考えると、このneutron-openvswitch-plugin-agentがすべてのホストにインストールされていることを少し粗く言うことができます。 Logstashはログを収集するための集中システムであり、Elasticsearchはこれらのログを操作するためのデータベースです。



ソフトウェアの問題にタイムリーに対応するには、すべてのアプリケーションのすべてのログを収集し、監視システムで分析する必要があります。 これについてはすでに説明しました。 ただし、あまりにも良いことがあります。 ホストから収集されたもののほとんどが、次の形式のとんでもないメッセージであることがすぐにわかりました。



サーバーsudo:neutron:TTY =不明。  PWD = /;  USER = root; コマンド= / usr / bin / neutron-rootwrap /etc/neutron/rootwrap.conf ovs-vsctl --timeout = 2 --format = json---columns = name、external_ids list Interface
サーバーsudo:pam_unix(sudo:セッション):(uid = 108)によってユーザーrootに対して開かれたセッション
サーバーsudo:pam_unix(sudo:セッション):ユーザーrootのために閉じられたセッション
サーバーsudo:nova:TTY = unknown;  PWD = /;  USER = root;  COMMAND = / usr / bin / nova-rootwrap /etc/nova/rootwrap.conf chown 107 / var / lib / nova / instances / _base / 421f0808ac5dd178bc574eff6abe8df949edc319
サーバーsudo:pam_unix(sudo:セッション):(root = 107)によってユーザーrootに対して開かれたセッション
サーバーsudo:pam_unix(sudo:セッション):ユーザーrootのために閉じられたセッション




これらのメッセージは2(!)秒ごとに繰り返されました。 エージェントがある各サーバーから。 100台のサーバーごとに、年間730 GBのガベージを受け取ります。 ログはElasticsearchで収集されます。つまり、データベースのテラバイト単位です。 クエリクエリを使用して、幸運を祈ります。



一方では、これらすべてがシャットダウンを要求しています。



一方、疑わしいアクティビティに関する情報を収集し、できる限り慎重に保存する必要があるため、auth.logまたはそのローカルのハードローテーションを完全に無効にすることは悪い判断です。



neutron-plugin-openvswitch-agentに加えて、nova-compute(Openstackのバーチャライザーの制御)も近くに登場しましたが、それほど頻繁ではありません。



PAMとそのセッション



おそらく、多くの読者がsudoを使用しています。 ほとんどの場合、sudoを使用する人の多くは、sudoが起動したときに何が起こるかについて本当に考えていません。



sudoがパスワードを要求すると、ユーザーに認証を要求できます。 ほとんどの場合、パスワードですが、たとえば、私のラップトップでは指紋スキャナーです(ログイン時にパスワードはディスクを復号化するため、ログイン時には使用されませんが、安全なsudoには最適です)。 各プログラムでパスワードなどを操作するためのコードを実装しないために、PAMが作成されました-/ etc / shadowパーサーを記述せずに、ユーザーがパスワードを知っていることを確認できるユーザー認証システム。LDAPやkerberosなど、OpenID、OTP、およびあなたが考えることができる他のクレイジーなもの)。



PAMセッションは、PAMがユーザーログインで実行する一連の儀式です。 とりわけ、auth.logのエントリは儀式に含まれています。



一般的に、PAMセッションは通常の操作には必要ありません。 ユーザーの確認をリクエストし、ユーザーのセッションを作成することは、3つの大きな違いです(3番目は「セッションを閉じる」機能です)。 すべての自尊心のあるプログラムはそれらを使用します。 しかし、私たちの場合、これはいくつかの問題を引き起こします。



PAM、その歴史、および動作原理の詳細については、IBM WebサイトのLinux-PAM System Administration Guide」を参照してください



しかし、なぜそんなに頻繁に?





問題は、sudoおよびpam_sessionからのログのエントリがほぼ2秒ごとに発生していることです。



pam_sessionに関するどのようなメッセージが既に判明しています。 中性子(および少しの新星)が頻繁に何かを実行する必要があるのか​​、さらにはsudoを使用する必要があるのか​​を調べるのはまだですか?



Openstackモデルでは、コンポーネントは、基礎となるテクノロジーの複雑さを学ぶことに特に熱心ではありません。 ovs-vswitchd、libvirtdなどから変更に関する情報を受け取り、長い間「何を意味し、これに対処する必要があるか」を理解する代わりに、はるかに粗雑で効果的なアプローチが使用されます:APIサーバーはいつですか-サブシステムがサービスのステータスを知りたい場合は、メッセージキューを介してリクエストを送信します。サービスは、使用されているプログラムに現在のステータスを要求します。



出力には、サーバーに大量の情報があります。1つ目は、サービスがまだ生きていること(ハートビート)、2つ目は、現在の構成に関する情報です。 ニュアンスなしで、「非常に重要な州の更新を見逃した」。



neutronが適切に機能するには、ポートの状態を知る必要があります。 openvswitch-plugin-agentのコンテキストでは、ovs-vsctl showなどを実行して、すべてのポートの現在のステータスを取得することを意味します。



残念ながら、これには特権が必要です。



特権を管理するために、Openstackは独自のラッパーであるroot-wraperを使用します。これは、実行する引数の通常のsudoよりも微妙なチェックを実行します。 しかし、root-wraper自体は(Openstackのすべてのように)Pythonで書かれており、解釈されたファイルにsuidを付けることはできません。 シンプルでスマートなソリューションとして、root-wraperはsudo root-wraper



と呼ばれます。



そして何をすべきか?



私たちの目標:
  1. sudo経由でnova / neutronユーザーによるルートワープ実行情報を保存しない
  2. 他のすべての情報を保存します。




最初のポイントは、sudoからの記録情報の切断と、pam_sessionからの記録情報の切断という2つの独立した質問になります。



予備:古いディストリビューションを使用している場合、sudoをバージョン1.8.7以降にアップグレードします(Ubuntu 12.04には1.8.3が付属していますが、Ubuntu 14.04ではすべて問題ありません)。



次に-neutronの場合、/ etc / sudoers.d / neutron_sudoersファイルで次の行を置き換えます。

 - Defaults:neutron !requiretty + Defaults:neutron !requiretty, !syslog, !pam_session
      
      





novaの場合、/ etc / sudoers.d / nova_sudoersファイルでの変更は同様です。



マニュアルページのBNFが気に入らない人のためのsudoers構文の簡単なリファレンス-感嘆符は値を反転します。デフォルト:特定のセクションに適用されます。



中性子ポーリング率制御





ポーリングレートを下げましょうか? 実用的な観点から、頻度の減少は「完了」と「のこぎりの変化」の間の間隔の増加を意味します。 2秒が頻繁すぎると思われる場合は、たとえば10秒とすることができます。 しかし、もう少し時間がかかりすぎています(インタラクティブ機能に問題があります)。 同時に、10秒ではあまり節約できません。1日あたり43千件の呼び出し(サーバーごと)ではなく、ほぼ9000件になります。



頻度を減らすために、これはneutron-serverの構成変数report_interval



(秒単位)にreport_interval



ます。



All Articles