1.环境介绍:
使用的logstash(分别部署在两个服务器上收集日志)+redis+logstash+elasticsearch+kibana。
安装的java8 。logstash版本2.2.4-1 redis版本v=2.8.3 logstash版本2.2.4-1 elasticsearch2.4.5 kibana 4.4.2
A+B(部署的logstash)每个小时都有日志通过到特定目录,压缩包文件。通过编写python脚本每个小时对日志进行过滤处理成可以识别的状态放到logstash可以识别的目录。logstash识别新数据后,传到redis服务器。
详细的配置说明详见http://udn.yyuap.com/doc/logstash-best-practice-cn/input/stdin.html
/etc/logstash/conf.d/logstash.conf
安装 Logstash:
Logstash 软件包和 Elasticsearch 的在同一个版本库,之前我们已经添加了这个公共密钥。所以,直接创建 Lostash 的资源列表:
1 | echo 'deb http://packages.elastic.co/logstash/2.2/debian stable main' | sudo tee /etc/apt/sources .list.d /logstash-2 .2.x.list |
更新 apt 包数据源并安装:
1 2 | sudo apt-get update sudo apt-get install logstash |
配置logstash
input {
file {
type => "click" #给日志定一个类型
path => "/srv/om-data-backup/click_log_hour_analyse/*.log" #日志每小时都处理后放到这里
start_position => "beginning" #从文件开始处读写
}
# stdin {} #可以从标准输入读数据
}
filter {
#执行ruby程序,下面例子是将日期转化为字符串赋予daytag
ruby {
code => "event['daytag'] = event.timestamp.time.localtime.strftime('%Y-%m-%d')"
}
#定义数据的格式
grok {
match => { "message" => "%{DATA:PlayName}\&%{DATA:Action}\&%{DATA:UserID}\&%{DATA:VideoID}\&%{IP:AccessIP}\&%{DATA:TimeStamp}\&%{DATA:Protocol}\&%{DATA:Suffix}\&%{DATA:AccessUrl}\&%{DATA:TerminalType}\&%{GREEDYDATA:UserAgent}"}
}
date {
match => [ "TimeStamp" , "dd/MMM/yyyy:HH:mm:ss"] ##将上边message中匹配的时间字符串转换成时间戳类型的数值,使得时间戳为日志的访问时间。
}
geoip {
source => "AccessIP"
# fields => ["continent_code", "country_name", "city_name","real_region_name", "country_code2", "country_code3", "ip", "latitude", "longitude", "location", "timezone"]
fields => ["country_name", "city_name","real_region_name", "ip", "latitude", "longitude", "location"]
} ##增加上边message中匹配的访问IP的地址查询功能。获取来访地址的位置信息。
}
output {
# stdout{codec=>rubydebug}
# elasticsearch {
# hosts => ["localhost:9200"]
## protocol => "http"
# sniffing => true
# manage_template => false
# index => "logstash-%{type}-%{+YYYY.MM.dd}"
# document_type => "%{type}"
## workers => 5
## template_overwrite => true
# }
redis{
host => '10.12.70.122:6379' #redis服务器ip和端口
data_type => 'list' #列表方式存入redis,logstash取的时候也是这个类型。
# key => 'logstash-%{type}-%{+YYYY.MM.dd}'
key => 'logstash:redis' ##redis中存储的方式。redis-cli 输入keys * 可以看到。
}
}
C(部署redis服务) 安装并配置redis,设置redis端口6379 。启动方式redis-server /path/to/config/file
redis有个安全问题需要注意。默认是不需要任何权限就可以登录。所以,启动redis需要做安全设置。
我的方法是添加iptables策略。
先允许,再全部拒绝,可以达到只允许某些IP访问某个端口目的。
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT
iptables -A OUTPUT -d 127.0.0.1 -p tcp --sport 6379 -j ACCEPT
允许本地访问,可以通过redis-cli进行测试。
iptables -A INPUT -s 1.1.1.1 -p tcp --dport 6379 -j ACCEPT
iptables -A OUTPUT -d 1.1.1.1 -p tcp --sport 6379 -j ACCEPT
允许某个特定的IP 1.1.1.1访问 6379端口。
还可以同样的方式添加其他IP访问6379端口。
iptables -A INPUT -s 0.0.0.0/0 -ptcp --dport 6379 -j DROP
这样拒绝掉了其他端口访问6379端口。
D(部署logstash+elasticsearch+kibana)
安装java 8:
Elasticsearch 和 Logstash 需要 Java,所以我们需要安装。Elasticsearch 需要安装最新的 Oracle Java 8。
添加 Oracle JavaPPA 到 apt并安装:
add-apt-repository -y ppa:webupd8team/java
apt-get update
apt-get -y install oracle-java8-installer
安装 Elasticsearch:
用下面的命令来导入 Elasticsearch 公共 GPG 密钥到 apt:
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
创建 Elasticsearch 资源列表:echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
更新 apt 包数据库并安装elasticsearch:sudo apt-get update
sudo apt-get -y install elasticsearch
安装完毕后进行配置:vim /etc/elasticsearch/elasticsearch.yml
path.data: /srv/ # 分析后数据存放位置
network.host: # localhost 或者IP
http.port: 9200 # 启用的端口
service elasticsearch restart
# 启动过程会校验java环境和/etc/default/elasticsearch里面的设置。
# 日志目录/var/log/elasticsearch/elasticsearch.log
安装 Kibana:
Kibana 可以用包管理器通过添加 Elastic 的包源列表进行安装。创建 Kibana 资源列表:
echo "deb http://packages.elastic.co/kibana/4.4/debian stable main" | sudo tee -a /etc/apt/sources.list.d/kibana-4.4.x.list
更新 apt 包数据源并安装:sudo apt-get update
sudo apt-get -y install kibana
vim /opt/kibana/config/kibana.yml
server.port: 5601 # 端口
server.host: "localhost" # 监听IP
elasticsearch.url: "http://localhost:9200" # elasticsearch 端口。
启动kibana:service kibana start
# 启动过程会校验/etc/default/kibana里面的参数。
# 日志位置 /var/log/kibana/kibana.stdout