plengauer / opentelemetry-bash Goto Github PK
View Code? Open in Web Editor NEWLicense: Apache License 2.0
License: Apache License 2.0
if [ "$(echo $OTEL_TOKEN_SHELL | cut -c 1-7)" != "blah." ]; then
OTEL_TOKEN_SHELL=$(echo "$OTEL_TOKEN_SHELL" | base64 -d);
. /usr/bin/opentelemetry_shell.sh;
otel_instrument echo;
fi
echo "BOO" # no span will be created
. /usr/bin/opentelemetry_shell.sh
otel_instrument echo
if [ "$(echo $OTEL_TOKEN_SHELL | cut -c 1-7)" != "blah." ]; then
OTEL_TOKEN_SHELL=$(echo "$OTEL_TOKEN_SHELL" | base64 -d);
echo "BOO"; # no span will be created
fi
#20 0.727 /bin/sh: 19: /usr/bin/opentelemetry_shell_api.sh: cannot open /proc/0/cmdline: No such file
configurator:
https://github.com/ihudak/bookstore/blob/master/agents/scripts/set_bash_instrumentation.sh#L45
call in the Docker file:
https://github.com/ihudak/bookstore/blob/master/agents/Dockerfile#L50
the same error is on arm64 and x64 quemu vms
the current error detection for jobs fetches the individual steps via the API and checks if any failed. the code needs to filter for completed steps, because our shutdown job will never be the last one, there is always a built-in one. however, the api is lagging. so more jobs are completed than the API actually shows. so if one of them failed, we will miss it. that means, we will not show an error even though one may have failed.
ideally, allow every command to be multi-line
Inner commands of commands like find, parallel, sudo, node, ... shouldnt technicall use shell.* arguments but rather something like subprocess.* or similar.
use span links in netcat implementation
There are invocations like wget url/myscript.sh | sh
or wget url/myscript.sh | sh -E
. We need to pipe a . otel.sh
into it first but also not do that if the shell is indeed interactive (stdin is connected to a terminal.
Only wget and curl looks like they have the _propagate twice in their alias. must have something to do with their client override.
There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.
Location: .github/renovate.json
Error type: Invalid JSON (parsing failed)
Message: Syntax error: expecting String near e,
{
the built-in tokens misses the workflow:write scope. using a PAT with the right tokens would work, but the make all commits under that user. a dedicated github app seems overkill
provide examples and demos, ideally via small scripts that print the result to stderr
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
Renovate tried to run on this repository, but found these problems.
These updates are pending. To force PRs open, click the checkbox below.
.github/workflows/build.yaml
actions/checkout v4
actions/upload-artifact v4
.github/workflows/bump_version.yaml
actions/checkout v4
stefanzweifel/git-auto-commit-action v5
.github/workflows/publish_main.yaml
actions/checkout v4
actions/download-artifact v4
actions/create-release v1
actions/upload-release-asset v1
.github/workflows/renovate.yaml
renovatebot/github-action v40.1.10
.github/workflows/test.yaml
actions/download-artifact v4
actions/download-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/upload-artifact v4
actions/upload-artifact v4
actions/download-artifact v4
actions/upload-artifact v4
src/opt/opentelemetry_shell/requirements.txt
opentelemetry-sdk ==1.24.0
opentelemetry-exporter-otlp-proto-http ==1.24.0
opentelemetry-resourcedetector-docker ==0.4.0
opentelemetry-resourcedetector-kubernetes ==0.3.0
when using child_process npm in node, children are often invoked with an absolute path. However, that means indirect injetion if that path is a shell or something similar is not working. lets normalize to the executable name from the path in case which would resolve to the same one anyway, and then use the name only.
Describe the extensions to the semantic conventions used, i.e.,, attributes and their meaning
Github can trigger other complete workflows as inner workfloas. that adjusts the jobname from "inner" to "outer/inner". however, the GITHUB_JOB env var only container "inner", so we never find the correct job and therefore dont detectthat the job actually failed.
when using the github action, after the @ the user can specify a branch or tag. this will use the action from that revision. however, it will then internally always load the latest otel for shell. it should load the correct version.
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
This repository currently has no open or pending branches.
.github/workflows/build.yaml
actions/checkout v4
actions/upload-artifact v4
.github/workflows/bump_version.yaml
actions/checkout v4
stefanzweifel/git-auto-commit-action v5
.github/workflows/publish_main.yaml
actions/checkout v4
actions/download-artifact v4
actions/create-release v1
actions/upload-release-asset v1
.github/workflows/renovate.yaml
renovatebot/github-action v40.1.10
.github/workflows/test.yaml
actions/download-artifact v4
actions/download-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/upload-artifact v4
actions/upload-artifact v4
actions/download-artifact v4
actions/upload-artifact v4
src/opt/opentelemetry_shell/requirements.txt
opentelemetry-sdk ==1.24.0
opentelemetry-exporter-otlp-proto-http ==1.24.0
opentelemetry-resourcedetector-docker ==0.4.0
opentelemetry-resourcedetector-kubernetes ==0.3.0
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
This repository currently has no open or pending branches.
.github/workflows/build.yaml
actions/checkout v4
actions/upload-artifact v4
.github/workflows/bump_version.yaml
actions/checkout v4
stefanzweifel/git-auto-commit-action v5
.github/workflows/publish_main.yaml
actions/checkout v4
actions/download-artifact v4
actions/create-release v1
actions/upload-release-asset v1
.github/workflows/renovate.yaml
renovatebot/github-action v40.1.11
.github/workflows/test.yaml
actions/download-artifact v4
actions/download-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/download-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/download-artifact v4
actions/upload-artifact v4
actions/upload-artifact v4
actions/download-artifact v4
actions/upload-artifact v4
src/opt/opentelemetry_shell/requirements.txt
opentelemetry-sdk ==1.24.0
opentelemetry-exporter-otlp-proto-http ==1.24.0
opentelemetry-resourcedetector-docker ==0.4.0
opentelemetry-resourcedetector-kubernetes ==0.3.0
right now, using the github api in workflows assumes a single page only.
Lets make the sdk its own package, providing otelsdk, with a python implemenation
currently, the individual steps are correctly marked with errors, but the root span representing the job is not
Looks like the API is lagging behind, so accessing the current step name of the one job that is in progress is often the last step name
Looks like, pipe observation mode forces the actual command to be run into a subshell. that means cd changes the dir of the subshell, but not in shell it should be in. This will be the same problem for built-ins like set, ulimit, ... and also for functions with side effects like setting variables.
possible solutions: do not instrument builtins with sideeffects, or avoid the subshell
sudo docker ps
"docker ps" accepts no arguments.
See 'docker ps --help'.
Usage: docker ps [OPTIONS]
List containers
Node is used a lot in github actions. and they often spawn child processes. we should monitor them, by wrapping the children in a shell
They fail sparsely because the progress bar seems to garble the output
currently, the sdk completely ignores sampler configuration
When using docker run (in contrast to start) its most likely a glorified script or similar (like for github dockerized actions). in such a case, we should try to inject into it.
config can rather easily propagated inside a docker container
however, how to install inside? should we mount all the necessary files directly? should we try to run an install inside? how do we even detect that its a support base image in the first place?
Suggested implementatiin: make user add a job with a single step, a root action. This action will use the github api to check when all other jobs have completed and manually start/end spans. Use @actions/artifact npm module to upload an artifact (traceparent) download in others and delete at the end
Similar to node (already implemented), python is used a lot for scripting. so injecting into subprocesses could be useful.
it then contains linefeeds and break the SDK
Allow special attribute types like string[1]+ and int+, that take an existing span attribute, do not override it but add/append. this is useful for headers in curl and wget, as well as in resend_count (and maybe body size) where we can only incrementally count
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.