Log streaming: FTP
Last updated 2021-09-01
Fastly's Real-Time Log Streaming feature can send log files to password-protected and anonymous FTP servers.
NOTE
Fastly does not provide direct support for third-party services. Read Fastly's Terms of Service for more information.
Adding FTP as a logging endpoint
Follow these instructions to add FTP as a logging endpoint:
- Review the information in our guide to setting up remote log streaming.
- Click the FTP Create endpoint button. The Create a File Transfer Protocol (FTP) endpoint page appears.
- Fill out the Create a File Transfer Protocol (FTP) endpoint fields as follows:
- In the Name field, enter a human-readable name for the endpoint.
- In the Placement area, select where the logging call should be placed in the generated VCL. Valid values are Format Version Default, waf_debug (waf_debug_log), and None. Read our guide on changing log placement for more information.
- In the Log format field, optionally enter an Apache-style string or VCL variables to use for log formatting. Consult the example format section for details.
- In the Timestamp format field, optionally enter a timestamp format for log files. The default is an
strftime
compatible string. Our guide on changing where log files are written provides more information. - In the Address field, enter the hostname or IP address of the FTP server. In the port field, enter the port number you're using for FTP (the default is
21
). - In the Path field, optionally enter the path within the bucket to store the files. The path ends with a trailing slash. If this field is left empty, the files will be saved in the bucket's root path. Our guide on changing where log files are written provides more information.
- In the User field, enter the username used to authenticate to the FTP server. For anonymous access, use the username
anonymous
. - In the Password field, enter the password used to authenticate to the FTP server. For anonymous access, use an email address as the password.
- In the PGP public key field, optionally enter a PGP public key that Fastly will use to encrypt your log files before writing them to disk. You will only be able to read the contents by decrypting them with your private key. The PGP key should be in PEM (Privacy-Enhanced Mail) format. Read our guide on log encryption for more information.
- In the Period field, optionally enter an interval (in seconds) to control how frequently your log files are rotated. Rotation entails the finalization of one file object and the start of a new one, never removing any previously created file object. This value defaults to
3600
seconds.
- Click the Advanced options link of the Create a File Transfer Protocol (FTP) endpoint page and decide which of the optional fields to change, if any.
- Fill out the Advanced options of the Create a File Transfer Protocol (FTP) endpoint page as follows:
- In the Select a log line format area, select the log line format for your log messages. Our guide on changing log line formats provides more information.
- In the Compression field, optionally select the compression format you want applied to the log files. Our guide on changing log compression options provides more information.
- Click the Create button to create the new logging endpoint.
- Click the Activate button to deploy your configuration changes.
Example format
The following is an example format string for sending data to an FTP logging endpoint. Our discussion of format strings provides more information.
1{2 "timestamp": "%{strftime(\{"%Y-%m-%dT%H:%M:%S%z"\}, time.start)}V",3 "client_ip": "%{req.http.Fastly-Client-IP}V",4 "geo_country": "%{client.geo.country_name}V",5 "geo_city": "%{client.geo.city}V",6 "host": "%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V",7 "url": "%{json.escape(req.url)}V",8 "request_method": "%{json.escape(req.method)}V",9 "request_protocol": "%{json.escape(req.proto)}V",10 "request_referer": "%{json.escape(req.http.referer)}V",11 "request_user_agent": "%{json.escape(req.http.User-Agent)}V",12 "response_state": "%{json.escape(fastly_info.state)}V",13 "response_status": %{resp.status}V,14 "response_reason": %{if(resp.response, "%22"+json.escape(resp.response)+"%22", "null")}V,15 "response_body_size": %{resp.body_bytes_written}V,16 "fastly_server": "%{json.escape(server.identity)}V",17 "fastly_is_edge": %{if(fastly.ff.visits_this_service == 0, "true", "false")}V18}
Do not use this form to send sensitive information. If you need assistance, contact support.