elasticsearch 操作实例技巧(五)
一:sense插件使用
查询
GET bank/_search
{
"query": {
"match_all": {}
}
}
GET bank/_search
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
GET bank/account/_search
{
"query":{
"bool":
{
"must":[
{
"match":{
"age":39
}
},
{
"match": {
"state": "SC"
}
},
{
"match": {
"city": "Oley"
}
}]
}
}
}
更新并添加字段
POST kiwi/ksay/1/_update
{
"doc":{
"author":"meng",
"age":2
}
}
PUT /hkqj/employee/3
{
"xing": "hk",
"ming": "hk",
"age": 31,
"dept": "技术部",
"dept_group": "运维组",
"level": "t3",
"phone": 10086,
"email": "mengmeng@hk515.com",
"hoby": [
"读书",
"户外活动"
]
}
POST /hkqj/employee/3/_update
{
"doc":
{
"sex":"女"
}
}
DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现
查询索引中性别为女的
GET /hkqj/employee/_search
{
"query":{
"match": {
"sex": "女"
}
}
}
过滤器
查询年龄大于30小于40的范围
GET /hkqj/employee/_search
{
"query":{
"filtered": {
"filter": {
"range": {
"age": {
"gte": 30,
"lte": 40
}
}
}
}
}
}
并且是性别是女的
GET /hkqj/employee/_search
{
"query": {
"bool": {
"must": { "match":
{
"sex":"女"
} },
"filter": {
"range": {
"age": {
"gte": 30,
"lte": 40
}
}
}
}
}
}
二:技巧
1. 获取节点信息:
curl 192.168.211.155:9200/_nodes/stats/process?pretty
虚拟内存设置
sysctl -w vm.max_map_count=262144
2.设置自动刷新频率
curl -XPUT http://192.168.211.155:9200/kimchy/ -d \
'
index:
refresh_interval: 5s
'
3.显示数据中,过滤字段
单一字段:
curl -XGET '192.168.211.155:9200/bank/account/222?_source_include=age&_source_exclude=state&pretty'
指定多个字段:
curl -XGET '192.168.211.155:9200/bank/account/222?_source_include=age,city&_source_exclude=state&pretty'
模糊匹配
curl -XGET '192.168.211.155:9200/bank/account/222?_source_include=a*&_source_exclude=state&pretty'
特定字段
curl -XGET '192.168.211.155:9200/bank/account/222?fields=age,state&pretty'
4.仅仅获取到_source 文档内容
curl -XGET '192.168.211.155:9200/bank/account/222/_source'
5.延迟删除
延迟5分钟后自动删除
curl -XDELETE 'http://192.168.211.155:9200/twitter/tweet/1?timeout=5m'
三:logstash 导入数据相差 8小时
logstash 数据采集时间差8小时问题及解决
最近采用logstash采集日志按天产生文件
使用过程中发现logstash timestamp记录的时间戳为UTC时间。
比我们的时区早8个小时。
不能确保每天的数据在同一文件。
造成发送到es里的数据每天早上8点才创建索引,发送的file的数据每天早上8点自动切割。
不符合我们实际的需求。
解决此问题。
方法如下:
方法一、加入filter字段即可解决。
logstash.conf
input{
stdin{
}
}
filter{
date{
match => ["message","yyyy-MM-dd HH:mm:ss"]
#timezone => "Asia/Shanghai"
timezone => "+00:00"
}
}
output{
stdout{codec => rubydebug}
}
logstash和elasticsearch是按照UTC时间的,kibana却是按照正常你所在的时区显示的,是因为kibana中可以配置时区信息
json 格式化
[root@rancher-nginx log]# vi messages
{"log_type":"gateway-log","timestamp":"2019-09-03 17:55:24.631","request_seq":""}
{"log_type":"gateway-log","timestamp":"2019-09-03 17:56:34.631","request_seq":""}
{"log_type":"gateway-log","timestamp":"2019-09-03 17:57:54.631","request_seq":""}
logstash.conf
[root@rancher-nginx config]# more logstash.con
input{
file{
type=>"messages"
path=>["/data/log/messages"]
}
}
filter{
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
}
ruby {
code => "event.set('@timestamp',event.get('timestamp'))"
}
mutate {
remove_field => ["timestamp"]
}
date{
match => ["timestamp","yyyy-MM-dd HH:mm:ss.SSS"]
target => "@timestamp"
}
}
output{
stdout{codec => rubydebug}
}