elasticsearch那几个坑

公司有若干的nginx日志,打算用elastic search实现对实践间隔nginx请求量的统计,实现对各种常用指标的检索。

大坑1:

有三台同配置的es,但总有一台异常退出。经过对该服务器的内存使用情况进行分析,发现,是有进程占用内存,导致es的内存OOM。

大坑2:

es需要用logstash读取nginx日志进行解析,但如何书写规则,特别是自定义的nginx日志规则。

建议用如下网站进行日志的匹配规则编写。

http://grokdebug.herokuapp.com/

我根据我们日志编写了如下规则,可以参考。

input {
	
filter {
	grok {
            match =>{"message" =>"\"%{IP:remote_addr}\" \"%{IPORHOST:upstream_addr}:%{POSINT:port}\" \"\[%{HTTPDATE:time_local}\]\" \
"%{BASE16FLOAT:request_time}\" \"%{BASE16FLOAT:upstream_response_time}\" \"%{INT:status}\" \"%{WORD:sent_http_ufactrl_response_code}\
" \"%{INT:request_length}\" \"%{INT:bytes_sent}\" \"%{NOTSPACE:sent_http_ufactrl_subapp_code}\" \"%{WORD:verb} %{URIPATHPARAM:request
} HTTP/%{NUMBER:httpversion}\" \"%{DATA:http_user_agent}\""}

	}
	#mutate {
	#	split  => { "message" => "\"  " }
	#}
	date {
		match => [ "time_local" , "dd/MMM/yyyy:HH:mm:ss Z" , "yyyy-MMM-dd HH:mm:ss" ]
	}
	geoip {
		source => "remote_addr"
	}

	kv {
		source => "request"
			field_split => "&?"
			value_split => "="
	}
	urldecode {
		all_fields => true
	}
}

output {
	elasticsearch {
		hosts => '10.0.3.99'
			index =>"%{type}-nginx-%{+YYYY.MM.dd}"
			document_type => "nginx"
#		document_type => "%{type}"
			template_overwrite => true
	}
#	stdout {
#		codec => rubydebug
#	}
}

大坑3:

如果直接用logstash进行日志收集,那节点服务器的内存会占用很多。所以,我们使用n个logstash foward 汇集日志到logsgtash节点。当然,kafka更好。

es里如下配置:

lumberjack {
# The port to listen on
		port => 13810

# The paths to your ssl cert and key
			ssl_certificate => "/home/ke/logstash-2.1.0/bin/lumberjack.crt"
			ssl_key => "/home/ke/logstash-2.1.0/bin/lumberjack.key"

# Set this to whatever you want.
			type => "somelogs"
	}
}

大坑4.kabian的大坑。

每次都下意识想把日志时间字段转化为timestap.其实不用这样。直接拿来日期,用kabian直接显示即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值