FileSink initialize writer stream in init method, and the writer is not changed since after, so the metrics file can not rotate.
```
/** * A metrics sink that writes to a file */ @InterfaceAudience.Public @InterfaceStability.Evolving public class FileSink implements MetricsSink, Closeable { private static final String FILENAME_KEY = "filename"; private PrintStream writer; @Override public void init(SubsetConfiguration conf) { String filename = conf.getString(FILENAME_KEY); try { writer = filename == null ? System.out : new PrintStream(new FileOutputStream(new File(filename)), true, "UTF-8"); } catch (Exception e) { throw new MetricsException("Error creating "+ filename, e); } } @Override public void putMetrics(MetricsRecord record) { writer.print(record.timestamp()); writer.print(" "); writer.print(record.context()); writer.print("."); writer.print(record.name()); String separator = ": "; for (MetricsTag tag : record.tags()) { writer.print(separator); separator = ", "; writer.print(tag.name()); writer.print("="); writer.print(tag.value()); } for (AbstractMetric metric : record.metrics()) { writer.print(separator); separator = ", "; writer.print(metric.name()); writer.print("="); writer.print(metric.value()); } writer.println(); } @Override public void flush() { writer.flush(); } @Override public void close() throws IOException { writer.close(); } }
The following content is some metrics output of datanode
1505703179836 rpc.rpc: port=50020, Context=rpc, Hostname=localhost, ReceivedBytes=0, SentBytes=0, RpcQueueTimeNumOps=0, RpcQueueTimeAvgTime=0.0, RpcProcessingTimeNumOps=0, RpcProcessingTimeAvgTime=0.0, RpcAuthenticationFailures=0, RpcAuthenticationSuccesses=0, RpcAuthorizationFailures=0, RpcAuthorizationSuccesses=0, NumOpenConnections=0, CallQueueLength=0
1505703179836 rpcdetailed.rpcdetailed: port=50020, Context=rpcdetailed, Hostname=localhost
1505703179836 jvm.JvmMetrics: Context=jvm, ProcessName=DataNode, SessionId=null, Hostname=localhost, MemNonHeapUsedM=29.357956, MemNonHeapCommittedM=30.269531, MemNonHeapMaxM=-9.536743E-7, MemHeapUsedM=21.48169, MemHeapCommittedM=190.0, MemHeapMaxM=390.0, MemMaxM=390.0, GcCountParNew=2, GcTimeMillisParNew=25, GcCountConcurrentMarkSweep=1, GcTimeMillisConcurrentMarkSweep=9, GcCount=3, GcTimeMillis=34, GcNumWarnThresholdExceeded=0, GcNumInfoThresholdExceeded=0, GcTotalExtraSleepTime=0, ThreadsNew=0, ThreadsRunnable=10, ThreadsBlocked=0, ThreadsWaiting=4, ThreadsTimedWaiting=11, ThreadsTerminated=0, LogFatal=0, LogError=2, LogWarn=2, LogInfo=36
1505703179836 dfs.datanode: SessionId=null, Context=dfs, Hostname=localhost, BytesWritten=0, TotalWriteTime=0, BytesRead=0, TotalReadTime=0, BlocksWritten=0, BlocksRead=0, BlocksReplicated=0, BlocksRemoved=0, BlocksVerified=0, BlockVerificationFailures=0, BlocksCached=0, BlocksUncached=0, ReadsFromLocalClient=0, ReadsFromRemoteClient=0, WritesFromLocalClient=0, WritesFromRemoteClient=0, BlocksGetLocalPathInfo=0, RemoteBytesRead=0, RemoteBytesWritten=0, RamDiskBlocksWrite=0, RamDiskBlocksWriteFallback=0, RamDiskBytesWrite=0, RamDiskBlocksReadHits=0, RamDiskBlocksEvicted=0, RamDiskBlocksEvictedWithoutRead=0, RamDiskBlocksEvictionWindowMsNumOps=0, RamDiskBlocksEvictionWindowMsAvgTime=0.0, RamDiskBlocksLazyPersisted=0, RamDiskBlocksDeletedBeforeLazyPersisted=0, RamDiskBytesLazyPersisted=0, RamDiskBlocksLazyPersistWindowMsNumOps=0, RamDiskBlocksLazyPersistWindowMsAvgTime=0.0, FsyncCount=0, VolumeFailures=0, DatanodeNetworkErrors=0, ReadBlockOpNumOps=0, ReadBlockOpAvgTime=0.0, WriteBlockOpNumOps=0, WriteBlockOpAvgTime=0.0, BlockChecksumOpNumOps=0, BlockChecksumOpAvgTime=0.0, CopyBlockOpNumOps=0, CopyBlockOpAvgTime=0.0, ReplaceBlockOpNumOps=0, ReplaceBlockOpAvgTime=0.0, HeartbeatsNumOps=0, HeartbeatsAvgTime=0.0, BlockReportsNumOps=0, BlockReportsAvgTime=0.0, IncrementalBlockReportsNumOps=0, IncrementalBlockReportsAvgTime=0.0, CacheReportsNumOps=0, CacheReportsAvgTime=0.0, PacketAckRoundTripTimeNanosNumOps=0, PacketAckRoundTripTimeNanosAvgTime=0.0, FlushNanosNumOps=0, FlushNanosAvgTime=0.0, FsyncNanosNumOps=0, FsyncNanosAvgTime=0.0, SendDataPacketBlockedOnNetworkNanosNumOps=0, SendDataPacketBlockedOnNetworkNanosAvgTime=0.0, SendDataPacketTransferNanosNumOps=0, SendDataPacketTransferNanosAvgTime=0.0
1505703179836 metricssystem.MetricsSystem: Context=metricssystem, Hostname=localhost, NumActiveSources=5, NumAllSources=5, NumActiveSinks=1, NumAllSinks=0, Sink_fileNumOps=0, Sink_fileAvgTime=0.0, Sink_fileDropped=0, Sink_fileQsize=0, SnapshotNumOps=5, SnapshotAvgTime=0.2, PublishNumOps=0, PublishAvgTime=0.0, DroppedPubAll=0