将日志收集到aws的S3存储,通过aws ES实时分析日志、Spark离线日志分析,支持无线扩容。
一、日志收集
利用logstash output直接到S3存储, 在aws建立好bucket,配置好logstash config文件将日志打入到bucket即可。具体配置见logstash output S3
实例:
output {
s3 {
access_key_id => "AKIAJEVY5ZME3Q"
secret_access_key => "QtQiyCZVi06xl9n/2JYfJ1YL+mPWf9"
region => "ap-southeast-1"
bucket => "ott-log-storage"
time_file => 5
codec => "json_lines"
}
}
上述会将日志切成5分钟一段。在aws控制台相应的S3 bucket里面就会看到日志信息。
二、实时分析日志
在aws 服务列表找到 ElasticSearch Service, 按照步骤创建ES实例,十分钟后,创建完成,会有对应的EndPoint信息和Kibana地址。
选择一台机器,最好是EC2, 按照logstash, 将相应S3 bucket 日志文件push到ES中,在Kibana地址配置好index通配字符串后,就可以看到该业务的日志列表。
input
{
s3 {
bucket => "ott-log-storage"
access_key_id => "AKIAJEWJVZY5ZME3Q"
secret_access_key => "QtQiyCZViPR06xl9n/2JYfJsarxY1YL+mPWf9" region => "ap-southeast-1"
}
}
filter
{
json {
source => "message"
remove_field => ["hour", "day"]
}
}
output{
elasticsearch {
hosts
=> ["search-modeyangg-r6qoi2q3bwgmq.apsoutheast-1.es.amazonaws.com:443"]
ssl => true
flush_size => 1000
index => "%{type}_access-%{+YYYY.MM.dd}"
idle_flush_time => 10
}
}
上面是logstash config文件。
三、离线分析日志
在aws上创建spark的EMR服务,创建成功后,利用SSH登陆Master机器,运行pyspark, 即可测试spark集群。
spark支持从S3读取数据,利用EMRFS可供hadoop/spark集群使用, 利用Spark SQL就可像sql一样统计日志数据。
from pyspark.sql
import SQLContext
sqlContext =SQLContext(sc)
df = sqlContext.read.json("s3n://<bucket>/<path>")
df.registerTempTable("ott_log_db")
ott_sql =sqlContext.sql(
"select sitegroup, count(sitegroup) as site_counts from ott_log_db group by sitegroup"
)
ott_sql.show()
具体用法参见Spark SQL