jck28 - 小柒 - 测试右移 logstash

一,测试右移介绍

1.1 测试右移的价值

  • 测试环境不能完全模拟线上环境
  • 线上质量不仅取决于已发布代码,还取决于数据变更与配置变更
  • 线上测试可以获得更多质量数据辅助产 品更新
    image

1.2 测试右移实践

(1)质量监控

  • apm 应用性能监控
  • 全链路监控 zipkin skywalking
  • 崩溃率监控 bugly
  • 线上用户体验特征监控与分析
    image

(2)测试监控

  • 测试的深度 更好
  • 测试的速度 更快
  • 测试的广度 更全
  • 测试的进度 管理

(3)精准测试

  • 降低测试成本,根据代码变更定位用例 范围
  • 提高测试覆盖率,更准确覆盖被测业务
  • 提高测试用例有效性,反推有效测试用例

(4)故障注入混沌工程

(5)线上巡检与测试

二,数据采集与处理引擎 - logstash

2.1 logstash 简介

Logstash是一个收集与处理数据的引擎,就像ElasticSearch是专门用来检索的引擎一样,Logstash用于收集、处理和转换各种数据源(文件、数据库、网站等)的数据,并将其转换为统一的格式。
Logstash支持多种插件,进行数据过滤、转换和输出,可以方便地与 ES 和 Kibana 集成使用。
还支持多线程处理和事件模型,可以在大规模数据处理场景下提供高性能、高可用的服务。

2.2 logstash 处理流程

2.3 pipeline 机制

2.4 logstash 安装

(1)Linux安装方式

(2)docker安装部署

  • docker 方式:需要挂载本地数据路径与配置文件路径
查找镜像:docker search logstash
拉取镜像:docker pull logstash
启动容器:
# 把1ogstash.conf配置文件放到pipeline目录中,注意数据路径要为docker内的路径
# 把logstash.yam1挂载进去覆盖已有的默认域名,解决警告提示
# 把数据目录挂载进去
docker run it --rm \
-v $PWD/config/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v $PWD/pipeline:/usr/share/logstash/pipeline \
-v /home/demi/www/:/data/ \
docker.elastic.co/logstash/logstash:5.6.12 \
--config.reload.automatic

(3) input 常用配置

stdin{ }
file {
path =>"/data/*.csv"
}
file {
path =>"/data/*.json"
codec:json
}
kafka {
    topic_id =>'topic name'
    zk_connect =>'${zookeeper的地址}:2181/kafka'
}

(4) filter 常见配置

csv{
    columns =>[ "log_time", "real_ip", "status", "http_user_agent"]
    }
json {
    source => "message"
    }

(5)output 常见配置

elasticsearch{
    hosts=>["x.x.x.x"]
    }
stdout {}

(6)场景读取csv文件

docker run  -it --rm logstash -e '
  input { stdin { } }
  filter {
      csv { columns=>["a","b","c","d"] }
      }
  output { stdout {} }
'

(7)场景读取json数据

docker run  -it --rm logstash -e '
  input { stdin { } }
  filter {
      json { source=>"message" }
      }
  output { stdout {} }
'

(8) 自动推送 CSV 数据到 ES

docker run  -it --rm logstash -e '
   input {
      file {
          path=>["/data/*.csv"]
          }
    }
  filter {
      csv {
          columns=>["a","b","c","d"] }
    }
  output {
      elasticsearch {
          hosts=>["http://172.17.0.1:9200"]
          }
    }
 '

(9) 读取 nginx 日志

  • 在pipeline目录下新建nginx.conf文件,写入下记管道配置
input {
    file{
        path =>[ "/data/access.log"]
    }
}
filter {
    grok{ match =>{ "message" =>"%{COMBINEDAPACHELOG}"}}
    geoip{ source =>"clientip"}
}
output{
    stdout{}
    elasticsearch {
        hosts =>[ "http://h2.stug.ceshiren.com:9200"]
        index => "logstash-nginx-%{+YYYY.MM.dd}"
        }
}
  • 运行管道:
docker run it --rm -v $PWD/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v $PWD/pipeline:/usr/share/logstash/pipeline -v /home/demi/www/access.log:/data/access.log logstash --config.reload.automatic
  • 管道配置文件用法
    • 字段引用:[][]“apache.${[response][status]}”
    • 格式控制:%{}“/var/log/%{type}.%{+yyyy.MM.dd.HH}”
    • 逻辑控制:filter{if[action]==“login”{mutate{ remove_field =>“secret”}}}
    • 字段修改:plugins