Skip to content

Commit 61b93bb

Browse files
committed
cardano-node: periodic ledger metrics tracer
ledger metrics 700ms after slot start allow for not running periodic tracers
1 parent e078e3d commit 61b93bb

File tree

21 files changed

+260
-276
lines changed

21 files changed

+260
-276
lines changed

bench/tx-generator/src/Cardano/Benchmarking/Tracer.hs

+1
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ initialTraceConfig = TraceConfig {
176176
, tcPeerFrequency = Just 2000 -- Every 2 seconds
177177
, tcResourceFrequency = Just 1000 -- Every second
178178
, tcMetricsPrefix = Nothing
179+
, tcLedgerMetricsFrequency = Nothing
179180
}
180181
where
181182
setMaxDetail :: Text -> ([Text], [ConfigOption])

cardano-node/cardano-node.cabal

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ library
112112
Cardano.Node.Tracing.Tracers.Diffusion
113113
Cardano.Node.Tracing.Tracers.ForgingStats
114114
Cardano.Node.Tracing.Tracers.KESInfo
115+
Cardano.Node.Tracing.Tracers.LedgerMetrics
115116
Cardano.Node.Tracing.Tracers.NodeToClient
116117
Cardano.Node.Tracing.Tracers.NodeToNode
117118
Cardano.Node.Tracing.Tracers.NodeVersion
@@ -120,7 +121,6 @@ library
120121
Cardano.Node.Tracing.Tracers.Peer
121122
Cardano.Node.Tracing.Tracers.Resources
122123
Cardano.Node.Tracing.Tracers.Shutdown
123-
Cardano.Node.Tracing.Tracers.StartLeadershipCheck
124124
Cardano.Node.Tracing.Tracers.Startup
125125
Cardano.Node.Types
126126
Cardano.Tracing.Config

cardano-node/src/Cardano/Node/Tracing.hs

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ import Cardano.Node.Startup (NodeInfo, NodeStartupInfo, StartupTrace (
1515
import Cardano.Node.Tracing.StateRep (NodeState)
1616
import Cardano.Node.Tracing.Tracers.ConsensusStartupException
1717
(ConsensusStartupException (..))
18-
import Cardano.Node.Tracing.Tracers.Peer (PeerT)
18+
import Cardano.Node.Tracing.Tracers.LedgerMetrics (LedgerMetrics)
1919
import Cardano.Node.Tracing.Tracers.NodeVersion (NodeVersionTrace)
20-
20+
import Cardano.Node.Tracing.Tracers.Peer (PeerT)
2121
import qualified Ouroboros.Consensus.Network.NodeToClient as NodeToClient
2222
import qualified Ouroboros.Consensus.Network.NodeToNode as NodeToNode
2323
import qualified Ouroboros.Consensus.Node.Tracers as Consensus
@@ -57,4 +57,5 @@ data Tracers peer localPeer blk p2p extraState extraDebugState extraFlags extraP
5757
, nodeStateTracer :: !(Tracer IO NodeState)
5858
, resourcesTracer :: !(Tracer IO ResourceStats)
5959
, peersTracer :: !(Tracer IO [PeerT blk])
60+
, ledgerMetricsTracer :: !(Tracer IO LedgerMetrics)
6061
}

cardano-node/src/Cardano/Node/Tracing/API.hs

+6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import Cardano.Node.Tracing
2020
import Cardano.Node.Tracing.DefaultTraceConfig (defaultCardanoConfig)
2121
import Cardano.Node.Tracing.StateRep (NodeState (..))
2222
import Cardano.Node.Tracing.Tracers
23+
import Cardano.Node.Tracing.Tracers.LedgerMetrics
2324
import Cardano.Node.Tracing.Tracers.Peer (startPeerTracer)
2425
import Cardano.Node.Tracing.Tracers.Resources (startResourceTracer)
2526
import Cardano.Node.Types
@@ -86,6 +87,11 @@ initTraceDispatcher nc p networkMagic nodeKernel p2pMode = do
8687
(resourcesTracer tracers)
8788
(fromMaybe 1000 (tcResourceFrequency trConfig))
8889

90+
startLedgerMetricsTracer
91+
(ledgerMetricsTracer tracers)
92+
(fromMaybe 1000 (tcLedgerMetricsFrequency trConfig))
93+
nodeKernel
94+
8995
startPeerTracer
9096
(peersTracer tracers)
9197
nodeKernel

cardano-node/src/Cardano/Node/Tracing/Consistency.hs

+7-3
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ import Cardano.Node.Tracing.Documentation (docTracersFirstPhase)
2424
import Cardano.Node.Tracing.Formatting ()
2525
import qualified Cardano.Node.Tracing.StateRep as SR
2626
import Cardano.Node.Tracing.Tracers.BlockReplayProgress
27-
import Cardano.Node.Tracing.Tracers.Consensus
2827
import Cardano.Node.Tracing.Tracers.ConsensusStartupException
2928
import Cardano.Node.Tracing.Tracers.Diffusion ()
3029
import Cardano.Node.Tracing.Tracers.KESInfo ()
30+
import Cardano.Node.Tracing.Tracers.LedgerMetrics (LedgerMetrics)
3131
import Cardano.Node.Tracing.Tracers.NodeToClient ()
3232
import Cardano.Node.Tracing.Tracers.NodeToNode ()
3333
import Cardano.Node.Tracing.Tracers.NodeVersion (NodeVersionTrace)
@@ -54,7 +54,8 @@ import Ouroboros.Consensus.MiniProtocol.ChainSync.Client.Jumping as Ju
5454
import Ouroboros.Consensus.MiniProtocol.ChainSync.Server (TraceChainSyncServerEvent)
5555
import Ouroboros.Consensus.MiniProtocol.LocalTxSubmission.Server
5656
(TraceLocalTxSubmissionServerEvent (..))
57-
import Ouroboros.Consensus.Node.GSM (TraceGsmEvent)
57+
import Ouroboros.Consensus.Node.GSM
58+
import Ouroboros.Consensus.Node.Tracers (TraceForgeEvent)
5859
import qualified Ouroboros.Consensus.Protocol.Ledger.HotKey as HotKey
5960
import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB
6061
import Ouroboros.Network.Block (Point (..), SlotNo, Tip)
@@ -137,6 +138,8 @@ getAllNamespaces =
137138
(allNamespaces :: [Namespace [PeerT blk]])
138139
resourcesNS = map nsGetTuple
139140
(allNamespaces :: [Namespace ResourceStats])
141+
ledgerMetricsNS = map nsGetTuple
142+
(allNamespaces :: [Namespace LedgerMetrics])
140143
startupNS = map (nsGetTuple . nsReplacePrefix ["Startup"])
141144
(allNamespaces :: [Namespace (StartupTrace blk)])
142145
shutdownNS = map (nsGetTuple . nsReplacePrefix ["Shutdown"])
@@ -190,7 +193,7 @@ getAllNamespaces =
190193
mempoolNS = map (nsGetTuple . nsReplacePrefix ["Mempool"])
191194
(allNamespaces :: [Namespace (TraceEventMempool blk)])
192195
forgeNS = map (nsGetTuple . nsReplacePrefix ["Forge", "Loop"])
193-
(allNamespaces :: [Namespace (ForgeTracerType blk)])
196+
(allNamespaces :: [Namespace (TraceForgeEvent blk)])
194197

195198
blockchainTimeNS = map (nsGetTuple . nsReplacePrefix ["BlockchainTime"])
196199
(allNamespaces :: [Namespace (TraceBlockchainTimeEvent RelativeTime)])
@@ -391,6 +394,7 @@ getAllNamespaces =
391394
stateNS
392395
<> peersNS
393396
<> resourcesNS
397+
<> ledgerMetricsNS
394398
<> startupNS
395399
<> shutdownNS
396400
<> nodeVersionNS

cardano-node/src/Cardano/Node/Tracing/Documentation.hs

+7-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import Cardano.Node.Tracing.Tracers.ConsensusStartupException
3636
import Cardano.Node.Tracing.Tracers.Diffusion ()
3737
import Cardano.Node.Tracing.Tracers.ForgingStats (ForgingStats)
3838
import Cardano.Node.Tracing.Tracers.KESInfo ()
39+
import Cardano.Node.Tracing.Tracers.LedgerMetrics (LedgerMetrics)
3940
import Cardano.Node.Tracing.Tracers.NodeToClient ()
4041
import Cardano.Node.Tracing.Tracers.NodeToNode ()
4142
import Cardano.Node.Tracing.Tracers.NodeVersion (NodeVersionTrace)
@@ -241,6 +242,10 @@ docTracersFirstPhase condConfigFileName = do
241242
configureTracers configReflection trConfig [resourcesTr]
242243
resourcesTrDoc <- documentTracer (resourcesTr :: Logging.Trace IO ResourceStats)
243244

245+
ledgerMetricsTr <- mkCardanoTracer trBase trForward mbTrEKG []
246+
configureTracers configReflection trConfig [ledgerMetricsTr]
247+
ledgerMetricsTrDoc <- documentTracer (ledgerMetricsTr :: Trace IO LedgerMetrics)
248+
244249
-- Startup tracer
245250
startupTr <- mkCardanoTracer
246251
trBase trForward mbTrEKG
@@ -370,8 +375,7 @@ docTracersFirstPhase condConfigFileName = do
370375
["Forge", "Loop"]
371376
configureTracers configReflection trConfig [forgeTr]
372377
forgeTrDoc <- documentTracer (forgeTr ::
373-
Logging.Trace IO (ForgeTracerType blk))
374-
378+
Logging.Trace IO (Consensus.TraceForgeEvent blk))
375379

376380
forgeTr' <- mkCardanoTracer
377381
trBase trForward mbTrEKG
@@ -753,6 +757,7 @@ docTracersFirstPhase condConfigFileName = do
753757
<> nodeStartupInfoDpDoc
754758
<> stateTrDoc
755759
<> resourcesTrDoc
760+
<> ledgerMetricsTrDoc
756761
<> startupTrDoc
757762
<> shutdownTrDoc
758763
<> nodeVersionDoc

cardano-node/src/Cardano/Node/Tracing/Tracers.hs

+10-6
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import Cardano.Node.Tracing.Tracers.Consensus
3232
import Cardano.Node.Tracing.Tracers.Diffusion ()
3333
import Cardano.Node.Tracing.Tracers.ForgingStats (calcForgeStats)
3434
import Cardano.Node.Tracing.Tracers.KESInfo
35+
import Cardano.Node.Tracing.Tracers.LedgerMetrics ()
3536
import Cardano.Node.Tracing.Tracers.NodeToClient ()
3637
import Cardano.Node.Tracing.Tracers.NodeToNode ()
3738
import Cardano.Node.Tracing.Tracers.NodeVersion (getNodeVersion)
@@ -130,6 +131,9 @@ mkDispatchTracers nodeKernel trBase trForward mbTrEKG trDataPoint trConfig enabl
130131
!resourcesTr <- mkCardanoTracer trBase trForward mbTrEKG []
131132
configureTracers configReflection trConfig [resourcesTr]
132133

134+
!ledgerMetricsTr <- mkCardanoTracer trBase trForward mbTrEKG []
135+
configureTracers configReflection trConfig [ledgerMetricsTr]
136+
133137
!startupTr <- mkCardanoTracer trBase trForward mbTrEKG ["Startup"]
134138
configureTracers configReflection trConfig [startupTr]
135139

@@ -212,6 +216,7 @@ mkDispatchTracers nodeKernel trBase trForward mbTrEKG trDataPoint trConfig enabl
212216
, resourcesTracer = Tracer (traceWith resourcesTr)
213217
, peersTracer = Tracer (traceWith peersTr)
214218
<> Tracer (traceNodePeers nodePeersDP)
219+
, ledgerMetricsTracer = Tracer (traceWith ledgerMetricsTr)
215220
}
216221

217222
mkConsensusTracers :: forall blk.
@@ -230,7 +235,7 @@ mkConsensusTracers :: forall blk.
230235
-> TraceConfig
231236
-> NodeKernelData blk
232237
-> IO (Consensus.Tracers IO (ConnectionId RemoteAddress) (ConnectionId LocalAddress) blk)
233-
mkConsensusTracers configReflection trBase trForward mbTrEKG _trDataPoint trConfig nodeKernel = do
238+
mkConsensusTracers configReflection trBase trForward mbTrEKG _trDataPoint trConfig _nodeKernel = do
234239
!chainSyncClientTr <- mkCardanoTracer
235240
trBase trForward mbTrEKG
236241
["ChainSync", "Client"]
@@ -311,10 +316,9 @@ mkConsensusTracers configReflection trBase trForward mbTrEKG _trDataPoint trConf
311316
["Mempool"]
312317
configureTracers configReflection trConfig [mempoolTr]
313318

314-
!forgeTr <- mkCardanoTracer'
319+
!forgeTr <- mkCardanoTracer
315320
trBase trForward mbTrEKG
316321
["Forge", "Loop"]
317-
(forgeTracerTransform nodeKernel)
318322
configureTracers configReflection trConfig [forgeTr]
319323

320324
!forgeStatsTr <- mkCardanoTracer'
@@ -389,9 +393,9 @@ mkConsensusTracers configReflection trBase trForward mbTrEKG _trDataPoint trConf
389393
, Consensus.mempoolTracer = Tracer $
390394
traceWith mempoolTr
391395
, Consensus.forgeTracer =
392-
Tracer (\(Consensus.TraceLabelCreds _ x) -> traceWith (contramap Left forgeTr) x)
393-
<>
394-
Tracer (\(Consensus.TraceLabelCreds _ x) -> traceWith (contramap Left forgeStatsTr) x)
396+
Tracer (\(Consensus.TraceLabelCreds _ x) -> traceWith forgeTr x)
397+
-- <>
398+
-- Tracer (\(Consensus.TraceLabelCreds _ x) -> traceWith forgeStatsTr x)
395399
, Consensus.blockchainTimeTracer = Tracer $
396400
traceWith blockchainTimeTr
397401
, Consensus.keepAliveClientTracer = Tracer $

cardano-node/src/Cardano/Node/Tracing/Tracers/ChainDB.hs

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
module Cardano.Node.Tracing.Tracers.ChainDB
1313
( withAddedToCurrentChainEmptyLimited
14+
, fragmentChainDensity
1415
) where
1516

1617
import Cardano.Logging
@@ -35,8 +36,8 @@ import Ouroboros.Consensus.Storage.ImmutableDB.Chunks.Internal (chunkN
3536
import qualified Ouroboros.Consensus.Storage.ImmutableDB.Impl.Types as ImmDB
3637
import Ouroboros.Consensus.Storage.LedgerDB (ReplayStart (..),
3738
UpdateLedgerDbTraceEvent (..))
38-
import qualified Ouroboros.Consensus.Storage.LedgerDB.Snapshots as LedgerDB
3939
import qualified Ouroboros.Consensus.Storage.LedgerDB as LedgerDB
40+
import qualified Ouroboros.Consensus.Storage.LedgerDB.Snapshots as LedgerDB
4041
import qualified Ouroboros.Consensus.Storage.VolatileDB as VolDB
4142
import Ouroboros.Consensus.Util.Condense (condense)
4243
import Ouroboros.Consensus.Util.Enclose

cardano-node/src/Cardano/Node/Tracing/Tracers/Consensus.hs

+2-102
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@
1414

1515
module Cardano.Node.Tracing.Tracers.Consensus
1616
(
17-
TraceStartLeadershipCheckPlus (..)
18-
, ForgeTracerType
19-
, forgeTracerTransform
20-
, initialClientMetrics
17+
initialClientMetrics
2118
, calculateBlockFetchClientMetrics
2219
, servedBlockLatest
2320
, ClientMetrics
@@ -31,7 +28,6 @@ import Cardano.Node.Tracing.Era.Shelley ()
3128
import Cardano.Node.Tracing.Formatting ()
3229
import Cardano.Node.Tracing.Render
3330
import Cardano.Node.Tracing.Tracers.ConsensusStartupException ()
34-
import Cardano.Node.Tracing.Tracers.StartLeadershipCheck
3531
import Cardano.Protocol.TPraos.OCert (KESPeriod (..))
3632
import Cardano.Slotting.Slot (WithOrigin (..))
3733
import Cardano.Tracing.OrphanInstances.Network (Verbose (..))
@@ -76,7 +72,7 @@ import Ouroboros.Network.TxSubmission.Outbound
7672

7773
import Control.Monad (guard)
7874
import Control.Monad.Class.MonadTime.SI (Time (..))
79-
import Data.Aeson (ToJSON, Value (Number, String), toJSON, (.=))
75+
import Data.Aeson (ToJSON, Value (..), toJSON, (.=))
8076
import qualified Data.Aeson as Aeson
8177
import Data.Foldable (Foldable (toList))
8278
import Data.Int (Int64)
@@ -1386,102 +1382,6 @@ instance MetaTrace (TraceEventMempool blk) where
13861382
, Namespace [] ["Synced"]
13871383
]
13881384

1389-
--------------------------------------------------------------------------------
1390-
-- ForgeTracerType
1391-
--------------------------------------------------------------------------------
1392-
1393-
instance ( tx ~ GenTx blk
1394-
, ConvertRawHash blk
1395-
, GetHeader blk
1396-
, HasHeader blk
1397-
, HasKESInfo blk
1398-
, LedgerSupportsProtocol blk
1399-
, LedgerSupportsMempool blk
1400-
, SerialiseNodeToNodeConstraints blk
1401-
, HasTxId (GenTx blk)
1402-
, Show (ForgeStateUpdateError blk)
1403-
, Show (CannotForge blk)
1404-
, LogFormatting (CannotForge blk)
1405-
, LogFormatting (ExtValidationError blk)
1406-
, LogFormatting (ForgeStateUpdateError blk))
1407-
=> LogFormatting (ForgeTracerType blk) where
1408-
forMachine dtal (Left i) = forMachine dtal i
1409-
forMachine dtal (Right i) = forMachine dtal i
1410-
forHuman (Left i) = forHumanOrMachine i
1411-
forHuman (Right i) = forHumanOrMachine i
1412-
asMetrics (Left i) = asMetrics i
1413-
asMetrics (Right i) = asMetrics i
1414-
1415-
instance MetaTrace (ForgeTracerType blk) where
1416-
namespaceFor (Left ev) =
1417-
nsCast (namespaceFor ev)
1418-
namespaceFor (Right _ev) =
1419-
Namespace [] ["StartLeadershipCheckPlus"]
1420-
1421-
severityFor (Namespace _ ["StartLeadershipCheckPlus"]) _ = Just
1422-
Info
1423-
severityFor ns (Just (Left ev')) =
1424-
severityFor (nsCast ns) (Just ev')
1425-
severityFor ns Nothing =
1426-
severityFor (nsCast ns :: Namespace (TraceForgeEvent blk)) Nothing
1427-
severityFor _ _ = Nothing
1428-
1429-
detailsFor (Namespace _ ["StartLeadershipCheckPlus"]) _ = Just
1430-
DNormal
1431-
detailsFor ns (Just (Left ev')) =
1432-
detailsFor (nsCast ns) (Just ev')
1433-
detailsFor ns Nothing =
1434-
detailsFor (nsCast ns :: Namespace (TraceForgeEvent blk)) Nothing
1435-
detailsFor _ _ = Nothing
1436-
1437-
privacyFor (Namespace _ ["StartLeadershipCheckPlus"]) _ = Just
1438-
Public
1439-
privacyFor ns (Just (Left ev')) =
1440-
privacyFor (nsCast ns) (Just ev')
1441-
privacyFor ns Nothing =
1442-
privacyFor (nsCast ns :: Namespace (TraceForgeEvent blk)) Nothing
1443-
privacyFor _ _ = Nothing
1444-
1445-
metricsDocFor (Namespace _ ["StartLeadershipCheckPlus"]) =
1446-
[ ("Forge.UtxoSize", "UTxO set size")
1447-
, ("Forge.DelegMapSize", "Delegation map size")
1448-
]
1449-
metricsDocFor ns =
1450-
metricsDocFor (nsCast ns :: Namespace (TraceForgeEvent blk))
1451-
1452-
documentFor (Namespace _ ["StartLeadershipCheckPlus"]) = Just $ mconcat
1453-
[ "We adopted the block we produced, we also trace the transactions"
1454-
, " that were adopted."
1455-
]
1456-
documentFor ns =
1457-
documentFor (nsCast ns :: Namespace (TraceForgeEvent blk))
1458-
1459-
allNamespaces =
1460-
Namespace [] ["StartLeadershipCheckPlus"]
1461-
: map nsCast (allNamespaces :: [Namespace (TraceForgeEvent blk)])
1462-
1463-
--------------------------------------------------------------------------------
1464-
-- TraceStartLeadershipCheck
1465-
--------------------------------------------------------------------------------
1466-
1467-
instance LogFormatting TraceStartLeadershipCheckPlus where
1468-
forMachine _dtal TraceStartLeadershipCheckPlus {..} =
1469-
mconcat [ "kind" .= String "TraceStartLeadershipCheck"
1470-
, "slot" .= toJSON (unSlotNo tsSlotNo)
1471-
, "utxoSize" .= Number (fromIntegral tsUtxoSize)
1472-
, "delegMapSize" .= Number (fromIntegral tsDelegMapSize)
1473-
, "chainDensity" .= Number (fromRational (toRational tsChainDensity))
1474-
]
1475-
forHuman TraceStartLeadershipCheckPlus {..} =
1476-
"Checking for leadership in slot " <> showT (unSlotNo tsSlotNo)
1477-
<> " utxoSize " <> showT tsUtxoSize
1478-
<> " delegMapSize " <> showT tsDelegMapSize
1479-
<> " chainDensity " <> showT tsChainDensity
1480-
asMetrics TraceStartLeadershipCheckPlus {..} =
1481-
[IntM "utxoSize" (fromIntegral tsUtxoSize),
1482-
IntM "delegMapSize" (fromIntegral tsDelegMapSize)]
1483-
1484-
14851385
--------------------------------------------------------------------------------
14861386
-- ForgeEvent Tracer
14871387
--------------------------------------------------------------------------------

0 commit comments

Comments
 (0)