精华内容
下载资源
问答
  • 默认情况influxdb创建的库关联autogen的RP(存储策略),即数据会保留永久 监控日志的区别 最近搞监控,所谓监控就是监控服务肉体是否健康(还活着/生病? 各项指标是否正常?) 区分日志搜集: 分析服务的精神状态是健康...

    最近在搞容器的监控,遇到influxdb这个库,搞了两天,些许明白了些套路,做个记录,备忘....

    小结如下:

    influxdb go语言编写

    默认情况influxdb创建的库关联autogen的RP(存储策略),即数据会保留永久

    监控和日志的区别

    最近搞监控,所谓监控就是监控服务肉体是否健康(还活着/生病? 各项指标是否正常?)

    区分日志搜集: 分析服务的精神状态是健康(服务的一个履历/日记)

    如何做一个监控

    参考: https://segmentfault.com/a/1190000011082379

    回想到如果是你自己去做一个监控, 能够做到记录每分钟 CPU 的空闲率是多少, 要怎么做?

        搞一个数据库, 用来放数据的
        写一个脚本, 用来获取 CPU 的相关数据, 加上时间戳, 然后保存到数据库
        创建一个定时任务, 一分钟运行一次脚本
        写一个简单的程序, 从数据库查到数据, 然后根据时间戳, 绘制成图表.

    telegraf搜集器 + influxdb(存储) + grafana(展示)
    grafana 的套路基本上跟 kibana 差不多,都是根据查询条件设置聚合规则,在合适的图表上进行展示,多个图表共同组建成一个 dashboard,熟悉 kibana 的用户应该可以非常容易上手。另外 grafana 的可视化功能比 kibana 强得多,而且 4 以上版本将集成报警功能。

    grafana主机监控效果图:

    9e792b8fgy1fmiknsrnjej21fh1e5k7q.jpg

    之前用metricbeat做的主机监控效果图-进程级别
    806469-20171207173249909-192828741.png

    监控的对比influxdb vs 普罗

    特性对比

    9e792b8fgy1fmikyhyi6cj20u01e6k0h.jpg

    参考: http://gitbook.cn/books/59395d3d5863cf478e6b50ba/index.html

    influxdb集成已有的概念,比如查询语法类似sql,引擎从LSM优化而来,学习成本相对低。
    influxdb支持的类型有float,integers,strings,booleans,prometheus目前只支持float。
    influxdb的时间精度是纳秒,prometheus的则是毫秒。
    influxdb仅仅是个数据库,而prometheus提供的是整套监控解决方案,当然influxdb也提供了整套监控解决方案。
    influxdb支持的math function比较少,prometheus相对来说更多,influxdb就目前使用上已经满足功能。
    influxdb支持event log,prometheus不支持。

    注: 已上对比的是普罗v1 ,现在普罗有v2版本了,听说比influxdb更强悍了. 而且influxdb集群方案已闭源.

    influxdb的特性和特点

    influxdb中文翻译官方的文档,感觉很棒
    https://jasper-zhang1.gitbooks.io/influxdb/content/
    https://jasper-zhang1.gitbooks.io/influxdb/content/Concepts/key_concepts.html

    参考: http://www.ttlsa.com/monitor-safe/monitor/distributed-time-series-database-influxdb/

    • influxdb 它的特性
      它有三大特性:
    1. Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)
    2. Metrics(度量):你可以实时对大量数据进行计算
    3. Eevents(事件):它支持任意的事件数据
    
    时序性(Time Series):与时间相关的函数的灵活使用(例如最大、最小、求和等);
    度量(Metrics):对实时大量数据进行计算;
    事件(Event):支持任意的事件数据,换句话说,任意事件的数据我们都可以做操作。
    • influxdb 它的特点
      参考: http://dbaplus.cn/news-73-1291-1.html
    schemaless(无结构),可以是任意数量的列
    无特殊依赖,几乎开箱即用(如ElasticSearch需要Java)
    自带数据过期功能;
    自带权限管理,精细到“表”级别;
    原生的HTTP支持,内置HTTP API
    强大的类SQL语法,支持min, max, sum, count, mean, median 等一系列函数,方便统计。

    influxdb最佳实践

    1.登录 建库 查询

    参考: https://jasper-zhang1.gitbooks.io/influxdb/content/Introduction/getting_start.html

    influx -precision rfc3339   # -precision参数表明了任何返回的时间戳的格式和精度,针对查询时候显示的时间格式
    CREATE DATABASE mydb
    SHOW DATABASES
    USE mydb
    INSERT cpu,host=serverA,region=us_west value=0.64
    SELECT "host", "region", "value" FROM "cpu"
    
    INSERT temperature,machine=unit42,type=assembly external=25,internal=37
    SELECT * FROM "temperature"
    
    
    > SELECT * FROM /.*/ LIMIT 1
    > SELECT * FROM "cpu_load_short"
    > SELECT * FROM "cpu_load_short" WHERE "value" > 0.9
    

    2.了解influxdb基本概念

    参考: http://dbaplus.cn/news-73-1291-1.html

    InfluxDB中的名词 传统数据库中的概念
    database 数据库
    measurement 数据库中的表
    points 表里面的一行数据

    InfluxDB中特有的概念

    Point相当于传统数据库里的一行数据,如下表所示:
    Point由时间戳(time)、数据(field)、标签(tags)组成。

    line-protocol格式

    <measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
    
    INSERT temperature,machine=unit42,type=assembly external=25,internal=37

    9e792b8fgy1fmilg60gu0j20qx03cdg0.jpg

    更多如:

    cpu,host=serverA,region=us_west value=0.64
    payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230
    stock,symbol=AAPL bid=127.46,ask=127.48
    temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000
    Tag: 被索引
    上面的location和server就是tag key,us和host1是tag value,tag是可选的。不过写入数据时最好加上tag,因为它可以被索引。tag的类型只能是字符串。
    
    Field: value支持的类型floats,integers,strings,booleans
    上面的temperature是field key,82是field value。field value会用于展示,value支持的类型有floats,integers,strings,booleans。
    
    Timestamp
    格式是:RFC3339 UTC。默认精确到纳秒,可选。
    
    Series:
    measurement, tag set, retention policy相同的数据集合算做一个 series。理解这个概念至关重要,因为这些数据存储在内存中,如果series太多,会导致OOM
    
    Retention Policy:
    保留策略包括设置数据保存的时间以及在集群中的副本个数。默认配置是:RP是autogen,保留时间是永久,副本为1。这些配置在创建数据库时可以修改。
    
    Continuous Query:
    CQ是预先配置好的一些查询命令,定期自动执行这些命令并将查询结果写入指定的measurement中,这个功能主要用于数据聚合。具体参考:CQ。
    
    Shard:
    存储一定时间间隔的数据,每个目录对应一个shard,目录的名字就是shard id。每一个shard都有自己的cache、wal、tsm file以及compactor,目的就是通过时间来快速定位到要查询数据的相关资源,加速查询的过程,并且也让之后的批量删除数据的操作变得非常简单且高效。

    2.实操如下: 理解 point&measurement&series(field set)(被索引的tag set)

    向库中插入如下数据:

    属性
    库名 my_database
    measurement census
    field key butterflies和honeybees
    tag key location和scientist
    name: census
    -————————————
    time                                      butterflies     honeybees     location     scientist
    2015-08-18T00:00:00Z      12                   23                    1                 langstroth
    2015-08-18T00:00:00Z      1                     30                    1                 perpetua
    2015-08-18T00:06:00Z      11                   28                    1                 langstroth
    2015-08-18T00:06:00Z   3                     28                    1                 perpetua
    2015-08-18T05:54:00Z      2                     11                    2                 langstroth
    2015-08-18T06:00:00Z      1                     10                    2                 langstroth
    2015-08-18T06:06:00Z      8                     23                    2                 perpetua
    2015-08-18T06:12:00Z      7                     22                    2                 perpetua

    sql语句如下

    'INSERT census,location=1,scientist=langstroth butterflies=12,honeybees=23'
    'INSERT census,location=1,scientist=perpetua butterflies=1,honeybees=30'
    'INSERT census,location=1,scientist=langstroth butterflies=11,honeybees=28'
    'INSERT census,location=1,scientist=perpetua butterflies=3,honeybees=28'
    'INSERT census,location=2,scientist=langstroth butterflies=2,honeybees=11'
    'INSERT census,location=2,scientist=langstroth butterflies=1,honeybees=10'
    'INSERT census,location=2,scientist=perpetua butterflies=8,honeybees=23'
    'INSERT census,location=2,scientist=perpetua butterflies=7,honeybees=22'
    • 造数据用到的2个脚本
      为了模拟隔多久插入数据
      模拟插入数据时,随机赋值
    $ cat fake_data.sh 
    arr=(
    'INSERT orders,website=30 phone=10'
    'INSERT orders,website=39 phone=12'
    'INSERT orders,website=56 phone=11'
    )
    
    #while :;do
    for((i=0;i<${#arr[*]};i++));do
        /usr/bin/influx -database 'my_food' -execute "${arr[i]}"
        sleep 10
    #    echo "${arr[i]}"
    done
    #done
    $ cat data.sh 
    #!/bin/bash
    
    function rand(){
        min=$1
        max=$(($2-$min+1))
        num=$(date +%s%N)
        echo $(($num%$max+$min))
    }
    
    
    while :;do
        /usr/bin/influx -database 'my_database' -execute "INSERT census,location=2,scientist=perpetua butterflies=$(rand 1 50),honeybees=$(rand 1 50)"
        sleep 2;
    #    echo "INSERT orders,website=$(rand 1 50) phone=$(rand 1 50)"
    #    break
    done

    field value就是你的数据,它们可以是字符串、浮点数、整数、布尔值,因为InfluxDB是时间序列数据库,所以field value总是和时间戳相关联。
    在示例中,field value如下:

    12   23
    1    30
    11   28
    3    28
    2    11
    1    10
    8    23
    7    22

    在上面的数据中,每组field key和field value的集合组成了field set,在示例数据中,有八个field set:

    butterflies = 12 honeybees = 23
    butterflies = 1 honeybees = 30
    butterflies = 11 honeybees = 28
    butterflies = 3 honeybees = 28
    butterflies = 2 honeybees = 11
    butterflies = 1 honeybees = 10
    butterflies = 8 honeybees = 23
    butterflies = 7 honeybees = 22

    注意,field是没有索引的。如果使用field value作为过滤条件来查询,则必须扫描其他条件匹配后的所有值。因此,这些查询相对于tag上的查询(下文会介绍tag的查询)性能会低很多。

    在上面的数据中,tag set是不同的每组tag key和tag value的集合,示例数据里有四个tag set:

    location = 1, scientist = langstroth
    location = 2, scientist = langstroth
    location = 1, scientist = perpetua
    location = 2, scientist = perpetua

    现在你已经熟悉了measurement,tag set和retention policy,那么现在是讨论series的时候了。 在InfluxDB中,series是共同retention policy,measurement和tag set的集合。 以上数据由四个series组成:

    9e792b8fgy1fmilvxxiztj20rd077jrt.jpg

    理解series对于设计数据schema以及对于处理InfluxDB里面的数据都是很有必要的。
    最后,point就是具有相同timestamp的相同series的field集合。例如,这就是一个point:

    name: census
    -----------------
    time                           butterflies     honeybees     location     scientist
    2015-08-18T00:00:00Z     1                  30               1               perpetua
    

    例子里的series的retention policy为autogen,measurement为census,tag set为location = 1, scientist = perpetua。point的timestamp为2015-08-18T00:00:00Z。

    wal(Write Ahead Log)

    参考: https://jasper-zhang1.gitbooks.io/influxdb/content/Concepts/glossary.html

    最近写的点数的临时缓存。为了减少访问永久存储文件的频率,InfluxDB将最新的数据点缓冲进WAL中,直到其总大小或时间触发然后flush到长久的存储空间。这样可以有效地将写入batch处理到TSM中。
    可以查询WAL中的点,并且系统重启后仍然保留。在进程开始时,在系统接受新的写入之前,WAL中的所有点都必须flushed。

    目录结构

    参考: http://gitbook.cn/books/59395d3d5863cf478e6b50ba/index.html
    InfluxDB的数据存储有三个目录,分别是meta、wal、data。meta用于存储数据库的一些元数据,meta目录下有一个meta.db文件。wal目录存放预写日志文件,以.wal结尾。data目录存放实际存储的数据文件,以.tsm结尾。基本结构如下:

    -- wal
       -- test
           -- autogen
             -- 1
                -- _00001.wal
             -- 2
                -- _00002.wal
    -- data
       -- test
          -- autogen
             -- 1
                -- 000000001-000000001.tsm
             -- 2
                -- 000000001-000000010.tsm
    -- meta
         -- meta.db

    数据采样--> 理解cq和rp

    Continuous Query (CQ)是在数据库内部自动周期性跑着的一个InfluxQL的查询,CQs需要在SELECT语句中使用一个函数,并且一定包括一个GROUP BY time()语句。+

    Retention Policy (RP)是InfluxDB数据架构的一部分,它描述了InfluxDB保存数据的时间。InfluxDB会比较服务器本地的时间戳和你数据的时间戳,并删除比你在RPs里面用DURATION设置的更老的数据。单个数据库中可以有多个RPs但是每个数据的RPs是唯一的。

    实例数据:
    db: food_data
    mesurement: orders

    name: orders
    ------------
    time                           phone     website
    2016-05-10T23:18:00Z     10        30
    2016-05-10T23:18:10Z     12        39
    2016-05-10T23:18:20Z     11        56

    目标:

    自动删除1h以上的原始2秒间隔数据   --> rp实现
    自动删除超过5min的30s间隔数据     --> rp实现
    
    自动将2秒间隔数据聚合到30s的间隔数据 ---> cq实现

    2s中插入一次数据:(脚本参考上面fake数据)

    create databaes food_data
    CREATE RETENTION POLICY "a_hour" ON "food_data" DURATION 1h REPLICATION 1 DEFAULT
    CREATE RETENTION POLICY "a_week" ON "food_data" DURATION 1w REPLICATION 1
    
    CREATE CONTINUOUS QUERY "cq_10s" ON "food_data" BEGIN SELECT mean("website") AS "mean_website",mean("phone") AS "mean_phone" INTO  "a_week"."downsampled_orders" FROM "orders" GROUP BY time(10s) END

    在步骤1里面创建数据库时,InfluxDB会自动生成一个叫做autogen的RP,并作为数据库的默认RP,autogen这个RP会永远保留数据。在输入上面的命令之后,a_hours会取代autogen作为food_data的默认RP。

    验证:

    select * from "a_week"."downsampled_orders";
    select * from "orders";

    influxdb数据聚合

    参考

    表名都可以正则
    select * from /.*/ limit 1
    
    查询一个表里面的所有数据
    select * from cpu_idle
    
    查询数据大于200的。
    select * from response_times where value > 200
    
    查询数据里面含有下面字符串的。 
    select * from user_events where url_base = ‘friends#show’
    
    约等于 
    select line from log_lines where line =~ /paul@influx.com/
    
    按照30m分钟进行聚合,时间范围是大于昨天的   主机名是server1的。 
    select mean(value) from cpu_idle group by time(30m) where time > now() – 1d and hostName = ‘server1′
    select column_one  from foo  where time > now() – 1h limit 1000;
    select reqtime, url from web9999.httpd where reqtime > 2.5;
    select reqtime, url from web9999.httpd where time > now() – 1h limit 1000;
    
    url搜索里面含有login的字眼,还以login开头
    select reqtime, url from web9999.httpd where url =~ /^\/login\//;
    
    还可以做数据的merge
    select reqtime, url from web9999.httpd merge web0001.httpd;

    influxdb备份恢复

    参考
    参考: http://stedolan.github.io/jq/

    #!/bin/bash
     
    function parse_options {
      function usage() {
        echo -e >&2 "Usage: $0 dump DATABASE [options...]
    \t-u USERNAME\t(default: root)
    \t-p PASSWORD\t(default: root)
    \t-h HOST\t\t(default: localhost:8086)
    \t-s\t\t(use HTTPS)"
      }
      if [ "$#" -lt 2 ]; then
        usage; exit 1;
      fi
     
      username=root
      password=root
      host=localhost:8086
      https=0
      shift
      database=$1
      shift
     
      while getopts u:p:h:s opts
      do case "${opts}" in
        u) username="${OPTARG}";;
        p) password="${OPTARG}";;
        h) host="${OPTARG}";;
        s) https=1;;
        ?) usage; exit 1;;
        esac
      done
      if [ "${https}" -eq 1 ]; then
        scheme="https"
      else
        scheme="http"
      fi
    }
     
    function dump {
      parse_options $@
     
      curl -s -k -G "${scheme}://${host}/db/${database}/series?u=${username}&p=${password}&chunked=true" --data-urlencode "q=select * from /.*/" \
        | jq . -c -M
      exit
    }
     
    function restore {
      parse_options $@
     
      while read -r line
      do
        echo >&2 "Writing..."
        curl -X POST -d "[${line}]" "${scheme}://${host}/db/${database}/series?u=${username}&p=${password}"
      done
      exit
    }
     
    case "$1" in
      dump)     dump $@;;
      restore)  restore $@;;
      *)      echo >&2 "Usage: $0 [dump|restore] ..."
        exit 1;;
    esac

    python调用influxdb实现数据增删

    9e792b8fgy1fmimwbjjsrj206006fmx4.jpg

    utils/db.py

    # - * - coding: utf-8 - * -
    
    from influxdb import InfluxDBClient
    
    
    def get_db_connection():
        db_conn = InfluxDBClient(host="192.168.x.x", database="pachongdb")
        return db_conn
    

    main.py

    #!/home/ansible/.venv/bin/python
    # - * - coding: utf-8 - * -
    
    from influxdb.exceptions import InfluxDBClientError, InfluxDBServerError
    from utils import db
    
    
    def insert_success_point_2db():
        db_conn = db.get_db_connection()
        # 写入成功记录,success字段值约定为1
        success_point = [{
            "measurement": "wake",
            "tags": {
                "isp": "mobile",
                "region": "上海",
            },
            "fields": {
                "mobile": 159123456xx,
                "success": 1,
            }
        }]
    
        try:
            db_conn.write_points(success_point)
        except InfluxDBClientError as e:
            print("influxdb db client error: {0}".format(e))
        except InfluxDBServerError as e:
            print("influxdb db server error: {0}".format(e))
        except Exception as e:
            print("influxdb error: {0}".format(e))
        finally:
            if db_conn is not None:
                db_conn.close()
    
    
    def insert_fail_point_2db():
        db_conn = db.get_db_connection()
        # 写入失败记录,fail字段值约定为0
        fail_point = [{
            "measurement": "wake",
            "tags": {
                "isp": "mobile",
                "region": "上海",
            },
            "fields": {
                "mobile": 1591234xxxx,
                "fail": 0,
            }
        }]
        try:
            db_conn.write_points(fail_point)
        except InfluxDBClientError as e:
            print("influxdb db client error: {0}".format(e))
        except InfluxDBServerError as e:
            print("influxdb db server error: {0}".format(e))
        except Exception as e:
            print("influxdb error: {0}".format(e))
        finally:
            if db_conn is not None:
                db_conn.close()
    
    
    def main():
        insert_success_point_2db()
        insert_fail_point_2db()
    
    
    if __name__ == '__main__':
        main()
    

    requirements.txt

    certifi==2017.11.5
    influxdb==5.0.0

    806469-20171216152154389-170673129.png

    展开全文
  • 小结如下:influxdb go语言编写默认情况influxdb创建的库关联autogen的RP(存储策略),即数据会保留永久监控日志的区别最近搞监控,所谓监控就是监控服务肉体是否健康(还活着/生病? 各项指标是否正常?)区分日志搜集: ...

    最近在搞容器的监控,遇到influxdb这个库,搞了两天,些许明白了些套路,做个记录,备忘....

    小结如下:

    influxdb go语言编写

    默认情况influxdb创建的库关联autogen的RP(存储策略),即数据会保留永久

    监控和日志的区别

    最近搞监控,所谓监控就是监控服务肉体是否健康(还活着/生病? 各项指标是否正常?)

    区分日志搜集: 分析服务的精神状态是健康(服务的一个履历/日记)

    如何做一个监控

    回想到如果是你自己去做一个监控, 能够做到记录每分钟 CPU 的空闲率是多少, 要怎么做?

    搞一个数据库, 用来放数据的

    写一个脚本, 用来获取 CPU 的相关数据, 加上时间戳, 然后保存到数据库

    创建一个定时任务, 一分钟运行一次脚本

    写一个简单的程序, 从数据库查到数据, 然后根据时间戳, 绘制成图表.

    telegraf搜集器 + influxdb(存储) + grafana(展示)

    grafana 的套路基本上跟 kibana 差不多,都是根据查询条件设置聚合规则,在合适的图表上进行展示,多个图表共同组建成一个 dashboard,熟悉 kibana 的用户应该可以非常容易上手。另外 grafana 的可视化功能比 kibana 强得多,而且 4 以上版本将集成报警功能。

    grafana主机监控效果图:

    9e792b8fgy1fmiknsrnjej21fh1e5k7q.jpg

    监控的对比influxdb vs 普罗

    9e792b8fgy1fmikyhyi6cj20u01e6k0h.jpg

    influxdb集成已有的概念,比如查询语法类似sql,引擎从LSM优化而来,学习成本相对低。

    influxdb支持的类型有float,integers,strings,booleans,prometheus目前只支持float。

    influxdb的时间精度是纳秒,prometheus的则是毫秒。

    influxdb仅仅是个数据库,而prometheus提供的是整套监控解决方案,当然influxdb也提供了整套监控解决方案。

    influxdb支持的math function比较少,prometheus相对来说更多,influxdb就目前使用上已经满足功能。

    influxdb支持event log,prometheus不支持。

    注: 已上对比的是普罗v1 ,现在普罗有v2版本了,听说比influxdb更强悍了. 而且influxdb集群方案已闭源.

    influxdb的特性和特点

    influxdb 它的特性

    它有三大特性:

    1. Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)

    2. Metrics(度量):你可以实时对大量数据进行计算

    3. Eevents(事件):它支持任意的事件数据

    时序性(Time Series):与时间相关的函数的灵活使用(例如最大、最小、求和等);

    度量(Metrics):对实时大量数据进行计算;

    事件(Event):支持任意的事件数据,换句话说,任意事件的数据我们都可以做操作。

    schemaless(无结构),可以是任意数量的列

    无特殊依赖,几乎开箱即用(如ElasticSearch需要Java)

    自带数据过期功能;

    自带权限管理,精细到“表”级别;

    原生的HTTP支持,内置HTTP API

    强大的类SQL语法,支持min, max, sum, count, mean, median 等一系列函数,方便统计。

    influxdb最佳实践

    1.登录 建库 查询

    influx -precision rfc3339 # -precision参数表明了任何返回的时间戳的格式和精度,针对查询时候显示的时间格式

    CREATE DATABASE mydb

    SHOW DATABASES

    USE mydb

    INSERT cpu,host=serverA,region=us_west value=0.64

    SELECT "host", "region", "value" FROM "cpu"

    INSERT temperature,machine=unit42,type=assembly external=25,internal=37

    SELECT * FROM "temperature"

    > SELECT * FROM /.*/ LIMIT 1

    > SELECT * FROM "cpu_load_short"

    > SELECT * FROM "cpu_load_short" WHERE "value" > 0.9

    2.了解influxdb基本概念

    InfluxDB中的名词

    传统数据库中的概念

    database

    数据库

    measurement

    数据库中的表

    points

    表里面的一行数据

    InfluxDB中特有的概念

    Point相当于传统数据库里的一行数据,如下表所示:

    Point由时间戳(time)、数据(field)、标签(tags)组成。

    line-protocol格式

    [,=...] =[,=...] [unix-nano-timestamp]

    INSERT temperature,machine=unit42,type=assembly external=25,internal=37

    9e792b8fgy1fmilg60gu0j20qx03cdg0.jpg

    更多如:

    cpu,host=serverA,region=us_west value=0.64

    payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230

    stock,symbol=AAPL bid=127.46,ask=127.48

    temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000

    Tag: 被索引

    上面的location和server就是tag key,us和host1是tag value,tag是可选的。不过写入数据时最好加上tag,因为它可以被索引。tag的类型只能是字符串。

    Field: value支持的类型floats,integers,strings,booleans

    上面的temperature是field key,82是field value。field value会用于展示,value支持的类型有floats,integers,strings,booleans。

    Timestamp

    格式是:RFC3339 UTC。默认精确到纳秒,可选。

    Series:

    measurement, tag set, retention policy相同的数据集合算做一个 series。理解这个概念至关重要,因为这些数据存储在内存中,如果series太多,会导致OOM

    Retention Policy:

    保留策略包括设置数据保存的时间以及在集群中的副本个数。默认配置是:RP是autogen,保留时间是永久,副本为1。这些配置在创建数据库时可以修改。

    Continuous Query:

    CQ是预先配置好的一些查询命令,定期自动执行这些命令并将查询结果写入指定的measurement中,这个功能主要用于数据聚合。具体参考:CQ。

    Shard:

    存储一定时间间隔的数据,每个目录对应一个shard,目录的名字就是shard id。每一个shard都有自己的cache、wal、tsm file以及compactor,目的就是通过时间来快速定位到要查询数据的相关资源,加速查询的过程,并且也让之后的批量删除数据的操作变得非常简单且高效。

    2.实操如下: 理解 point&measurement&series(field set)(被索引的tag set)

    向库中插入如下数据:

    属性

    库名

    my_database

    measurement

    census

    field key

    butterflies和honeybees

    tag key

    location和scientist

    name: census

    -————————————

    time butterflies honeybees location scientist

    2015-08-18T00:00:00Z 12 23 1 langstroth

    2015-08-18T00:00:00Z 1 30 1 perpetua

    2015-08-18T00:06:00Z 11 28 1 langstroth

    2015-08-18T00:06:00Z 3 28 1 perpetua

    2015-08-18T05:54:00Z 2 11 2 langstroth

    2015-08-18T06:00:00Z 1 10 2 langstroth

    2015-08-18T06:06:00Z 8 23 2 perpetua

    2015-08-18T06:12:00Z 7 22 2 perpetua

    sql语句如下

    'INSERT census,location=1,scientist=langstroth butterflies=12,honeybees=23'

    'INSERT census,location=1,scientist=perpetua butterflies=1,honeybees=30'

    'INSERT census,location=1,scientist=langstroth butterflies=11,honeybees=28'

    'INSERT census,location=1,scientist=perpetua butterflies=3,honeybees=28'

    'INSERT census,location=2,scientist=langstroth butterflies=2,honeybees=11'

    'INSERT census,location=2,scientist=langstroth butterflies=1,honeybees=10'

    'INSERT census,location=2,scientist=perpetua butterflies=8,honeybees=23'

    'INSERT census,location=2,scientist=perpetua butterflies=7,honeybees=22'

    造数据用到的2个脚本

    为了模拟隔多久插入数据

    模拟插入数据时,随机赋值

    $ cat fake_data.sh

    arr=(

    'INSERT orders,website=30 phone=10'

    'INSERT orders,website=39 phone=12'

    'INSERT orders,website=56 phone=11'

    )

    #while :;do

    for((i=0;i

    /usr/bin/influx -database 'my_food' -execute "${arr[i]}"

    sleep 10

    # echo "${arr[i]}"

    done

    #done

    $ cat data.sh

    #!/bin/bash

    function rand(){

    min=$1

    max=$(($2-$min+1))

    num=$(date +%s%N)

    echo $(($num%$max+$min))

    }

    while :;do

    /usr/bin/influx -database 'my_database' -execute "INSERT census,location=2,scientist=perpetua butterflies=$(rand 1 50),honeybees=$(rand 1 50)"

    sleep 2;

    # echo "INSERT orders,website=$(rand 1 50) phone=$(rand 1 50)"

    # break

    done

    field value就是你的数据,它们可以是字符串、浮点数、整数、布尔值,因为InfluxDB是时间序列数据库,所以field value总是和时间戳相关联。

    在示例中,field value如下:

    12 23

    1 30

    11 28

    3 28

    2 11

    1 10

    8 23

    7 22

    在上面的数据中,每组field key和field value的集合组成了field set,在示例数据中,有八个field set:

    butterflies = 12 honeybees = 23

    butterflies = 1 honeybees = 30

    butterflies = 11 honeybees = 28

    butterflies = 3 honeybees = 28

    butterflies = 2 honeybees = 11

    butterflies = 1 honeybees = 10

    butterflies = 8 honeybees = 23

    butterflies = 7 honeybees = 22

    注意,field是没有索引的。如果使用field value作为过滤条件来查询,则必须扫描其他条件匹配后的所有值。因此,这些查询相对于tag上的查询(下文会介绍tag的查询)性能会低很多。

    在上面的数据中,tag set是不同的每组tag key和tag value的集合,示例数据里有四个tag set:

    location = 1, scientist = langstroth

    location = 2, scientist = langstroth

    location = 1, scientist = perpetua

    location = 2, scientist = perpetua

    现在你已经熟悉了measurement,tag set和retention policy,那么现在是讨论series的时候了。 在InfluxDB中,series是共同retention policy,measurement和tag set的集合。 以上数据由四个series组成:

    9e792b8fgy1fmilvxxiztj20rd077jrt.jpg

    理解series对于设计数据schema以及对于处理InfluxDB里面的数据都是很有必要的。

    最后,point就是具有相同timestamp的相同series的field集合。例如,这就是一个point:

    name: census

    -----------------

    time butterflies honeybees location scientist

    2015-08-18T00:00:00Z 1 30 1 perpetua

    例子里的series的retention policy为autogen,measurement为census,tag set为location = 1, scientist = perpetua。point的timestamp为2015-08-18T00:00:00Z。

    wal(Write Ahead Log)

    最近写的点数的临时缓存。为了减少访问永久存储文件的频率,InfluxDB将最新的数据点缓冲进WAL中,直到其总大小或时间触发然后flush到长久的存储空间。这样可以有效地将写入batch处理到TSM中。

    可以查询WAL中的点,并且系统重启后仍然保留。在进程开始时,在系统接受新的写入之前,WAL中的所有点都必须flushed。

    目录结构

    参考: http://gitbook.cn/books/59395d3d5863cf478e6b50ba/index.html

    InfluxDB的数据存储有三个目录,分别是meta、wal、data。meta用于存储数据库的一些元数据,meta目录下有一个meta.db文件。wal目录存放预写日志文件,以.wal结尾。data目录存放实际存储的数据文件,以.tsm结尾。基本结构如下:

    -- wal

    -- test

    -- autogen

    -- 1

    -- _00001.wal

    -- 2

    -- _00002.wal

    -- data

    -- test

    -- autogen

    -- 1

    -- 000000001-000000001.tsm

    -- 2

    -- 000000001-000000010.tsm

    -- meta

    -- meta.db

    数据采样--> 理解cq和rp

    Continuous Query (CQ)是在数据库内部自动周期性跑着的一个InfluxQL的查询,CQs需要在SELECT语句中使用一个函数,并且一定包括一个GROUP BY time()语句。+

    Retention Policy (RP)是InfluxDB数据架构的一部分,它描述了InfluxDB保存数据的时间。InfluxDB会比较服务器本地的时间戳和你数据的时间戳,并删除比你在RPs里面用DURATION设置的更老的数据。单个数据库中可以有多个RPs但是每个数据的RPs是唯一的。

    实例数据:

    db: food_data

    mesurement: orders

    name: orders

    ------------

    time phone website

    2016-05-10T23:18:00Z 10 30

    2016-05-10T23:18:10Z 12 39

    2016-05-10T23:18:20Z 11 56

    目标:

    自动删除1h以上的原始2秒间隔数据 --> rp实现

    自动删除超过5min的30s间隔数据 --> rp实现

    自动将2秒间隔数据聚合到30s的间隔数据 ---> cq实现

    2s中插入一次数据:(脚本参考上面fake数据)

    create databaes food_data

    CREATE RETENTION POLICY "a_hour" ON "food_data" DURATION 1h REPLICATION 1 DEFAULT

    CREATE RETENTION POLICY "a_week" ON "food_data" DURATION 1w REPLICATION 1

    CREATE CONTINUOUS QUERY "cq_10s" ON "food_data" BEGIN SELECT mean("website") AS "mean_website",mean("phone") AS "mean_phone" INTO "a_week"."downsampled_orders" FROM "orders" GROUP BY time(10s) END

    在步骤1里面创建数据库时,InfluxDB会自动生成一个叫做autogen的RP,并作为数据库的默认RP,autogen这个RP会永远保留数据。在输入上面的命令之后,a_hours会取代autogen作为food_data的默认RP。

    验证:

    select * from "a_week"."downsampled_orders";

    select * from "orders";

    influxdb数据聚合

    表名都可以正则

    select * from /.*/ limit 1

    查询一个表里面的所有数据

    select * from cpu_idle

    查询数据大于200的。

    select * from response_times where value > 200

    查询数据里面含有下面字符串的。

    select * from user_events where url_base = ‘friends#show’

    约等于

    select line from log_lines where line =~ /paul@influx.com/

    按照30m分钟进行聚合,时间范围是大于昨天的 主机名是server1的。

    select mean(value) from cpu_idle group by time(30m) where time > now() – 1d and hostName = ‘server1′

    select column_one from foo where time > now() – 1h limit 1000;

    select reqtime, url from web9999.httpd where reqtime > 2.5;

    select reqtime, url from web9999.httpd where time > now() – 1h limit 1000;

    url搜索里面含有login的字眼,还以login开头

    select reqtime, url from web9999.httpd where url =~ /^\/login\//;

    还可以做数据的merge

    select reqtime, url from web9999.httpd merge web0001.httpd;

    influxdb备份恢复

    #!/bin/bash

    function parse_options {

    function usage() {

    echo -e >&2 "Usage: $0 dump DATABASE [options...]

    \t-u USERNAME\t(default: root)

    \t-p PASSWORD\t(default: root)

    \t-h HOST\t\t(default: localhost:8086)

    \t-s\t\t(use HTTPS)"

    }

    if [ "$#" -lt 2 ]; then

    usage; exit 1;

    fi

    username=root

    password=root

    host=localhost:8086

    https=0

    shift

    database=$1

    shift

    while getopts u:p:h:s opts

    do case "${opts}" in

    u) username="${OPTARG}";;

    p) password="${OPTARG}";;

    h) host="${OPTARG}";;

    s) https=1;;

    ?) usage; exit 1;;

    esac

    done

    if [ "${https}" -eq 1 ]; then

    scheme="https"

    else

    scheme="http"

    fi

    }

    function dump {

    parse_options $@

    curl -s -k -G "${scheme}://${host}/db/${database}/series?u=${username}&p=${password}&chunked=true" --data-urlencode "q=select * from /.*/" \

    | jq . -c -M

    exit

    }

    function restore {

    parse_options $@

    while read -r line

    do

    echo >&2 "Writing..."

    curl -X POST -d "[${line}]" "${scheme}://${host}/db/${database}/series?u=${username}&p=${password}"

    done

    exit

    }

    case "$1" in

    dump) dump $@;;

    restore) restore $@;;

    *) echo >&2 "Usage: $0 [dump|restore] ..."

    exit 1;;

    esac

    python调用influxdb实现数据增删

    9e792b8fgy1fmimwbjjsrj206006fmx4.jpg

    utils/db.py

    # - * - coding: utf-8 - * -

    from influxdb import InfluxDBClient

    def get_db_connection():

    db_conn = InfluxDBClient(host="192.168.x.x", database="pachongdb")

    return db_conn

    main.py

    #!/home/ansible/.venv/bin/python

    # - * - coding: utf-8 - * -

    from influxdb.exceptions import InfluxDBClientError, InfluxDBServerError

    from utils import db

    def insert_success_point_2db():

    db_conn = db.get_db_connection()

    # 写入成功记录,success字段值约定为1

    success_point = [{

    "measurement": "wake",

    "tags": {

    "isp": "mobile",

    "region": "上海",

    },

    "fields": {

    "mobile": 159123456xx,

    "success": 1,

    }

    }]

    try:

    db_conn.write_points(success_point)

    except InfluxDBClientError as e:

    print("influxdb db client error: {0}".format(e))

    except InfluxDBServerError as e:

    print("influxdb db server error: {0}".format(e))

    except Exception as e:

    print("influxdb error: {0}".format(e))

    finally:

    if db_conn is not None:

    db_conn.close()

    def insert_fail_point_2db():

    db_conn = db.get_db_connection()

    # 写入失败记录,fail字段值约定为0

    fail_point = [{

    "measurement": "wake",

    "tags": {

    "isp": "mobile",

    "region": "上海",

    },

    "fields": {

    "mobile": 1591234xxxx,

    "fail": 0,

    }

    }]

    try:

    db_conn.write_points(fail_point)

    except InfluxDBClientError as e:

    print("influxdb db client error: {0}".format(e))

    except InfluxDBServerError as e:

    print("influxdb db server error: {0}".format(e))

    except Exception as e:

    print("influxdb error: {0}".format(e))

    finally:

    if db_conn is not None:

    db_conn.close()

    def main():

    insert_success_point_2db()

    insert_fail_point_2db()

    if __name__ == '__main__':

    main()

    requirements.txt

    certifi==2017.11.5

    influxdb==5.0.0

    21169c33fcefbe5f41ac467b59fde2a0.png

    展开全文
  • EventLog_Analyzer.zip

    2019-09-29 13:04:28
    Windows终端服务器日志监控 Syslog服务器 通用日志解析 & 索引(ULPI)技术 事件日志监控 云设施日志监控 数据库审计 应用程序日志分析 监控和分析应用日志 IIS Web服务器日志分析 IIS FTP服务器日志分析 DHCP ...
  • 第四章、分布式消息队列 第五章、大数据存储技术 第六章、大规模数据离线计算分析 第七章、实时计算框架 ...第十四章、快速构建日志监控系统 第十五章、微博广告智能监控系统 第十六章、微博平台通用监控系统 ...

    第四章、分布式消息队列

    4.1 开源消息队列对比与分析

    目前市面上存在 ZeroMQ ActiveMQ RockeMQ Kafka 等消息中间件,本人在工作中接触到比较多的是ActiveMQ和Kafka。

    4.1.1 ZeroMQ

    ZeroMQ 一种基于消息队列的多线程网络库,其对套接字类型 、连接处理、帧甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。

    4.1.2 ActiveMQ

    ActiveMQ 是开源的消息队列,实现了 JMS 1.1 规范的面向消息的中间件 MOM ),为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。 ActiveMQ 设计目的是提供标准的 、面向消息的、能够跨越多语言和多系统的应用集成消息通信中间件。

    ActiveMQ 实现了JMS 标准并提供了很多附加特性,包括JMX管理、主从管理、消息通信组、消息有限级、订阅消息的延迟接收、接收者处理过慢、虚拟接收者、成熟的消息持久化技术、支持游标操作、支持消息转换、通过Apache的Camel支持EIP、使用镜像队列的形式轻松地对消息队列进行监控等。

    4.1.3 RocketMQ

    RocketMQ 是一种纯 Java 的、分布式的、队列模型的开源消息中间件,其前身是MetaQ,MetaQ 3.0发布时, 产品名称改为 RocketMQ,RocketMQ 能够保证严格的消息顺序,提供丰富的消息拉取模式、高效的订阅者水平扩展能力、实时的消息订阅机制、亿级消息堆积能力。
    其具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。
    RocketMQ 在阿里巴巴集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、 binglog 发等场景。

    4.1.4 Kafka

    在这里插入图片描述

    组件概念:
    • Broker:缓存代理, Kafka 集群中的一台或多台服务器统称为 Broker
    • Topic:区分 Kafka 的消息类型,将不同的消息写到不同的 Kafka Topic中
    • Partition:Topic物理上的分组,一个Topic可以分为多个 Partition ,每个Partition 都是一个有序的队列。 Partition中的每条消息都会被分配一个有序的 id(offset)
    • Producer:消息的生产者
    • Consumer:消息的消费者
    • Consume Group:每一组消费者都有相同的 Group id这样可以保证多个消费者不重复消费同一条消息。
    基本特性
    • 高吞吐量、低延迟:Kafka 每秒可以处理几卡万条消息,它的延迟时间最低只有几毫秒。每个Topic都可以分多个Partition,Comsumer Group对Partition 进行消费操作。
    • 可扩展性:Kafka集群支持热扩展,在消费能力不足的情况下可以增加分区。
    • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份,防止数据丢失。
    • 容错性:允许集群中节点失败,若副本数为n,允许n-1个节点失败
    • 高并发性:由于Kafka是顺序读/写磁盘的,使用NIO的网络模型支持数千个客户端同时读/写。

    4.2 安装与使用

    另外记录安装和使用

    4.3 案例分析

    在这里插入图片描述

    4.3.1 曰志采集

    投放引擎进行日志的记录,采集工具进行日志的实时采集,然后实时地将日志写入 Kafka。目前微博广告存在多个 Kafka 消息队列集群,针对不同的业务日志划分为不同的集群。日志收集使用了上百个 Kafka Topic。

    4.3.2 实时结算

    消息队列的作用是:当系统处理消费能力不足时,可以通过增加分区、增加部署节点来提高系统吞吐量。当由于流量增加造成系统故障时,上游的数据可以写入 Kafka 集群,这样即使下游的服务者机也不会造成结算数据的丢失,避免了对公司的收入造成 定的损失。 Kafka 让系统与系统之间大大降低了相合性。 Kafka 支持同步和异步的消息写入,并且可以配置消息写入模式来降低丢失消息的风险,因为对于结算系统来说,消息丢失率高就会造成收入的减少。

    4.3.3 实时计算

    大量的数据需要实时地通过消息队列传输 实时计算引擎通过实时消费 Kafka的数据进行计算。投放效果评估平台、微博广告实验平台同样需要实时地消费数据,进行投放算法的分析和反馈。

    第五章、大数据存储技术

    5.1 传统数据存储

    2010 年以前的互联网公司的大型论坛、 SNS 、博客等互动产品的技术架构如下图所示:
    在这里插入图片描述
    其主要逻辑是: LVS 负责负载均衡;SquidNamish 承担图片、静态页的缓存功能; Nginx 用来做反向代理;Web 服务器处理业务逻辑:数据库存储业务数据; Cache 服务器主要用作对象缓存和列表缓存。其中存在大 能产生 access 日志的服务器,有效存储这些日志是一个难题。

    5.1.2 传统存储的运行机制

    在这里插入图片描述
    在这里插入图片描述
    日志接收服务器通过网络共享、rsy、网络传输等技术,将日志集中到几台磁盘容很大的大型主机上,大型主机上可能安装有 Oracle 或者 MySQL 关系型数据库,用 Python, Perl,shell 来处理这些日志,然后输出计算结果。

    为了解决单点问题,通常的做法是使用 台具有相同配置的机器作为冷备,将两台机器相合在 起,如果其中一台机器发生了故障,则可以快速地使用另 台机器顶替,维持业务的连 性,这就是最简单的集群形式。

    5.1.3 传统存储带来的问题

    性能问题、成本激增、单点问题、数据准确性等四大问题

    5.2 基于HDFS的分布式存储

    5.2.1 分布式存储的定义

    分布式存储就是指通过网络连接每台机器 使这些分散的存储资源构成一个虚拟的存储设备,数据分散在每台机器上的各个角落。与集中式存储技术不同,分布式存储技术并不是将数据存储在某个或多个特定节点上的。
    在这里插入图片描述

    5.3 HDFS分布式存储原理

    请查看之前文章:HDFS技术原理

    5.4 大数据环境下的数据仓库和分层存储技术

    5.4.1 数据仓库

    在这里插入图片描述

    1. 数据仓库的特点

    面向主题、集成、相对稳定、反映历史变化

    2.数据仓库的组成
    • 数据仓库数据库

    • 数据抽取工具

    • 元数据
      元数据包括 数据源信息、数据转换的描述、数据仓库 对象 数据结构的定义、数据清理和数据更新使用的规则、源数据到目的数据的映射、用户访问权限、数据备份历史记录、数据导入历史记录、信息发布历史记录等。
      商业元数据从商业业务的角度描述了数据仓库中的数据。商业元数据包括:业务问题的描述,以及所包含的数据、查询、报表。
      元数据为访问数据仓库提供了一个信息目录,这个目录全面描述了数据仓库中都有什么数据、这些数据是怎么得到的,以及怎么访问这些数据 。它是数据 库运行和维护的中心, 数据仓库服务器利用它来存储和更新数据,用户通过它来了解和访问数据

    • 访问工具
      访问工具为用户访问数据仓库提供手段 访问工具有数据查询和报表工具、应用开发工具、联机分析处理( LAP )工具、数据挖掘工具。

    • 数据集市( Data Market)
      数据集市是为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据 ,也可称为部门数据或主题数据 。

    5.4.2 数据仓库分层架构

    在这里插入图片描述

    数据仓库采用分层架构,分为缓冲层、操作数据层、明细数据层、汇总数据层和数据集市层

    1. 数据缓冲层
      概念: 用于存储每天的增量数据和变更数据
      数据生成方式: 直接 Kafka 接收源数据或从业务库抽取,需要业务表每天生成 update、delete、insert 数据,只生成 insert 数据的业务表,数据直接接入操作数据层。
      讨论方案: 只把 Kafka 消息直接接入缓冲层,对于其他有拉链数据的业务,也接入缓冲层。
      日志删除方式: 只存储最近 天的数据。
      表的Schema: 一般按天创建分区。

    2. 操作数据层( ODS, Operational Data Store )
      概念: 数据仓库的细节数据层,对缓冲层数据进行沉淀,减小了抽取的复杂性。同时ODS的信息模型组织主要遵循企业业务事务处理的形式,将各种专业数据进行集中,操作数据层的粒度跟缓冲层一致。
      数据生成方式: 部分数据直接来自 Kafka ,部分数据为缓冲层数据与历史数据的合成。
      讨论方案: 每天把操作数据层的前天全量数据和缓冲层的昨天新数据合成一个新的数据表,覆盖旧表。
      日志删除方式: 长久存储
      表的Schema: 一般按天创建分区,没有时间概念的按具体业务选择分区字段。

    3. 明细数据层( DWD, Data Warehouse Detail )
      概念: 数据仓库的明细数据层,同 的信息模型组织主要遵循企业业务事务处理的形式,将各种专业数据进行集中 明细数据层的粒度跟操作数据层一致,属于分析的公共资源。
      数据生成方式: 在操作数据层清洗或 JO时维度表之后生成。
      日志删除方式: 长久存储。
      表Schema : 一般按天创建分区,没有时间概念的按具体业务选择分区宇段。
      库与表命名: 库名为 dwd 表名, 初步考虑格式为 dwd 业务表名。
      旧数据更新方式: 直接覆盖。

    4. 汇总数据层( DWS, Data Warehouse Summary )
      概念: 在数据仓库中明细数据层和数据集市层之间的一个过渡层次,对明细数据层的生产数据进行轻度综合和汇总统计。汇总数据层与明细数据层的主要区别在于二者的应用领域不同,明细数据层的数据来源于生产型系统,并为满意一些不可预见的需求而进行沉淀;汇总数据层则面向分析型应用进行细粒度的统计和沉淀。
      数据生成方式: 由明细数据层按照-定的业务需求生成轻度汇总表。明细数据层需要复杂清洗的数据 需要 MR 处理的数据也经过处理后接入汇总数据层。
      日志、删除方式: 长久存储。
      表Schema: 一般按天创建分区,没有时间概念的按具体业务选择分区字段。
      库与表命名: 库名为 dws ;表名,初步考虑格式为 dws 日期业务表名。
      旧数据更新方式: 直接覆盖。

    5. 数据集市层( DM, Data Market )
      概念: 数据集市层又称为数据集市或宽表。按照业务划分,如流量、订单、用户等,生成宇段比较多的宽表,用于提供后续的业务查询、 OLAP 分析、数据分发等。
      数据生成方式: 由汇总数据层和明细数据层的数据计算生成。
      日志删除方式: 长久存储
      表Schema: 一般按天创建分区,没有时间概念的按具体业务选择分区字段。
      库与表命名: 库名为 dm;表名,初步考虑格式为 dm 业务表名。
      旧数据更新方式: 直接覆盖。

    5.4.3 分层存储的好处

    • 数据结构更明确
    • 数据血缘追踪 ,便于管理
    • 复杂问题简单化
    • 表共用,减少了重复计算
    • 屏蔽原始数据的异常和业务变更的影响
    展开全文
  • 2、测试计划(制定测试策略和测试方法) 测试组长负责 3、准备环境(1)保证测试环境是干净的否则日志会不准,2)数据库准备铺底数据,) 测试组长负责 4、脚本(参数化,参数关联,control) 5、执行脚本/监控...

    一、性能测试流程:

    1、确定需求,测试范围 (确定测的是什么,LR只是辅助实现的工具)  测试组长负责

    2、测试计划(制定测试策略和测试方法)   测试组长负责

    3、准备环境(1)保证测试环境是干净的否则日志会不准,2)数据库准备铺底数据,)   测试组长负责

     4、脚本(参数化,参数关联,control)

    5、执行脚本/监控(设计测试场景)

    6、分析测试结果(首先看日志(服务器的日志),1)如果出现 error 十有八九说明代码有问题,直接找开发就可以了.2)数据库跟服务器的报错,httpwatch)

     

    二、性能测试的难点在哪?如何克服?

      1、知道要测什么

      2、数据的分析

    三、性能测试工具:lr\jmeter

    四、如何确定性能测试人力资源需求? 组长(制定测试计划...),测试执行(脚本编写人,脚本执行/监控,数据分析人),开发,服务器,数据库

    六、性能测试会用到哪些知识?

      1、测试人员的基本素质

      2、能看懂后台日志

      3、要有数据库的行为知识

      4、要有服务器、中间件的相关知识

      5、要有一定的代码能力

    七、如何分析一个系统瓶颈?列举5~10条,并说出解决方案

      笨方法就是按一定规格压并发,一直看日志,看资源使用情况,什么时候资源使用到了爆棚的状态了,那么系统瓶颈就在那。

    八、性能测试、压力测试和负载测试的关系

      

    转载于:https://www.cnblogs.com/wangcp-2014/p/4868103.html

    展开全文
  • 关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 ... 日志监控 流量监控 接口监控 数据库监控 业务监控 性能监控 告警 日志 设计模式 数据结构与算法 各种工具
  • 选择协议-设置录制选项-录制脚本-停止录制-优化脚本(去掉无用内容)-强化脚本(注释、代码结构调整、参数化、检查点、事物、关联)-调试脚本(观察日志) 2)场景设置的流程新建场景(手动、目标场景)-设计调度...
  • 同时利用 AWS Config 的 预定义规则,您也可以监控资源是否合规,比如是否开启了 AWS CloudTrail,RDS 是否开启了备份,IAM 用户的密码策略是否符合要求等。本次示例中,我们将用 AWS Config 来 检查 AWS 账号内是否...
  • 使用具有足够IOPS的大型EBS存储卷来避免日志文件存储缓慢(如果已配置) IOPS > 3,000 标记实例以使用AWS控制台轻松监控Name : Cleanup Bucket (Spot) 确保您的IAM角色允许对所使用的Elasticsearch域进行写访问 ...
  • jira管理维护手册

    2016-04-26 16:03:25
    9.4 监控信息 60 9.5 完整性检查器 61 9.6 日志分析 61 9.7 计划任务 61 9.8 Audit log任务 62 9.9 Atlassian支持工具 62 9.10 角色 62 9.11 全局权限 62 9.12 密码策略 63 9.13 用户会话 63 9.14 记住我 63 9.15 白...
  • 10、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度; 11、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务; 12、任务...
  • 因为我们的应用已经上线很久,也没有监控每日的运行日志,不知该问题真正的出现时间在哪里。服务器也是和别家公司合用的,另外一家公司近期在服务器上安装了iis7,会对服务器自身的网络协议有影响吗?还是目标端...
  • jpa data 对象关联 springboot使用hibernate validator校验 spring-boot单元测试 基于oAuth2.0实现开放平台授权中心 spring-security-oauth2的mysql数据表 spring-security-oauth2代码实现 OAuth 2.0 ...
  • 命令行监控 日志监控 系统监控平台使用 应用故障诊断实践 (Spotlight) (IntroScope) 客户端故障诊断 中间件故障诊断 数据库故障诊断 应用分层诊断 类与方法诊断 SQL语句优化 第四天 软件测试管理 测试流程管理 ...
  • 主从复制的准备工作02-binlog日志详解 00:33:23分钟 | 第11节 主从实战01-准备环境 00:26:06分钟 | 第12节 主从实战02-主节点配置 00:06:19分钟 | 第13节 主从实战03-从节点配置 00:10:45分钟 | 第14节 java操作...
  • 安全分析服务 搭建大数据分析平台,对网络流量、设备日志、告警事件等数据,利用复杂关联技术等大数据分析技术,分析攻击特征,监测攻击行为,识别病毒木马、僵尸网络等威胁手段,对威胁的影响进行分析,确定政府...
  • (2)用于活动目录数据库的最小磁盘空间为200MB,另外还要有50MB的空间用于活动目录数据库的日志文件。% N, l3 [) D1 u9 r- R" {: `( U6 K - S P; `* |# m( E* Q$ E& U2 u (3)已做好了DNS服务器的解析。1 C. \( h3 k) ...
  • 目录 第1章 软件性能测试 1 1.1 什么是软件的性能 1 1.1.1 软件 1 ...12.2.5 Observer性能监控技术 341 12.2.6 基于XSL技术的性能测试报告构建 344 12.3 总结 346 附录A 有关LoadRunner的常见问题解答 347
  • siebel工作流管理指南

    2009-03-23 11:46:40
    将列与工作流程规则组件相关联 176 关于 Siebel Tools 中的验证工具 177 修改现有工作流程规则对象 177 关于工作流程规则程序 179 关于“程序列表”视图 179 关于“工作流程规则程序参数列表”视图 180 创建工作流程...
  • 添加大量监控项, 优化日志 支持配置文件的合法性检测 支持 HTTP API 获取 TiDB 参数信息 使用 Batch 方式 Resolve Lock,提升垃圾回收速度 支持多线程垃圾回收 支持 TLS 4.兼容性 支持更多 MySQL 语法 支持...
  • 操作系统概念第六版翻译版

    热门讨论 2012-08-05 13:11:37
    关联切换 进程操作 进程创建 进程终止 进程协作 进程间通信 消息传递系统 命名 同步 缓冲 例子:Mh 例子:Windows 客户机-服务器系统通信 套接字 远程过程调用 远程方法调用 小结 习题四 推荐读物 第五章线程 概述 ...
  • 关联切换 进程操作 进程创建 进程终止 进程协作 进程间通信 消息传递系统 命名 同步 缓冲 例子:Mh 例子:Windows 客户机-服务器系统通信 套接字 远程过程调用 远程方法调用 小结 习题四 推荐读物 第五章线程 概述 ...
  • 主页 | 成功案例 | 开发者文档 | 博客专栏 | 更新日志 | 帮助 春松客服: 快速获得好用的开源智能客服系统 https://www.cskefu.com CSKeFu is a Customer Support System for Enterprises in a High ...
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    13.2.8 监控表的存储空间 313 13.2.9 修改表空间的存储设置 314 13.2.10 删除表 314 13.2.11 外部表的管理 314 13.3 索引 316 13.3.1 概念 316 13.3.2 各种类型索引的比较和选择 317 13.3.3 索引的基本操作 317 13.4...
  • 产品更新: 观看 v6 版本介绍视频 | 其它更新日志 媒体报道 GitHub 上获点赞最多的开源客服系统春松客服入驻 CODE CHINA Coscon'19 中国开源年会春松客服主题分享 春松客服荣获 GVP 企业级开源项目认证 ...
  • 106.基于JAVA语言编写Spark Application编程模板、读取数据及测试监控 107.案例WordCount:结合源码编码实现JAVA语言编程 108.案例WordCount:对统计的词频进行降序排序(涉及TopKey)及作业说明 109.案例分析:...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

日志监控关联策略