SlideShare une entreprise Scribd logo
1  sur  117
Télécharger pour lire hors ligne
My slides are / will be available for you at:
@A_Bangser @AgileTD #AgileTD
Empowerment through Observability
Abby Bangser
(she/her)
https://www.slideshare.net/AbigailBangser
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
Incident
triage
Incident
triage
happening?!
@A_Bangser @AgileTD #AgileTD
Incident
triage
Incident
triage
happening?!
observability observability
observability
@A_Bangser @AgileTD #AgileTD
inferred from knowledge
of its external outputs.
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
https://thenewstack.io/observability-a-3-year-retrospective/
➔
➔
➔
➔
➔
➔
➔
➔
➔
@A_Bangser @AgileTD #AgileTD
https://thenewstack.io/observability-a-3-year-retrospective/
➔
➔
➔
➔
➔
➔
➔
➔
➔
ByTwitter,CCBY4.0,
https://commons.wikimedia.org/w/index.php?curid=76921548
@A_Bangser @AgileTD #AgileTD
➔
➔ no pre-aggregation
➔
➔ arbitrarily wide events
➔
➔
➔
➔
➔ static dashboards don’t work, it must be exploratory
@A_Bangser @AgileTD #AgileTD
➔
➔ no pre-aggregation
➔
➔ arbitrarily wide events
➔
➔
➔
➔
➔ static dashboards don’t work, it must be exploratory
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
➔
➔
➔
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
And then…
just like testability,
operability became
hard to prioritise
@A_Bangser @AgileTD #AgileTD
2standarddeviations
@A_Bangser @AgileTD #AgileTD
2standarddeviations
@A_Bangser @AgileTD #AgileTD
➔
➔
➔
➔
@A_Bangser @AgileTD #AgileTD
➔
➔
➔
➔
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
le= 0.05 le= 0.1 le= 0.5 le= 1 le= 5 le= +inf
* `le` stands for “less than or equal to”
@A_Bangser @AgileTD #AgileTD
le= 0.05 le= 0.1 le= 0.5 le= 1 le= 5 le= +inf
* “le” stands for “less than or equal to”
www.moo.com in 0.25 seconds
@A_Bangser @AgileTD #AgileTD
le= 0.05 le= 0.1 le= 0.5 le= 1 le= 5 le= +inf
* “le” stands for “less than or equal to”
www.moo.com in 0.25 seconds
@A_Bangser @AgileTD #AgileTD
le= 0.05 le= 0.1 le= 0.5 le= 1 le= 5 le= +inf
* “le” stands for “less than or equal to”
www.moo.com/big_file in 5 seconds
www.moo.com in 0.25 seconds
@A_Bangser @AgileTD #AgileTD
le= 0.05 le= 0.1 le= 0.5 le= 1 le= 5 le= +inf
* “le” stands for “less than or equal to”
www.moo.com/big_file in 5 seconds
www.moo.com in 0.25 seconds
@A_Bangser @AgileTD #AgileTD
le= .05 le= .1 le= .5 le= 1 le= 5 le= +inf
1week2week3week4week
le= .05 le= .1 le= .5 le= 1 le= 5 le= +inf
le= .05 le= .1 le= .5 le= 1 le= 5 le= +inf
le= .05 le= .1 le= .5 le= 1 le= 5 le= +inf
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
But...
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
le= .05 le= 5le= .5le= .1 le= +infle= 1
1week2week3week4week
le= .05 le= .1 le= +infle= 1
le= 5le= .1 le= +infle= 1
le= .05 le= 5le= .1 le= .5
le= .05
le= .5
le= .5
le= 1
le= 5
le= +inf
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
le= .05 le= 5le= .1 le= .5 le= 1 le= +inf
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
➔
➔ no pre-aggregation
➔
➔ arbitrarily wide events
➔
➔
➔
➔
➔ static dashboards don’t work, it must be exploratory
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
7a82dd3a
@A_Bangser @AgileTD #AgileTD
7a82dd3a
@A_Bangser @AgileTD #AgileTD
grok {
match => [
"Request",
"%{URIPROTO:request_uri_scheme}://
%{HOSTNAME:request_uri_host}(?::%{POSINT:request_uri_port})
?%{URIPATH:request_uri_path}(?:%{URIPARAM:request_uri_query})?"
]}
}
@A_Bangser @AgileTD #AgileTD
mutate {
split => { "uri_array" => "/"}
add_field => {
"uri_root" => ["/%{[uri_array][1]}"]
"uri_first" => ["/%{[uri_array][2]}"]
"uri_second" => ["/%{[uri_array][3]}"]
"uri_root_first" => "%{uri_root}%{uri_first}"
"uri_root_second" => "%{uri_root}%{uri_first}%{uri_second}"
}
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(@RequestParam("image") MultipartFile file,
@RequestParam(value = "vertical") Boolean vertical,
@RequestParam(value = "horizontal") Boolean horizontal) {
if (file.getContentType() != null) {
LOGGER.warn("Wrong content type uploaded: {}", file.getContentType());
return new ResponseEntity<>("Wrong content type uploaded: " + file.getContentType());
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
if (flippedImage == null) {
return new ResponseEntity<>("Failed to flip image", HttpStatus.INTERNAL_SERVER_ERROR);
}
LOGGER.info("Successfully flipped image id: {}", file.getId());
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(@RequestParam("image") MultipartFile file,
@RequestParam(value = "vertical") Boolean vertical,
@RequestParam(value = "horizontal") Boolean horizontal) {
if (file.getContentType() != null) {
LOGGER.warn("Wrong content type uploaded: {}", file.getContentType());
return new ResponseEntity<>("Wrong content type uploaded: " + file.getContentType());
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
if (flippedImage == null) {
return new ResponseEntity<>("Failed to flip image", HttpStatus.INTERNAL_SERVER_ERROR);
}
LOGGER.info("Successfully flipped image id: {}", file.getId());
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(@RequestParam("image") MultipartFile file,
@RequestParam(value = "vertical") Boolean vertical,
@RequestParam(value = "horizontal") Boolean horizontal) {
if (file.getContentType() != null) {
LOGGER.warn("Wrong content type uploaded: {}", file.getContentType());
return new ResponseEntity<>("Wrong content type uploaded: " + file.getContentType());
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
if (flippedImage == null) {
return new ResponseEntity<>("Failed to flip image", HttpStatus.INTERNAL_SERVER_ERROR);
}
LOGGER.info("Successfully flipped image id: {}", file.getId());
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(@RequestParam("image") MultipartFile file,
@RequestParam(value = "vertical") Boolean vertical,
@RequestParam(value = "horizontal") Boolean horizontal) {
if (file.getContentType() != null) {
LOGGER.warn("Wrong content type uploaded: {}", file.getContentType());
return new ResponseEntity<>("Wrong content type uploaded: " + file.getContentType());
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
if (flippedImage == null) {
return new ResponseEntity<>("Failed to flip image", HttpStatus.INTERNAL_SERVER_ERROR);
}
LOGGER.info("Successfully flipped image id: {}", file.getId());
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(@RequestParam("image") MultipartFile file,
@RequestParam(value = "vertical") Boolean vertical,
@RequestParam(value = "horizontal") Boolean horizontal) {
if (file.getContentType() != null) {
LOGGER.warn("Wrong content type uploaded: {}", file.getContentType());
return new ResponseEntity<>("Wrong content type uploaded: " + file.getContentType());
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
if (flippedImage == null) {
return new ResponseEntity<>("Failed to flip image", HttpStatus.INTERNAL_SERVER_ERROR);
}
LOGGER.info("Successfully flipped image id: {}", file.getId());
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(@RequestParam("image") MultipartFile file,
@RequestParam(value = "vertical") Boolean vertical,
@RequestParam(value = "horizontal") Boolean horizontal) {
if (file.getContentType() != null) {
LOGGER.warn("Wrong content type uploaded: {}", file.getContentType());
return new ResponseEntity<>("Wrong content type uploaded: " + file.getContentType());
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
if (flippedImage == null) {
return new ResponseEntity<>("Failed to flip image", HttpStatus.INTERNAL_SERVER_ERROR);
}
LOGGER.info("Successfully flipped image id: {}", file.getId());
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(@RequestParam("image") MultipartFile file,
@RequestParam(value = "vertical") Boolean vertical,
@RequestParam(value = "horizontal") Boolean horizontal) {
if (file.getContentType() != null) {
LOGGER.warn("Wrong content type uploaded: {}", file.getContentType());
return new ResponseEntity<>("Wrong content type uploaded: " + file.getContentType());
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
if (flippedImage == null) {
return new ResponseEntity<>("Failed to flip image", HttpStatus.INTERNAL_SERVER_ERROR);
}
LOGGER.info("Successfully flipped image id: {}", file.getId());
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
LOGGER.info("Successfully flipped image id: {}", file.getId()");
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(@RequestParam("image") MultipartFile file,
@RequestParam(value = "vertical") Boolean vertical,
@RequestParam(value = "horizontal") Boolean horizontal) {
if (file.getContentType() != null) {
LOGGER.warn("Wrong content type uploaded: {}", file.getContentType());
return new ResponseEntity<>("Wrong content type uploaded: " + file.getContentType());
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
if (flippedImage == null) {
return new ResponseEntity<>("Failed to flip image", HttpStatus.INTERNAL_SERVER_ERROR);
}
LOGGER.info("Successfully flipped image id: {}", file.getId());
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
LOGGER.info("Successfully flipped image id: {}", file.getId()");
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(@RequestParam("image") MultipartFile file,
@RequestParam(value = "vertical") Boolean vertical,
@RequestParam(value = "horizontal") Boolean horizontal) {
if (file.getContentType() != null) {
LOGGER.warn("Wrong content type uploaded: {}", file.getContentType());
return new ResponseEntity<>("Wrong content type uploaded: " + file.getContentType());
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
if (flippedImage == null) {
return new ResponseEntity<>("Failed to flip image", HttpStatus.INTERNAL_SERVER_ERROR);
}
LOGGER.info("Successfully flipped image id: {}", file.getId());
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
EVENT.addField("content.type", file.getContentType());
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("flip_vertical", vertical);
EVENT.addField("image_id", file.getId());
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
LOGGER.info("Receiving {} image to flip.", file.getContentType());
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("flip_vertical", vertical);
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_horizontal", horizontal);
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("flip_vertical", vertical);
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_horizontal", horizontal);
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("flip_vertical", vertical);
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_horizontal", horizontal);
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("flip_vertical", vertical);
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_horizontal", horizontal);
@A_Bangser @AgileTD #AgileTD
@PostMapping("flip")
public ResponseEntity flipImage(...) {
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_vertical", vertical);
EVENT.addField("flip_horizontal", horizontal);
...
LOGGER.info("Receiving {} image to flip.", file.getContentType());
byte[] flippedImage = imageService.flip(file, vertical, horizontal);
...
LOGGER.info("Successfully flipped image id: {}", file.getId());
EVENT.addField("action.success", "true");
return new ResponseEntity<>(flippedImage, headers, HttpStatus.OK);
}
EVENT.addField("action.success", "true");
EVENT.addField("content.type", file.getContentType());
EVENT.addField("action", "flip");
EVENT.addField("flip_vertical", vertical);
EVENT.addField("image_id", file.getId());
EVENT.addField("flip_horizontal", horizontal);
@A_Bangser @AgileTD #AgileTD
Multiple logs
A single event
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
CustomerID:234567VersionOfApp:2
RequestedUri:www.
@A_Bangser @AgileTD #AgileTD
➔
➔ no pre-aggregation
➔
➔ arbitrarily wide events
➔
➔
➔
➔
➔ static dashboards don’t work, it must be exploratory
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
https://www.needpix.com/photo/907639/images-leash-leash-polaroid-free-pictures-free-photos-free-images-royalty-free
@A_Bangser @AgileTD #AgileTD
➔
➔
➔
➔
➔
➔
➔
➔
➔
ByTwitter,CCBY4.0,https://commons.wikimedia.org/w/index.php?curid=80936515
@A_Bangser @AgileTD #AgileTD
➔
➔
➔ structured data
➔ arbitrarily wide events
➔ schema-less-ness
➔ high cardinality dimensions
➔ oriented around the lifecycle of the request
➔ batched up context
➔ static dashboards don’t work, it must be
exploratory
ByTwitter,CCBY4.0,https://commons.wikimedia.org/w/index.php?curid=80936515
@A_Bangser @AgileTD #AgileTD
➔ raw events
➔ no pre-aggregation
➔
➔
➔
➔
➔ oriented around the lifecycle of the request
➔ batched up context
➔ static dashboards don’t work, it must be
exploratory
ByTwitter,CCBY4.0,https://commons.wikimedia.org/w/index.php?curid=80936515
@A_Bangser @AgileTD #AgileTD
➔ raw events
➔ no pre-aggregation
➔ structured data
➔ arbitrarily wide events
➔ schema-less-ness
➔ high cardinality dimensions
➔
➔
➔
ByTwitter,CCBY4.0,https://commons.wikimedia.org/w/index.php?curid=80936515
@A_Bangser @AgileTD #AgileTD
➔
➔
➔
➔
➔
➔
➔
➔
➔
ByTwitter,CCBY4.0,https://commons.wikimedia.org/w/index.php?curid=80936515
@A_Bangser @AgileTD #AgileTD
QA
TWU
Political
Science Major
Data analysis for
investments
A desire to
learn how to
code
Automation
FTW!
An “analyst”
computer
A “DevOps”
friend
engaged me
in his work
onitorama
An infrastructure
project
Platform
Engineering @
Professional
scuba diver
A (slight)
obsession with
observability
@A_Bangser @AgileTD #AgileTD
@A_Bangser @AgileTD #AgileTD
➔ All of tech and product is now asking more interesting questions
➔ We are expecting more of our tooling
➔ We are building new awareness about our services and system
@A_Bangser @AgileTD #AgileTD
Feedback please
AgileTestingDays.com/Session-Feedback
Empowerment through Observability - Keynote

Contenu connexe

Similaire à Empowerment through Observability - Keynote

E2 appspresso hands on lab
E2 appspresso hands on labE2 appspresso hands on lab
E2 appspresso hands on lab
NAVER D2
 
E3 appspresso hands on lab
E3 appspresso hands on labE3 appspresso hands on lab
E3 appspresso hands on lab
NAVER D2
 

Similaire à Empowerment through Observability - Keynote (20)

Kakunin E2E framework showcase
Kakunin E2E framework showcaseKakunin E2E framework showcase
Kakunin E2E framework showcase
 
Yes, browsers can do that! Hybrid and future web meetup at Jayway
Yes, browsers can do that! Hybrid and future web meetup at JaywayYes, browsers can do that! Hybrid and future web meetup at Jayway
Yes, browsers can do that! Hybrid and future web meetup at Jayway
 
Introduction to Spring Boot.pdf
Introduction to Spring Boot.pdfIntroduction to Spring Boot.pdf
Introduction to Spring Boot.pdf
 
Client-side Transformations
Client-side TransformationsClient-side Transformations
Client-side Transformations
 
OPA: The Cloud Native Policy Engine
OPA: The Cloud Native Policy EngineOPA: The Cloud Native Policy Engine
OPA: The Cloud Native Policy Engine
 
Reactive programming with RxJS - Taiwan
Reactive programming with RxJS - TaiwanReactive programming with RxJS - Taiwan
Reactive programming with RxJS - Taiwan
 
Technology and Science News - ABC News
Technology and Science News - ABC NewsTechnology and Science News - ABC News
Technology and Science News - ABC News
 
Technology and Science News - ABC News
Technology and Science News - ABC NewsTechnology and Science News - ABC News
Technology and Science News - ABC News
 
Technology and Science News - ABC News
Technology and Science News - ABC NewsTechnology and Science News - ABC News
Technology and Science News - ABC News
 
jQuery Data Manipulate API - A source code dissecting journey
jQuery Data Manipulate API - A source code dissecting journeyjQuery Data Manipulate API - A source code dissecting journey
jQuery Data Manipulate API - A source code dissecting journey
 
Javascript in Plone
Javascript in PloneJavascript in Plone
Javascript in Plone
 
E2 appspresso hands on lab
E2 appspresso hands on labE2 appspresso hands on lab
E2 appspresso hands on lab
 
E3 appspresso hands on lab
E3 appspresso hands on labE3 appspresso hands on lab
E3 appspresso hands on lab
 
Technology and Science News - ABC News
Technology and Science News - ABC NewsTechnology and Science News - ABC News
Technology and Science News - ABC News
 
Technology and Science News - ABC News
Technology and Science News - ABC NewsTechnology and Science News - ABC News
Technology and Science News - ABC News
 
Building iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoBuilding iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" Domino
 
Technology and Science News - ABC News
Technology and Science News - ABC NewsTechnology and Science News - ABC News
Technology and Science News - ABC News
 
Firebase & SwiftUI Workshop
Firebase & SwiftUI WorkshopFirebase & SwiftUI Workshop
Firebase & SwiftUI Workshop
 
关于 Html5 那点事
关于 Html5 那点事关于 Html5 那点事
关于 Html5 那点事
 
Technology and Science News - ABC News
Technology and Science News - ABC NewsTechnology and Science News - ABC News
Technology and Science News - ABC News
 

Plus de Abigail Bangser

Plus de Abigail Bangser (12)

DevExForPlatformEngineers, introducing Kratix
DevExForPlatformEngineers, introducing KratixDevExForPlatformEngineers, introducing Kratix
DevExForPlatformEngineers, introducing Kratix
 
Building a great internal platform starts with the API
Building a great internal platform starts with the API Building a great internal platform starts with the API
Building a great internal platform starts with the API
 
Providing as-a-Service Across Multi-Cluster Kubernetes
Providing  				  as-a-Service Across Multi-Cluster KubernetesProviding  				  as-a-Service Across Multi-Cluster Kubernetes
Providing as-a-Service Across Multi-Cluster Kubernetes
 
Platforms aren't tools, they are experiences. And Kubernetes isn’t a platfor...
Platforms aren't tools, they are experiences.  And Kubernetes isn’t a platfor...Platforms aren't tools, they are experiences.  And Kubernetes isn’t a platfor...
Platforms aren't tools, they are experiences. And Kubernetes isn’t a platfor...
 
Flipping the script: How to take the first step towards internal developer pl...
Flipping the script: How to take the first step towards internal developer pl...Flipping the script: How to take the first step towards internal developer pl...
Flipping the script: How to take the first step towards internal developer pl...
 
Tutorial Becoming a Kubernetes Developer_ Writing Your First Operator
Tutorial Becoming a Kubernetes Developer_ Writing Your First OperatorTutorial Becoming a Kubernetes Developer_ Writing Your First Operator
Tutorial Becoming a Kubernetes Developer_ Writing Your First Operator
 
Demystifying observability
Demystifying observability Demystifying observability
Demystifying observability
 
2020 10-08 measuring-qualityinproduction
2020 10-08 measuring-qualityinproduction2020 10-08 measuring-qualityinproduction
2020 10-08 measuring-qualityinproduction
 
2020 06-03 cukenfest-bdd-and-sl_os
2020 06-03 cukenfest-bdd-and-sl_os2020 06-03 cukenfest-bdd-and-sl_os
2020 06-03 cukenfest-bdd-and-sl_os
 
2020 03-19 introducing-chaosengineering
2020 03-19 introducing-chaosengineering2020 03-19 introducing-chaosengineering
2020 03-19 introducing-chaosengineering
 
Observability - Experiencing the “why” behind the jargon (FlowCon 2019)
Observability - Experiencing the “why” behind the jargon (FlowCon 2019)Observability - Experiencing the “why” behind the jargon (FlowCon 2019)
Observability - Experiencing the “why” behind the jargon (FlowCon 2019)
 
2018-05-09_CRAFTConf_FirstStepsMovingToTheCloud
2018-05-09_CRAFTConf_FirstStepsMovingToTheCloud2018-05-09_CRAFTConf_FirstStepsMovingToTheCloud
2018-05-09_CRAFTConf_FirstStepsMovingToTheCloud
 

Dernier

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Dernier (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 

Empowerment through Observability - Keynote