Skip to content

Commit b31e016

Browse files
authored
Enable Tracing in Selenium Grid (SeleniumHQ#1711)
Closes SeleniumHQ#1561
1 parent b1d15ef commit b31e016

15 files changed

+409
-12
lines changed

Base/Dockerfile

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,19 @@ RUN mkdir -p /opt/selenium /opt/selenium/assets /var/run/supervisor /var/log/su
7878
&& chgrp -R 0 /opt/selenium ${HOME} /opt/selenium/assets /var/run/supervisor /var/log/supervisor \
7979
&& chmod -R g=u /opt/selenium ${HOME} /opt/selenium/assets /var/run/supervisor /var/log/supervisor
8080

81+
#=====
82+
# Download observability related jaegar jars and make them available in a separate directory
83+
# so that the container can skip downloading them everytime it comes up
84+
#=====
85+
RUN curl -fL https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-linux.gz | gzip -d > /tmp/cs \
86+
&& chmod +x /tmp/cs \
87+
&& mkdir -p /external_jars \
88+
&& chmod -R 777 /external_jars
89+
90+
RUN /tmp/cs fetch --classpath --cache /external_jars io.opentelemetry:opentelemetry-exporter-jaeger:1.19.0 io.grpc:grpc-netty:1.50.2 > /external_jars/.classpath.txt
91+
92+
RUN chmod 777 /external_jars/.classpath.txt
93+
8194
#===================================================
8295
# Run the following commands as non-privileged user
8396
#===================================================
@@ -86,6 +99,4 @@ USER 1200:1201
8699
# Boolean value, maps "--bind-host"
87100
ENV SE_BIND_HOST false
88101

89-
90-
91102
CMD ["/opt/bin/entry_point.sh"]

Distributor/start-selenium-grid-distributor.sh

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,20 @@ if [ ! -z "$SE_DISTRIBUTOR_PORT" ]; then
5454
PORT_CONFIG="--port ${SE_DISTRIBUTOR_PORT}"
5555
fi
5656

57+
EXTRA_LIBS="/opt/selenium/selenium-http-jdk-client.jar"
58+
59+
if [ ! -z "$SE_ENABLE_TRACING" ]; then
60+
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
61+
EXTRA_LIBS=${EXTRA_LIBS}:${EXTERNAL_JARS}
62+
echo "Tracing is enabled"
63+
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
64+
else
65+
echo "Tracing is disabled"
66+
fi
5767

5868
java ${JAVA_OPTS:-$SE_JAVA_OPTS} -Dwebdriver.http.factory=jdk-http-client \
5969
-jar /opt/selenium/selenium-server.jar \
60-
--ext /opt/selenium/selenium-http-jdk-client.jar distributor \
70+
--ext ${EXTRA_LIBS} distributor \
6171
--sessions-host "${SE_SESSIONS_MAP_HOST}" --sessions-port "${SE_SESSIONS_MAP_PORT}" \
6272
--sessionqueue-host "${SE_SESSION_QUEUE_HOST}" --sessionqueue-port "${SE_SESSION_QUEUE_PORT}" \
6373
--publish-events tcp://"${SE_EVENT_BUS_HOST}":"${SE_EVENT_BUS_PUBLISH_PORT}" \

EventBus/start-selenium-grid-eventbus.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,20 @@ if [ ! -z "$SE_OPTS" ]; then
1919
echo "Appending Selenium options: ${SE_OPTS}"
2020
fi
2121

22+
EXTRA_LIBS="/opt/selenium/selenium-http-jdk-client.jar"
23+
24+
if [ ! -z "$SE_ENABLE_TRACING" ]; then
25+
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
26+
EXTRA_LIBS=${EXTRA_LIBS}:${EXTERNAL_JARS}
27+
echo "Tracing is enabled"
28+
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
29+
else
30+
echo "Tracing is disabled"
31+
fi
32+
2233
java ${JAVA_OPTS:-$SE_JAVA_OPTS} -Dwebdriver.http.factory=jdk-http-client \
2334
-jar /opt/selenium/selenium-server.jar \
24-
--ext /opt/selenium/selenium-http-jdk-client.jar event-bus \
35+
--ext ${EXTRA_LIBS} event-bus \
2536
--bind-host ${SE_BIND_HOST} \
2637
${HOST_CONFIG} \
2738
${PORT_CONFIG} \

Hub/start-selenium-grid-hub.sh

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,21 @@ if [ ! -z "$SE_HUB_PORT" ]; then
1717
PORT_CONFIG="--port ${SE_HUB_PORT}"
1818
fi
1919

20+
EXTRA_LIBS="/opt/selenium/selenium-http-jdk-client.jar"
21+
22+
if [ ! -z "$SE_ENABLE_TRACING" ]; then
23+
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
24+
EXTRA_LIBS=${EXTRA_LIBS}:${EXTERNAL_JARS}
25+
echo "Tracing is enabled"
26+
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
27+
else
28+
echo "Tracing is disabled"
29+
fi
30+
31+
2032
java ${JAVA_OPTS:-$SE_JAVA_OPTS} -Dwebdriver.http.factory=jdk-http-client \
2133
-jar /opt/selenium/selenium-server.jar \
22-
--ext /opt/selenium/selenium-http-jdk-client.jar hub \
34+
--ext ${EXTRA_LIBS} hub \
2335
--session-request-timeout ${SE_SESSION_REQUEST_TIMEOUT} \
2436
--session-retry-interval ${SE_SESSION_RETRY_INTERVAL} \
2537
--relax-checks ${SE_RELAX_CHECKS} \

NodeBase/start-selenium-node.sh

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,25 @@ if [ "$GENERATE_CONFIG" = true ]; then
3535
echo "Generating Selenium Config"
3636
/opt/bin/generate_config
3737
fi
38+
39+
EXTRA_LIBS="/opt/selenium/selenium-http-jdk-client.jar"
40+
41+
if [ ! -z "$SE_ENABLE_TRACING" ]; then
42+
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
43+
EXTRA_LIBS=${EXTRA_LIBS}:${EXTERNAL_JARS}
44+
echo "Tracing is enabled"
45+
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
46+
else
47+
echo "Tracing is disabled"
48+
fi
49+
3850
echo "Selenium Grid Node configuration: "
3951
cat "$CONFIG_FILE"
4052
echo "Starting Selenium Grid Node..."
4153

4254
java ${JAVA_OPTS:-$SE_JAVA_OPTS} -Dwebdriver.http.factory=jdk-http-client \
4355
-jar /opt/selenium/selenium-server.jar \
44-
--ext /opt/selenium/selenium-http-jdk-client.jar node \
56+
--ext ${EXTRA_LIBS} node \
4557
--bind-host ${SE_BIND_HOST} \
4658
--config "$CONFIG_FILE" \
4759
${SE_OPTS}

NodeDocker/start-selenium-grid-docker.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,20 @@ if [ ! -z "$SE_NODE_GRID_URL" ]; then
2929
SE_GRID_URL="--grid-url ${SE_NODE_GRID_URL}"
3030
fi
3131

32+
EXTRA_LIBS="/opt/selenium/selenium-http-jdk-client.jar"
33+
34+
if [ ! -z "$SE_ENABLE_TRACING" ]; then
35+
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
36+
EXTRA_LIBS=${EXTRA_LIBS}:${EXTERNAL_JARS}
37+
echo "Tracing is enabled"
38+
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
39+
else
40+
echo "Tracing is disabled"
41+
fi
42+
3243
java ${JAVA_OPTS:-$SE_JAVA_OPTS} -Dwebdriver.http.factory=jdk-http-client \
3344
-jar /opt/selenium/selenium-server.jar \
34-
--ext /opt/selenium/selenium-http-jdk-client.jar node \
45+
--ext ${EXTRA_LIBS} node \
3546
--publish-events tcp://"${SE_EVENT_BUS_HOST}":${SE_EVENT_BUS_PUBLISH_PORT} \
3647
--subscribe-events tcp://"${SE_EVENT_BUS_HOST}":${SE_EVENT_BUS_SUBSCRIBE_PORT} \
3748
--bind-host ${SE_BIND_HOST} \

README.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ Talk to us at https://www.selenium.dev/support/
5454
* [Waiting for the Grid to be ready](#waiting-for-the-grid-to-be-ready)
5555
* [Debugging](#debugging)
5656
* [Install certificates for Chromium based browsers](#install-certificates-for-Chromium-based-browsers)
57+
* [Tracing in Grid](#tracing-in-grid)
5758
* [Troubleshooting](#troubleshooting)
5859

5960

@@ -1132,6 +1133,46 @@ If you get a prompt asking for a password, it is: `secret`.
11321133

11331134
___
11341135

1136+
## Tracing in Grid
1137+
1138+
In order to enable tracing in Selenium Grid container, the following commands can be executed:
1139+
1140+
```bash
1141+
docker network create grid
1142+
docker run -d -p 16686:16686 -p 14250:14250 --net grid --name jaeger jaegertracing/all-in-one:1.17
1143+
docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.5.3-20221024
1144+
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
1145+
--shm-size="2g" \
1146+
-e SE_ENABLE_TRACING=true \
1147+
-e JAVA_OPTS="-Dotel.traces.exporter=jaeger -Dotel.exporter.jaeger.endpoint=http://jaegar:14250 -Dotel.resource.attributes=service.name=selenium-hub" \
1148+
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
1149+
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
1150+
selenium/node-chrome:4.5.3-20221024
1151+
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
1152+
--shm-size="2g" \
1153+
-e SE_ENABLE_TRACING=true \
1154+
-e JAVA_OPTS="-Dotel.traces.exporter=jaeger -Dotel.exporter.jaeger.endpoint=http://jaegar:14250 -Dotel.resource.attributes=service.name=selenium-node-edge" \
1155+
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
1156+
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
1157+
selenium/node-edge:4.5.3-20221024
1158+
docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
1159+
--shm-size="2g" \
1160+
-e SE_ENABLE_TRACING=true \
1161+
-e JAVA_OPTS="-Dotel.traces.exporter=jaeger -Dotel.exporter.jaeger.endpoint=http://jaegar:14250 -Dotel.resource.attributes=service.name=selenium-node-firefox" \
1162+
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
1163+
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
1164+
selenium/node-firefox:4.5.3-20221024
1165+
```
1166+
1167+
You can also refer to the below docker-compose yaml files to be able to start a simple grid (or) a dynamic grid.
1168+
1169+
* Simple Grid [v3 yaml file](docker-compose-v3-tracing.yml)
1170+
* Simple Grid [v2 yaml file](docker-compose-v2-tracing.yml)
1171+
* Dynamic Grid [v3 yaml file](docker-compose-v3-full-grid-tracing.yml)
1172+
1173+
You can view the [Jaegar UI](http://localhost:16686/) and trace your request.
1174+
___
1175+
11351176
## Troubleshooting
11361177

11371178
All output gets sent to stdout, so it can be inspected by running:

Router/start-selenium-grid-router.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,20 @@ if [ ! -z "$SE_ROUTER_PORT" ]; then
4949
PORT_CONFIG="--port ${SE_ROUTER_PORT}"
5050
fi
5151

52+
EXTRA_LIBS="/opt/selenium/selenium-http-jdk-client.jar"
53+
54+
if [ ! -z "$SE_ENABLE_TRACING" ]; then
55+
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
56+
EXTRA_LIBS=${EXTRA_LIBS}:${EXTERNAL_JARS}
57+
echo "Tracing is enabled"
58+
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
59+
else
60+
echo "Tracing is disabled"
61+
fi
62+
5263
java ${JAVA_OPTS:-$SE_JAVA_OPTS} -Dwebdriver.http.factory=jdk-http-client \
5364
-jar /opt/selenium/selenium-server.jar \
54-
--ext /opt/selenium/selenium-http-jdk-client.jar router \
65+
--ext ${EXTRA_LIBS} router \
5566
--sessions-host "${SE_SESSIONS_MAP_HOST}" --sessions-port "${SE_SESSIONS_MAP_PORT}" \
5667
--distributor-host "${SE_DISTRIBUTOR_HOST}" --distributor-port "${SE_DISTRIBUTOR_PORT}" \
5768
--sessionqueue-host "${SE_SESSION_QUEUE_HOST}" --sessionqueue-port "${SE_SESSION_QUEUE_PORT}" \

SessionQueue/start-selenium-grid-session-queue.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,20 @@ if [ ! -z "$SE_SESSION_QUEUE_PORT" ]; then
1919
PORT_CONFIG="--port ${SE_SESSION_QUEUE_PORT}"
2020
fi
2121

22+
EXTRA_LIBS="/opt/selenium/selenium-http-jdk-client.jar"
23+
24+
if [ ! -z "$SE_ENABLE_TRACING" ]; then
25+
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
26+
EXTRA_LIBS=${EXTRA_LIBS}:${EXTERNAL_JARS}
27+
echo "Tracing is enabled"
28+
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
29+
else
30+
echo "Tracing is disabled"
31+
fi
32+
2233
java ${JAVA_OPTS:-$SE_JAVA_OPTS} -Dwebdriver.http.factory=jdk-http-client \
2334
-jar /opt/selenium/selenium-server.jar \
24-
--ext /opt/selenium/selenium-http-jdk-client.jar sessionqueue \
35+
--ext ${EXTRA_LIBS} sessionqueue \
2536
--session-request-timeout ${SE_SESSION_REQUEST_TIMEOUT} \
2637
--session-retry-interval ${SE_SESSION_RETRY_INTERVAL} \
2738
--bind-host ${SE_BIND_HOST} \

Sessions/start-selenium-grid-sessions.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,20 @@ if [ ! -z "$SE_SESSIONS_PORT" ]; then
3434
PORT_CONFIG="--port ${SE_SESSIONS_PORT}"
3535
fi
3636

37+
EXTRA_LIBS="/opt/selenium/selenium-http-jdk-client.jar"
38+
39+
if [ ! -z "$SE_ENABLE_TRACING" ]; then
40+
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
41+
EXTRA_LIBS=${EXTRA_LIBS}:${EXTERNAL_JARS}
42+
echo "Tracing is enabled"
43+
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
44+
else
45+
echo "Tracing is disabled"
46+
fi
47+
3748
java ${JAVA_OPTS:-$SE_JAVA_OPTS} -Dwebdriver.http.factory=jdk-http-client \
3849
-jar /opt/selenium/selenium-server.jar \
39-
--ext /opt/selenium/selenium-http-jdk-client.jar sessions \
50+
--ext ${EXTRA_LIBS} sessions \
4051
--publish-events tcp://"${SE_EVENT_BUS_HOST}":${SE_EVENT_BUS_PUBLISH_PORT} \
4152
--subscribe-events tcp://"${SE_EVENT_BUS_HOST}":${SE_EVENT_BUS_SUBSCRIBE_PORT} \
4253
--bind-host ${SE_BIND_HOST} \

Standalone/start-selenium-standalone.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,20 @@ echo "Selenium Grid Standalone configuration: "
1212
cat /opt/selenium/config.toml
1313
echo "Starting Selenium Grid Standalone..."
1414

15+
EXTRA_LIBS="/opt/selenium/selenium-http-jdk-client.jar"
16+
17+
if [ ! -z "$SE_ENABLE_TRACING" ]; then
18+
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
19+
EXTRA_LIBS=${EXTRA_LIBS}:${EXTERNAL_JARS}
20+
echo "Tracing is enabled"
21+
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
22+
else
23+
echo "Tracing is disabled"
24+
fi
25+
1526
java ${JAVA_OPTS:-$SE_JAVA_OPTS} -Dwebdriver.http.factory=jdk-http-client \
1627
-jar /opt/selenium/selenium-server.jar \
17-
--ext /opt/selenium/selenium-http-jdk-client.jar standalone \
28+
--ext ${EXTRA_LIBS} standalone \
1829
--bind-host ${SE_BIND_HOST} \
1930
--config /opt/selenium/config.toml \
2031
${SE_OPTS}

StandaloneDocker/start-selenium-grid-docker.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,20 @@ if [ ! -z "$SE_NODE_GRID_URL" ]; then
1414
SE_GRID_URL="--grid-url ${SE_NODE_GRID_URL}"
1515
fi
1616

17+
EXTRA_LIBS="/opt/selenium/selenium-http-jdk-client.jar"
18+
19+
if [ ! -z "$SE_ENABLE_TRACING" ]; then
20+
EXTERNAL_JARS=$(</external_jars/.classpath.txt)
21+
EXTRA_LIBS=${EXTRA_LIBS}:${EXTERNAL_JARS}
22+
echo "Tracing is enabled"
23+
echo "Classpath will be enriched with these external jars : " ${EXTRA_LIBS}
24+
else
25+
echo "Tracing is disabled"
26+
fi
27+
1728
java ${JAVA_OPTS:-$SE_JAVA_OPTS} -Dwebdriver.http.factory=jdk-http-client \
1829
-jar /opt/selenium/selenium-server.jar \
19-
--ext /opt/selenium/selenium-http-jdk-client.jar standalone \
30+
--ext ${EXTRA_LIBS} standalone \
2031
--relax-checks ${SE_RELAX_CHECKS} \
2132
--detect-drivers false \
2233
--bind-host ${SE_BIND_HOST} \

docker-compose-v2-tracing.yml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# To execute this docker-compose yml file use `docker-compose -f docker-compose-v2-tracing.yml up`
2+
# Add the `-d` flag at the end for detached execution
3+
# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose-v2-tracing.yml down`
4+
version: '2'
5+
services:
6+
jaegar:
7+
image: jaegertracing/all-in-one:1.17
8+
ports:
9+
- "16686:16686"
10+
- "14250:14250"
11+
chrome:
12+
image: selenium/node-chrome:4.5.3-20221024
13+
shm_size: 2gb
14+
depends_on:
15+
- selenium-hub
16+
environment:
17+
- SE_EVENT_BUS_HOST=selenium-hub
18+
- SE_EVENT_BUS_PUBLISH_PORT=4442
19+
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
20+
- SE_ENABLE_TRACING=true
21+
- JAVA_OPTS=-Dotel.traces.exporter=jaeger -Dotel.exporter.jaeger.endpoint=http://jaegar:14250 -Dotel.resource.attributes=service.name=selenium-node-chrome
22+
ports:
23+
- "6900:5900"
24+
25+
edge:
26+
image: selenium/node-edge:4.5.3-20221024
27+
shm_size: 2gb
28+
depends_on:
29+
- selenium-hub
30+
environment:
31+
- SE_EVENT_BUS_HOST=selenium-hub
32+
- SE_EVENT_BUS_PUBLISH_PORT=4442
33+
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
34+
- SE_ENABLE_TRACING=true
35+
- JAVA_OPTS=-Dotel.traces.exporter=jaeger -Dotel.exporter.jaeger.endpoint=http://jaegar:14250 -Dotel.resource.attributes=service.name=selenium-node-edge
36+
ports:
37+
- "6901:5900"
38+
39+
firefox:
40+
image: selenium/node-firefox:4.5.3-20221024
41+
shm_size: 2gb
42+
depends_on:
43+
- selenium-hub
44+
environment:
45+
- SE_EVENT_BUS_HOST=selenium-hub
46+
- SE_EVENT_BUS_PUBLISH_PORT=4442
47+
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
48+
- SE_ENABLE_TRACING=true
49+
- JAVA_OPTS=-Dotel.traces.exporter=jaeger -Dotel.exporter.jaeger.endpoint=http://jaegar:14250 -Dotel.resource.attributes=service.name=selenium-node-firefox
50+
ports:
51+
- "6902:5900"
52+
53+
selenium-hub:
54+
image: selenium/hub:4.5.3-20221024
55+
ports:
56+
- "4442:4442"
57+
- "4443:4443"
58+
- "4444:4444"
59+
depends_on:
60+
- jaegar
61+
environment:
62+
- SE_ENABLE_TRACING=true
63+
- JAVA_OPTS=-Dotel.traces.exporter=jaeger -Dotel.exporter.jaeger.endpoint=http://jaegar:14250 -Dotel.resource.attributes=service.name=selenium-hub

0 commit comments

Comments
 (0)