Norikra를 만져 보았습니다.

소개



전전부터 신경이 쓰이고 있었던 norikra 를 망칠 시간이 생겼기 때문에 참아 보았습니다.
설치하고 nginx 로그를 fluentd를 통해 norikra에 넣는 곳까지를 기재해 둡니다.

norikra란? ? 라고 하는 질문에는 접하기 시작이므로 별로 알고 있지 않습니다만, 개인적으로는 이하가 특징이라고 생각하고 있습니다.
  • JSON 형식의 데이터를 실시간으로 처리하는 OSS
  • SQL과 같은 설명으로 검색 할 데이터 선택 가능
  • JRuby로 작성
  • GUI 있음

  • 이하 참고로 하겠습니다.
  • Norikra + Fluentd로 DoS 공격을 차단하는 메커니즘을 만들어 보았습니다.

  • 이번 구성


    Nginx(fluentd)サーバー<->Norikraサーバー
    

    의 2대 구성.

    환경 정보


  • Nginx 서버
  • ・OS: Ubuntu14.04
    ・Nginx: nginx/1.4.6
    ・Ruby: ruby 2.1.5
    ・fluentd: 0.10.57
    
  • Norikra 서버
  • ・OS: Ubuntu14.04
    ・Ruby: jruby-1.7.16.1
    ・Norikra: 1.1.1
    

    Step1: Rbenv 설치(Nginx 서버, Norikra 서버)



    먼저 Rbenv를 설치합니다.
    $ sudo groupadd -g 1001 rbenv # Rbenv利用グループ
    $ sudo groupadd -g 1002 norikra # Norikra利用グループ
    $ sudo usermod -G rbenv,norikra ${username}
    $ sudo apt-get update
    $ sudo apt-get install gcc make openssl libssl-dev git openjdk-7-jre g++ ruby-dev
    $ cd /opt
    $ sudo git clone git://github.com/sstephenson/rbenv.git
    $ sudo mkdir -p /opt/rbenv/shims /opt/rbenv/versions
    $ sudo chgrp -R rbenv rbenv
    $ sudo git clone git://github.com/sstephenson/ruby-build.git /opt/rbenv/ruby-build
    $ cd /opt/rbenv/ruby-build
    $ sudo ./install.sh
    

    /etc/profile.d/rbenv.sh
    export RBENV_ROOT="/opt/rbenv"
    export PATH="$RBENV_ROOT/bin:$PATH"
    eval "$(rbenv init -)"
    
    $ source /etc/profile.d/rbenv.sh
    $ rbenv --version
    rbenv 0.4.0-129-g7e0e85b
    $
    

    그런데 이것으로 rbenv를 사용할 수 있게 되었습니다.

    Step2: JRuby 설치(Norikra 서버)



    JRuby를 설치합니다.
    $ rbenv install --list
      jruby-1.7.14
      jruby-1.7.15
      jruby-1.7.16
      jruby-1.7.16.1
      jruby-9.0.0.0-dev
      jruby-9.0.0.0+graal-dev
      jruby-9000-dev
      jruby-9000+graal-dev
      maglev-1.0.0
    $ # 最新版の安定版をインストールします。
    $ sudo env RBENV_ROOT=$RBENV_ROOT PATH=$PATH rbenv install -v jruby-1.7.16.1
    $ rbenv global jruby-1.7.16.1
    $ ruby --version
    jruby 1.7.16.1 (1.9.3p392) 2014-10-28 4e93f31 on OpenJDK 64-Bit Server VM 1.7.0_65-b32 +jit [linux-amd64]
    $
    

    Step3: Norikra 설치(Norikra 서버)


    $ gem install norikra --no-ri --no-rd
    

    Step4: Norikra 시작(Norikra 서버)


    $ sudo mkdir -p /var/log/norikra /etc/norikra /var/run/norikra
    $ sudo chgrp norikra /var/log/norikra /etc/norikra /var/run/norikra
    
    $ norikra start -d -l /var/log/norikra
    

    성공적으로 설치되면 http://${norikra_server}:26578에서 norikra의 콘솔 화면에 액세스 할 수 있습니다.



    Step5: Nginx, Ruby, Fluentd 설치(Nginx 서버)


    $ sudo apt-get install nginx
    

    Ruby2.1.5 설치
    $ rbenv install --list
      2.1.0
      2.1.1
      2.1.2
      2.1.3
      2.1.4
      2.1.5
      2.2.0-dev
      2.2.0-preview1
      2.2.0-preview2
    $ sudo env RBENV_ROOT=$RBENV_ROOT PATH=$PATH rbenv install -v 2.1.5
    $ rbenv global 2.1.5
    $ ruby --version
    ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
    $
    
    $ sudo env PATH=$PATH gem install fluentd
    $ sudo env PATH=$PATH fluent-gem install fluent-plugin-norikra --no-ri --no-rdoc # Norikraのプラグインインストール
    $ sudo env PATH=$PATH fluentd --setup /etc/fluent # Configファイルなどの作成
    

    Step6: Fluentd 설정(Nginx 서버)



    Step5에서 만든 fluentd 설정 파일을 편집하여 Nginx 로그가 norikra로 날아갈 수 있도록 설정합니다.
    $ sudo mkdir -p /var/log/fluent
    $ sudo chmod +x /var/log/fluent
    

    /etc/fluent/fluent.conf
    # Tailing the Nginx Log
    <source>
      type tail
      path /var/log/nginx/access.log
      pos_file /var/log/fluent/nginx-access.pos
      tag norikra.nginx
      format nginx
    </source>
    <match norikra.*>
      type norikra
      norikra ${norikra_server}:26571
      remove_tag_prefix norikra
      target_map_tag    true
    </match>
    
    $ sudo env PATH=$PATH fluentd -c /etc/fluent/fluent.conf -vv &
    

    Step7: 액세스 해보기 - 1(Nginx 서버)



    다음 명령으로 Nginx에 액세스해보십시오.
    $ curl http://localhost
    

    Step8: 확인/쿼리 설정 - 1(Norikra 서버)



    Norikra 서버에서 액세스를 확인해 봅니다.
    설정이 성공적으로 완료되면 Target=nginx가 자동으로 생성되었음을 알 수 있습니다.
    Nginx 로그의 다양한 필드도 자동으로 설정됩니다.



    다만, 지금의 설정에서는 취득한 데이터에 대한 쿼리를 지정하고 있지 않기 때문에 보내져 온 데이터에 대해서 아무것도 하지 않습니다.

    Console에서 쿼리를 설정하여 전송된 데이터를 표시합니다. 모처럼이므로 Response 코드가 200 이외의 데이터만을 잡는 쿼리를 지정해 보겠습니다.



    내 환경에서는 *를 지정하면 오류가 발생했으므로 여기에서는 개별적으로 열을 지정합니다.

    Step9: 액세스 해보기 - 2(Nginx 서버)



    다음 명령으로 Nginx에 액세스합니다.
    여기에서는 200OK 이외의 응답을 얻고 싶기 때문에 존재하지 않는 경로를 지정합니다.
    $ curl http://localhost
    $ curl http://localhost
    $ curl http://localhost/no_content/
    

    Step10: 확인해 보기 - 2(Norikra 서버)



    다시 Norikra의 Console에 액세스해보십시오.

    세 번 액세스했지만 이벤트가 한 번만 발생했음을 알 수 있습니다.


    404 Not Found 응답이 발생했음을 알 수 있습니다.



    결론



    아직 만지는 시작이므로 이해가 불충분하다고 생각합니다만, norikra를 이용하는 것으로 SQL 라이크의 방법으로 이벤트를 정의할 수 있어 이벤트와 액션을 묶는 것으로 여러가지 간단하게 자동화를 할 수 있을까 생각했습니다 .

    이것을 한층 발전시켜 뭔가의 시스템을 만들고 싶네요^^

    끝.

    좋은 웹페이지 즐겨찾기