Skip to content

Commit f11e0f3

Browse files
authored
Merge pull request #6268 from IntersectMBO/jutaro/trace-dispatcher--forwarding
Reverse Dependency: trace-dispatcher no longer depends on trace-forward
2 parents 425b8c1 + fc1f141 commit f11e0f3

File tree

32 files changed

+198
-166
lines changed

32 files changed

+198
-166
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import Cardano.Benchmarking.Version as Version
3434
import Cardano.Logging
3535
import qualified Cardano.Logging.Types as Net
3636
import Cardano.Node.Startup
37-
import Cardano.Node.Tracing.NodeInfo () -- MetaTrace NodeInfo
37+
import Cardano.Node.Tracing.NodeInfo ()
3838
import Ouroboros.Network.IOManager (IOManager)
3939

4040
import Control.Monad (forM, guard)
@@ -49,7 +49,7 @@ import qualified Data.Text as Text
4949
import Data.Time.Clock
5050
import GHC.Generics
5151

52-
import Trace.Forward.Utils.DataPoint
52+
import Trace.Forward.Forwarding (initForwardingDelayed)
5353
import Trace.Forward.Utils.TraceObject
5454

5555
pattern TracerNameBench :: Text
@@ -121,7 +121,7 @@ initTxGenTracers mbForwarding = do
121121
prepareForwardingTracer = forM mbForwarding $
122122
\(iomgr, networkId, tracerSocket) -> do
123123
let forwardingConf = fromMaybe defaultForwarder (tcForwarder initialTraceConfig)
124-
(forwardSink :: ForwardSink TraceObject, dpStore, kickoffForwarder) <-
124+
(forwardSink, dpStore, kickoffForwarder) <-
125125
initForwardingDelayed iomgr forwardingConf (toNetworkMagic networkId) Nothing $ Just (Net.LocalPipe tracerSocket, Initiator)
126126

127127
-- we need to provide NodeInfo DataPoint, to forward generator's name
@@ -134,7 +134,7 @@ initTxGenTracers mbForwarding = do
134134
traceWith nodeInfoTracer genInfo
135135

136136
kickoffForwarder
137-
pure $ forwardTracer forwardSink
137+
pure $ forwardTracer (writeToSink forwardSink)
138138

139139
prepareGenInfo :: IO NodeInfo
140140
prepareGenInfo =

cardano-node/cardano-node.cabal

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,8 @@ library
211211
, sop-extras
212212
, text >= 2.0
213213
, time
214-
, trace-dispatcher ^>= 2.9.2
215-
, trace-forward ^>= 2.2.11
214+
, trace-dispatcher ^>= 2.10.0
215+
, trace-forward ^>= 2.3.0
216216
, trace-resources ^>= 0.2.3
217217
, tracer-transformers
218218
, transformers

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ module Cardano.Node.Tracing.API
99
) where
1010

1111
import Cardano.Logging hiding (traceWith)
12-
import qualified Cardano.Logging.Types as Net
1312
import Cardano.Logging.Prometheus.TCPServer (runPrometheusSimple)
13+
import qualified Cardano.Logging.Types as Net
1414
import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable)
1515
import Cardano.Node.Configuration.NodeAddress (PortNumber)
1616
import Cardano.Node.Configuration.POM (NodeConfiguration (..))
@@ -52,6 +52,9 @@ import Network.Mux.Trace (TraceLabelPeer (..))
5252
import Network.Socket (HostName)
5353
import System.Metrics as EKG
5454

55+
import Trace.Forward.Forwarding (initForwardingDelayed)
56+
import Trace.Forward.Utils.TraceObject (writeToSink)
57+
5558

5659
initTraceDispatcher ::
5760
forall blk p2p.
@@ -137,7 +140,7 @@ initTraceDispatcher nc p networkMagic nodeKernel p2pMode noBlockForging = do
137140
forwardingConf :: TraceOptionForwarder
138141
forwardingConf = fromMaybe defaultForwarder (tcForwarder trConfig)
139142
initForwardingDelayed iomgr forwardingConf networkMagic (Just ekgStore) tracerSocketMode
140-
pure (forwardTracer forwardSink, dataPointTracer dpStore, kickoffForwarder)
143+
pure (forwardTracer (writeToSink forwardSink), dataPointTracer dpStore, kickoffForwarder)
141144
else
142145
-- Since 'Forwarder' backend isn't enabled, there is no forwarding.
143146
-- So we use nullTracers to ignore 'TraceObject's and 'DataPoint's.

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,6 @@ import Data.Proxy (Proxy (..))
7373
import Network.Mux.Trace (TraceLabelPeer (..))
7474
import Network.Socket (SockAddr)
7575

76-
import Trace.Forward.Utils.DataPoint (DataPoint)
77-
7876
-- | Construct tracers for all system components.
7977
--
8078
mkDispatchTracers

cardano-tracer/bench/cardano-tracer-bench.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import Cardano.Tracer.MetaTrace
1414
import Cardano.Tracer.Types
1515
import Cardano.Tracer.Utils
1616

17+
1718
import Control.Concurrent.Extra (newLock)
1819
#if RTVIEW
1920
import Control.Concurrent.STM.TVar (newTVarIO)
@@ -55,7 +56,7 @@ main = do
5556
currentLogLock <- newLock
5657
currentDPLock <- newLock
5758
#if RTVIEW
58-
eventsQueues <- initEventsQueues Nothing connectedNodesNames dpRequestors currentDPLock
59+
eventsQueues <- initEventsQueues mempty Nothing connectedNodesNames dpRequestors currentDPLock
5960

6061
rtViewPageOpened <- newTVarIO False
6162
#endif

cardano-tracer/cardano-tracer.cabal

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cabal-version: 3.0
22

33
name: cardano-tracer
4-
version: 0.3.3
4+
version: 0.3.4
55
synopsis: A service for logging and monitoring over Cardano nodes
66
description: A service for logging and monitoring over Cardano nodes.
77
category: Cardano,
@@ -197,8 +197,8 @@ library
197197
, string-qq
198198
, text
199199
, time
200-
, trace-dispatcher ^>= 2.9.2
201-
, trace-forward ^>= 2.2.11
200+
, trace-dispatcher ^>= 2.10.0
201+
, trace-forward ^>= 2.3.0
202202
, trace-resources ^>= 0.2.3
203203
, wai ^>= 3.2
204204
, warp ^>= 3.4

cardano-tracer/docs/cardano-tracer.md

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
- [Build and run](#build-and-run)
1313
- [Configuration](#configuration)
1414
- [Distributed Scenario](#distributed-scenario)
15-
- [Important](#important)
1615
- [Local Scenario](#local-scenario)
16+
- [Forwarding over TCP](#forwarding-over-tcp)
1717
- [Network Magic](#network-magic)
1818
- [Requests](#requests)
1919
- [Logging](#logging)
@@ -27,7 +27,7 @@
2727

2828
## Motivation
2929

30-
Previously, the node handled all the logging by itself. Moreover, it provided monitoring tools as well: two web-servers, for Prometheus and for EKG monitoring page. `cardano-tracer` is a result of _moving_ all the logging/monitoring-related stuff from the node to a separate service. As a result, the node became smaller, faster, and simpler.
30+
Previously, the node handled all the logging by itself. Moreover, it provided monitoring tools as well: two web-servers, for Prometheus and for EKG monitoring page. `cardano-tracer` is a result of _moving_ all logging and monitoring related functionality from the node to a separate service. As a result, the node becomes smaller, more efficient, and simpler.
3131

3232
## Overview
3333

@@ -82,8 +82,6 @@ Distributed scenario is for real-life case: for example, you have `N` nodes work
8282

8383
Local scenario is for testing case: for example, you want to try your new infrastructure from scratch, so you run `N` nodes and one `cardano-tracer` process on your machine.
8484

85-
**IMPORTANT NOTICE**: Please note that `cardano-tracer` **does not** support connection via IP-address and port, to avoid unauthorized connections. The **only** way to establish connection with the node is the local socket (Unix sockets or Windows named pipes).
86-
8785
## Distributed Scenario
8886

8987
This is an example with 3 nodes and one `cardano-tracer`:
@@ -251,8 +249,36 @@ There is another way to connect `cardano-tracer` to your nodes: the `cardano-tra
251249

252250
As you see, the tag in `network` field is `ConnectTo` now, which means that `cardano-tracer` works as a client: it _establishes_ network connections with your local nodes via the local sockets `/tmp/cardano-node-*.sock`. In this case each socket is used by a particular node.
253251

252+
`AcceptTo` and `ConnectTo` are mirrored by the reciprocal CLI option on the node `--tracer-socket-path-connect` / `--tracer-socket-path-accept`. If you choose one on the node, you choose the opposite on the tracer. This only makes a difference to which entity initiates the handshake; after the handshake the configuration is identical
253+
254254
Please use `ConnectTo`-based scenario only if you really need it. Otherwise, it is **highly recommended** to use `AcceptAt`-based scenario. The reason is easier maintainance. Suppose you have 3 working nodes, and they are connected to the same `cardano-tracer`. And then you want to connect 4-th node to it. If `cardano-tracer` is configured using `AcceptAt`, you shouldn't change its configuration - you just connect your 4-th node to it. But if `cardano-tracer` is configured using `ConnectTo`, you should add path to 4-th socket in its configuration file and then restart `cardano-tracer` process.
255255

256+
## Forwarding over TCP
257+
258+
In addition to forwarding over sockets, forwarding over TCP/IP is supported. In both cases, the 'forwarding protocol' is identical. For TCP forwarding, adjust the following (only showing the `AcceptAt` scenario here):
259+
260+
Change node CLI option:
261+
```bash
262+
--tracer-socket-network-connect 10.0.0.2:34567
263+
```
264+
265+
Adjust value for `network` in `cardano-tracer`'s configuration:
266+
```yaml
267+
network:
268+
tag: AcceptAt
269+
contents: "0.0.0.0:34567"
270+
```
271+
272+
In this example, `cardano-tracer` listens on port 34567. Nodes can connect via IPv4 for forwarding, with `10.0.0.2` being `cardano-tracer`'s IP in that example.
273+
274+
### Important
275+
276+
On same-host setups sockets are always preferrable due to **less overhead and better performance**. On multi-host setups, socket connection via SSH tunnels is always preferrable due to **increased security**.
277+
278+
Use TCP forwarding **if and only if** you control each and every aspect of the environment, such as port mapping or firewalls, or virtual network setup - the 'forwarding protocol' does not implement encrypting traffic nor authentication methods.
279+
280+
281+
256282
## Network Magic
257283

258284
The field `networkMagic` specifies the value of network magic. It is an integer constant from the genesis file, the node uses this value for the network handshake with peers. Since `cardano-tracer` should be connected to the node, it needs that network magic.

cardano-tracer/src/Cardano/Tracer/Acceptors/Client.hs

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,46 +6,39 @@ module Cardano.Tracer.Acceptors.Client
66

77
import Cardano.Logging (TraceObject)
88
import qualified Cardano.Logging.Types as Net
9-
import Cardano.Logging.Version (ForwardingVersion (..), ForwardingVersionData (..),
10-
forwardingCodecCBORTerm, forwardingVersionCodec)
11-
#if RTVIEW
12-
import Cardano.Tracer.Acceptors.Utils (notifyAboutNodeDisconnected,
13-
prepareDataPointRequestor, prepareMetricsStores, removeDisconnectedNode)
14-
#else
15-
import Cardano.Tracer.Acceptors.Utils (
16-
prepareDataPointRequestor, prepareMetricsStores, removeDisconnectedNode)
17-
#endif
9+
import Cardano.Tracer.Acceptors.Utils
1810
import qualified Cardano.Tracer.Configuration as TC
1911
import Cardano.Tracer.Environment
2012
import Cardano.Tracer.Handlers.Logs.TraceObjects (deregisterNodeId, traceObjectsHandler)
2113
import Cardano.Tracer.MetaTrace
2214
import Cardano.Tracer.Utils (connIdToNodeId)
23-
import qualified Network.Mux as Mux
2415
import Ouroboros.Network.Context (MinimalInitiatorContext (..), ResponderContext (..))
2516
import Ouroboros.Network.Driver.Limits (ProtocolTimeLimits)
2617
import Ouroboros.Network.IOManager (withIOManager)
2718
import Ouroboros.Network.Magic (NetworkMagic (..))
2819
import Ouroboros.Network.Mux (MiniProtocol (..), MiniProtocolLimits (..),
2920
MiniProtocolNum (..), OuroborosApplication (..),
30-
RunMiniProtocol (..), miniProtocolLimits, miniProtocolNum, miniProtocolRun,
31-
OuroborosApplicationWithMinimalCtx)
21+
OuroborosApplicationWithMinimalCtx, RunMiniProtocol (..), miniProtocolLimits,
22+
miniProtocolNum, miniProtocolRun)
3223
import Ouroboros.Network.Protocol.Handshake.Codec (cborTermVersionDataCodec,
33-
codecHandshake, timeLimitsHandshake, noTimeLimitsHandshake)
24+
codecHandshake, noTimeLimitsHandshake, timeLimitsHandshake)
3425
import Ouroboros.Network.Protocol.Handshake.Type (Handshake)
3526
import Ouroboros.Network.Protocol.Handshake.Version (acceptableVersion, queryVersion,
3627
simpleSingletonVersions)
3728
import Ouroboros.Network.Snocket (LocalAddress, LocalSocket, Snocket,
38-
localAddressFromPath, localSnocket, socketSnocket, makeSocketBearer, makeLocalBearer)
39-
import Ouroboros.Network.Socket (ConnectionId (..), ConnectToArgs (..),
29+
localAddressFromPath, localSnocket, makeLocalBearer, makeSocketBearer,
30+
socketSnocket)
31+
import Ouroboros.Network.Socket (ConnectToArgs (..), ConnectionId (..),
4032
HandshakeCallbacks (..), connectToNode, nullNetworkConnectTracers)
4133

4234
import Codec.CBOR.Term (Term)
4335
import Control.Exception (throwIO)
4436
import qualified Data.ByteString.Lazy as LBS
45-
import Data.List.NonEmpty (NonEmpty((:|)))
46-
import Data.Void (Void, absurd)
37+
import Data.List.NonEmpty (NonEmpty ((:|)))
4738
import qualified Data.Text as Text
39+
import Data.Void (Void, absurd)
4840
import Data.Word (Word32)
41+
import qualified Network.Mux as Mux
4942
import qualified Network.Socket as Socket
5043
import qualified System.Metrics.Configuration as EKGF
5144
import System.Metrics.Network.Acceptor (acceptEKGMetricsInit)
@@ -54,6 +47,8 @@ import qualified Trace.Forward.Configuration.DataPoint as DPF
5447
import qualified Trace.Forward.Configuration.TraceObject as TF
5548
import Trace.Forward.Run.DataPoint.Acceptor (acceptDataPointsInit)
5649
import Trace.Forward.Run.TraceObject.Acceptor (acceptTraceObjectsInit)
50+
import Trace.Forward.Utils.Version (ForwardingVersion (..), ForwardingVersionData (..),
51+
forwardingCodecCBORTerm, forwardingVersionCodec)
5752

5853
runAcceptorsClient
5954
:: TracerEnv

cardano-tracer/src/Cardano/Tracer/Acceptors/Server.hs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,48 +6,41 @@ module Cardano.Tracer.Acceptors.Server
66

77
import Cardano.Logging (TraceObject)
88
import qualified Cardano.Logging.Types as Net
9-
import Cardano.Logging.Version (ForwardingVersion (..), ForwardingVersionData (..),
10-
forwardingCodecCBORTerm, forwardingVersionCodec)
11-
#if RTVIEW
12-
import Cardano.Tracer.Acceptors.Utils (notifyAboutNodeDisconnected,
13-
prepareDataPointRequestor, prepareMetricsStores, removeDisconnectedNode)
14-
#else
15-
import Cardano.Tracer.Acceptors.Utils (prepareDataPointRequestor, prepareMetricsStores,
16-
removeDisconnectedNode)
17-
#endif
9+
import Cardano.Tracer.Acceptors.Utils
1810
import qualified Cardano.Tracer.Configuration as TC
1911
import Cardano.Tracer.Environment
2012
import Cardano.Tracer.Handlers.Logs.TraceObjects (deregisterNodeId, traceObjectsHandler)
2113
import Cardano.Tracer.MetaTrace
2214
import Cardano.Tracer.Utils (connIdToNodeId)
23-
import qualified Network.Mux as Mux
2415
import Ouroboros.Network.Context (MinimalInitiatorContext (..), ResponderContext (..))
2516
import Ouroboros.Network.Driver.Limits (ProtocolTimeLimits)
2617
import Ouroboros.Network.ErrorPolicy (nullErrorPolicies)
2718
import Ouroboros.Network.IOManager (withIOManager)
2819
import Ouroboros.Network.Magic (NetworkMagic (..))
2920
import Ouroboros.Network.Mux (MiniProtocol (..), MiniProtocolLimits (..),
3021
MiniProtocolNum (..), OuroborosApplication (..),
31-
RunMiniProtocol (..), OuroborosApplicationWithMinimalCtx,
32-
miniProtocolLimits, miniProtocolNum, miniProtocolRun)
22+
OuroborosApplicationWithMinimalCtx, RunMiniProtocol (..), miniProtocolLimits,
23+
miniProtocolNum, miniProtocolRun)
3324
import Ouroboros.Network.Protocol.Handshake.Codec (cborTermVersionDataCodec,
3425
codecHandshake, noTimeLimitsHandshake, timeLimitsHandshake)
3526
import Ouroboros.Network.Protocol.Handshake.Type (Handshake)
3627
import Ouroboros.Network.Protocol.Handshake.Version (acceptableVersion, queryVersion,
3728
simpleSingletonVersions)
3829
import Ouroboros.Network.Snocket (LocalAddress, LocalSocket, Snocket,
39-
localAddressFromPath, localSnocket, socketSnocket, makeSocketBearer, makeLocalBearer)
30+
localAddressFromPath, localSnocket, makeLocalBearer, makeSocketBearer,
31+
socketSnocket)
4032
import Ouroboros.Network.Socket (AcceptedConnectionsLimit (..), ConnectionId (..),
4133
HandshakeCallbacks (..), SomeResponderApplication (..), cleanNetworkMutableState,
4234
newNetworkMutableState, nullNetworkServerTracers, withServerNode)
4335

4436
import Codec.CBOR.Term (Term)
4537
import Control.Concurrent.Async (race_, wait)
4638
import qualified Data.ByteString.Lazy as LBS
47-
import Data.List.NonEmpty (NonEmpty((:|)))
39+
import Data.List.NonEmpty (NonEmpty ((:|)))
4840
import qualified Data.Text as Text
4941
import Data.Void (Void)
5042
import Data.Word (Word32)
43+
import qualified Network.Mux as Mux
5144
import qualified Network.Socket as Socket
5245
import qualified System.Metrics.Configuration as EKGF
5346
import System.Metrics.Network.Acceptor (acceptEKGMetricsResp)
@@ -56,6 +49,8 @@ import qualified Trace.Forward.Configuration.DataPoint as DPF
5649
import qualified Trace.Forward.Configuration.TraceObject as TF
5750
import Trace.Forward.Run.DataPoint.Acceptor (acceptDataPointsResp)
5851
import Trace.Forward.Run.TraceObject.Acceptor (acceptTraceObjectsResp)
52+
import Trace.Forward.Utils.Version (ForwardingVersion (..), ForwardingVersionData (..),
53+
forwardingCodecCBORTerm, forwardingVersionCodec)
5954

6055

6156
runAcceptorsServer

cardano-tracer/src/Cardano/Tracer/Handlers/ReForwarder.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ module Cardano.Tracer.Handlers.ReForwarder
1515
( initReForwarder
1616
) where
1717

18-
import Cardano.Logging.Forwarding
1918
import Cardano.Logging.Trace
2019
import Cardano.Logging.Tracer.DataPoint
2120
import qualified Cardano.Logging.Types as Log
@@ -29,8 +28,9 @@ import Control.Monad (when)
2928
import Data.List (isPrefixOf)
3029
import qualified Data.Text as Text
3130

32-
import Trace.Forward.Utils.DataPoint
33-
import Trace.Forward.Utils.TraceObject (ForwardSink, writeToSink)
31+
import Trace.Forward.Forwarding
32+
import Trace.Forward.Utils.ForwardSink (ForwardSink)
33+
import Trace.Forward.Utils.TraceObject (writeToSink)
3434

3535
-- | Initialize the reforwarding service if configured to be active.
3636
-- Returns

0 commit comments

Comments
 (0)