ログ管理システムの導入方法
18151 ワード
原文:http://www.cnblogs.com/shantu/p/4589822.html
会社のデータセキュリティと分析の必要性のため、GlusterFS+lagstash+elasticsearch+kibana 3+redisを統合したログ管理アプリケーションを調査した.
インストール、構成プロセス、使用状況など
一、glusterfs分布式ファイルシステムの配置:説明:会社はウェブサイトの業務ログとシステムログの統一収集と管理をしたいと思って、mfs、fastdfsなどの分布式ファイルシステムの調査研究を経て、最後にglusterfsを選んだ.Glusterは高い拡張性、高性能、高い可用性、横方向に拡張できる弾力性の特徴を持っているからだ.メタデータのないサーバーの設計はglusterfsに単一の故障の危険性がなくて、公式サイト:www.gluster.org
1.システム環境準備:
Centos 6.4サービス:192.168.10.101 192.168.10.102 192.168.10.188 192.168.10.189クライアント:192.168.10.103 EPELソースとGlusterFSソースEPELソースとGLusterFSソースを追加し、EPELソースにはGLusterFSが含まれており、バージョンは比較的古く、比較的安定しており、今回のテストでは最新の3.5.0バージョンを採用した.
2.導入プロセス
3.クライアントのインストール構成:
4.テスト
5.運用メンテナンスの一般的なコマンド:
二.ログ収集システムの配置
説明:
ログ収集システムアーキテクチャ図:
仮想サーバの準備:
1.3台のホストにjdk 1.7をインストールする必要がありますoracle jdk 1.7+バージョンjava-version javaの環境変数を設定することを推奨します.たとえば
2.kafka(192.168.10.144)wgetをインストールするhttp://mirrors.hust.edu.cn/apache/kafka/0.8.1.1/kafka2.9.2-0.8.1.1.tgz tar zxvf kafka2.9.2-0.8.1.1.tgz ln –s kafka_2.9.2-0.8.1.1/usr/local/kafka vim/usr/local/kafka/config/server.properties broker.id=10-144 host.name=kafka-10-144 echo"192.168.10.144 kafka-10-144">/etc/hosts kafka起動zookeeperより怠惰で、zookeeper-server cdh 5をインストールする必要があることに注意する.2ソースにはyumソースを配置すればよいyum install zookeeper-server–y vim/etc/zookeeper/conf/zoo.cfg dataDir=/data/zookeeper zookeeperデータ格納経路を設定zookeeperとkafka/etc/initを起動する.d/zookeeper-server start nohup/usr/local/kafka/bin/kafka-server-start.sh/usr/local/kafka/config/server.properties &
3.Elasticsearchの取り付け(192.168.10.145)
4.インストールlogstash(192.168.10.143192.168.10.144)生産側と消費側はインストールするここで参考にしますhttp://blog.csdn.net/xzwdev/article/details/41278033 https://github.com/joekiller/logstash-kafka git clone https://github.com/joekiller/logstash-kafka
本番ログの構成と起動(192.168.10.143)
コンシューマサーバの構成:
コンシューマサービスの開始
補足の最適化:
2,logstashはesにデータを保存して、毎日時間のインデックスを創立して、デフォルトはutc時間を使って、朝8時にやっと創立して、現在のログのデータが昨日のインデックスの中に保存することをもたらして、以下の修正をする必要があります:
5 kibanaのインストール(192.168.10.145)
6、最終的に以下の図を実現する.
7、ログシステムのメンテナンス:
8,kibanaログイン認証インストール構成:
8.1,nginxインストール構成#wgethttp://nginx.org/download/nginx-1.2.9.tar.gz # yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel #tar zxvf nginx-1.2.9.tar.gz # cd nginx-1.2.9 # ./configure --prefix=/usr/local/nginx #make && make install
8.2 kibana-authentication-proxyのインストール
8.3要求パス
会社のデータセキュリティと分析の必要性のため、GlusterFS+lagstash+elasticsearch+kibana 3+redisを統合したログ管理アプリケーションを調査した.
インストール、構成プロセス、使用状況など
一、glusterfs分布式ファイルシステムの配置:説明:会社はウェブサイトの業務ログとシステムログの統一収集と管理をしたいと思って、mfs、fastdfsなどの分布式ファイルシステムの調査研究を経て、最後にglusterfsを選んだ.Glusterは高い拡張性、高性能、高い可用性、横方向に拡張できる弾力性の特徴を持っているからだ.メタデータのないサーバーの設計はglusterfsに単一の故障の危険性がなくて、公式サイト:www.gluster.org
1.システム環境準備:
Centos 6.4サービス:192.168.10.101 192.168.10.102 192.168.10.188 192.168.10.189クライアント:192.168.10.103 EPELソースとGlusterFSソースEPELソースとGLusterFSソースを追加し、EPELソースにはGLusterFSが含まれており、バージョンは比較的古く、比較的安定しており、今回のテストでは最新の3.5.0バージョンを採用した.
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget -P /etc/yum.repos.dhttp://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo
2.導入プロセス
:
yum -y install glusterfs glusterfs-fuseglusterfs-server
chkconfig glusterd on
service glusterd start
:
4 , , ok。
[root@db1 ~]# gluster peer probe192.168.10.102
probe successful
[root@db1 ~]# gluster peer probe192.168.10.188
probe successful
[root@db1 ~]# gluster peer probe 192.168.10.189
probe successful
:
[root@db1 ~]# gluster peer status
number of peers: 3
hostname: 192.168.10.102
uuid:b9437089-b2a1-4848-af2a-395f702adce8
state: peer in cluster (connected)
hostname: 192.168.10.188
uuid: ce51e66f-7509-4995-9531-4c1a7dbc2893
state: peer in cluster (connected)
hostname: 192.168.10.189
uuid:66d7fd67-e667-4f9b-a456-4f37bcecab29
state: peer in cluster (connected)
/data/gluster , test-volume , 2:
sh cmd.sh "mkdir /data/gluster"
[root@db1 ~]# gluster volume create test-volume replica 2192.168.10.101:/data/gluster 192.168.10.102:/data/gluster192.168.10.188:/data/gluster 192.168.10.189:/data/gluster
creation of volume test-volume has beensuccessful. please start the volume to access data.
:
[root@db1 ~]# gluster volume starttest-volume
starting volume test-volume has beensuccessful
:
[root@db1 ~]# gluster volume info
volume name: test-volume
type: distributed-replicate
status: started
number of bricks: 2 x 2 = 4
transport-type: tcp
bricks:
brick1: 192.168.10.101:/data/gluster
brick2: 192.168.10.102:/data/gluster
brick3: 192.168.10.188:/data/gluster
brick4: 192.168.10.189:/data/gluster
3.クライアントのインストール構成:
:
yum -y installglusterfs glusterfs-fuse
:
mount -t glusterfs 192.168.10.102:/test-volume/mnt/ ( ) 。
mount -t nfs -o mountproto=tcp,vers=3192.168.10.102:/test-volume /log/mnt/ ( nfs , rpcbind )
echo "192.168.10.102:/test-volume/mnt/ glusterfs defaults,_netdev 0 0" >> /etc/fstab ( )
4.テスト
dd if=/dev/zero of=/mnt/1.img bs=1Mcount=1000 #
cp /data/navy /mnt/ #
。
glusterfs-fuse , , 。 NFS , halt !
# service glusterd stop
service glusterfsd stop#
rm -fv /mnt/navy# , navy 。 :serviceglusterd start# ,navy 。 !
5.運用メンテナンスの一般的なコマンド:
gluster volume stop test-volume
gluster volume delete test-volume
gluster peer detach 192.168.10.102
172.28.0.0 glusterfs
gluster volume set test-volumeauth.allow 192.168.10.*
( 2, 2(4、6、8..) )
gluster peer probe 192.168.10.105
gluster peer probe 192.168.10.106
gluster volume add-brick test-volume192.168.10.105:/data/gluster 192.168.10.106:/data/gluster
# gluster
gluster volume remove-brick test-volume192.168.10.101:/data/gluster/test-volume192.168.10.102:/data/gluster/test-volume start
#
gluster volume remove-brick test-volume192.168.10.101:/data/gluster/test-volume192.168.10.102:/data/gluster/test-volume status
#
gluster volume remove-brick test-volume192.168.10.101:/data/gluster/test-volume192.168.10.102:/data/gluster/test-volume commit
# 192.168.10.101 , 192.168.10.107
gluster peer probe 192.168.10.107
gluster volume replace-bricktest-volume 192.168.10.101:/data/gluster/test-volume192.168.10.107:/data/gluster/test-volume start
# gluster volume replace-brick test-volume192.168.10.101:/data/gluster/test-volume192.168.10.107:/data/gluster/test-volume status
# gluster volume replace-brick test-volume192.168.10.101:/data/gluster/test-volume192.168.10.107:/data/gluster/test-volume commit
# 192.168.10.101 , gluster
gluster volume replace-bricktest-volume 192.168.10.101:/data/gluster/test-volume192.168.10.102:/data/gluster/test-volume commit -force
gluster volume heal test-volumes full
24007
二.ログ収集システムの配置
説明:
Logstash: log , 。 , . shipper log 、indexer log .
Logstash shipper log log redis
Logstash indexer redis elasticsearch
redis: db,logstash shipper log redis 。Logstash indexer redis elasticsearch。
kafka: redis kafka, , , ,
Elasticsearch: , , , http://chenlinux.com/categories.html#logstash-ref logstash . , 。 redis , kibana
Kibana: web 。
ログ収集システムアーキテクチャ図:
仮想サーバの準備:
192.168.10.143 logstash shipper
192.168.10.144 logstash indexer kafka elasticsearch
192.168.10.145 elasticsearch-node1 kibana3 kibana elasticsearch
192.168.10.146 elasticsearch-node2
1.3台のホストにjdk 1.7をインストールする必要がありますoracle jdk 1.7+バージョンjava-version javaの環境変数を設定することを推奨します.たとえば
vim ~/.bashrc
>>
JAVA_HOME=/usr/java/jdk1.7.0_55
PATH=$PATH:/$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib
JRE_HOME=$JAVA_HOME/jre
export JAVA_HOME PATH CLASSPATH JRE_HOME
>>
source ~/.bashrc
2.kafka(192.168.10.144)wgetをインストールするhttp://mirrors.hust.edu.cn/apache/kafka/0.8.1.1/kafka2.9.2-0.8.1.1.tgz tar zxvf kafka2.9.2-0.8.1.1.tgz ln –s kafka_2.9.2-0.8.1.1/usr/local/kafka vim/usr/local/kafka/config/server.properties broker.id=10-144 host.name=kafka-10-144 echo"192.168.10.144 kafka-10-144">/etc/hosts kafka起動zookeeperより怠惰で、zookeeper-server cdh 5をインストールする必要があることに注意する.2ソースにはyumソースを配置すればよいyum install zookeeper-server–y vim/etc/zookeeper/conf/zoo.cfg dataDir=/data/zookeeper zookeeperデータ格納経路を設定zookeeperとkafka/etc/initを起動する.d/zookeeper-server start nohup/usr/local/kafka/bin/kafka-server-start.sh/usr/local/kafka/config/server.properties &
3.Elasticsearchの取り付け(192.168.10.145)
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.1.tar.gz
elasticsearch , , ES , elasticsearch , bin elasticsearch
tar zxvf elasticsearch-1.4.1.tar.gz
ln –s elasticsearch-1.4.1 /usr/local/es
cd /usr/local/es/
vim config/elasticsearch.yml , kibana es (es 1.4 kibana 3.1.2 )
cluster.name: elasticsearch
node.name: "G1-logs-es02" , ,
http.cors.enabled: true
http.cors.allow-origin: "*"
nohup bin/elasticsearch &
9200
curl -X GET http://localhost:9200
Elasticsearch(192.168.10.146) :
4.インストールlogstash(192.168.10.143192.168.10.144)生産側と消費側はインストールするここで参考にしますhttp://blog.csdn.net/xzwdev/article/details/41278033 https://github.com/joekiller/logstash-kafka git clone https://github.com/joekiller/logstash-kafka
cd /usr/local/src/logstash-kafka
make tarball kakfa logstash ,
/usr/local/src/logstash-kafka/build/ logstash-1.4.2.tar.gz ,
logstash-1.4.2.tar.gz ,
本番ログの構成と起動(192.168.10.143)
haproxy :
tar zxvf logstash-1.4.2.tar.gz
ln –s logstash-1.4.2 /usr/local/logstash
vim /usr/local/logstash/conf/ logstash_shipper_haproxy.conf
input{
file{
path => "/data/application/haproxy-1.4.18/logs/haproxy.log"
type => "haproxylog"
}
}
output{
kafka{
broker_list => "192.168.10.144:9092" kafka
topic_id => "logstash-haproxylog" id
}
}
nohup /usr/local/logstash/bin/logstash –f /usr/local/logstash/conf/ logstash_shipper_haproxy.conf &
コンシューマサーバの構成:
tar zxvf logstash-1.4.2.tar.gz
ln –s logstash-1.4.2 /usr/local/logstash
vim /usr/local/logstash/consumer_conf/logstash_haproxylog_es.conf
input{
kafka{
zk_connect => "192.168.10.144:2181"
group_id => 'logstash-haproxylog'
topic_id => 'logstash-haproxylog'
}
}
output{
elasticsearch{
host => "192.168.10.145"
port => "9300"
index => "haproxy-5-13-%{+YYYY.MM.dd}"
}
}
コンシューマサービスの開始
nohup /usr/local/logstash/bin/logstash –f /usr/local/logstash/consumer_conf/logstash_haproxylog_es.conf &
補足の最適化:
1,es , if , logstash
:
input{
kafka{
zk_connect => "192.168.35.130:2181"
group_id => "g1.api.test.com"
topic_id => 'g1.api.test.com'
}
kafka{
zk_connect => "192.168.35.130:2181"
group_id => "go.clientinner.test.com"
topic_id => "go.clientinner.test.com"
}
kafka{
zk_connect => "192.168.35.130:2181"
group_id => "api7.mobile.test.com_app"
topic_id => "api7.mobile.test.com_app"
}
}
filter {
ruby {
init => "@kname = ['time','uid','ip','uname','stime','etime','exec_time','url','ua','module','response_status','http_status','query_string']"
code => "event.append(Hash[@kname.zip(event['message'].split('|'))])"
}
mutate {
convert => ["exec_time", "float"]
}
geoip {
database => "/data/application/logstash/patterns/GeoLiteCity.dat"
source => "ip"
fields => ["country_name","city_name"]
}
useragent {
source => "ua"
target => "useragent"
}
}
output{
if [type] == "go.clientinner.test.com"{
elasticsearch{
template => "/usr/local/logstash/conf/logstash.json"
template_overwrite => true # url ,
host => "192.168.35.131"
port => "9300"
index => "go.clientinner.test.com-%{+YYYY.MM.dd}"
}
} else if [type] == "g1.api.test.com"{
elasticsearch{
template => "/usr/local/logstash/conf/logstash.json"
template_overwrite => true
host => "192.168.35.131"
port => "9300"
index => "g1.api.test.com-%{+YYYY.MM.dd}"
}
}else if [type] == "api7.mobile.test.com_app"{
elasticsearch{
template => "/usr/local/logstash/conf/logstash.json"
template_overwrite => true
host => "192.168.35.131"
port => "9300"
index => "api7.mobile.test.com_app-%{+YYYY.MM.dd}"
}
}
}
2,logstashはesにデータを保存して、毎日時間のインデックスを創立して、デフォルトはutc時間を使って、朝8時にやっと創立して、現在のログのデータが昨日のインデックスの中に保存することをもたらして、以下の修正をする必要があります:
logstash/lib/logstash/event.rb
226
.withZone(org.joda.time.DateTimeZone::UTC)
.withZone(org.joda.time.DateTimeZone.getDefault())
5 kibanaのインストール(192.168.10.145)
logstash kibana, kibana。kibana3 JavaScript+html , http 。
wget http://download.elasticsearch.org/kibana/kibana/kibana-latest.zip
unzip kibana-latest.zip
cp -r kibana-latest /var/www/html
config.js elasticsearch 。
。
elasticsearch: "http://192.168.10.145:9200",
6、最終的に以下の図を実現する.
7、ログシステムのメンテナンス:
1,elsasticsearch
es
Es elsasticsearch ,
,
1) shard :
curl -XPUT http://192.168.35.131:9200/_cluster/settings -d '{"transient" : {"cluster.routing.allocation.enable" : "none"}}'
: :
curl -XPOST http://192.168.35.132:9200/_cluster/nodes/_local/_shutdown
curl -XPOST http://192.168.35.131:9200/_cluster/nodes/_local/_shutdown
2) , ,
3) ,
2,kafka+zookeeper :
:kafka_2.9.2-0.8.1.1.tgz elasticsearch-1.4.1.tar.gz
Kafka+zookeeper :
Cat kafka/config/server.properties
broker.id=35125
host.name=192.168.35.125
advertised.host.name=192.168.35.125
log.dirs=/data/kafka-logs
zookeeper.connect=192.168.35.130:2181,192.168.35.124:2181,192.168.35.125:2181
cat /etc/zookeeper/conf/zoo.cfg
dataDir=/data/zookeeper
clientPort=2181
# zookeeper cluster
server.35130=G1-logs-kafka:2888:3888
server.35124=bj03-bi-pro-tom01:2888:3888
server.35125=bj03-bi-pro-tom02:2888:3888
Chown zookeeper.zookeeper /data/zookeeper -R
/etc/init.d/zookeeper-server init /data/zookeeper
Echo “35130” > /data/zookeeper/myid
Chown zookeeper.zookeeper /data/zookeeper -R
/etc/init.d/zookeeper-server start zookeeper
nohup ./bin/kafka-server-start.sh config/server.properties > /data/kafka-logs/kafka.log & kafka
8,kibanaログイン認証インストール構成:
:
Nginx: , es
Nodejs: kibana-authentication-proxy
Kibana: kibana kibana-authentication-proxy
kibana-authentication-proxy: es,
8.1,nginxインストール構成#wgethttp://nginx.org/download/nginx-1.2.9.tar.gz # yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel #tar zxvf nginx-1.2.9.tar.gz # cd nginx-1.2.9 # ./configure --prefix=/usr/local/nginx #make && make install
:
#cat /usr/local/nginx/conf/nginx.conf
user web;
worker_processes 4;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
upstream kianaca {
server 192.168.35.131:9200 fail_timeout=30s;
server 192.168.35.132:9200 fail_timeout=30s;
server 192.168.35.125:9200 fail_timeout=30s;
}
server {
listen 8080;
server_name 192.168.35.131;
location / {
root /var/www/html/kibana-proxy;
index index.html index.htm;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_pass http://kianaca;
proxy_set_header Host lashou.log.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html/kibana-proxy;
}
}
}
# /usr/local/nginx/sbin/nginx -t
#/usr/local/nginx/sbin/nginx
8.2 kibana-authentication-proxyのインストール
#cd /var/www/html/
#git clone https://github.com/wangganyu188/kibana-authentication-proxy.git
#mv kibana-authentication-proxy kibana-proxy
# cd kibana-proxy
#yum install npm
#npm install express
#git submodule init
#npm install
#node app.js
kibana-proxy/config.js
:
es_host # nginx
es_port #nginx 8080
listen_port #node , 9201
listen_host #node IP, 0.0.0.0
cas_server_url
8.3要求パス
node(9201) <=> nginx(8080) <=> es(9200)