Vector의 소개(그리고 inflexdb2.0과의 합작)
Vector 소개
https://vector.dev/
한마디로 Rust제의 초속도 경량의 파이프 공구다.
유사한 도구로 말하자면, flund와logstash가 바로 이것이다.
나는 공식 사이트를 보는 것이 가장 이해하기 쉽다고 생각한다. 개요를 간단하게 설명하기 위해서다.
현재 단계에서 자체 제작 플러그인을 사용하는 것은 어려울 것 같아서 이런 상황에서flumentd를 선택하는 것이 좋습니다.
※ 아래 사진은 공식 홈페이지에서 참조.
개념도
Sources
Sources 모니터링 파일, 표준 출력, HTTP, 외부 클라우드 서비스 등을 Vector의 데이터로 입력합니다.
Transforms
Transforms는 이름처럼 Sources를 통해 얻은 데이터를 가공합니다.
로그를 필터링하거나 지우거나 JSON으로 변환하거나 태그를 추가하거나 제거할 수 있습니다.
정규 표현식을 지원하기 때문에 프로그램에서 이루어진 원시 로그도 해석되고 개별 매개 변수로 처리될 수 있습니다.
Sinks
Sinks는 Transforms를 통해 가공된 데이터를 다양한 DB에 저장하거나 파일에 저장합니다.
DB와 inflexdb2에 대응합니다.0과 클릭하우스에 대응하는 게 좋아요.
다른 도구와 비교
파일에 대한 감시에는 일련의 기능이 있다.
공연에 관하여
https://vector.dev/#performance
CPU
Memory
I/O
File To TCP, TCP To Backhole, TCP To HTTP에서 입출력 1위에 올랐다.
CPU는 그나마 괜찮았고 메모리도 앞섰다.
전체적으로 보면 도내 메모리의 I/O 성능이 매우 높은 것 같습니다.
설치 방법
OS 패키지는 간단히 설치할 수 있습니다.(다음은 Ubuntu의 예)
Ubuntu의 경우 deb 패키지가 있으므로 등록하고 설치하기만 하면 됩니다.
샘플로 ansible의task를 미리 싣습니다.
- name: Download .deb package
get_url:
url: https://packages.timber.io/vector/0.10.X/vector-amd64.deb
dest: /tmp/vector-amd64.deb
tags:
- install
- name: Install package
apt:
deb: /tmp/vector-amd64.deb
tags:
- install
- name: put config template
template:
src: vector.toml.j2 # 後述します
dest: /etc/vector/vector.toml
notify:
- Reload vector # handlersに設定する必要あり
- name: add adm group to vector user
user:
name: vector
groups: adm
append: yes # nginxのログを監視するため
- name: Start Vector
systemd:
name: vector
state: started
enabled: yes
프로파일 정보toml 형식으로 설정합니다.
최초 설명된 Sources, Transforms, Sinks 부분으로 나뉘어 간단하게 설정할 수 있다.
Link-U의 사례
nginx의 접근 로그 (ltv 형식) 를 inflexdb2에 입력하십시오.0으로 저장합니다.
nginx
ltv의 설정은 다음과 같다.
log_format ltsv 'time:$time_iso8601\t'
'status:$status\t'
'remote_addr:$remote_addr\t'
'request_method:$request_method\t'
'request_uri:$request_uri\t'
'host:$host\t'
'request_time:$request_time\t'
'bytes_sent:$bytes_sent\t'
'referer:$http_referer\t'
'useragent:$http_user_agent\t'
'app_info:$upstream_http_x_app_info';
app_info는 출력 프로그램이 되돌아오는 매개 변수로 설정됩니다.Sources
[sources.nginx_log_api]
# General
type = "file" # required
ignore_older = 86400 # optional, no default, seconds
include = ["/var/log/nginx/api.log"] # required
exclude = ["/var/log/nginx/error.log", "/var/log/nginx/*.log-*"] # required
start_at_beginning = false # optional, default
include로 특정한 파일을 지정했기 때문에 exclude의 내용은 필요하지 않지만 설명을 위해 넣습니다.Transforms
ltsv 형식을 해석하기 위해 정규 표현식을 열심히 쓰겠습니다.
Types에서 구상의 유형을 지정합니다.
(metric로 전환된 것은 당시 influmxdb의 경우 그것이 필요했기 때문이다.)
[transforms.nginx_parser_api]
type = "regex_parser"
inputs = ["nginx_log_api"]
regex = "^time:(?P<timestamp>[^\\t]+)\\tstatus:(?P<status>\\d+)\\tremote_addr:(?P<remote_addr>[^\\t]+)\\trequest_method:(?P<request_method>\\w+)\\trequest_uri:(?P<request_uri>[^\\t]+)\\thost:(?P<host>[^\\t]+)\\trequest_time:(?P<request_time>[^\\t]+)\\tbytes_sent:(?P<bytes_sent>[^\\t]+)\\treferer:(?P<referer>[^\\t]+)\\tuseragent(?P<useragent>[^\\t]+)\\tapp_info:(?P<app_info>[^\\t]+)$"
drop_field = true
field = "message"
# Types
types.timestamp = "timestamp|%Y-%m-%dT%H:%M:%S%z"
types.status = "int"
types.remote_addr = "string"
types.request_method = "string"
types.request_uri = "string"
types.host = "string"
types.request_time = "float"
types.bytes_sent = "int"
types.referer = "string"
types.useragent = "string"
[transforms.nginx_parser_to_metric]
type = "log_to_metric"
inputs = ["nginx_parser_api"]
[[transforms.nginx_parser_to_metric.metrics]]
type = "gauge"
field = "request_time"
tags.status = "{% raw %}{{status}}{% endraw %}"
tags.host = "{% raw %}{{remote_addr}}{% endraw %}"
tags.request_method = "{% raw %}{{request_method}}{% endraw %}"
tags.request_uri = "{% raw %}{{request_uri}}{% endraw %}"
tags.host = "{% raw %}{{host}}{% endraw %}"
tags.referer = "{% raw %}{{referer}}{% endraw %}"
tags.useragent = "{% raw %}{{useragent}}{% endraw %}"
Sinksansible 템플릿 관리 설정 파일을 사용하기 때문에 일부 변수화됩니다.
[sinks.influxdb]
# General
type = "influxdb_metrics"
inputs = ["nginx_parser_to_metric"]
endpoint = "http://{{ influxdb_endpoint }}:8086"
namespace = "nginx"
bucket = "{{ influxdb_bucket_name }}"
healthcheck = true
# Auth
org = "Link-U"
token = "{{ influxdb_auth_token }}"
총결산다음 그림은 시간당 두드리는 API의 수입니다.
샘플 데이터이기 때문에 도표의 변화가 매우 적다.0으로 표시되면 API 단위로 숫자를 계산할 수 있습니다.
또한 API별 평균 응답 속도, 가장 빠른 속도, 가장 느린 시간 등 액세스 로그에 있는 매개변수에서 숫자를 확인할 수 있습니다.
Vector를 사용하면 데이터를 어렵지 않게 간단하게 시각화할 수 있습니다.
flumentd를 사용하는 곳이 많지만 메모리를 절약한다는 점에서 앞으로 Vector도 선택항이 될 수 있다.
Reference
이 문제에 관하여(Vector의 소개(그리고 inflexdb2.0과의 합작)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ta2xeo/items/71591a2d66867ed57cca텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)