Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python Elasticsearch API操作ES集群

Python Elasticsearch API操作ES集群

作者头像
三杯水Plus
发布于 2018-11-14 09:00:28
发布于 2018-11-14 09:00:28
1.7K00
代码可运行
举报
文章被收录于专栏:运维运维
运行总次数:0
代码可运行

环境

  • 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查询与聚合
  • Python 列表操作

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/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的次数除以域名总请求数对应各个域名的请求正确率
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/09/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python连接数据库
简介: PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
GeekLiHua
2025/01/21
1370
python连接数据库
测试中简单的数据库操作-pymysql入门
什么是 「PyMySQL」?PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2 中则使用 mysqldb。
怪盗LYL
2022/11/08
5820
测试中简单的数据库操作-pymysql入门
python3数据库配置,远程连接mys
查询 Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
py3study
2020/01/09
7800
Python操作mysql数据库知识大全
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。
Python知识大全
2020/02/13
8290
用户画像 | 标签数据存储之Elasticsearch真实应用
上一篇文章已经为大家介绍了 HBase 在用户画像的标签数据存储中的具体应用场景,本篇我们来谈谈 Elasticsearch 的使用!
大数据梦想家
2021/10/22
4.1K0
python学习-使用MySQLdb操作
MySQLdb是用于Python连接mysql数据库的接口,它实现了Python数据库api规范2.0。
py3study
2020/01/15
5120
Python: 操作MySQL数据库
Python操作MySQL数据库 前几天数据库课程的一个小project,需要接入MySQL数据库,导入数据,写了个脚本,做简单的CRUD操作,用Python实现,简单地记录一下。 依赖 可以用MySQL-python来连MySQL,安装很简单,pip install MySQL-python,然后在脚本里引入import MySQLdb即可。有不止一个库实现类似的功能,API大同小异。 连接 首先要做的是链接数据库,当然要确保你MySQL Server是安装运行的,用homebrew安装的话brew in
用户2183996
2018/06/21
2.3K0
python中MySQLdb模块用法实例
MySQLdb提供了connect方法用来和数据库建立连接,接收数个参数,返回连接对象:
用户2936342
2018/08/27
7260
python操作mysql数据库
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。
想偷懒的程序员
2019/11/12
2.2K0
Python对Mysql的操作(新建 更新 删除)
按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。
逍遥子大表哥
2021/12/17
4.4K0
Python对Mysql的操作(新建 更新 删除)
Python操作MySQL存储,这些你都会了吗?
在Python 2中,连接MySQL的库大多是使用MySQLdb,但是此库的官方并不支持Python 3,所以这里推荐使用的库是PyMySQL。 本节中,我们就来讲解使用PyMySQL操作MySQL数据库的方法。 1. 准备工作 在开始之前,请确保已经安装好了MySQL数据库并保证它能正常运行,而且需要安装好PyMySQL库。 2. 连接数据库 这里,首先尝试连接一下数据库。假设当前的MySQL运行在本地,用户名为root,密码为123456,运行端口为3306。这里利用PyMySQL先连接MySQL
崔庆才
2018/06/25
1.7K1
mysql基本操作以及python控制mysql(3)–python控制
本文的测试代码,放在github上。https://github.com/luyishisi/The_python_code.git   中的python-mysql文件夹中。
十四君
2019/11/23
6680
Python全栈开发之---mysql数
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
py3study
2020/01/19
3890
5.Python操作MySQL
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
changxin7
2019/09/10
4670
Python之Pymysql模块实现MySQL增删改查
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
王大力测试进阶之路
2020/01/17
3.3K0
Python之Pymysql模块实现MySQL增删改查
Python对MySQL操作
说明:pymysql是纯用Python操作MySQL的模块,其使用方法和MySQLdb几乎相同
星哥玩云
2022/09/08
9410
Python对MySQL操作
python关于Mysql操作
下载地址:http://dev.mysql.com/downloads/mysql/
py3study
2020/01/13
5250
Python3 操作Mysql数据库
Pymysql介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,而Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API
py3study
2020/01/03
1K0
python操作mysqldb
http://sourceforge.net/projects/mysql-python/ 下载,在安装是要先安装setuptools,然后在下载文件目录下,修改mysite.cfg,指定本地mysql的mysql-config文件的路径
py3study
2020/01/13
9440
以5个数据库为例,用Python实现数据的提取、转换和加载(ETL)
导读:每个数据科学专业人员都必须从不同的数据源中提取、转换和加载(Extract-Transform-Load,ETL)数据。
IT阅读排行榜
2019/05/07
2.5K0
相关推荐
python连接数据库
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验