实习用到的。搭环境就是个体力活,收获也有点吧。记录下过程备用。
中间参考了很多文档,写的时候有些内容也直接拷过来了。都给了链接。
一、环境
ubuntu 12.04
java 1.7.071
nginx 1.6.2
elasticsearch 1.1.1
logstash 1.4.2
redis 2.8.17
二、原理:
上图可见,一共分为5个部分,shipper是我们部署在我们需要采集日志的机器上,broker汇聚这些日志,然后统一传到indexer上,ElasitcSearch是一个搜索引擎,负责存储这些日志,并搜索。Webinterface是一个前端展示页面。
logstash起到shipper和Indexer的作用,配置文件不一样。broker一般采用redis,所有的shipper上的日志统一传到redis中。indexer负责从broker中取数据,并将它存储到elasticsearch中。webinterface一般使用kibana,现在es中集成了kibana,直接使用。
三、安装。
java安装:
源文件解压到/usr/lib/jvm/java底下,然后环境变量配置
在终端执行命令:
sudo vi /etc/environment
红色部分为添加的信息:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/java/jdk1.7.0_71/bin:/usr/lib/jvm/java/jdk1.7.0_71/jre/bin"
JAVAHOME=/usr/lib/jvm/java/jdk1.7.0_71
CLASSPATH=/usr/lib/jvm/java/jdk1.7.0_71 /lib:/usr/lib/jvm/java/jdk1.7.0_71/jre/lib
接着设置默认的jdk,因为系统默认可能存在别的jdk
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.7.0_04/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/jdk1.7.0_04/bin/javac 300
选择系统默认的jdk,在终端执行命令:
sudo update-alternatives --config java
选择刚安装的这个。
nginx安装参照。略
安装logstash redis elasticsearch看这篇文章有很多帮助
redis:
用的是2.8.17
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar -zxf redis-2.8.17.tar.gz
cd redis-2.8.17
make
sudo make install
可以通过redis源代码里utils/install_server下的脚本简化配置工作
cd utils
sudo ./install_server.sh
install_server.sh在问你几个问题后会把redis安装为开机启动的服务,可以通过下面的命令行来启动/停止服务
sudo /etc/init.d/redis_ start/end
启动redis客户端来验证安装
redis-cli
> keys *
elasticsearch:
cd /search
sudo mkdir elasticsearch
cd elasticsearch
sudo wget http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.1.zip
sudo unzip elasticsearch-1.1.1.zip
elasticsearch解压即可使用非常方便,接下来我们看一下效果,首先启动ES服务,切换到elasticsearch目录,运行bin下的elasticsearch
cd /search/elasticsearch/elasticsearch-1.1.1
bin/elasticsearch
访问默认的9200端口
curl -X GET http://localhost:9200
我的输出:
{
"status" : 200,
"name" : "Mr. Wu",
"version" : {
"number" : "1.1.1",
"build_hash" : "f1585f096d3f3985e73456debdc1a0745f512bbc",
"build_timestamp" : "2014-04-16T14:27:12Z",
"build_snapshot" : false,
"lucene_version" : "4.7"
},
"tagline" : "You Know, for Search"
}
logstash:
到logstash官网下载1.4.2版本的压缩包。
过程可以参考logstash官方指南。
cd /search
sudo mkdir logstash
cd logstash
把压缩包拷进去。解压即可用。
命令行参数可以参考logstash flags,主要有
安装过程结束。下面开始配置。
配置nginx日志文件格式,在nginx.conf里设置
log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ';
设置shipper的logstash的配置文件。新建配置文件,名称为shipper.conf
内容:
input {
file {
type => "nginx-access"
path => "/usr/local/nginx/logs/access.log"
}
}
output {
stdout {
}
redis {
host => "127.0.0.1"
port => 6379
data_type => "list"
key => "logstash"
}
}
path对应的是nginx日志的路径。output中stdout在原文的内容是“debug=>true debug_format => json”
在我机器上会提示错误,因此都删除掉。造成的后果是采集的每条日志内容都会在控制台输出。
因为shipper和index都是在一台机器。所以redis也是在localhost上。6379是redis的默认端口。
设置index的logstash的配置文件。新建配置文件,名称为index.conf
内容为:
input {
redis {
host => "127.0.0.1"
port => "6379"
data_type => "list"
key => "logstash"
type => "redis-input"
}
}
filter {
grok {
type => "nginx-access"
pattern => "%{IPORHOST:source_ip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] %{QS:request} %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:http_user_agent}"
}
}
output {
elasticsearch {
host => "127.0.0.1"
}
}
在filter中pattern是与nginx的日志格式一致的。
然后就可以启动他们了。
redis安装后默认开机启动。
elasticsearch启动方式如上文所示。
启动作为shipper的logstash:
/search/logstash/logstash-1.4.2/bin/logstash agent -f/search/logstash/logstash-1.4.2/shipper.conf &
启动作为index的logstash:
/search/logstash/logstash-1.4.2/bin/logstash agent -f/search/logstash/logstash-1.4.2/index.conf &
启动logstash的web界面:
/search/logstash/logstash-1.4.2/bin/logstash web &
web页面默认的端口是9292:
http://127.0.0.1:9292
点底下蓝色的logstash Dashboard。
用webbench测试了下nginx,在logstash中已经接收到了数据:
搭建已经完成了。
因为是本机,所以都是用的127.0.0.1,实际的话要根据自己的地址设置。
相关资料发现有人总结的不错,看看资料,有心得再来写了。