Supported Runtimes: Java 8, Java 11, Java 17, Java 21
Include lumigo java tracer dependency
For Maven projects, use:
<repositories>
<repository>
<id>lumigo</id>
<url>https://raw.githubusercontent.com/lumigo-io/java-tracer/master/local-repository/</url>
</repository>
</repositories><dependency>
<groupId>io.lumigo</groupId>
<artifactId>java-tracer</artifactId>
<version>1.0.49</version>
</dependency>
<dependency>
<groupId>io.lumigo</groupId>
<artifactId>lumigo-agent</artifactId>
<version>1.0.49</version>
</dependency>For Gradle projects, use:
repositories {
maven {
url 'https://raw.githubusercontent.com/lumigo-io/java-tracer/master/local-repository/'
}
}dependencies {
implementation 'io.lumigo:java-tracer:1.0.49'
implementation 'io.lumigo:lumigo-agent:1.0.49'
}Find the latest version here (the format of the version will be n.n.n):
-
Wrap your lambda function by implementing a supplier which contains your code
class MyFunction implements RequestHandler<INPUT, OUTPUT> { @Override public OUTPUT handleRequest(INPUT event, Context context) { Supplier<OUTPUT> supplier = () -> { //Your lambda code //return <result of type OUTPUT>; }; return LumigoRequestExecutor.execute(event, context, supplier); } }
-
For handler return void use:
class MyFunction implements RequestHandler<INPUT, Void> { @Override public Void handleRequest(INPUT event, Context context) { Supplier<Void> supplier = () -> { //Your lambda code return null; }; return LumigoRequestExecutor.execute(event, context, supplier); } }
- Add to your lambda a new layer with the arn from here
- Add environment variable
JAVA_TOOL_OPTIONSand set it to-javaagent:/opt/lumigo-java/lumigo-agent.jar(This is instead of the flag for more than java11 support) - Add the
LUMIGO_TRACER_TOKENenv var.
There are 2 way to pass configuration properties
Adding LUMIGO_TRACER_TOKEN environment variables
class MyFunction implements RequestHandler<String, String> {
static{
LumigoConfiguration.builder().token("xxx").build().init();
}
@Override
public String handleRequest(String event, Context context) {
Supplier<String> supplier = () -> {
//Your lambda code
return "";
};
return LumigoRequestExecutor.execute(event, context, supplier);
}
}Add the environment variable JAVA_TOOL_OPTIONS to your Lambda functions and set it to
-Djdk.attach.allowAttachSelf=true in addition to the manual code mentioned above (This is not needed for the auto trace with lambda layer).
- Aws SDK V1
- Aws SDK V2
- Apache HTTP Client
- Apache Kafka
The tracer will automatically scrub values for keys in payload objects such as HTTP request / response body, Lambda events, return value etc. that match (case-sensitively) the following regex patterns at any depth:
.*pass.*.*key.*.*secret.*.*credential.*.*passphrase.*SessionTokenx-amz-security-tokenSignatureAuthorization
This behavior can be overridden by setting the LUMIGO_SECRET_MASKING_REGEX environment variable to a JSON array of regex patterns to match, e.g.: [".+top.secret.+", ".+pazzword.+"].
- providing a bad regex pattern (e.g., invalid JSON string) will result in an error and fallback to the default patterns.
- Only values that are strings are redacted - objects, numbers etc. will stay intact even though their keys match the patterns.
When the patterns contain special characters such as double quotes (") or backslashes (\), those should be escaped with a backslash (\).
For example, the pattern for keys with whitespaces and quotes like "key\s+spaced" becomes \"key\\\\s+spaced\". That's because each double quotes turns into \", and the \s+ expression requires the backslash character to be escaped both in the string context (\s+ => \\s+) and again in a JSON string context (\\s+ => \\\\s+). When placed into the env-var as an array-item, this becomes:
["\\"key\\\\s+spaced\\""]
LUMIGO_SECRET_MASKING_REGEX set to [".*top\\\\s+secret.*", ".*password.*"] for a payload object like:
{
"top secret": {
"password": "123456"
},
"top secret object": {
"this will not be scrubbed since the parent is an object": "123456"
},
"password": "123456",
"top secret:": "123456",
"not so secret": "value",
"ToP sEcReT": "is case sensitive"
}will result in the following payload shown in the Lumigo platform:
{
"top secret": {
"password": "****"
},
"top secret object": {
"this will not be scrubbed since the parent is an object": "123456"
},
"password": "****",
"top secret:": "****",
"not so secret": "value",
"ToP sEcReT": "is case sensitive"
}