Skip to content

Commit

Permalink
CAD-2069 metrics: use a more compact & more frequent metric reporting…
Browse files Browse the repository at this point in the history
… in the logs
  • Loading branch information
deepfire committed Nov 27, 2020
1 parent 27a21e0 commit e3dee1e
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 19 deletions.
28 changes: 9 additions & 19 deletions cardano-node/src/Cardano/Node/Configuration/Logging.hs
Expand Up @@ -25,6 +25,7 @@ import Cardano.Prelude hiding (trace)
import qualified Control.Concurrent.Async as Async
import Control.Exception.Safe (MonadCatch)
import Control.Monad.Trans.Except.Extra (catchIOExceptT)
import Control.Tracer
import Data.List (nub)
import Data.Text (pack)
import Data.Time.Clock (UTCTime, getCurrentTime)
Expand All @@ -39,23 +40,18 @@ import Cardano.BM.Backend.TraceForwarder (plugin)
import Cardano.BM.Configuration (Configuration)
import qualified Cardano.BM.Configuration as Config
import qualified Cardano.BM.Configuration.Model as Config
import Cardano.BM.Counters (readCounters)
import Cardano.BM.Data.Backend (Backend, BackendKind)
import Cardano.BM.Data.Counter
import Cardano.BM.Data.LogItem (LOContent (..), LOMeta (..), LogObject (..), LoggerName,
PrivacyAnnotation (..), mkLOMeta)
import Cardano.BM.Data.Observable
import Cardano.BM.Data.Severity (Severity (..))
import Cardano.BM.Data.SubTrace
import Cardano.BM.Data.LogItem (LOContent (..), LOMeta (..), LoggerName)
import qualified Cardano.BM.Observer.Monadic as Monadic
import qualified Cardano.BM.Observer.STM as Stm
import Cardano.BM.Plugin (loadPlugin)
#if defined(SYSTEMD)
import Cardano.BM.Scribe.Systemd (plugin)
#endif
import Cardano.BM.Setup (setupTrace_, shutdown)
import Cardano.BM.Trace (Trace, appendName, traceNamedObject)
import Cardano.BM.Stats
import qualified Cardano.BM.Trace as Trace
import Cardano.BM.Tracing

import qualified Cardano.Chain.Genesis as Gen
import Cardano.Slotting.Slot (EpochSize (..))
Expand All @@ -75,6 +71,7 @@ import qualified Shelley.Spec.Ledger.API as SL
import Cardano.Config.Git.Rev (gitRev)
import Cardano.Node.Configuration.POM (NodeConfiguration (..), ncProtocol)
import Cardano.Node.Types
import Cardano.Tracing.OrphanInstances.Common()
import Paths_cardano_node (version)

--------------------------------
Expand Down Expand Up @@ -224,19 +221,12 @@ createLoggingLayer ver nodeConfig' p = do
startCapturingMetrics :: Trace IO Text -> IO ()
startCapturingMetrics trace0 = do
let trace = appendName "node-metrics" trace0
counters = [MemoryStats, ProcessStats, NetStats, IOStats, GhcRtsStats, SysStats]
_ <- Async.async $ forever $ do
cts <- readCounters (ObservableTraceSelf counters)
traceCounters trace cts
threadDelay 30000000 -- 30 seconds
readResourceStats
>>= maybe (pure ())
(traceWith $ toLogObject' NormalVerbosity trace)
threadDelay 1000000 -- TODO: make configurable
pure ()
where
traceCounters :: forall m a. MonadIO m => Trace m a -> [Counter] -> m ()
traceCounters _tr [] = return ()
traceCounters tr (c@(Counter _ct cn cv) : cs) = do
mle <- mkLOMeta Notice Confidential
traceNamedObject tr (mle, LogValue (nameCounter c <> "." <> cn) cv)
traceCounters tr cs

shutdownLoggingLayer :: LoggingLayer -> IO ()
shutdownLoggingLayer = shutdown . llSwitchboard
Expand Down
16 changes: 16 additions & 0 deletions cardano-node/src/Cardano/Tracing/OrphanInstances/Common.hs
@@ -1,8 +1,11 @@
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE EmptyCase #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE UndecidableInstances #-}

{-# OPTIONS_GHC -Wno-orphans #-}
Expand Down Expand Up @@ -53,6 +56,7 @@ import Cardano.BM.Data.LogItem (LOContent (..), LogObject (..), Privac
mkLOMeta)
import Cardano.BM.Data.Tracer (HasTextFormatter (..), emptyObject, mkObject, trStructured,
trStructuredText)
import Cardano.BM.Stats
import Cardano.BM.Tracing (HasPrivacyAnnotation (..), HasSeverityAnnotation (..),
Severity (..), ToObject (..), Tracer (..), TracingVerbosity (..),
Transformable (..))
Expand Down Expand Up @@ -110,3 +114,15 @@ instance ToJSON (OneEraHash xs) where

deriving newtype instance ToJSON ByronHash
deriving newtype instance ToJSON BlockNo

instance HasPrivacyAnnotation ResourceStats
instance HasSeverityAnnotation ResourceStats where
getSeverityAnnotation _ = Info
instance Transformable Text IO ResourceStats where
trTransformer = trStructured

instance ToObject ResourceStats where
toObject _verb stats =
case toJSON stats of
Object x -> x
_ -> mempty

0 comments on commit e3dee1e

Please sign in to comment.