Streaming Import from PHP Apps
‘fluent-logger-php’ is used to import data from PHP applications to Treasure Data.
This article explains how to use the fluent-logger-php library.
Table of Contents
Prerequisites
- Basic knowledge of PHP.
- Basic knowledge of Treasure Data, including the toolbelt.
- PHP 5.3 or higher (for local testing).
| The fluent-logger-php library does not work in Heroku (here's why) or EngineYard. |
Installing td-agent
fluent-logger-php requires ‘td-agent’ to be installed on your application servers. td-agent is a daemon program dedicated to the streaming upload of any kind of the time-series data. td-agent is developed and maintained by Treasure Data, Inc.

The fluent-logger-php library enables PHP applications to post records to their local td-agent. td-agent in turn uploads the data to the cloud every 5 minutes. Because the daemon runs on a local node, the logging latency is negligible.
To set up td-agent, please refer to the following articles; we provide deb/rpm packages for Linux systems.
| If you have... | Please look at... |
|---|---|
| MacOS X | Installing td-agent on MacOS X |
| Debian / Ubuntu System | Installing td-agent for Debian and Ubuntu |
| Redhat / CentOS System | Installing td-agent for Redhat and CentOS |
| Joyent SmartOS | Installing fluentd + td plugin on Joyent SmartOS |
| AWS Elastic Beanstalk | Installing td-agent on AWS Elastic Beanstalk |
| td-agent is fully open-sourced under the fluentd project. td-agent extends fluentd with custom plugins for Treasure Data. |
Modifying /etc/td-agent/td-agent.conf
Next, please specify your authentication key by setting the apikey option. You can view your api key with the td apikey:show command.
Note: You must first authenticate your account using the ‘td account’ command.
$ td apikey:show 3b7118fd3ad7e35bbd3c0e4f607ec7263aa93c30
Next, please set the apikey option in your td-agent.conf file.
Note: YOUR_API_KEY should be your actual apikey string.
# Unix Domain Socket Input <source> type unix path /var/run/td-agent/td-agent.sock </source> # Treasure Data Output <match td.*.*> type tdlog apikey YOUR_API_KEY auto_create_table buffer_type file buffer_path /var/log/td-agent/buffer/td use_ssl true </match>
Please restart your agent once these lines are in place.
$ sudo /etc/init.d/td-agent restart
td-agent will now accept data via port 24224, buffer it (var/log/td-agent/buffer/td), and automatically upload it into the cloud.
Using fluent-logger-php
To use fluent-logger-php, copy the library into your project directory.
$ git clone https://github.com/fluent/fluent-logger-php.git $ cp -r src/Fluent <path/to/your_project>
Next, initialize and post the records as follows.
<?php require_once __DIR__.'/src/Fluent/Autoloader.php'; use Fluent\Logger\FluentLogger; Fluent\Autoloader::register(); $logger = new FluentLogger("unix:///var/run/td-agent/td-agent.sock"); $logger->post("td.test_db.test_table", array("hello"=>"world")); $logger->post("td.test_db.follow", array("from"=>"userA", "to"=>"userB"));
Confirming Data Import
Sending a SIGUSR1 signal will flush td-agent’s buffer; upload will start immediately.
$ php test.php $ kill -USR1 `cat /var/run/td-agent/td-agent.pid`
To confirm that your data has been uploaded successfully, issue the td tables command as shown below.
$ td tables +------------+------------+------+-----------+ | Database | Table | Type | Count | +------------+------------+------+-----------+ | test_db | test_table | log | 1 | | test_db | follow | log | 1 | +------------+------------+------+-----------+
| The first argument of post() determines the database name and table name. If you specify `td.test_db.test_table`, the data will be imported into the table *test_table* within the database *test_db*. They are automatically created at upload time. |
Tips on Production Deployment
Use Apache and mod_php
We recommend that you use Apache and mod_php. Other setups have not been fully validated.
Use Apache prefork MPM
Please use Apache prefork MPM. Other MPMs such as worker MPM should not be used. You can confirm your current settings with the apachectl -V command.
$ apachectl -V | grep MPM: Server MPM: Prefork
Set MaxRequestsPerChild
We recommend that you periodically restart your PHP processes by setting MaxRequestsPerChild in your Apache conf.
<IfModule mpm_prefork_module> StartServers 32 MinSpareServers 32 MaxSpareServers 32 MaxClients 32 MaxRequestsPerChild 4096 </IfModule>
| Do not set MaxRequestsPerChild to zero. |
Production Deployments
High-Availablability Configurations of td-agent
For high-traffic websites (more than 5 application nodes), we recommend using a high availability configuration of td-agent. This will improve data transfer reliability and query performance.
Monitoring td-agent
Monitoring td-agent itself is also important. Please refer to this document for general monitoring methods for td-agent.
Next Steps
We offer a schema mechanism that is more flexible than that of traditional RDBMSs. For queries, we leverage the Hive Query Language.
For more specific assistance, please visit our support resources:
If this article is incorrect or outdated, or omits critical information, please let us know. For all other issues, please see our support channels. Live chat with our staffs also work well.