官网: https://vector.dev/

用于构建可观察性管道的轻量级、超快速工具

[安装]

curl --proto '=https' --tlsv1.2 -sSf https://sh.vector.dev | bash

source ~/.profile

可测试配置文件:
vector --config /root/.vector/config/vector.toml

[使用]

[加入系统管理]

vim /etc/systemd/system/vector.service

[Unit]
Description=Vector
Documentation=https://vector.dev
After=network-online.target
Requires=network-online.target [Service]
User=vector
Group=vector
ExecStart=/usr/bin/vector -c /etc/vector/datacenter/*.yaml
ExecReload=/bin/kill -HUP $MAINPID
Restart=no
EnvironmentFile=-/etc/default/vector [Install]
WantedBy=multi-user.target

示例:

Toml数据格式

---

sources:
kafka_app_events:
type: "kafka"
bootstrap_servers: "kafka1:9092,kafka2:9092,kafka3:9092"
group_id: vector-sink-beta
topics:
- login_test
- button_click_test
auto_offset_reset: earliest transforms:
remap_public_fields:
type: remap
drop_on_error: true
inputs:
- kafka_app_events
source: |-
msg = parse_json!(.message)
msg.kafka_offset = .offset
msg.kafka_partition = .partition
msg.kafka_topic = .topic msg.app_id = to_int!(msg.app_id)
msg.number_id = to_int!(msg.number_id)
msg.player_id = to_string!(msg.player_id)
msg.player_type = to_int!(msg.player_type)
msg.platform = to_int!(msg.platform)
msg.params = to_string!(msg.params)
msg.client_version = to_string!(msg.client_version)
msg.reg_channel = to_int!(msg.reg_channel)
msg.channel = to_int(msg.channel)??0
msg.main_channel = msg.channel
if msg.channel > 10000000 {
msg.main_channel = to_int(msg.channel / 10000 ?? 0)
}
. = msg route_events:
type: "route"
inputs:
- remap_public_fields
route:
login: .kafka_topic == "login_test"
button_click: .kafka_topic == "button_click_test" remap_button_click_test:
type: remap
drop_on_error: true
inputs:
- route_events.button_click
source: |-
.button_id = to_int!(.button_id) remap_login_test:
type: remap
drop_on_error: true
inputs:
- route_events.login
source: |-
.is_new = to_int!(.is_new)
.longitude = to_float!(.longitude)
.latitude = to_float!(.latitude) sinks:
clickhouse_button_click_test:
type: clickhouse
auth:
user: vector_beta
password: xxx
strategy: basic
inputs:
- remap_button_click_test
compression: gzip
database: events_beta
endpoint: http://xxx.com:8123
table: button_click_all
encoding:
only_fields:
- kafka_partition
- kafka_offset - data_time
- app_id
- tags
- player_id
- number_id
- player_type
- params
- platform
- reg_channel
- channel
- main_channel
- client_version
- button_id
healthcheck:
enabled: true clickhouse_login_test:
type: clickhouse
auth:
user: vector_beta
password: xxx
strategy: basic
inputs:
- remap_login_test
compression: gzip
database: events_beta
endpoint: http://xxx.com:8123
table: login_all
encoding:
only_fields:
- kafka_partition
- kafka_offset - data_time
- app_id
- tags
- player_id
- number_id
- player_type
- params
- platform
- reg_channel
- channel
- main_channel
- client_version - is_new
- ip
- device_id
- device_os
- device_brand
- device_model
- ppi
- longitude
- latitude
healthcheck:
enabled: true

实战:

使用vector+clickhouse来收集nginx日志, 最后使用gradfana进行展示

1)定义nginx的访问日志格式

log_format track '$remote_addr - $time_iso8601 "$request_uri" '
'$status $body_bytes_sent "$http_user_agent"';

2)例如数据的日志path为 /var/log/track.log

定义解析日志

[sources.home]
type = "file"
include = ["/var/log/track.log"]
read_from = "end" [transforms.process]
type = "remap"
inputs = ["home"]
source = '''
. |= parse_regex!(.message, r'^(?P<ip>\d+\.\d+\.\d+\.\d+) \- (?P<date>\d+\-\d+\-\d+)T(?P<time>\d+:\d+:\d+).+?"(?P<url>.+?)" (?P<status>\d+) (?P<size>\d+) "(?P<agent>.+?)"$')
.status = to_int!(.status)
.size = to_int!(.size)
.time = .date + " " + .time
''' [sinks.print]
type = "console"
inputs = ["process"]
encoding.codec = "json" [sinks.clickhouse]
type = "clickhouse"
inputs = ["process"]
endpoint = "http://xx.xx.xx.xx:8123"
database = "nginx_db"
table = "log"
compression = "gzip"
auth.strategy = "basic"
auth.user = "username"
auth.password = "password"
skip_unknown_fields = true
request.concurrency = "adaptive"

一般定义三部分:

[source.***]  定义数据源

[transforms.***]  定义如何解析,处理数据的结构

[sinks.***]  定义数据的接收与存储

这里的"***" 是可以被替换名称的

3)创建clickhouse的数据库和表

CREATE TABLE log
(
`ip` String,
`time` Datetime,
`url` String,
`status` UInt8,
`size` UInt32,
`agent` String
)
ENGINE = MergeTree
ORDER BY date(time)

参考文档: https://vector.dev/docs/

同步工具之Vector的更多相关文章

  1. 《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&并发容器类&同步工具类,消费者模式

    上一章说道委托是创建线程安全类的一个最有效策略,只需让现有的线程安全的类管理所有的状态即可.那么这章便说的是怎么利用java平台类库的并发基础构建模块呢? 5.1 同步容器类 包括Vector和Has ...

  2. Java并发之CyclicBarrier 可重用同步工具类

    package com.thread.test.thread; import java.util.Random; import java.util.concurrent.*; /** * Cyclic ...

  3. Java并发之CountDownLatch 多功能同步工具类

    package com.thread.test.thread; import java.util.Random; import java.util.concurrent.*; /** * CountD ...

  4. Java核心知识点学习----线程同步工具类,CyclicBarrier学习

    线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发. 1 ...

  5. Rsync 3.1.0 发布,文件同步工具

    文件同步工具Rsync 3.1.0发布.2013-09-29 上一个版本还是2011-09-23的3.0.9 过了2年多.Rsync基本是Linux上文件同步的标准了,也可以和inotify配合做实时 ...

  6. java5 CountDownLatch同步工具

    好像倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当到达0时,所有等待者就开始执行. java.util.concurrent.CountDownLatch ...

  7. mysql对比表结构对比同步,sqlyog架构同步工具

    mysql对比表结构对比同步,sqlyog架构同步工具 对比后的结果示例: 执行后的结果示例: 点击:"另存为(S)" 按钮可以把更新sql导出来.

  8. 文件和文件夹同步工具AFiles 1.0 发布

    文件和文件夹同步工具AFiles 1.0  正式发布了! 本软件支持按文件日期或长度的各种比较方式来同步文件或者文件夹. 支持双向同步功能. 支持深层文件夹功能. 可以自动产生比较和同步的记录情况. ...

  9. rsync同步工具学习笔记

    rsync同步工具 1.rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于unix/linux/windows等多种操作 ...

  10. 文件同步工具BT Sync介绍和使用说明

    BT Sync介绍 BT 下载,相信大伙儿都知道的.今儿个要介绍的 BT Sync,跟 BT 下载一样,都是 BitTorrent 公司发明滴玩意儿,都是采用 P2P 协议来进行传输. 简而言之,BT ...

随机推荐

  1. 在 SQLAlchemy 中对数据异步处理的时候,获得关联集合的处理方式

    我们在定义SQLAlchemy对象模型的关系的时候,用到了relationship 来标识关系,其中 lazy 的参数有多种不同的加载策略,本篇随笔介绍它们之间的关系,以及在异步处理中的一些代码案例. ...

  2. 探索不同引擎Innodb和Myisam的索引优化方案

    数据库可能存在千万级的数据,必须将这些行数据以一定的结构组织起来做到高效的增删改查. 我们将分别探索innodb和myisam两种引擎的索引方案. 一.InnoDB的索引 1.假设表初始没有记录,只有 ...

  3. Vue配置代理(devServer)解决跨域问题

    1.作用: Vue官方文档的解释是: 如果你的前端应用和后端 API 服务器没有运行在同一个主机上,你需要在开发环境下将 API 请求代理到 API 服务器.这个问题可以通过 vue.config.j ...

  4. P3792 由乃与大母神原型和偶像崇拜

    题意 给定长为 \(n\) 的数组 \(a\),支持单点修改,\(q\) 次查询区间 \([l,r]\) 是否可以重排为值域上连续的一段. \(n,q\le5\times10^5,a_i\le2.5\ ...

  5. pycharm批量注释

    pycharm批量注释不像是spyder可以鼠标右键选择,pycharm是要用快捷键的,选中要注释的代码,然后快捷键就可以了. 注释代码和取消注释代码的快捷键都一样ctrl + /

  6. JavaScript – Generator Function

    参考 阮一峰 – Generator 函数的语法 介绍 Generator Function 是一种特别的函数, 它让函数有一种分阶段执行的能力. 一般的函数, 你调用它, 它执行所有函数内的代码, ...

  7. JavaScript习题之判断题

    1. JavaScript是Java语言的脚本形式.( ) 2. JavaScript中的方法名不区分大小写.( ) 3. JavaScript语句结束时的分号可以省略.( ) 4. 通过外链式引入J ...

  8. C++ 数据输入cin (解决CLoin输入中文程序出错)

    数据输入cin 语法:cin >> 变量 解决 CLoin 使用cin输入中文程序无法正常运行 按住Ctrl+alt+shift+/键 弹出对话框选择注册表 取消勾选run.process ...

  9. Web刷题之polarctf靶场(2)

    1.蜜雪冰城吉警店 点开靶场, 发现题目说点到隐藏奶茶(也就是第九杯)就给flag, 但是明显就只有八杯, 猜测大概率考的是前端代码修改 把id=1修改为id=9, 然后回到页面点击原味奶茶即可弹出f ...

  10. 第22天:安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用

    #数据库操作-mysqli函数&增删改查 PHP函数:连接,选择,执行,结果,关闭等 参考:https://www.runoob.com/php/php-ref-mysqli.html 常用: ...