同步工具之Vector

用于构建可观察性管道的轻量级、超快速工具
[安装]
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/
- https://medium.com/datadenys/using-vector-to-feed-nginx-logs-to-clickhouse-in-real-time-197745d9e88b
同步工具之Vector的更多相关文章
- 《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&并发容器类&同步工具类,消费者模式
上一章说道委托是创建线程安全类的一个最有效策略,只需让现有的线程安全的类管理所有的状态即可.那么这章便说的是怎么利用java平台类库的并发基础构建模块呢? 5.1 同步容器类 包括Vector和Has ...
- Java并发之CyclicBarrier 可重用同步工具类
package com.thread.test.thread; import java.util.Random; import java.util.concurrent.*; /** * Cyclic ...
- Java并发之CountDownLatch 多功能同步工具类
package com.thread.test.thread; import java.util.Random; import java.util.concurrent.*; /** * CountD ...
- Java核心知识点学习----线程同步工具类,CyclicBarrier学习
线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发. 1 ...
- Rsync 3.1.0 发布,文件同步工具
文件同步工具Rsync 3.1.0发布.2013-09-29 上一个版本还是2011-09-23的3.0.9 过了2年多.Rsync基本是Linux上文件同步的标准了,也可以和inotify配合做实时 ...
- java5 CountDownLatch同步工具
好像倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当到达0时,所有等待者就开始执行. java.util.concurrent.CountDownLatch ...
- mysql对比表结构对比同步,sqlyog架构同步工具
mysql对比表结构对比同步,sqlyog架构同步工具 对比后的结果示例: 执行后的结果示例: 点击:"另存为(S)" 按钮可以把更新sql导出来.
- 文件和文件夹同步工具AFiles 1.0 发布
文件和文件夹同步工具AFiles 1.0 正式发布了! 本软件支持按文件日期或长度的各种比较方式来同步文件或者文件夹. 支持双向同步功能. 支持深层文件夹功能. 可以自动产生比较和同步的记录情况. ...
- rsync同步工具学习笔记
rsync同步工具 1.rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于unix/linux/windows等多种操作 ...
- 文件同步工具BT Sync介绍和使用说明
BT Sync介绍 BT 下载,相信大伙儿都知道的.今儿个要介绍的 BT Sync,跟 BT 下载一样,都是 BitTorrent 公司发明滴玩意儿,都是采用 P2P 协议来进行传输. 简而言之,BT ...
随机推荐
- 一个开源、跨平台的.NET UI框架 - Avalonia UI
前言 今天大姚给大家分享一个开源.免费(MIT License).跨平台的.NET UI框架:Avalonia UI. Avalonia是一个成熟稳定的平台,用于构建桌面.嵌入式.移动的和Web应用程 ...
- 小tips:使用babel-upgrade从babel6升级babel7
基础使用 完整使用参考地址:https://www.npmjs.com/package/babel-upgrade 使用方式: # npx lets you run babel-upgrade wit ...
- CSS – RWD (Responsive Web Design) 概念篇
介绍 Only PC 以前是没有手机的, 只有电脑, 所以做开发, 只需要开发电脑版本就可以了. Mobile Version 后来手机诞生, 有钱的公司就做两个版本, 一个手机版, 一个电脑版. 没 ...
- ASP.NET Core – Web API 冷知识
Under/Over Posting 参考: .NET Core WebApi Action is executed even with missing properties in the reque ...
- Centos7 阿里云镜像 2207-02 下安装docker-compose后,docker-compose version 命令失效问题
吐槽下,按照官方教程和网上各种教程折腾了很久,最后试出来的. 首先找到docker-compose被安装到那里 whereis docker --输出示例,cd命令进入各自目录查看docker-com ...
- UEFI原理与编程(二)
系统表 对UEFI应用程序和驱动程序开发人员来讲,系统表是最重要的数据结构之一,它是用户空间通往内核空间的通道.有了它,UEFI应用程序和驱动才可以访问UEFI内核.硬件资源和I/O设备. 1 在应用 ...
- 墨天轮最受DBA欢迎的数据库技术文档-容灾备份篇
在大家的支持与认可下,墨天轮编辑部继续为大家整理出了[墨天轮最受欢迎的技术文档]系列第二篇--容灾备份篇,希望能够帮助到大家. 作为一名数据库管理员,最怕数据库中心突然失去服务能力.影响业务,而不论是 ...
- js中 操作符new 的作用和含义
作用:通过构造函数创建实例对象 :通过 new 出来的实例可以访问构造函数的属性和方法 :
- 使用zipkin配置spring boot的链路器(httpclient、restTemplate)
一.首先导入zipkin需要的依赖 <!--zipkin-brave start--> <dependency> <groupId>io.zipkin.brave& ...
- Oracle中查看隐含参数的sql
select a.ksppinm "Parameter", a.ksppdesc "Description", b.ksppstvl "Session ...