Instantly share code, notes, and snippets.

@akvanhar akvanhar/opencensus-honeycomb Secret
Created Oct 17, 2018

What would you like to do?
OpenCensus Honeycomb Exporter example app
package main
import (
func main() {
exporter := honeycomb.NewExporter("YOUR-HONEYCOMB-WRITE-KEY", "YOUR-DATASET-NAME")
defer exporter.Close()
br := bufio.NewReader(os.Stdin)
sampleFraction := 0.5
trace.ApplyConfig(trace.Config{DefaultSampler: trace.ProbabilitySampler(sampleFraction)})
// If you use the Open Census Probability Sampler, be sure to pass that sampleFraction to the exporter
// so that Honeycomb can pick it up and make sure we handle your sampling properly.
// Note: The Probability Sampler uses a fraction, whereas Honeycomb uses an integer, which is the inverse of that fraction.
exporter.SampleFraction = sampleFraction
// repl is the read, evaluate, print, loop
for {
if err := readEvaluateProcess(br); err != nil {
if err == io.EOF {
func readEvaluateProcess(br *bufio.Reader) error {
ctx, span := trace.StartSpan(context.Background(), "repl")
defer span.End()
fmt.Printf("> ")
line, err := readLine(ctx, br)
if err != nil {
return err
out, err := processLine(ctx, line)
if err != nil {
return err
fmt.Printf("< %s\n\n", out)
return nil
func readLine(ctx context.Context, br *bufio.Reader) ([]byte, error) {
ctx, span := trace.StartSpan(ctx, "readLine")
defer span.End()
line, _, err := br.ReadLine()
if err != nil {
return nil, err
return line, err
// processLine takes in a line of text and
// transforms it. Currently it just capitalizes it.
func processLine(ctx context.Context, in []byte) (out []byte, err error) {
_, span := trace.StartSpan(ctx, "processLine")
defer span.End()
return bytes.ToUpper(in), nil
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment