背景
要提供一套新的服务,正好借这个机会把所有日志都整合起来:squid,collectd等等。同时存入influxdb中,用influxdb的原因是:
- 需要的查询大多是随机查询,而它提供sql-like的查询语言,并且有一个简单的UI
- go写的。。。。(老大喜欢)
- elasticsearch没有一个好的dashboard
概述
- squid:缓存数据的代理服务器。通过缓存和复用频繁访问的页面来减小带宽和提升响应速度。
- collectd:定时收集系统性能的统计信息并提供了一个存储机制的守护进程。主要用它来收集cpu,内存,带宽的数据。
- logstash:管理事件(event)和日志(log)的工具。可以通过插件的形式收集各种日志,并通过filter和output的插件来处理和输出到合适的后端。官方是对Elasticsearch默认进行无节操的支持的。。文档里面简直不忍直视。。
- influxdb:分布式的,time series的db
- elasticsearch:它自己说是一个全文检索和分析的引擎。
- 另外对redis这种内存数据库也有了一些了解,以前只是会用,并没有深入去了解。因为对它的持久化比较感兴趣,了解过后发现主要是两点:不persist,只replicate;还有合理的数据淘汰机制。
logstash的influxdb output plugin
用的是这个:plugin
自己在测试的时候,用这样的一个conf:
input {
stdin { }
}
filter {
grok {
match => ["message", '%{NUMBER:time} %{HTTPDATE} %{NUMBER:duration} %{IP:ip} .... "%{DATA:user_agent}"']
}
ruby {
code => 'event["start_time"] = event["time"].to_f - event["duration"].to_f'
}
}
output {
influxdb {
db => "test01"
host => "localhost"
port => "8086"
user => "*****"
password => "*****"
series => "kobe"
allow_time_override => true
coerce_values => {
"time" => "float"
"start_time" => "float"
"duration" => "integer"
"transfer_size" => "integer"
}
data_points => {
"time" => "%{time}"
"start_time" =>