logstashのタイムゾーンを更新する

みなさんこんにちは! 数か月間、当社は実稼働環境でlogstash-elasticsearch-kibanaバンドルを使用して、かなり大量のログを収集して処理することに成功しています。 時計を転送した後、キバナを見ると、すべてのログに1時間の遅延があることがわかりました。 猫の下で、logstash-elasticsearch-kibanaバンドルのタイムゾーンの問題と、更新されたタイムゾーンで完成したlogstashアセンブリのソリューションを共有したいと思います。



タイムゾーンの変更がログの最終ビューにどのように影響するかについては特に掘り下げませんが、実際にはkibanaでは現在の時刻に1時間前のイベントとして作成されたイベントを受け取りました。 すべてのrsyslogdが自動的に再起動して新しいタイムゾーンを取得するわけではないため、結果は非常に面白い写真でした。いくつかのサーバーは古いタイムゾーンで引き続き動作しました。



もちろん、松葉杖設定logstashで問題を解決できますが、logstashのタイムゾーンを完全に更新することにしました。




正しいタイムゾーンでのlogstashへの移行時のイベント数のグラフ

Logstashには一度に3つのタイムゾーンのソースがあります。1つはjavaに、2つ目はruby tzinfo gemに、3つ目はjrubyにコンパイルされています (joda-timeおよびjoda-timezonesアーティファクト)。



  1. 簡単なものから始めましょう-Javaでtzdataを更新します:



    これを行うには、Oracle WebサイトからダウンロードできるOracle tzupdaterのユーティリティを使用します。



    更新は文字通り1つのコマンドで発生します。



    java -jar tzupdater.jar -V tzupdater version 1.4.7-b01 JRE time zone data version: tzdata2014c Embedded time zone data version: tzdata2014g java -jar tzupdater.jar -u java -jar tzupdater.jar -V tzupdater version 1.4.7-b01 JRE time zone data version: tzdata2014g Embedded time zone data version: tzdata2014g
          
          





  2. 新しいtzdataでjrubyをビルドします。



    1. 開始するには、新しいタイムゾーンでjoda-timeアーティファクトを収集します。

      ビルドする前に、mavenおよびantパッケージをインストールします。
       apt-get install maven ant
            
            



      利用可能な最新のjoda-timezonesパッケージをダウンロードし、その中のtzdataバージョンを置き換え、依存関係でより新しいjoda-timeを指定します(10.3.2014から2.5):
       mkdir joda-time cd joda-time wget http://search.maven.org/remotecontent?filepath=org/jruby/joda-timezones/2013d/joda-timezones-2013d.pom -O pom.xml sed -i 's/2013d/2014g/' pom.xml sed -i 's/<version>2.2/<version>2.5/' pom.xml mvn package mvn instal
            
            



      現在、mavenはjoda-timezonesの最新バージョンを持っています。
    2. logstashで使用されるjrubyバージョンのソースコードをダウンロードします(logstash 1.4の場合はjruby-1.7.11です)。
       wget https://github.com/jruby/jruby/archive/1.7.11.tar.gz tar -xvf 1.7.11.tar.gz cd jruby-1.7.11/
            
            



      ./core/pom.xmlのアーティファクトバージョンを置き換えます。
       sed -i 's/<tzdata.version>2013d/<tzdata.version>2014g/' ./core/pom.xml sed -i 's/<tzdata.jar.version>2013d/<tzdata.jar.version>2014g/' ./core/pom.xml
            
            



      ./pom.xmlで:

       sed -i 's/<joda.time.version>2.3/<joda.time.version>2.5/' ./pom.xml
            
            



      jrubyをまとめる:
       ~/jruby-1.7.11# mvn -Pcomplete
            
            



      ビルド後、どのバージョンのtz jrubyが応答するかを確認し、同時に実際の時間と比較します(最終的にはhttp-serverを実行するため、logstashを収集する方が便利です)。
       ~/jruby-1.7.11# java -jar ./maven/jruby-complete/target/jruby-complete-1.7.11.jar -rrbconfig -e 'p RbConfig::CONFIG["tzdata.version"]' "2014g" ~/jruby-1.7.11# java -jar ./maven/jruby-complete/target/jruby-complete-1.7.11.jar -e 'p Time.now' 2014-10-29 14:58:07 +0500 ~/jruby-1.7.11# cd ./maven/jruby-complete/target/;python -m SimpleHTTPServer
            
            





  3. logstashをまとめる:



    アンパックをダウンロード:

     wget https://github.com/elasticsearch/logstash/archive/v1.4.2.tar.gz tar -xvf v1.4.2.tar.gz mv logstash-1.4.2 logstash-contrib;cd logstash-contrib
          
          



    変更を行います。
     diff --git a/Makefile b/Makefile index 0ec3da1..7fcca1a 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ ELASTICSEARCH_VERSION=1.1.1 WITH_JRUBY=java -jar $(shell pwd)/$(JRUBY) -S JRUBY=vendor/jar/jruby-complete-$(JRUBY_VERSION).jar -JRUBY_URL=http://jruby.org.s3.amazonaws.com/downloads/$(JRUBY_VERSION)/jruby-complete-$(JRUBY_VERSION).jar +JRUBY_URL=http://127.0.0.1:8000/jruby-complete-$(JRUBY_VERSION).jar JRUBY_CMD=bin/logstash env java -jar $(JRUBY) ELASTICSEARCH_URL=http://download.elasticsearch.org/elasticsearch/elasticsearch diff --git a/logstash.gemspec b/logstash.gemspec index 4917d83..6ba8ae4 100644 --- a/logstash.gemspec +++ b/logstash.gemspec @@ -23,6 +23,7 @@ Gem::Specification.new do |gem| gem.add_runtime_dependency "stud" #(Apache 2.0 license) gem.add_runtime_dependency "clamp" # for command line args/flags (MIT license) gem.add_runtime_dependency "i18n", [">=0.6.6"] #(MIT license) + gem.add_runtime_dependency "tzinfo", [">=1.2.2"]#(MIT license) # Web dependencies gem.add_runtime_dependency "ftw", ["~> 0.0.39"] #(Apache 2.0 license) diff --git a/tools/Gemfile.jruby-1.9.lock b/tools/Gemfile.jruby-1.9.lock index dc11fd5..41e4362 100644 --- a/tools/Gemfile.jruby-1.9.lock +++ b/tools/Gemfile.jruby-1.9.lock @@ -169,7 +165,7 @@ GEM http_parser.rb (~> 0.5.0) json (~> 1.8) simple_oauth (~> 0.2.0) - tzinfo (1.1.0) + tzinfo (1.2.2) thread_safe (~> 0.1) user_agent_parser (2.1.2) uuidtools (2.1.4)
          
          





    そして、アセンブリを実行します:
     make tarball
          
          





    ビルドが完了すると、。/ build / logstash-1.4.2.tar.gzが取得されます。これは、更新されたtzdataを含む完成したlogstashです!




PSすべての操作は、インストールされたOracle Java(TM)Development Kit(JDK)7(build 1.7.0_72-b14)を使用してubuntu 14.04で実行されました



タイムゾーンが更新されたlogstash 1.4.3の完成したアセンブリは、 yandex-diskまたはmail.ruからダウンロードできます。










All Articles