* yum 을 통한 nginx 삭제 및 설치
yum shell
remove nginx12
install nginx14
run
* CentOS 5/6 에 nginx 설치
CentOS/RHEL 6.x:
rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm |
CentOS/RHEL 5.x:
rpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm |
Now you can install Nginx 1.4 by doing:
1. Nginx 설치
Nginx의 저장소 추가하여 설치를 진행합니다.
| [root@ruo91 ~]# nano /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/6/$basearch/ gpgcheck=0 enabled=0 [root@ruo91 ~]# yum --enablerepo=nginx install -y nginx |
- nginx.conf 설정
Access 로그가 JSON 포멧 방식으로 저장 되도록 설정합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | [root@ruo91 ~]# nano /etc/nginx/nginx.conf user nginx; access_log off; error_log /var/log/nginx/error.log warn; pid/var/run/nginx.pid; worker_processes 1; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfileon; #tcp_nopush on; keepalive_timeout 65; #gzip on; # JSON log_format json_format '{ "@time": "$time_iso8601", ' '"@fields": { ' '"country": "$http_cf_ipcountry", ' '"ip": "$remote_addr", ' '"status": "$status", ' '"request": "$request", ' '"size": "$body_bytes_sent", ' '"user-agent": "$http_user_agent", ' '"referrer": "$http_referer" } }'; # yongbok.net server { listen 80; server_name yongbok.net www.yongbok.net; root /home/ruo91/public_html; index index.html; # Logs access_log /storage/logs/www-access.json json_format; error_log /storage/logs/www-error.log; } } |
JSON 포멧의 Access 로그는 아래와 같이 저장이 됩니다. (원래는 한줄로 기록 됩니다.)
| { "@time": "2013-11-03T15:12:57+09:00", "@fields": { "country": "US", "ip": "66.249.73.31", "status": "200", "request": "GET /blog/page/25/ HTTP/1.1", "size": "16253", "user-agent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", "referrer": "-" } }
|
2. Redis 설치
| [root@ruo91 ~]# yum install -y redis |
- Redis 실행
| [root@ruo91 ~]# service redis start |
3. JDK 설치
JDK (Java Development Kit)을 적절한 곳에 설치 합니다.
http://www.oracle.com/technetwork/java/javase/downloads/index.html
| [root@ruo91 ~]# tar xzvf jdk-7u45-linux-x64.tar.gz [root@ruo91 ~]# mv jdk-7u45 /usr/local/jdk [root@ruo91 ~]# nano ~/.bash_profile # JDK export JAVA_HOME=/usr/local/jdk export JDK_HOME=$JAVA_HOME export PATH=$PATH:$JAVA_HOME/bin [root@ruo91 ~]# source ~/.bash_profile |
4. ElasticSearch 설치
http://www.elasticsearch.org/
| [root@ruo91 ~]# mkdir /opt/dev [root@ruo91 ~]# cd /opt/dev [root@ruo91 ~]# wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.5.tar.gz [root@ruo91 ~]# tar xzvf elasticsearch-0.90.5.tar.gz [root@ruo91 ~]# cd elasticsearch-0.90.5 |
ElasticSearch의 모니터링을 위한 필수 Plugin 설치 (head, bigdesk)
| [root@ruo91 ~]# bin/plugin -install mobz/elasticsearch-head [root@ruo91 ~]# bin/plugin -install lukas-vlcek/bigdesk |
- ElasticSearch 실행
* 1.x 버전대에는 -f 옵션 대신 -d 옵션으로 데몬으로 띄울수가 있습니다.
| [root@ruo91 ~]# /opt/dev/elasticsearch-0.90.5/bin/elasticsearch -f [2013-11-04 20:59:46,452][INFO ][node ] [Franz Kafka] version[0.90.5], pid[20250], build[c8714e8/2013-09-17T12:50:20Z] [2013-11-04 20:59:46,453][INFO ][node ] [Franz Kafka] initializing ... [2013-11-04 20:59:46,458][INFO ][plugins ] [Franz Kafka] loaded [], sites [bigdesk, head] [2013-11-04 20:59:48,401][INFO ][node ] [Franz Kafka] initialized [2013-11-04 20:59:48,401][INFO ][node ] [Franz Kafka] starting ... [2013-11-04 20:59:48,474][INFO ][transport] [Franz Kafka] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/127.0.0.1:9300]} [2013-11-04 20:59:51,549][INFO ][cluster.service ] [Franz Kafka] new_master [Franz Kafka][xtRk5GxmRPODRcrlbdYK7A][inet[/127.0.0.1:9300]]{master=true}, reason: zen-disco-join (elected_as_master) [2013-11-04 20:59:51,578][INFO ][discovery] [Franz Kafka] elasticsearch/xtRk5GxmRPODRcrlbdYK7A [2013-11-04 20:59:51,590][INFO ][http ] [Franz Kafka] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/127.0.0.1:9200]} [2013-11-04 20:59:51,590][INFO ][node ] [Franz Kafka] started [2013-11-04 20:59:52,107][INFO ][gateway ] [Franz Kafka] recovered [2] indices into cluster_state |
5. Logstash 설치
http://logstash.net/
| [root@ruo91 ~]# wget -P /opt/dev https://download.elasticsearch.org/logstash/logstash/logstash-1.2.2-flatjar.jar |
- Logstash log shipper 설정 파일
가져올 로그를 지정하고 Redis로 데이터를 저장 합니다.
| [root@ruo91 ~]# nano /opt/dev/logstash-shipper.conf input { file { path => "/storage/logs/www-access.json" # JSON 포멧 방식의 Access log type => nginx format => json_event } } output { stdout { debug => true } redis { host => "127.0.0.1" data_type => "list" key => "logstash" # Redis에 저장시 사용할 Key 이름 } } |
- Logstash 실행
| [root@ruo91 ~]# java -jar /opt/dev/logstash-1.2.2-flatjar.jar agent -f /opt/dev/logstash-shipper.conf { "host" => "yongbok.net", "path" => "/storage/logs/www-access.json", "country" => "US", "ip" => "66.249.73.95", "status" => "404", "request" => "GET /blog/page/110/?/entry/cannot-restore-segment-prot-after-reloc-Permission-denied&paged=107 HTTP/1.1", "size" => "12681", "user-agent" => "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", "referrer" => "-", "@timestamp" => "2013-11-04T11:37:11.202Z", "@version" => "1", "type" => "nginx" } |
위와 같이 로그를 가져옴과 동시에 Redis로 저장이 됩니다.
- Logstash Indexer 설정 파일
Redis에 저장 된 데이터를 ElastaicSearch로 전송 합니다.
| [root@ruo91 ~]# nano /opt/dev/logstash-indexer.conf input { redis { # redis 설정 값은 logstash-shipper.conf 설정과 동일 해야 합니다. host => "127.0.0.1" data_type => "list" key => "logstash" # json event를 Redis에서 가져오기 위해 json 코덱을 사용합니다. codec => json } } output { stdout { debug => true debug_format => "json"} elasticsearch { host => "127.0.0.1" } } |
- Logstash Indexer 실행
| [root@ruo91 ~]# java -jar /opt/dev/logstash-1.2.2-flatjar.jar agent -f /opt/dev/logstash-indexer.conf |
이제 Indexer가 Redis에 저장 된 데이터를 읽어와서 ElasticSearch로 저장합니다.
ElasticSearch의 head 플러그인을 통해 logstash index가 생성 되어 데이터가 들어가 있는지 확인 해봅니다.
5. Kibana 설치
Kibana는 Logstash를 logstash-web으로 구동했을때와 ElasticSearch의 Plugin으로 설치 했을때 모두 사용이 가능합니다.
Nginx 웹서버를 이미 사용중이므로 가상호스트 사용자의 public_html 디렉토리에 바로 넣어 설치 하겠습니다.
| [root@ruo91 ~]# git clone https://github.com/elasticsearch/kibana.git [root@ruo91 ~]# mv kibana/src /home/ruo91/public_html/kibana [root@ruo91 ~]# chown -R ruo91:ruo91 /home/ruo91/public_html/kibana |
- Kibana 설정
config.js에서 ElasticSearch의 서버 아이피와 kibana_index를 수정합니다.
kibana_index는 logstash-indexer가 index를 logstash-2013.11.04 형태로 생성 하므로 와일드 카드로 주면 날짜와 상관 없이 불러 올수 있습니다.
| [root@ruo91 ~]# su - ruo91 [ruo91@ruo91 ~]$ nano public_html/kibana/config.js |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | /** * These is the app's configuration, If you need to configure * the default dashboard, please see dashboards/default */ define(['settings'], function (Settings) { return new Settings({ /** * URL to your elasticsearch server. You almost certainly don't * want 'http://localhost:9200' here. Even if Kibana and ES are on * the same host * * By default this will attempt to reach ES at the same host you have * elasticsearch installed on. You probably want to set it to the FQDN of your * elasticsearch host * @type {String} */ /* elasticsearch: "http://"+window.location.hostname+":9200", */ elasticsearch: "http://localhost:9200", /** * The default ES index to use for storing Kibana specific object * such as stored dashboards * @type {String} */ kibana_index: "logstash-*", /** * Panel modules available. Panels will only be loaded when they are defined in the * dashboard, but this list is used in the "add panel" interface. * @type {Array} */ panel_names: [ 'histogram', 'map', 'pie', 'table', 'filtering', 'timepicker', 'text', 'fields', 'hits', 'dashcontrol', 'column', 'derivequeries', 'trends', 'bettermap', 'query', 'terms', 'sparklines' ] }); }); |
- Kibana 웹으로 확인
http://your-domain.com/kibana/ 에 접속해서 실시간으로 로그를 분석할수 있게 됩니다.
출처 : http://www.yongbok.net/blog/real-time-visitor-analysis-with-logstash-elasticsearch-kibana/