td-agent was discontinued in December 2023 and has been replaced by fluent-package. The fluent-package is the official successor maintained by the Cloud Native Computing Foundation.
Treasure Data provides Fluentd to collect server-side logs and events and to import the data from Scala applications.
- Basic knowledge of Scala.
- Basic knowledge of Treasure Data.
- JVM, Scala, sbt v1.x or later.
Install Fluentd (fluent-package) on your application servers. Fluentd sits within your application servers, focusing on uploading application logs to the cloud.
The td-logger-java library enables Scala applications to post records to their local Fluentd. Fluentd, in turn, uploads the data to the cloud every 5 minutes. Because the daemon runs on a local node, the logging latency is negligible.
td-agent was discontinued in December 2023 and has been replaced by fluent-package. The fluent-package is the official successor maintained by the Cloud Native Computing Foundation. For migration guidance from td-agent, see Fluentd Installation Guide.
To install fluent-package, run one of the following commands based on your environment.
# fluent-package 6 LTS (recommended)
curl -fsSL https://fluentd.cdn.cncf.io/sh/install-redhat-fluent-package6-lts.sh | sh# Ubuntu 24.04 Noble - fluent-package 6 LTS
curl -fsSL https://fluentd.cdn.cncf.io/sh/install-ubuntu-noble-fluent-package6-lts.sh | sh
# Ubuntu 22.04 Jammy - fluent-package 6 LTS
curl -fsSL https://fluentd.cdn.cncf.io/sh/install-ubuntu-jammy-fluent-package6-lts.sh | sh# Debian Bookworm - fluent-package 6 LTS
curl -fsSL https://fluentd.cdn.cncf.io/sh/install-debian-bookworm-fluent-package6-lts.sh | sh# Amazon Linux 2023 - fluent-package 6 LTS
curl -fsSL https://fluentd.cdn.cncf.io/sh/install-amazon2023-fluent-package6-lts.sh | shDownload the MSI installer from:
After installation:
- Edit the configuration file at
C:/opt/fluent/etc/fluent/fluentd.conf - Start the service using
net start fluentdwinsvcor via Services administrative tool
fluent-package for macOS is planned to be available via Homebrew. For current installation options, see Fluentd Installation Guide.
After installation, start and verify the Fluentd service.
sudo systemctl start fluentd.service
sudo systemctl status fluentd.serviceThe configuration file is located at /etc/fluent/fluentd.conf.
net start fluentdwinsvcThe configuration file is located at C:\opt\fluent\etc\fluent\fluentd.conf.
fluentd -c /path/to/fluentd.confFor more details, see the Fluentd Documentation.
Next, specify your API key by setting the apikey option in your /etc/fluent/fluentd.conf file (for fluent-package). You can retrieve your API key from your profile in TD Console.
# Treasure Data Input and Output
<source>
@type forward
port 24224
</source>
<match td.*.*>
@type tdlog
endpoint api.treasuredata.com
apikey YOUR_API_KEY
auto_create_table
use_ssl true
<buffer>
@type file
path /var/log/fluent/buffer/td
</buffer>
</match>YOUR_API_KEY should be your actual apikey string. You can retrieve your API key from your profiles in TD Console. Using a write-only API key is recommended.
Restart the Fluentd service when the following lines are in place.
# Linux
sudo systemctl restart fluentd.service
# macOS (gem installation)
# Restart the Fluentd process manuallyFluentd now accepts data via port 24224, buffers the data (/var/log/fluent/buffer/td), and automatically uploads the data into the cloud.
First, add the following lines to build.sbt. The logger’s revision information can be found in CHANGES.txt.
If you need an all-in-one jar file, we provide one at http://central.maven.org/maven2/com/treasuredata/.
/* in build.sbt */
// Dependencies
libraryDependencies ++= Seq(
"com.treasuredata" % "td-logger" % "${logger.version}"
)Next, configure your treasure-data.properties file using the following commands:
td.logger.agentmode=true
td.logger.agent.host=localhost
td.logger.agent.port=24224
td.logger.agent.tag=tdFinally, insert the following lines into your application to initialize and post records. You can read more information about the API.
import java.util.Properties
import com.treasure_data.logger.TreasureDataLogger
import scala.collection.JavaConverters._
object Main {
def main(args: Array[String]) {
var props = System.getProperties();
props.load(getClass.getResourceAsStream("treasure-data.properties"));
var LOG = TreasureDataLogger.getLogger("test_db");
var map = Map("from" -> "userA", "to" -> "userB");
LOG.log("follow", map.asJava.asInstanceOf[java.util.Map[String, java.lang.Object]]);
}
}This example expects the following structure.
- project_dir/build.sbt
- project_dir/src/main/scala/Main.scala
- project_dir/src/main/resources/treasure-data.properties
First, execute the preceding program.
$ sbt compile runSending a SIGUSR1 signal flushes Fluentd's buffer. Upload starts immediately.
# Linux
$ kill -USR1 $(cat /var/run/fluent/fluentd.pid)
# macOS (gem installation)
# Send SIGUSR1 to the Fluentd processTo confirm the data upload, use td tables.
$ td tables
+------------+------------+------+-----------+
| Database | Table | Type | Count |
+------------+------------+------+-----------+
| test_db | follow | log | 1 |
+------------+------------+------+-----------+For high-traffic websites (more than 5 application nodes), use a high availability configuration of Fluentd to improve data transfer reliability and query performance.
Monitoring Fluentd itself is also important. Refer to the following document for general monitoring methods for Fluentd:
Fluentd is fully open-sourced under the Fluentd project.
We offer a schema mechanism that is more flexible than that of traditional RDBMSs. For queries, we leverage the Hive and Trino Query Languages.