データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

FluentdとObjectRocketを使用したハイブリッドクラウドへのログイン

FluentdとObjectRocketを使用したハイブリッドクラウドへのログイン

この投稿はHartHooverとRyanWalkerが共同で作成したものです

最近、Rackspace DevOps Automationチームは、NewRelicからRackspaceサポートにアラートを送信するサービスを発表しました。これらのアラートは、DevOpsエンジニアが応答するためのチケットを生成するため、アラートが午前3時に生成されたときに、お客様はぐっすりと眠ることができます。お客様の環境について収集された他のデータポイントと組み合わせると、エンジニアは問題がどこにあるかを特定し、適切な行動方針を実行します。

このサービスのインフラストラクチャを設計しているときに、New Relicが通信できるパブリックエンドポイントを維持しながら、セキュリティのためにRackspace内部システムへのアクセスを制限する必要があるという、一般的ですが興味深い問題に遭遇しました。私たちのソリューションは、パブリックAPIエンドポイントとプライベートワーカーが互いに完全に分離されたサービスを設計することでした。パブリックAPIエンドポイントは、New Relicからアラートを受信し、キューとして機能するObjectRocketRedisインスタンスにアラートを渡します。ワーカーサービスはRackConnectファイアウォールの背後で内部的に実行され、キューからメッセージをプルしてアラートを作成します。

これは環境を非常にうまく分割しますが、ログの集約に関して問題を引き起こしました。プライベート環境内でElasticSearch/Kibanaスタックを実行します。ファイアウォールの背後では、fluentdを使用してログをElasticSearchに直接プッシュします。ファイアウォールの外側では、EKスタックに到達できません。これを解決するために、fluentdを使用して、パブリックAPIサービスからObjectRocketMongoDBインスタンスにログをプッシュし始めました。内部的には、fluentdを再度使用して、ログをObjectRocketからElasticSearchにプルします。これにより、環境のすべての活動を1か所で行うことができます。

Fluentdとは何ですか?

Fluentdは、データを可能な限りJSONとして構造化しようとするオープンソースのデータコレクターです。これは、同様の形式でログデータを取得するために、一連のスクリプトを記述して維持する必要がないことを意味します。すべてJSONです。

fluentdの力は、複数のソースと宛先をサポートすることにあります。たとえば、Twitterストリームからデータを収集し、IRCで通知することができます。利用可能なコミュニティプラグインはたくさんあります。

DockerでのFluentdの使用

MongoDB fluentdプラグインを使用すると、ログをObjectRocketに簡単にプッシュできます。まず、ソースを定義する必要があります。すべてのサービスがDockerを使用しているため、コンテナーログをfluentdに取り込む必要があります。 docker-genを使用してログの集約を実現し、Jason Wilderに精通している方法について、これを補足するすばらしい投稿がここにあります。 fluentdコンテナーが実行されると(そしてdocker-genがfluentd構成を生成すると)、実行中のコンテナーごとに次のようなセクションが必要になります。

<source>
  type tail
  format json
  time_key time
  path /var/lib/docker/containers/abcdef/abcdef-json.log
  pos_file /var/lib/docker/containers/abcdef/abcdef-json.log.pos
  tag docker.container.abcdef
  rotate_wait 5
</source>

これにより、コンテナログが追跡され、位置ファイルを使用してログのどこにあるかが追跡されます。この構成セクションにあるタグはfluentdタグであり、集約するデータをどう処理するかをfluentdに指示するために使用されることに注意してください。

FluentdとMongoDBの使用

パブリック側では、「一致」したデータをどう処理するかを流暢に伝えます。この場合、変数を同じ構成ファイル内のObjectRocketデータベースからの実際の情報に置き換えます。

<match docker.**>
  type mongo
  database $DBNAME
  collection prod
  host $HOSTNAME
  port $PORT
  ssl
  capped
  capped_size 100m
  user $MONGOUSER
  password $MONGOPASS
  include_tag_key true
</match>

include_tag_keyの設定は、MongoDBのログのレコードにタグを含めるようにfluentdに指示します。このようにして、どのログエントリがどのコンテナに属しているかを正確に知ることができます。 Fluentdは、MongoDBにデータの入力を開始します。その後、データをアプリケーションのプライベート側でプルダウンできます。

プライベート側では、引き続きfluentd MongoDBプラグインを使用しますが、今回はそれをソースとして設定します:

<source>
  type mongo_tail
  database $DBNAME
  collection prod
  host $HOSTNAME
  port $PORT
  user $MONGOUSER
  password $MONGOPASS
  ssl
  time_key time
  wait_time 5
  tag prod
  id_store_file /app/prod_last_id
</source>

次に、ログをElasticSearchにプッシュするための「一致」を提供します:

<match **>
  type forest
  subtype elasticsearch
  <template>
    host elasticsearch.domain.com
    port 9200
    index_name fluentd
    logstash_format true
    buffer_type memory
    type_name ${tag}
    flush_interval 3
    retry_limit 17
    retry_wait 1.0
    num_threads 1
  </template>
</match>

また、複数の環境でタグ付けの構成を簡素化するForestfluentdプラグインも使用しています。

Fluentdは、Dockerログを複数のホストに集約し、それらをMongoDBデータベースにプッシュするための優れた方法です。私たちの場合、ObjectRocketは、ログ集約のためのパブリック環境とプライベート環境の間のウェイステーションです。他のユースケースには、収集しているデータのリアルタイム分析が含まれる場合があります。私たちのチームにとって最良の部分は、ObjectRocketの信頼性と知識のおかげで、MongoDBを管理する必要がないことです。


  1. Cloud Tuneup Pro でインターネット Cookie とシステム レジストリをスキャンする

    最適化とは、最適なパフォーマンスと速度を得るためにコンピューターをクリーニングして維持することを意味します。定期的な最適化により、PC は常に完璧に機能します。コンピューターの最適化は、手動で行うことも、サードパーティのツールを使用して行うこともできます。前者の方法を使用すると時間がかかる場合があるため、特に初心者の場合は後者の方法をお勧めします。 Advanced PC Cleanup などの最適化アプリケーションをインストールして、コンピューターのパフォーマンスを維持できます。 ただし、上級ユーザーの場合は、次のような質問があるかもしれません: 質問 :物理的に異なる場所にあるコンピュ

  2. ハイブリッド クラウドは本当にゲーム チェンジャーか?

    今日、クラウド コンピューティングは私たちの生活に欠かすことのできないものになっています。私たちは、平民として、または組織として協力して、それなしで私たちの生活を考えることができません.リソースの戦略的管理にクラウド コンピューティングを使用することで、私たちの生活が楽になり、関連する投資が削減されました。クラウド分野の発展に伴い、ハイブリッド クラウドという新しい用語が造語されました。また、それがエンタープライズITの未来になると主張されました。しかし、とにかくこれはどれくらい真実ですか?エンタープライズ IT には、それ自体を支える強力な柱が 1 つしかないと本当に思いますか?そうではない