乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      scribe

       jijo 2011-09-08
      scribe - 日志收集器 分析
      分類: 平臺架構 1616人閱讀 評論(12) 收藏 舉報

      1.General  description

      我們知道,使用日志系統(tǒng)是為了使系統(tǒng)變得更健壯,能夠應對各種錯誤并能從錯誤中較快地恢復。一個大型的分布式系統(tǒng)生成的日志數量是巨大的,所以需要一個有效的工具對其進行管理。Scribe就是這樣一個日志收集服務器,使用它可以對大型的系統(tǒng)進行監(jiān)控。它是Facebook的一個開源組件,使用的是Facebook另一個框架—Thrift。Thrift 在我的理解就是一個高效的跨語言 rpc 框架,所以它可以支持通過 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml 給服務器匯報。

      總的來說,Scribe由兩部分組成:central  Scribe server local Scribe server。在分布式系統(tǒng)中,每個結點都會有一個local Scribe server運行在上面,收集此結點的日志信息,并將其發(fā)送給central  Scribe server。這里的centrallocal是相對的,是針對一個組內的。

       

      2. Download and Install

      Scribe并不大,但其安裝是一個非常繁瑣的過程。通過我不斷的努力,最終還是沒有安裝成功(源代的example不能正常運行)。雖說沒有產出的勞動是徒勞的,但這也不是絕對的,至少對其具體的安裝過程倒是耳熟能詳了。

       

      Scribe運行于Linux系統(tǒng)下,試驗中我所使用的是Ubuntu 9.10,通過虛擬機安裝的。Scribe安裝前需要很多Environment  Dependency,具體如下所示:

      1)安裝ruby:
                 install:   sudo apt-get install ruby-full build-essential
                 test:       ruby -v         
      顯示 版本 號
                                which ruby   
      顯示安裝的位置
                               
      新建一個test.rb文件,里面輸入如下內容:           
                                               #!/usr/bin/env ruby
                                               puts "hello world!"
                                
      然后進入該目錄,輸入如下命令:./test.rb。如果ruby安裝成功則會   
                               
      輸出hello world

      2)安裝python
                
      一般來講,Ubuntu系統(tǒng)里已經安裝了python。查看是否已經安裝,使用如下
               
      命令:python    顯示安裝的版本號  
                             which python  
      顯示安裝的位置
               
      系統(tǒng)自帶的,其安裝目錄是在/usr/bin下。如果是自安裝的,則會在
                /usr/local/bin
      下。就如接下來要安裝的ThriftScribe。

      3)安裝libevent
                
      下載http://www./linux/accidence/20100218/22428.html
                  tar xzfv libevent-1.4.8-stable.tar.gz
                  cd libevent-1.4.8-stable
                  ./configure
                  make
                  make install
      4)安裝剩下的dependency:
                 sudo apt-get install libboost-dev=1.38.1 flex bison libtool automake autoconf pkg- 
                 config && wget -O thrift.tgz
                 "http://gitweb./?p=thrift.git;a=snapshot;h=HEAD;sf=tgz"
                 && tar -xzf thrift.tgz && cd thrift &&./bootstrap.sh && ./configure && make
                 && sudo make install
                 && cd  contrib/fb303/ && ./bootstrap.sh && sudo make && sudo make install
                 
      實際上是將多條命令合為一條而已。

                 至此為止,所有的依賴已經安裝完成。

      5 )安裝Scribe
                 
      首先下載Scribe,這里我所使用的是Scribe2.2。接下來的安裝就非常簡單了:
                  ./bootstrap.sh
                  make
                  make install

        至此為止,Scribe就成功安裝上了。接下來就可以跑Example內的例子了。

       

      3. Example

      網上關于Scribe的資料較少,所以閱讀源代碼是一個很有效的途徑。在此之前先運行Example內的例子。

      源代碼里所給的example很簡單,但大體上了模擬了其運行的過程,分三個部分。可參考里面的README文件:
      Configurarion
      (配置)、Running Scribe Server(運行服務器)、Logging messages(記錄日志)


      3.1
      配置:
      Scribe Server
      是通過配置文件啟動的。

      null:丟棄所有消息
      multi
      :給所有multi類型的store傳遞消息
      file
      :將消息寫入文件
      thriftfile
      :類似于file,但寫入的文件類型為thrift  TfileTransport文件
      network
      :將消息轉發(fā)給另外一個scribe server
      buffer
      :包含兩個子store(主、次),在主store工作時,直接使用主store記錄日志,只 
                     
      有當主store不可用時,才使用次store記錄。而且一旦主store恢復工作,次
                       stroe
      記錄的日志將轉移到主store
      bucket
      :包含一系列的其他類型的stroe,具體使用哪個是由所定義的Hash函數決定的

       

      3.2  運行Scribe Server

       

      1)啟動:進入到Scribe源碼中的根目錄,執(zhí)行如下命令
       scribed examples/example1.conf

      如果scribe安裝成功的話,則會出現(xiàn)如下提示信息:

       

      2) 查看狀態(tài):在另外一個終端執(zhí)行如下命令:
      ./scribe_ctrl  status
      ALIVE

      3)停止:開啟另外一個終端,執(zhí)行如下命令:
      ./scribe_ctrl  stop
      在另外一個終端會看到狀態(tài)信息:

      “STATUS: STOPPING"

       

      3.3    記錄日志:

      1)Example1:向已經啟動的Server發(fā)送消息,驗證是否被記錄下來。
      Server
      啟動后,開啟另外一個終端向Server發(fā)送信息:使用scribe_cat
       mkdir  /tmp/scribetest
      echo  "hello world"| ./scribe_cat   test
      這時你很可能會出現(xiàn)如下錯誤提示:

      也就是說python導入模塊scribe失敗,但我們打開/usr/lib/python2.6/site-packages,發(fā)現(xiàn)里面是有scribe的模塊的,所以很可能是PYTHONPATH沒有配置正確。使用如下命令進行配置:
      進入到/etc目錄,然后輸入命令gedit  profileprofile文件為系統(tǒng)的每個用戶設置環(huán)境信息,當用戶第一次登錄時,該文件被執(zhí)行),在此文件中添加如下內容:
      export  PYTHONPATH=
      /usr/lib/python2.6/site-packages
      然后注銷重新登錄。
      輸入echo  $PYTHONPATH命令進行測試。
      再次執(zhí)行echo命令,查看結果:
      cat  /tmp/scribetest/test/test_current
      或者直接打開查看?!?span lang=EN-US>hello world!

       

      2) Example2啟動中心服務器和客戶端服務器,然后開啟一個終端并輸入三條命令,并查看結果:
      mkdir /tmp/scribetest2
      scribed examples/example2central.conf
      scribed examples/example2client.conf
      echo "test message" | ./scribe_cat -h localhost:1464 test2
      echo "this message will be ignored" | ./scribe_cat -h localhost:1464 ignore_me

      echo "123:this message will be bucketed" | ./scribe_cat -h localhost:1464 bucket_me

      查看結果:
      cat /tmp/scribetest/test2/test2_current

      cat /tmp/scribetest/bucket*/bucket_me_current

      ./scribe_ctrl status 1463    

      ./scribe_ctrl status 1464    

      ./scribe_ctrl counters 1463   #查看中心服務器的統(tǒng)計數據

      ./scribe_ctrl counters 1464   #查看客戶端服務器的統(tǒng)計數據


      當客戶端服務器講收到的信息發(fā)送給中心服務器后,會刪除本地的存儲。
      結果顯示:客戶端收到三條消息,發(fā)送了三條消息;
               
      服務器端收到三條消息,忽略了一條消息。

       

      3) Example3如同Example2啟動中心服務器和客戶端服務器,但本例測試的是在中心服務器突然down掉的情況下,客戶端服務器的緩沖存儲功能。

      echo  "test message 1" | ./scribe_cat -h localhost:1464 test3   #發(fā)送消息1
      cat  /tmp/scribetest/test3/test3_current                     #
      結果:test  message 1
      ./scribe_ctrl stop 1463                                                     #down
      掉中心服務器
      ./scribe_ctrl  status 1463                                                #
      結果:Failed to get status
      echo "test message 2" | ./scribe_cat -h localhost:1464 test3      #
      發(fā)送消息2
      ./scribe_ctrl status 1464                           #
      結果:WARNING - Failed to connect
      echo "test message 3" | ./scribe_cat -h localhost:1464 test3     #
      發(fā)送消息3
      scribed examples/example2central.conf                      #
      重新啟動中心服務器
      ./scribe_ctrl status 1463                           #
      結果:ALIVE
      ./scribe_ctrl status 1464                           #
      結果:ALIVE
      cat /tmp/scribetest/test3/test3_current


      #
      結果:
      test message 1

      test message 2

      test message 3
      全部正常接收

       

      4.Source Analyse
      4.1 
      整體類圖:

       

      4.2  store   storeConf


       

      4.3  scribeHandlerstoreQueue

       

       

       

      4.4  配置文件的解析
      server啟動的過程中,會調用StoreConf中的parseConfig函數,具體實現(xiàn)是先調用readConfig函數將配置文件的內容逐行讀入到一個隊列中,然后再調用parseStore函數從隊列中逐行解析,并將解析的內容存入StoreConf中的兩個Map變量: valuesstores。

       

                                   類型

                      解釋

      values

      std::map<std::string, std::string>

      每個store里的<參數,>

      stores

      std::map<std::string, pStoreConf>

      存放所有的store

       


       

       

      4.5  Server的啟動過程的流程圖:

       

      Main函數是入口點,端口號port和配置文件config_file作為聲明一個server實例:
      new scribeHandler(port, config_file);然后執(zhí)行一系列的初始化工作,初始化的流程圖如下:

       

      4.6 Log過程的流程圖:
      客戶端調用Logmessages)函數發(fā)送消息,通過thrift框架的實現(xiàn),遠程方法
      scribeHandler:: Logconst vector<LogEntry>& messages)函數被調用,過程如下:

       

       

       

      Reference
      http://github.com/facebook/scribe   

      http://hi.baidu.com/you5a_com/blog/item/ed62ee3fd1228d0bbba167d5.html

      http://snippets./2009/07/29/howto-install-scribe-the-facebook-log-system-on-debian/

      http:///product-scribe-facebooks-scalable-logging-system

      http:///posts/facebook-scribe-server-documentation-and-tutorials#comments

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多