elasticsearch使用经验

设定副本和切片数量

1
2
number_of_replicas 是数据备份数,如果只有一台机器,设置为0
number_of_shards 是数据分片数,默认为5,有时候设置为3

默认情况下每个索引都会生成5个切片,当然会占用大量磁盘空间。如果是对于安全性要求一般的情况下可以通过设置模板来改变数量。

配置模板文件

  • index的名字必须要和指定的json文件中的templete名相匹配,定义的mapping才会生效。logstash的output配置的template_name名可以随便。
  • 对于按照日期生成的规则解决办法,就是将template名末尾加一个*号通配符即可:
    1
    "template":"logstash-nginx_joy_app*"
1
2
3
4
5
6
7
8
9
10
vim /usr/local/elk/logstash/config/es_nginx.json

{
"template":"logstash-nginx_joy_app*",
"settings":
{
"index.number_of_shards": 2,
"number_of_replicas": 1
}
}

配置logstash文件

1
2
3
4
5
6
7
8
9
10
11
12
output {
if [fields][service] == "nginx_joy_app"{
elasticsearch {
hosts => ["10.110.1.19:9200"]
index => "logstash-nginx_joy_app-%{+YYYY.MM.dd.HH}"
document_type => "logstash-nginx_joy_app"
manage_template => true
template_overwrite => true
template_name => "logstash-nginx_joy_app*"
template => "/usr/local/elk/logstash/config/es_nginx.json"
}
}

这样就按照模板规则来生成对应索引了。

日常语法

按照字段搜索

1
字段名: 值

字符串查询

查询一个或者多个的短语

1
"短语"

正则查询

1
status: 50*

范围查询

允许一个字段值在某个区间。[] 包含该值,{}不包含。

1
status: {200 TO *}

布尔查询

布尔运算符(AND,OR,NOT)允许通过逻辑运算符组合多个子查询。

运算符AND/OR/NOT必须大写。

NOT type: mysql

mysql.method: SELECT AND mysql.size: [10000 TO *]

(mysql.method: INSERT OR mysql.method: UPDATE) AND responsetime: [30 TO *]

插件

Logstash中的 logstash-filter-useragent 插件可以帮助我们过滤出浏览器版本、型号以及系统版本。

1
2
3
4
5
6
if [user_ua] != "-" {
useragent {
target => "agent" #agent将过来出的user agent的信息配置到了单独的字段中
source => "user_ua" #这个表示对message里面的哪个字段进行分析
}
}

------ 本文结束 ------

版权声明

Medivh's Notes by Medivh is licensed under a Creative Commons BY-NC-ND 4.0 International License.
Medivh创作并维护的Medivh's Notes博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Medivh 博客( http://www.mknight.cn ),版权所有,侵权必究。