免费注册
帮助文档(华北一、二)
日志记录
  • Elasticsearch 会输出很多日志,默认的日志记录等级是 INFO 。它提供了适度的信息,但是又设计好了不至于让你的日志太过庞大。

    当调试问题的时候,特别是节点发现相关的问题(因为这个经常依赖于各式过于繁琐的网络配置),提高日志记录等级到 DEBUG 是很有帮助的。

    调高节点发现的日志记录级别:

     
    PUT /_cluster/settings 
    {     
      "transient" : {         
        "logger.discovery" : "DEBUG"     
      } 
    }

    慢日志

    还有另一个日志叫 慢日志 。这个日志的目的是捕获那些超过指定时间阈值的查询和索引请求。这个日志用来追踪由用户产生的很慢的请求很有用。

    默认情况,慢日志是不开启的。要开启它,需要定义具体动作(query,fetch 还是 index),你期望的事件记录等级( WARN 、 DEBUG 等),以及时间阈值。

    这是一个索引级别的设置,也就是说可以独立应用给单个索引:

     

    PUT /my_index/_settings

    {

        "index.search.slowlog.threshold.query.warn" : "10s",

        "index.search.slowlog.threshold.fetch.debug": "500ms",

        "index.indexing.slowlog.threshold.index.info": "5s"

    }

    # 查询慢于 10 秒输出一个 WARN 日志

    # 获取慢于 500 毫秒输出一个 DEBUG 日志

    # 索引慢于 5 秒输出一个 INFO 日志

    一旦阈值设置过了,你可以和其他日志器一样切换日志记录等级:

     
    PUT /_cluster/settings 
    {     
      "transient" : {         
        "logger.index.search.slowlog" : "DEBUG",         
        "logger.index.indexing.slowlog" : "WARN"     
      } 
    # 设置搜索慢日志为 DEBUG 级别 
    # 设置索引慢日志为 WARN 级别

    历史数据清理

    随着数据的不断写入,节点的磁盘使用率就会不断攀升,超过一定阀值就会出现不能分配分片的现象。一种解决方法就是删除部分索引数据来使集群节点的磁盘使用率保持在一种合理状态。

    删除历史数据,可以通过网络互通的云服务器 ECS或 ES服务的 Kibana 来实现。通过API可以删除通配符的一类索引或特定索引,也可以借助脚本来定时清理。

    获取集群索引信息:

    # Inspur
    curl -s -XGET 'http://<host>:9200/_cat/indices?v'
    # Kibana
    GET /_cat/indices?v

    删除索引:

    # UHost 
    curl -s -XDELETE 'http://<host>:9200/index'
    # Kibana
    DELETE /index

    定时清理脚本(此脚本适用于logstash写入索引有时间标记的情况,其他情况可参考修改):

    #!/bin/bash 
    #author: UCloud
    #created at 2017/08/30 19:00
    if test ! -f "/var/log/elkDailyDel.log"; then    
      touch /var/log/elkDailyDel.log
    fi
    # 获取索引信息
    # 请将下行当中的localhost改成自己elasticsearch服务对应的Ip
    indices=$(curl -s -XGET "localhost:9200/_cat/indices?v" |grep 'logstash'
    |awk '{print $3}')
    # 设置保留索引的时间线
    thirtyDaysAgo=$(date -d "$(date +%Y%m%d) -30 days" "+%s")
    function DelOrNot(){    
      if [ $(($1-$2)) -ge 0 ]; then        
        echo 1    
      else        
        echo 0    
      fi
    }
    for index in ${indices}
    do    
      indexDate=`echo ${index##*-} |sed 's/\./-/g'`    
      indexTime=`date -d "${indexDate}" "+%s"`    
      if [ `DelOrNot ${indexTime} ${thirtyDaysAgo}` -eq 0 ]; then        
        # 索引时间在时间线之前执行删除操作        
        # 请将下行当中的localhost改成你自己elasticsearch服务对应的Ip        
        result=`curl -s -XDELETE "localhost:9200/${index}"`        
        echo "delResult is ${result}" >> /var/log/elkDailyDel.log        
        if [ `echo ${result} |grep 'acknowledged' |wc -l` -eq 1 ]; then            
          echo "${index} had already been deleted!" >>
    /var/log/elkDailyDel.log        
        else            
          echo "there is something wrong happend when deleted ${index}" >>
    /var/log/elkDailyDel.log        
        fi    
      fi
    done
    echo $?

    数据冷热分离

    SSD磁盘类型的集群随着数据的不断写入,节点的磁盘数据逐渐增大。可能对于一些较老的数据,不需要太多的查询或不再做查询使用,那么这些数据就会占用大量的SSD性能资源和存储空间。数据冷热分离通过配置使最新的数据保存在ssd磁盘节点上,较老的数据自动迁移到廉价sata节点,使用有限的ssd节点资源来实现同时支持高并发读写和大数据量的存储。

    ES服务也给出了数据冷热分离的策略,过程如下:

    ● 准备

    集群实例:

    SSD(愿集群):ues-qwerty,前三个节点ip分别为 ues-qwerty-ip1、ues-qwerty-ip2、ues-qwerty-ip3

    SATA(新集群):ues-asdfgh

    1、愿集群(ues-qwerty)修改配置。

    控制台上修改 参数管理node.attr.tag 项为 hot

    2、线性重启原集群(ues-qwerty)

    3、固定原索引在原集群节点上(ues-qwerty)

     

    # Ecs

    curl -XPUT localhost:9200/*/_settings -d '{"settings": 

    {"index.routing.allocation.require.tag": "hot"}}'

    # Kibana

    PUT /*/_settings

    {

      "settings": {

        "index.routing.allocation.require.tag": "hot"

      }

    }

    4、新集群(ues-asdfgh)修改配置,同1

    cluster.name: ues-qwerty

    discovery.zen.ping.unicast.hosts: [ues-qwerty-ip1,ues-qwerty-ip2,ues-qwerty-ip3]

    node.attr.tag: cold

    5、重启新集群(ues-asdfgh)

    6、老数据迁移到 cold 节点

     
    # Ecs 
    curl -XPUT localhost:9200/cold_index/_settings -d '{"settings": 
    {"index.routing.allocation.require.tag": "cold"}}' 
    # Kibana 
    PUT /cold_index/_settings 
    {   
      "settings": {     
        "index.routing.allocation.require.tag": "cold"   
      } 
    }

    定时迁移脚本示例:

     
    #!/bin/bash 
    #author: Inspur 
    #created at 2017/08/30 19:00 
    time=`date -d last-day "+%Y.%m.%d"` 
    # 请将下行当中的localhost改成自己elasticsearch服务对应的Ip 
    curl -XPUT http://localhost:9200/*-${time}/_settings -d' 
    {   
    "index.routing.allocation.require.tag": "cold" 
    }'

    本章主要参考:

    https://www.elastic.co/guide/cn/elasticsearch/guide/current/administration.html