splunk pyhton数据接口

1
回复
4804
查看
[复制链接]

70

主题

2

回帖

252

积分

超级版主

积分
252
来源: 2019-7-2 22:35:51 显示全部楼层 |阅读模式
本文实现利用python splunklib包获取splunk数据参考官方教程: http://dev.splunk.com/view/python-sdk/SP-CAAAEE5

1.通过接口,执行查询语句,并将获取到的查询结果保存在csv中

  1. import splunklib.client as client
  2. import splunklib.results as results

  3. #定义连接信息
  4. HOST="127.0.0.1"#splunk服务器地址
  5. PORT=8089#端口
  6. USERNAME="admin"#登录名
  7. PASSWORD="passwd"#密码


  8. #设置查询语句
  9. search_query='|tstats count from datamodel=xxxx by domain |sort 10 -count'

  10. #定义查询起始日期和结束日期
  11. start_time="2018-05-01"
  12. end_time="20018-05-31"

  13. def main():
  14.     #连接splunk
  15.     service = client.connect(host=HOST,
  16.                              port=PORT,
  17.                              username=USERNAME,
  18.                              password=PASSWORD,
  19.                              app='search')
  20.     assert isinstance(service, client.Service)

  21.     #查询参数
  22.     search_kwargs={
  23.                    'earliest_time':start_time+'T00:00:00.000+08:00',
  24.                    'latest_time':end_time+'T00:00:00.000+08:00'
  25.                    }

  26.     jobs=service.jobs
  27.     #执行查询语句
  28.     print("正在查询...")
  29.     job=jobs.oneshot(search_query,**search_kwargs)
  30.     #将结果写入本地domain.csv中
  31.     with open('domain.csv','w+',encoding='utf-8') as fh:
  32.         fh.write("domain,count\n")
  33.         for result in results.ResultsReader(job):
  34.             fh.write(result['domain']+","+result['count']+"\n")
  35.     print("数据已保存到本地...")

  36. main()
复制代码

2.在splunk中配置任务计划,通过接口获取任务计划执行后的结果

  1. import time,re
  2. import splunklib.client as client
  3. import splunklib.results as results

  4. #配置splunk连接信息
  5. HOST = "localhost"
  6. PORT =8089
  7. USERNAME = "admin"
  8. PASSWORD = "passwd"

  9. #定义splunk中计划任务执行的时间间隔(分钟)
  10. cron_gap_min=5

  11. #通过SDK连接到splunk上
  12. service = client.connect(
  13.     host=HOST,
  14.     port=PORT,
  15.     username=USERNAME,
  16.     password=PASSWORD,
  17.     app="search")

  18. #定义需要查找的任务名
  19. match_string="test"

  20. #获取splunk中所有的任务
  21. jobs = service.jobs
  22. #当前程序执行的时间
  23. now_time=int(round(time.time()))

  24. #将数据导出为csv文本
  25. def get_csv_data():
  26.     for job in jobs:
  27.         #使用正则寻找所有此定时任务产生的任务(活动-任务中能看到的任务)
  28.         if re.search(match_string,job.sid):
  29.             #splunk中任务执行的时间
  30.             run_time=re.findall("\d{10}",job.sid)[0]
  31.             run_time=int(run_time)
  32.             #通过对时间的比较找到最近一次运行
  33.             if now_time-run_time < cron_gap_min*60:
  34.                 #等到任务完成
  35.                 while not job.is_done():
  36.                     time.sleep(1)
  37.                 rr = results.ResultsReader(job.results())
  38.                 with open('result.csv','w+') as fh:
  39.                     for result in rr:
  40.                         key=result.keys()
  41.                         n=len(key)
  42.                         for i in range(n-1):
  43.                             fh.write(result[key[i]]+",")
  44.                         fh.write(result[key[n-1]]+"\n")
  45.     print("任务完成...")

  46. #将数据转化为字典形式
  47. def get_dict_data():
  48.     for job in jobs:
  49.         #使用正则寻找所有此定时任务产生的任务(活动-任务中能看到的任务)
  50.         if re.search(match_string,job.sid):
  51.             #splunk中任务执行的时间
  52.             run_time=re.findall("\d{10}",job.sid)[0]
  53.             run_time=int(run_time)
  54.             #通过对时间的比较找到最近一次运行
  55.             if now_time-run_time < cron_gap_min*60:
  56.                 #等到任务完成
  57.                 while not job.is_done():
  58.                     time.sleep(1)
  59.                 rr = results.ResultsReader(job.results())
  60.                 for result in rr:
  61.                     #定义一个字典,将每条数据存入字典中
  62.                     res_data={}
  63.                     for key in result.keys():
  64.                         res_data[key]=result[key]
  65.                     return res_data
  66.     print("任务完成...")

复制代码
if __name__=='__main__':
    data=get_dict_data()




回复

使用道具 举报

196

主题

140

回帖

1444

积分

管理员

积分
1444
2019-7-22 14:08:18 显示全部楼层
收粤东点赞,手动点赞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册
关注微信