美文网首页
kibanna搜索

kibanna搜索

作者: 杨_振伟 | 来源:发表于2018-01-11 15:28 被阅读0次

    kibanna搜索规则

    1. 语法关键字
    + - && || ! ( ) { } [ ] ^ " ~ * ? : \ 
    如果所要查询的查询词中本身包含关键字,则需要用\进行转义
    
    1. 查询词(Term)
    在搜索框搜索balance, cert_no。包含balance 或者 cert_no 都会搜索到
    用引号包裹起来"balance, cert_no"表示精确搜索
    
    1. 查询域(Field)
    在搜索框中输入 appName:"mortgage-service"
    
    1. 通配符查询(Wildcard)
    支持两种通配符:?表示一个字符,*表示多个字符。
    在搜索框中输入 cha*name
    
    1. 模糊查询(Fuzzy)
    quikc~ brwn~ foks~
    
    1. 临近查询(Proximity)
    在搜索框中输入  "order by  asc" ~2 表示这三个单子之间的距离不超过2
    "order by create_time asc LIMIT" 可以被搜索到
    
    1. 区间查询(Range)
    区间查询包含两种,一种是包含边界,用[A TO B]指定,一种是不包含边界,用{A TO B}指定。
    bytes[1000 TO 10000]   bytes:>100000
    
    1. 增加一个查询词的权重(Boost)
    可以在查询词后面加^N来设定此查询词的权重,默认是1,如果N大于1,
    则说明此查询词更重要,如果N小于1,则说明此查询词更不重要
    例:(图片^2  执行) 包含图片的文档会排在前面
    
    1. 布尔操作符
    quick brown +fox -news
    fox是必须存在的
    news是必须不包含的
    quick and brown 是可选的  空格表示或的意思
    
    1. 组合
    (quick OR brown) AND fox
    status:(active OR pending) title:(full text search)^2
    

    elasticsearch搜索

    1. 介绍


      DSL.png
    1. 检索一月10号, 外微nginx日志中响应时间超过5秒的
      • sql写法
        select * from waiwei_nginx where request_time >5 and (datetime > 1515542400000 and datetime < 1515628800000)
      • kibanna简短写法
        request_time:>5 AND @timestamp:>1515542400000
      • elasticsearch query DSL
    GET  /nginx-app-wechat_waiwei-*/_search
      {
        "query": {
          "bool": {
            "must": [
              {
               "range": {
                  "request_time": {
                    "gt": 5
                  }
                }
              },
              {
                "range": {
                  "@timestamp": {
                    "gt": 1515542400000,
                     "lt": 1515628800000
                  }
                }
              }
            ]
          }
        }
      }
    
    1. 检索一月10号,外微nginx日志中响应时间超过3秒的url,并统计每个url出现的次数
      • sql写法
        select count(*),url from waiwei_nginx where request_time >5 and datetime > 1515542400000 and datetime < 1515628800000 group by url
      • elasticsearch query DSL
      GET  /nginx-app-wechat_waiwei-2018.01.10/_search
      {
        "size": 0, 
        "query": {
            "bool": {
              "filter": {
                 "range": {
                   "request_time": {
                     "gte": 5
                   }
                 }
              }
            }
        },
        "aggs": {
          "url": {
            "terms": {
              "field": "url.keyword"
            }
          }
        }
      }
    
    1. 求外微nginx日志中每个url的平均耗时和调用次数以及响应码的占比,按平均时间排序取前5条
      • sql 写法
        select AVG( request_time) as avg_request_time,count(status),url,status from waiwei_nginx GROUP BY url,status order by avg_request_time LIMIT 5
      • elasticsearch query DSL
      GET  /nginx-app-wechat_waiwei-*/_search
      {
        "size": 0, 
        "aggs": {
          "url": {
            "terms": {
              "field": "url.keyword",
              "size":"5", 
               "order": {
                 "avg_request_time": "desc"
               }
             },
             "aggs": {
               "avg_request_time": {
                 "avg": {
                   "field": "request_time"
                 }
               },
               "status":{
                  "terms": {
                    "field": "status"
                  }
               }
              }
          }
        }
      }
    

    elk 部署

    1. 准备三个节点 elk1、elk2、elk3
    1. docker-machine create  --engine-registry-mirror=https://7os77co8.mirror.aliyuncs.com \
      --driver generic \
      --generic-ip-address=10.33.80.122  \
      --generic-ssh-key ~/.ssh/id_rsa \
       elk1
    
    2. docker-machine create  --engine-registry-mirror=https://7os77co8.mirror.aliyuncs.com \
      --driver generic \
      --generic-ip-address=10.33.80.123 \
      --generic-ssh-key ~/.ssh/id_rsa \
       elk2
    
    3.  docker-machine create  --engine-registry-mirror=https://7os77co8.mirror.aliyuncs.com \
      --driver generic \
      --generic-ip-address=10.33.80.124  \
      --generic-ssh-key ~/.ssh/id_rsa \
       elk3
    
    1. 准备elk环境
    1. docker-machine ssh elk1 "sysctl -w vm.max_map_count=262144"
    
    2. docker-machine ssh elk1 "echo 'vm.max_map_count=262144' >> /etc/sysctl.conf"
    
    3. docker-machine ssh elk1 "echo    '*  soft nproc 65536
                                      *  hard nproc 65536
                                      *  soft nofile 65536
                                      *  hard nofile 65536
                                      *  soft memlock unlimited
                                      *  hard memlock unlimited' >> /etc/security/limits.conf"
                                      
    4. docker-machine ssh elk1 "sudo swapoff -a" (永久关闭交换内存则需要修改/etc/fstab)
    
    5. docker-machine ssh elk2、elk3也执行上述步骤。
    
    1. 准备swarm环境
    1. docker-machine ssh elk1  "docker swarm init"
    
    2. docker-machine ssh elk2  "docker swarm join --token SWMTKN-1-************************ IP(elk1的IP)"
    
    3. docker-machine ssh elk3  "docker swarm join --token SWMTKN-1-************************ IP(elk1的IP)"
    
    4. docker-machine ssh elk1 "firewall-cmd --permanent --zone=public --add-port=5601/tcp  --add-port=9200/tcp --add-port=9300/tcp  --add-port=5044/tcp --add-port=7946/tcp  --add-port=7946/udp  --add-port=4789/udp --permanent  && firewall-cmd --reload" 
    
    5. docker-machine ssh elk2 "firewall-cmd --permanent --zone=public --add-port=5601/tcp  --add-port=9200/tcp  --add-port=9300/tcp --add-port=5044/tcp --add-port=7946/tcp  --add-port=7946/udp  --add-port=4789/udp --permanent  && firewall-cmd --reload" 
    
    6. docker-machine ssh elk3 "firewall-cmd --permanent --zone=public --add-port=5601/tcp  --add-port=9200/tcp  --add-port=9300/tcp --add-port=5044/tcp --add-port=7946/tcp  --add-port=7946/udp  --add-port=4789/udp --permanent  && firewall-cmd --reload" 
    备注:5601是kibana端口、9200是elasticsearch的端口、5044是beat接收日志的端口、7946与4789是swarm服务发现的端口
    
    1. 准备启动
    1. eval $(docker-machine env elk1)
    
    2.  docker node update --label-add logstash=logstash elk2 && docker node update --label-add logstash=logstash elk3 
    备注: 有logstash标签的节点才会接受logstash服务
    
    3. docker node update --label-add elasticsearch=elasticsearch elk1 && \
       docker node update --label-add elasticsearch=elasticsearch elk2 && \
       docker node update --label-add elasticsearch=elasticsearch elk3
    备注: 有elasticsearch标签的节点才会接受elasticsearch服务 
    
    4. git clone https://github.com/yangzhenwei-java/docker-swarm-elk.git
    
    5. cd docker-swarm-elk && docker stack deploy -c docker-compose.yml elk
    
    6. docker run  --name filebeat -v /root/logs:/usr/share/filebeat/logs  registry.cn-beijing.aliyuncs.com/yangzhenwei/filebeat:6.1.0
    备注:当前docker-machine的默认控制节点是elk1, 执行eval $(docker-machine env --unset)去除控制
    
    1. 备注:
        1. registry.cn-beijing.aliyuncs.com/yangzhenwei/elasticsearch 只是为了加速下载镜像,
            没有做别的改动。官方的镜像如docker.elastic.co/elasticsearch/elasticsearch:6.1.0 下载太慢了。
        
        2. 收集tomcat的日志格式如下
        <pattern> %d^|^%contextName^|^%X{requestId}^|^%level^|^%c{1.}^|^%t^|^%m%n</pattern>
        
        3. 收集nginx的日志格式如下
            log_format json '{"datetime":"$time_local",'
                            '"clientip":"$remote_addr",'
                            '"ident":"$remote_user",'
                            '"http_host":"$host",'
                            '"method":"$request_method",'
                            '"url":"$uri",'
                            '"status":$status,'
                            '"bytes":$body_bytes_sent,'
                            '"referrer":"$http_referer",'
                            '"agent":"$http_user_agent",'
                            '"x_forwarded_for":"$http_x_forwarded_for",'
                            '"appName":"$app_name",'
                            '"upstream_addr":"$upstream_addr",'
                            '"upstream_response_time":"$upstream_response_time",'
                            '"request_time":$request_time}';
    

    参考

    相关文章

      网友评论

          本文标题:kibanna搜索

          本文链接:https://www.haomeiwen.com/subject/xnoznxtx.html