Vector
Overview
Vector is a fast, vendor-neutral observability data pipeline developed by Datadog. It collects logs, metrics and traces, reshapes them with a transform language, and routes them to the destinations you choose. It is a single self-contained binary driven by one plain-text configuration file, with no database and no agent fleet to manage.
This guide covers deploying and configuring Vector on Ubuntu 24.04 on Azure from the SecureAnyCloud Azure Marketplace images. The image installs the pinned official Vector 0.57.0 release, verified by checksum, and runs it under systemd as the unprivileged vector user.
What you get:
- Vector 0.57.0 (pinned, checksum verified), run under systemd as the unprivileged
vectoruser (vector.service) - A working demo pipeline: a
demo_logssource, aremap(VRL) transform, and console plus file sinks - The optional GraphQL API bound to loopback only (
127.0.0.1:8686), sovector topworks locally but nothing is exposed off the box - No listening data port by default and no secret baked into the image
- Unattended security upgrades left enabled so the OS keeps receiving patches
- Ready on first boot. The image ships a working demo pipeline, so Vector processes data the moment the VM boots. A
demo_logssource generates sample Apache log events, aremaptransform parses each event with Vector Remap Language (VRL) and stamps a marker field, and the results fan out to a console sink (JSON to the journal) and a file sink on disk. Replace the demo source and sinks with your own when you are ready (see Step 8). - Nothing exposed by default. The optional GraphQL API of Vector is a management surface. This image binds it to loopback only (
127.0.0.1:8686), sovector topandvector tapwork locally while nothing, including the GraphQL playground, is reachable off the box. The only source of the demo pipeline is a self-contained generator, so the image opens no listening data port. The only inbound port is SSH 22. - No baked credential. Vector has no login and no admin password, and the shipped configuration contains no secrets, tokens or keys. The per-VM details written to
/root/vector-credentials.txton first boot are endpoint notes, not a secret. If you later add a sink that needs a token, supply it as an environment variable at deploy time (Step 8).
Prerequisites
Before you deploy, you need:
- An active Azure subscription, an SSH public key, and a VNet and subnet in the target region
- A subscription to the Vector listing on Azure Marketplace
- A Network Security Group rule that allows TCP 22 for administration
- Recommended virtual machine size:
Standard_B2s(2 vCPU, 4 GB RAM) for a light pipeline. For heavy event volumes, useStandard_D2s_v5or larger. Vector scales well with more CPU.
Deploy from the Azure Portal
Search for Vector in the Marketplace, select the SecureAnyCloud publisher, and click Create. Configure the Network Security Group to allow TCP 22 for administration. The demo pipeline needs no inbound data port. If you later add a network source (for example a syslog or http_server source), open only the ports that source listens on.
Deploy from the Azure CLI
RG="observability-prod"; LOCATION="eastus"; VM_NAME="vector1" IMAGE_URN="sac1647283583153:vector-ubuntu-24-04:default:latest" SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" az group create --name "$RG" --location "$LOCATION"
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:vector-ubuntu-24-04:default:latest
az vm create \
--resource-group "$RG" --name "$VM_NAME" \
--image "$IMAGE_URN" \
--size Standard_B2s \
--admin-username azureuser \
--ssh-key-values "$SSH_KEY" \
--public-ip-sku Standard
# Open the admin port on the VM's NSG:
az vm open-port --resource-group "$RG" --name "$VM_NAME" --port 22 --priority 1001First boot
On first boot, the image resolves the VM address for its documentation, asserts that the GraphQL API is bound to loopback only, validates the pipeline config, starts Vector, confirms that the demo pipeline is moving events, and writes /root/vector-credentials.txt. This completes within a minute. SSH in as azureuser and read the details:
sudo cat /root/vector-credentials.txtThe details file records the loopback API endpoint and the demo sink directory, and confirms that the demo pipeline is flowing. Vector has no login and no baked secret, so there is no password to retrieve.
Confirm the service is running
Check that vector.service is active, vector --version reports the pinned release, vector validate reports the config valid, and the loopback GraphQL API answers /health with {"ok":true}.
systemctl is-active vector.service vector --version sudo vector validate /etc/vector/vector.yaml curl -s http://127.0.0.1:8686/healthExpected output:
active vector 0.57.0 (x86_64-unknown-linux-gnu 8832452 2026-07-14) √ Loaded ["/etc/vector/vector.yaml"] √ Health check "console_out" √ Health check "file_archive" Validated {"ok":true}Review the demo pipeline
The pipeline is defined entirely in /etc/vector/vector.yaml. A demo_logs source generates sample Apache log lines, a remap transform parses each line with VRL and adds an env marker, and the events fan out to a console sink and a file sink.
sudo cat /etc/vector/vector.yamlThe shipped pipeline looks like this:
api: enabled: true address: "127.0.0.1:8686" sources: demo_logs: type: demo_logs format: apache_common interval: 1.0 transforms: parse_and_tag: type: remap inputs: [demo_logs] source: | . = parse_apache_log!(.message, format: "common") .env = "sac-demo" .processed_by = "vector" sinks: console_out: type: console inputs: [parse_and_tag] encoding: codec: json file_archive: type: file inputs: [parse_and_tag] path: "/var/lib/vector/demo-out/apache-%Y-%m-%d.log" encoding: codec: jsonSee events flowing source to sink
The console sink writes structured JSON events to the journal, and the file sink writes the same events to disk. Both carry the parsed Apache fields (method, status, host) and the env: sac-demo marker added by the transform, so you can see the full round trip from source through transform to sink.
sudo journalctl -u vector.service -n 5 -o cat
sudo tail -n 3 /var/lib/vector/demo-out/apache-*.logExpected output (one event per line, structured JSON):
{"env":"sac-demo","host":"232.142.241.76","message":"HEAD /user/booperbot124 HTTP/1.0","method":"HEAD","path":"/user/booperbot124","processed_by":"vector","protocol":"HTTP/1.0","size":22106,"status":200,"timestamp":"2026-07-18T13:33:53Z","user":"cache_cowboy"}Watch live pipeline throughput
Watch the live throughput of the demo pipeline with vector top. This interactive terminal dashboard reads the loopback GraphQL API and shows events in and out for every component:
vector topWatch the file sink grow as events land on disk. This is a quick way to confirm that the pipeline is flowing:
sudo bash -c 'C1=$(wc -l < /var/lib/vector/demo-out/apache-*.log); sleep 5; C2=$(wc -l < /var/lib/vector/demo-out/apache-*.log); echo "events on disk: $C1 -> $C2"'Build your own pipeline
Replace the demo source and sinks in /etc/vector/vector.yaml with your own. Vector has a large catalog of sources (files, journald, syslog, Kafka, HTTP, cloud services), transforms (remap/VRL, filter, sample, aggregate, route) and sinks (Elasticsearch, Loki, S3, Kafka, HTTP, Datadog and many more). For example, the following configuration tails a log file, redacts a field with VRL and forwards the events to an HTTP endpoint:
sources: app_logs: type: file include: ["/var/log/myapp/*.log"] transforms: redact: type: remap inputs: [app_logs] source: | .message = redact(.message, filters: ["us_social_security_number"]) sinks: backend: type: http inputs: [redact] uri: "https://logs.example.com/ingest" encoding: codec: jsonIf a sink needs a secret (an API token, for example), do not put it in the config file. Supply it as an environment variable in /etc/default/vector and reference it. Then enable env interpolation, because Vector 0.57 disables it by default as a security-hardening measure:
# /etc/default/vector VECTOR_DANGEROUSLY_ALLOW_ENV_VAR_INTERPOLATION=true BACKEND_TOKEN=<set-at-first-boot>Validate every change before you apply it. Then reload Vector so it picks up the new config without dropping in-flight events:
sudo vector validate /etc/vector/vector.yamlApply the change with a graceful reload, as described in Step 9.
Manage the service
Manage Vector with systemd and the vector CLI. Common operations:
systemctl status vector.service --no-pager sudo vector validate /etc/vector/vector.yamlTo apply a config change without dropping events, send a graceful reload:
sudo systemctl reload vectorTo inspect a running pipeline live, use vector top to see throughput per component and vector tap to stream events out of any component for debugging:
vector top vector tap parse_and_tagSecurity recommendations
Keep the API on loopback. The GraphQL API is bound to 127.0.0.1:8686 so it is not reachable off the box. Do not change api.address to 0.0.0.0 unless you place strong network controls in front of it, since the API is unauthenticated.
Open only the ports your sources need. The demo pipeline needs no inbound data port. If you add a network source, open only that source's port on the NSG, and only from the networks that should reach it.
Keep secrets out of the config file. Supply sink credentials through /etc/default/vector environment variables rather than hard-coding them in vector.yaml.
Reduce before you route. Use filter, sample and remap transforms to drop noise and redact sensitive fields at the edge, which lowers both risk and downstream storage cost.
Keep the OS and Vector patched. Unattended security upgrades remain enabled for the OS. Track new Vector releases and update the binary when you upgrade.
Support and Licensing
Vector is developed by Datadog and distributed under the Mozilla Public License 2.0 (MPL-2.0). It is free and open source, with no per-CPU or per-deployment fee. This image bundles the unmodified official Vector release. SecureAnyCloud provides the packaging, the working demo pipeline, the loopback-only API, the no-exposed-data-port and no-baked-secret defaults, and 24/7 support with a guaranteed 24 hour response SLA.
SecureAnyCloud is not affiliated with or endorsed by Datadog. Vector is a mark of its respective owner and is used here only to identify the software.
Deploy on Azure
Find Vector on Ubuntu 24.04 LTS on the Azure Marketplace, published by SecureAnyCloud. Deploy from the Portal or the Azure CLI as shown above.
Need Help?
Email sales@secureanycloud.com for deployment help, configuration questions, or licensing inquiries.
Deploy on Azure
Launch Vector Observability Pipeline on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com
Overview
Vector is a high-performance, end-to-end open-source observability data pipeline developed by Datadog. It collects, transforms and routes logs, metrics and traces from many sources, reshapes them through a configurable pipeline written in a purpose-built transform language (VRL), and routes the results to dozens of destinations. This image is a ready-to-use telemetry pipeline: vector.service is enabled and starts on boot running a self-contained demo pipeline, so the service is already processing events when you connect over SSH.
What you get:
- A headless observability-pipeline service, with no web interface and no credentials to manage
- A single self-contained binary driven entirely by a plain-text configuration file at
/etc/vector/vector.yaml - An optional management and GraphQL API that is enabled but bound to loopback only (
127.0.0.1:8686), sovector topand the health endpoint answer on the instance without being exposed to the network - A demo pipeline that uses a self-contained event generator with no network listener, so the image opens no data port at all
- An instance security group that opens port 22 only. You open whatever ingest or forward ports your own pipeline needs
Vector is developed by Datadog, Inc. This image is not affiliated with or endorsed by Datadog.
Prerequisites
Before you deploy this image you need:
- An Amazon Web Services account where you can launch EC2 instances
- IAM permissions to launch instances, create security groups, and subscribe to AWS Marketplace products
- An EC2 key pair in the target Region for SSH access to the instance
- A VPC and subnet in the target Region, with a security group that allows inbound port 22 from your management network
- The AWS CLI (version 2) installed locally, if you plan to deploy from the command line
Launch the Instance from the AWS Marketplace
Sign in to the AWS Management Console, open the EC2 service, and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for Vector. Select the SecureAnyCloud listing and choose Select, then click Continue on the subscription summary.
Pick an instance type of m5.large or larger. Choose your EC2 key pair under Key pair (login). Under Network settings, select your VPC and subnet, and create or select a security group that opens port 22 from your management network. Leave the root volume at the default size or larger.
Select Launch instance. First boot initialization takes a few seconds after the instance state becomes Running and the status checks pass. vector.service is already running its demo pipeline by the time you can connect.
Launch the Instance from the AWS CLI
The following block launches an instance from the SecureAnyCloud Vector Marketplace AMI into an existing subnet and security group. Replace <ami-id> with the AMI ID shown on the Marketplace listing, <key-name> with your EC2 key pair name, <subnet-id> with your subnet ID, and <security-group-id> with a security group that opens port 22 from your management network.
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type m5.large \
--key-name <key-name> \
--subnet-id <subnet-id> \
--security-group-ids <security-group-id> \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=vector}]'When the instance reaches the Running state and its status checks pass, note its public IP address or DNS name from the EC2 console or with aws ec2 describe-instances.
Connect to Your Instance
Connect over SSH using your key pair and the login user for your operating system variant.
OS variant SSH login user
Ubuntu 24.04 ubuntu
ssh -i /path/to/your-key.pem ubuntu@<public-ip>At login, the welcome banner summarizes the service and where to find things. The full first-boot details are in /root/vector-credentials.txt. It is a details file, not a secret, because Vector has no login:
sudo cat /root/vector-credentials.txtVerify the Service
Confirm the installed version, and check that the daemon is active and running the demo pipeline.
vector --version systemctl status vector.servicevector 0.57.0 (x86_64-unknown-linux-gnu 8832452 2026-07-14 20:58:30.491174540) ● vector.service - Vector Loaded: loaded (/usr/lib/systemd/system/vector.service; enabled; preset: enabled) Drop-In: /etc/systemd/system/vector.service.d └─10-sac.conf Active: active (running) since Tue 2026-07-21 06:09:08 UTC; 54s ago Docs: https://vector.dev Process: 27456 ExecStartPre=/usr/bin/vector validate /etc/vector/vector.yaml (code=exited, status=0/SUCCESS) Main PID: 27460 (vector)The service is pinned to /etc/vector/vector.yaml by a systemd drop-in, and vector validate runs as an ExecStartPre so the daemon never starts on an invalid config.
Watch the Demo Pipeline Move Events
The shipped pipeline is a complete, self-contained round trip. A demo_logs source generates Apache-style log events, a remap transform parses each event with VRL and stamps a sac-demo marker (proving the transform ran), and the events fan out to a console sink (visible in the journal) and a file sink on disk. Watch the console sink:
sudo journalctl -u vector -n 1 -o cat | jq .{ "env": "sac-demo", "host": "175.116.65.213", "message": "PATCH /user/booperbot124 HTTP/2.0", "method": "PATCH", "path": "/user/booperbot124", "processed_by": "vector", "protocol": "HTTP/2.0", "size": 4520, "status": 307, "timestamp": "2026-07-21T06:10:02Z", "user": "cache_cowboy" }The same parsed events accumulate on disk in the file sink:
sudo tail -n 1 /var/lib/vector/demo-out/apache-*.logThe env: sac-demo marker and the method, status and host fields confirm that the source, transform and sink all work together end to end.
The Optional GraphQL API (Loopback Only)
Vector's optional management API and GraphQL playground are enabled but bound to loopback only, so local tooling can read pipeline health and live throughput while nothing is reachable off the instance. Check the health endpoint:
curl -s -o /dev/null -w 'GET /health -> HTTP %{http_code}\n' http://127.0.0.1:8686/healthGET /health -> HTTP 200For a live, interactive view of per-component throughput, run vector top (a full-screen terminal dashboard that reads the same loopback API). Press q to quit.
The listening sockets confirm the secure-by-default posture: the API is on loopback, and the only public port is SSH.
ss -tlnH | awk '{print $4}' | sort -u0.0.0.0:22
# SSH (the only public port) 127.0.0.1:8686
# Vector GraphQL API (loopback only) 127.0.0.53%lo:53
# systemd-resolved stub (loopback)Edit the Pipeline
Vector reads its whole pipeline from one file, /etc/vector/vector.yaml. Replace the demo source and sinks with your own:
- Sources collect:
file(tail logs),journald,syslog,socket,http_server,prometheus_scrape,kafka,aws_s3, and many more. - Transforms process:
remap(VRL: parse, enrich, redact, reshape),filter,sample,route,aggregate,dedupe. - Sinks ship:
elasticsearch,loki,clickhouse,kafka,aws_s3,aws_cloudwatch_logs,http,file,console, and dozens more.
Validate every change before you apply it. Then reload the service:
sudo vector validate /etc/vector/vector.yaml
sudo systemctl reload vectorIf your new sink needs a credential (for example an API token for an HTTP or object-storage sink), supply it through an environment file at deploy time instead of baking it into the image. Vector 0.57 disables ${VAR} environment interpolation by default as a security-hardening measure, so any such use is explicit and opt-in. See the Vector configuration reference. Remember to open whatever ingest or forward ports your real pipeline needs in the instance security group.
Operating Notes
- Config lives at
/etc/vector/vector.yaml. A pristine copy of the shipped demo is kept at/usr/local/share/vector/vector.yaml.sample. - Restart vs reload:
sudo systemctl reload vectorapplies config changes without a full restart.sudo systemctl restart vectorfully restarts the daemon. - Logs: the service log is
sudo journalctl -u vector. The console sink writes structured JSON there. - No baked secret: the shipped config carries no secrets, and Vector has no login.
/root/vector-credentials.txtholds per-instance details only. - Security group: only SSH 22 is open by default. The management API stays on loopback. Expose it, or any ingest ports, only on your own terms.
Support
This image is provided by SecureAnyCloud with 24/7 technical support by email and chat. We can help with pipeline design, source and sink configuration, VRL transform authoring, parsing and enrichment, buffering and backpressure, routing to your observability backend and upgrade planning. Contact sales@secureanycloud.com.
Vector is developed by Datadog, Inc. This image is not affiliated with or endorsed by Datadog. All product and company names are trademarks or registered trademarks of their respective holders.
Deploy on AWS
Launch Vector on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com