Shell制造es数据脚本

1 篇文章 0 订阅

背景:因为很多项目都需要从es中获取数据,测试不会自己造es数据,所以每次都要问。然而问过之后一段时间就忘了,而且一条一条的造也很累。所以写了一个shell脚本

目的:只需要修改shell脚本里的一些参数,然后执行脚本就能得到造好的数据,再使用批量创建es数据的命令制造数据。简化制造数据的成本。

脚本:

```

#!/bin/bash
#!固定变量无需修改
date="`date "+%Y%m%d"`";
dateTime="`date "+%Y-%m-%dT%H:%M:%S.000+08:00"`";
#!日志公共变量
ip="10.33.81.40";
hostname="DVJTY-SERV001";
appsystem="JTY4";
logType="alarm_metric";
#!输出日志条数
count=2;
#!isAlarm=1制造告警日志 isAlarm=0普通日志
isAlarm=0;
#!告警更改所需变量
status="PROBLEM";
alarmWay="1,2,1"
mergeTag=0
connectId=
#!普通系统日志更改所需变量
latency=0;
appprogramname="金太阳数据库";
servicename="金太阳数据库";
servicecode="DB";
clustername="default";
source="runlog0.log";
logTypeName="kcbp_biz_logstash";
offset=700000


function alarmLog(){
echo -e "{\"index\":{\"_id\":\"$uuid\"}}"
echo -e "{\c" 
echo -e "\"severity\":\"3\",\c" 
echo -e  "\"indexTime\":\"$dateTime\",\c"
echo -e  "\"sourceTopic\":\"alarm_$date\",\c"
echo -e  "\"sources\":{\c"
echo  -e "\"appsystem\":\"$appsystem\",\c"
echo  -e "\"hostname\":\"$hostname\",\c"
echo  -e "\"sourSystem\":\"1\",\c"
echo -e  "\"ruleId\":\"6789\",\c"
echo  -e "\"ip\":\"$ip\"\c"
echo  -e "},\c"
echo  -e "\"alarmTypeName\":\"$logType\",\c"
echo -e  "\"countFileds\":\"${hostname}${ip}趋势预测用例1单实例当前CPU${cpu_used_pct}\",\c"
echo  -e "\"indexStr\":\"alarm_$date$alarmType\",\c"
echo  -e "\"title\":\"DVJTY-SERV00110.33.81.40趋势预测用例1单实例\",\c"
echo  -e "\"content\":\"${hostname}${ip}趋势预测用例1单实例当前CPU${cpu_used_pct}\",\c"
echo  -e "\"extFields\":{\c"

      if [  -n "$mergeTag" ]; then 
      echo  -e "\"mergeTag\":\"$mergeTag\",\c"; 
      fi
      if [ "$mergeTag" == "1" ] ; then
      echo  -e "\"uuid\":\"$uuid\",\c";
      elif  [ "$mergeTag" == "0" ] ; then
      echo  -e "\"uuid\":\"$uuid\",\c";
      echo  -e "\"connectId\":\"$connectId\",\c";
      fi
     
echo  -e "\"expressionId\":\"6789\",\c"
echo  -e "\"sourSystem\":\"1\",\c"
echo  -e "\"alarmtime\":\"$dateTime\",\c"
echo  -e "\"actionID\":\"0\",\c"
echo -e  "\"alarmSuppress\":\"alarmSuppress\",\c"
echo  -e "\"calenderId\":\"1\",\c"
echo  -e "\"alarmWay\":\"$alarmWay\",\c"
echo  -e "\"successFlag\":\"1\",\c"
echo  -e "\"revUsers\":\"[]\"\c"
echo  -e "},\c"
echo  -e "\"expressionId\":\"6789\",\c"
echo  -e "\"metricSetName\":\"cpu\",\c"
echo  -e "\"status\":\"$status\",\c"
echo  -e "\"timestamp\":\"$dateTime\"\c"
echo  -e "}"

}

function normalLog(){
echo -e "{\"index\":{\"_id\":\"$uuid\"}}"
echo -e "{\c"
echo -e "\"measures\":{\c"
echo -e "\"latency\":$latency\c"
echo -e "},\c"
echo -e "\"normalFields\":{\c"
echo -e "\"logcheckip\":\"$ip\",\c"
echo -e "\"deserializerTime\":\"$dateTime\",\c"
echo -e "\"indexTime\":\"$dateTime\",\c"
echo -e "\"logchecktime\":\"$dateTime\",\c"
echo -e "\"message\":\"$dateTime 这是一条脚本跑出的测试日志 $ip $hostname\"\c"
echo -e "},\c"
echo -e "\"offset\":$offset,\c"
echo -e "\"logTypeName\":\"$logTypeName\",\c"
echo -e "\"source\":\"$source\",\c"
echo -e "\"timestamp\":\"$dateTime\",\c"
echo -e "\"dimensions\":{\c"
echo -e "\"ip\":\"$ip\",\c"
echo -e "\"hostname\":\"$hostname\",\c"
echo -e "\"appprogramname\":\"$appprogramname\",\c"
echo -e "\"code\":\"0\",\c"
echo -e "\"servicecode\":\"$servicecode\",\c"
echo -e "\"clustername\":\"$clustername\",\c"
echo -e "\"appsystem\":\"$appsystem\",\c"
echo -e "\"servicename\":\"$servicename\",\c"
echo -e "\"funcid\":\"420410\",\c"
echo -e "\"nodeid\":\"107\"\c"
echo -e "}\c"
echo -e "}"

    let "offset++";

}
  
while(( $count>0 ))
do
uuid=$(cat "/proc/sys/kernel/random/uuid")
   if [ $isAlarm == 1 ] ; then
    alarmLog
    else 
    normalLog
   fi
    let "count--"
done

```

遇到的问题:

1. 不会shell,现学了shell。

2. shell将数据输入到一个文件使用 ./eslog.sh >testLog.txt    (>是覆盖文件内容,>>接着原本的内容输入)

3.命令批量导入es数据需要合适非常严格,不能有空格,而且单条数据要换行,本条数据内容不能换行

  如:

{"index":{"_id":"AWVq9MFRV9j8LejhM58L"}}
{"indexTime":"2018-08-24T16:02:29.829+08:00","measures":{"duration":12575},"normalFields":{"traceId":"2840045838270464","N_pkg":"","code":"0","session":"729eb5111f47adc9c1736096aa42b5a02aa62fd2c8993f52baf46bf4"}}

所以必须去除换行,也不能有空格,所以使用输出为 echo -e "aaa/c" 的命令

4.在widows下编辑好的.sh脚本上传到Linux时会不能执行,所以需要先 

vi eslog.sh 后执行 set ff=unix 脚本才能正常执行

5.如果早的es数据有中文但是文件格式不是utf-8也会报错

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值