elasticsearch api 使用

常用api

查看elasticsearch状态:

  • curl -XGET http://ES:9200/_cluster/health?pretty
  • curl -XGET http://ES:9200/_cat/health
  • curl -XGET http://ES:9200/_cat/shards
  • curl -XGET http://ES:9200/_cluster/stats?pretty=true
  • curl -XGET 'http://ES:9200/_cat/nodes?v'

内存优化

  • JAVA_OPTS="$JAVA_OPTS -Xmx4g -Xms4g -Xmn1g -Xss16m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g"
  • #Xmn Java Heap Young区大小,不熟悉最好保留默认值,年轻代大小,一般为整个堆空间的1/4到1/3;
  • # -Xss16m每个线程的Stack大小,通常建议使用256K 即可,但是ES单线程承载的数据量比较大
  • #MetaspaceSize 使用堆内存以外的直接系统内存,只受可用的本地内存限制

更改index.refresh_interval

  • PUT /logstash-mil-access-10-20160905
  • {
  •   "settings": {
  •     "refresh_interval": "30s" 
  •   }
  • }

若需要重启elasticsearch , 为了避免重启期间shard 的重新分配导致大量的流量,首先关闭shard allocation :

  • curl -XPUT http://127.0.0.1:9200/_cluster/settings -d'
  • {
  • "transient" : {
  • "cluster.routing.allocation.enable" : "none"
  • }
  • }'
  • 然后对elasticsearch 重启, 重启完成后:
  •   
  • curl -XPUT http://127.0.0.1:9200/_cluster/settings -d'
  • {
  • "transient" : {
  • "cluster.routing.allocation.enable" : "all"
  • }
  • }'

x-pack security

  • x-pack security
  • curl -XPUT 'localhost:9200/_xpack/security/user/kibana/_password' -d '{
  •   "password" : "s0m3thgs3cr3t"
  • }'

logstash匹配实例:

nginx 日志:

  • 211.161.240.16 - - [06/Mar/2018:17:10:21 +0800] toys.m.huanqiu.com "GET /apps/wechat/wechat-1.0.0.js HTTP/1.1" 200 1735 0.127 "https://m.huanqiu.com/r/MV8wXzExNjQyMzcwXzIxMjJfMTUyMDI0OTA0MA==?&from=toutiao&app_name=open_news&app_id=34&utm_campaign=open&utm_medium=webview&utm_source=kuhua_sp_api" "Mozilla/5.0 (Linux; Android 7.0; ZUK Z2121 Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36 Coohua/5.1.4.6 Id/890953855" 119.254.152.225:80 200 0.127 "f1-1-cd" "on" -
  •    
  • 223.104.12.34 - - [06/Mar/2018:17:10:21 +0800] m.huanqiu.com "GET /r/MV8wXzExNjQzNjI2XzIxMjJfMTUyMDMwMjU2MA== HTTP/1.1" 200 6866 0.059 "-" "Mozilla/5.0 (Linux; Android 5.1.1; OPPO A53 Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/42.0.2311.138 Mobile Safari/537.36 JsSdk/2 NewsArticle/5.8.1 NetType/4g" 192.168.8.3:8090 200 0.059 "f1-1-cd" "on" -
  •    
  • 59.77.233.196 - - [06/Mar/2018:17:10:22 +0800] country.huanqiu.com "GET /democraticparty HTTP/1.1" 404 210 0.063 "-" "Apache-HttpClient/4.5 (Java/1.7.0_75)" 119.254.147.247:80 404 0.063 "f1-1-cd" "" -

grok 语法:-

  • "%{URIHOST:client_ip} - (%{USERNAME:user}|-) \[%{HTTPDATE:log_timestamp}\] (%{HOSTNAME:http_host}|-) \"(%{WORD:request_method}|-) %{NOTSPACE:request} (?:HTTP/%{NUMBER:httpversion})\" %{NUMBER:status} (%{NUMBER:body_bytes_sent}|-) (%{BASE16FLOAT:request_time}|-) \"(?:%{GREEDYDATA:http_referrer}|-)\" \"(%{GREEDYDATA:user_agent}|-)\" (?<upstream_addr>((%{IPV4}:%{POSINT}[, ]{0,2})+)|-) (?<upstream_status>(([0-9]{3}[, ]{0,2})+)|-) (?<upstream_response_time>((%{BASE16FLOAT:}[, ]{0,2})+)|-) \"(?<server_name>\S+)\" \"(?<https>(on|))\"

简单的ES crontab 脚本

  • #!/bin/sh
  •  
  • TODAY=`date  +%Y.%m.%d`   
  • TIME30=`date --date="-60 days" +%Y.%m.%d`
  • TIME35=`date --date="-60 days" +%Y.%m.%d`
  • TIME1=`date --date="-1 days" +%Y.%m.%d`
  • TIME8=`date --date="-7 days" +%Y.%m.%d`
  • /usr/bin/curl -XDELETE "http://es2.spark:9200/logstash-userlogs-$TIME30/"
  • /usr/bin/curl -XDELETE "http://es2.spark:9200/packetbeat-http-$TIME35/"
  •  
  • #number_of_replicas num
  • curl -XPUT http://es2.spark:9200/logstash-userlogs-$TODAY/_settings -d '{ "index": { "number_of_replicas" : 1 }}' >/dev/null 2>&1
  •  
  • sleep 1
  •  
  • #refresh_interval time
  • curl -XPUT http://es2.spark:9200/logstash-userlogs-$TODAY/_settings -d '{ "index": { "refresh_interval" : "30s" }}' >/dev/null 2>&1
  •  
  • sleep 1
  •  
  • #optimize yesterday index 
  • echo -e "curl -XPOST 'http://es2.spark:9200/logstash-userlogs-$TIME1/_optimize'" >/tmp/optimize_index.sh
  •  
  • #close index
  • echo -e "curl -XPOST 'http://es2.spark:9200/logstash-userlogs-$TIME8/_close'" > /tmp/close_index.sh
  •  
  • #excute command
  • /bin/sh /tmp/close_index.sh >/dev/null 2>&1
  • sleep 1
  • /bin/sh /tmp/optimize_index.sh >/dev/null 2>&

常用插件网址:

  • elasticsearch-sql 地址: https://github.com/NLPchina/elasticsearch-sql
  •  
  • head 插件地址: https://github.com/mobz/elasticsearch-head