Python Elasticsearch API操作ES集群

环境

  • Centos 7.4
  • Python 2.7
  • Pip 2.7 MySQL-python 1.2.5 Elasticsearc 6.3.1
  • Elasitcsearch6.3.2

知识点

  • 调用Python Elasticsearh API
  • Python Mysqldb使用
  • DSL查询与聚合
  • Pyehon 列表操作

代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#minyt 2018.9.1
#获取24小时内出现的模块次数
# 该程序通过elasticsearch python client 获取相关精简数据,可以计算请求数、超时数、错误数、正确率、错误率等等
import MySQLdb
from elasticsearch import Elasticsearch
from elasticsearch import helpers

#定义elasticsearch集群索引名
index_name = "logstash-nginxlog-*"

#实例化Elasticsearch类,并设置超时间为180秒,默认是10秒的,如果数据量很大,时间设置更长一些
es = Elasticsearch([‘elasticsearch01‘,‘elasticsearch02‘,‘elasticsearch03‘],timeout=180)

#DSL(领域特定语言)查询语法,查询top50 sname的排列次数
data_sname = {
  "aggs": {
    "2": {
      "terms": {
        "field": "apistatus.sname.keyword",
        "size": 100,
        "order": {
          "_count": "desc"
        }
      }
    }
  },
  "size": 0,
  "_source": {
    "excludes": []
  },
  "stored_fields": [
    "*"
  ],
  "script_fields": {},
  "docvalue_fields": [
    "@timestamp"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        },
        {
          "range": {
            "@timestamp": {
              "gte" : "now-24h/h",
              "lt" :  "now/h"
            }
          }
        }
      ],
      "filter": [],
      "should": [],
      "must_not": []
    }
  }
}

#按照DSL(特定领域语言)语法查询获取数据
def get_original_data():
    try:
        #根据上面条件搜索数据
        res = es.search(
            index=index_name,
            size=0,
            body=data_sname
        )
        return res

    except:
        print "get original data failure"

#初始化数据库
def init_mysql():
    # 打开数据库连接
    db = MySQLdb.connect("localhost", "myuser", "mypassword", "mydb", charset=‘utf8‘ )

    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    # SQL 更新语句
    sql = "update appname set count=0"
    try:
        # 执行SQL语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except:
        # 发生错误时回滚
        db.rollback()

    # 关闭数据库连接
    db.close()

def updata_mysql(sname_count,sname_list):
    # 打开数据库连接
       db = MySQLdb.connect("localhost", "myuser", "mypassword", "mydb", charset=‘utf8‘ )

    # 使用cursor()方法获取操作游标
    cursor = db.cursor()

    # SQL 更新语句
    sql = "update appname set count=%d where sname = ‘%s‘" % (sname_count,sname_list)
    try:
        # 执行SQL语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except:
        # 发生错误时回滚
        db.rollback()

    # 关闭数据库连接
    db.close()

#根据Index数据结构通过Elasticsearch Python Client上传数据到新的Index
def import_process_data():
    try:
        #列表形式显示结果
        res = get_original_data()
        #print res
        res_list = res.get(‘aggregations‘).get(‘2‘).get(‘buckets‘)
        #print res_list

        #初始化数据库
        init_mysql()

        #获取24小时内出现的SNAME
        for value in res_list:
            sname_list = value.get(‘key‘)
            sname_count = value.get(‘doc_count‘)
            print sname_list,sname_count
            #更新sname_status值
            updata_mysql(sname_count,sname_list)

    except Exception, e:
        print repr(e)

if __name__ == "__main__":
    import_process_data()

总结

关键是DSL语法的编写涉及查询与聚合可以通过kibana的visualize或者devtool先测试出正确语法,然后结合python对列表、字典、除法、字符串等操作即可。下面汇总下各个算法:

  • 总请求
    http_host.keyword: api.mydomain.com
  • 超长请求
    http_host.keyword: api.mydomain.com AND request_time: [1 TO 600] NOT apistatus.status.keyword:*错误
  • 错误请求
    apistatus.status.keyword:*错误 AND (http_host.keyword: api.mydomain.com OR http_host.keyword: api.yourdomain.com )
  • 请求健康度
    域名与request_time聚合,域名请求时间小于3秒的次数除以总请求次数对应各个域名健康度
  • 请求正确率
    域名与http状态码聚合,域名http状态码为200的次数除以域名总请求数对应各个域名的请求正确率

原文地址:http://blog.51cto.com/jerrymin/2169232

时间: 2024-09-29 15:37:18

Python Elasticsearch API操作ES集群的相关文章

elasticsearch(es) 集群恢复触发配置(Local Gateway参数)

elasticsearch(es) 集群恢复触发配置(Local Gateway) 当你集群重启时,几个配置项影响你的分片恢复的表现. 首先,我们需要明白如果什么也没配置将会发生什么. 想象一下假设你有 10 个节点,每个节点只保存一个分片,这个分片是一个主分片或者是一个副本分片,或者说有一个有 5 个主分片/1 个副本分片的索引.有时你需要为整个集群做离线维护(比如,为了安装一个新的驱动程序), 当你重启你的集群,恰巧出现了 5 个节点已经启动,还有 5 个还没启动的场景. 假设其它 5 个节

ELasticSearch(五)ES集群原理与搭建

一.ES集群原理 查看集群健康状况:URL+ /GET _cat/health (1).ES基本概念名词 Cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的. Shards 代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大

ES集群修改index副本数报错 :index read-only / allow delete

ES集群修改index副本数,报错 :index read-only / allow delete (api) 原因: es集群数据量增速过快,导致个别es node节点磁盘使用率在%80以上,接近%90 ,由于ES新节点的数据目录data存储空间不足,导致从master主节点接收同步数据的时候失败,此时ES集群为了保护数据,会自动把索引分片index置为只读read-only. 故障处理办法: 1:集群加节点,简单粗暴: 2:降低集群index副本数量: 3:其它:增加磁盘.删除历史数据等:

ES 集群关键状态指标

ES监控状态指标分三个级别: 1:集群级别:集群级别的监控主要是针对整个ES集群来说,包括集群的健康状况.集群的状态等.2:节点级别:节点级别的监控主要是针对每个ES实例的监控,其中包括每个实例的查询索引指标和物理资源使用指标.3:索引级别:索引级别的监控主要是针对每个索引来说,主要包括每个索引的性能指标. 1集群级别: 查看方法: api获取:http://ip:9200/_cluster/health?pretty 或者 Kibana的开发工具Dev Tools中执行 : 查看集群健康状态

ELK简介 es集群部署 es插件应用

Top NSD ARCHITECTURE DAY03 案例1:ES集群安装 案例2:ES集群安装配置 案例3:练习curl命令 案例4:练习插件 案例5:插入,增加,删除查询数据 案例6:安装Kibana 1 案例1:ES集群安装 1.1 问题 本案例要求: 准备1台虚拟机 部署elasticsearch第一个节点 访问9200端口查看是否安装成功 1.2 方案 1)ELK是日志分析平台,不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,ELK分别代表: Elasticsearch:

部署带有验证的es集群及创建快照

1?? 环境准备① 关闭防火墙.selinuxsed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/configsetenforce 0systemctl stop firewalldsystemctl disable firewalld ② 修改系统最大打开文件数和进程数cat <<EOF >> /etc/security/limits.conf* soft nofile 65536* hard nofile 6

EFK教程(5) - ES集群开启用户认证

基于ES内置及自定义用户实现kibana和filebeat的认证 作者:"发颠的小狼",欢迎转载 目录 ? 用途 ? 关闭服务 ? elasticsearch-修改elasticsearch.yml配置 ? elasticsearch-开启服务 ? elasticsearch-建立本地内置用户 ? kibana-创建私钥库 ? kibana-WEB界面确认用户 ? filebeat-在WEB界面创建角色及用户 ? filebeat-服务器上创建密钥库 ? filebeat-配置file

Docker 搭建一个Elasticsearch 7.5.1集群+kibana 7.5.1

1.docker安装elasticsearch 7.5.1 拉取镜像 docker pull elasticsearch:7.5.1 创建网络 如果需要安装kibana等其他,需要创建一个网络,名字任意取,让他们在同一个网络,使得es和kibana通信 docker network create esnet(这个名字可以自定义,但是注意启动kibana是名字保持一致) 创建数据卷 此处为了docker容器删除或者其他异常情况,将ES的重要数据挂载到宿主机 # 查看当前数据局列表 docker v

ES集群性能调优链接汇总

ES集群稳定性: 1. 集群稳定性的一些问题(一定量数据后集群变得迟钝) https://elasticsearch.cn/question/84 2.ELK 性能(2) - 如何在大业务量下保持 Elasticsearch 集群的稳定 http://www.cnblogs.com/richaaaard/p/6117089.html