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を管理する必要がないことです。
-
Cloud Tuneup Pro でインターネット Cookie とシステム レジストリをスキャンする
最適化とは、最適なパフォーマンスと速度を得るためにコンピューターをクリーニングして維持することを意味します。定期的な最適化により、PC は常に完璧に機能します。コンピューターの最適化は、手動で行うことも、サードパーティのツールを使用して行うこともできます。前者の方法を使用すると時間がかかる場合があるため、特に初心者の場合は後者の方法をお勧めします。 Advanced PC Cleanup などの最適化アプリケーションをインストールして、コンピューターのパフォーマンスを維持できます。 ただし、上級ユーザーの場合は、次のような質問があるかもしれません: 質問 :物理的に異なる場所にあるコンピュ
-
ハイブリッド クラウドは本当にゲーム チェンジャーか?
今日、クラウド コンピューティングは私たちの生活に欠かすことのできないものになっています。私たちは、平民として、または組織として協力して、それなしで私たちの生活を考えることができません.リソースの戦略的管理にクラウド コンピューティングを使用することで、私たちの生活が楽になり、関連する投資が削減されました。クラウド分野の発展に伴い、ハイブリッド クラウドという新しい用語が造語されました。また、それがエンタープライズITの未来になると主張されました。しかし、とにかくこれはどれくらい真実ですか?エンタープライズ IT には、それ自体を支える強力な柱が 1 つしかないと本当に思いますか?そうではない