{"componentChunkName":"component---src-templates-docs-tsx","path":"/tutorials/pixie-101/profiler/","result":{"data":{"site":{"siteMetadata":{"title":"Pixie Docs","docsLocation":"https://github.com/pixie-io/pixie-docs"}},"mdx":{"fields":{"id":"9511d5a0-5e74-5165-9383-0fd475c23475","title":"Continuous Application Profiling","slug":"/tutorials/pixie-101/profiler"},"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Continuous Application Profiling\",\n  \"metaTitle\": \"Tutorials | Pixie 101 | Continuous Application Profiling\",\n  \"metaDescription\": \"Learn how to use Pixie's continuous profiler.\",\n  \"order\": 6,\n  \"redirect_from\": [\"/tutorials/profiler/\"]\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar YouTube = makeShortcode(\"YouTube\");\nvar CodeTabs = makeShortcode(\"CodeTabs\");\nvar CodeRenderer = makeShortcode(\"CodeRenderer\");\nvar CloudLink = makeShortcode(\"CloudLink\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This tutorial will demonstrate how to use Pixie's Always-On Profiling feature to investigate a spike in CPU utilization, using a flamegraph to identify a performance issue within the application code.\"), mdx(\"p\", null, \"Pixie's continuous profiler currently supports Go, C++, Rust and Java. For best results, run Java applications with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"-XX:+PreserveFramePointer\"), \". Other language support coming soon.\"), mdx(YouTube, {\n    youTubeId: \"Zr-s3EvAey8\",\n    mdxType: \"YouTube\"\n  }), mdx(\"h2\", null, \"Prerequisites\"), mdx(\"p\", null, \"You will need a Kubernetes cluster with Pixie installed. If you do not have a cluster, you can create a minikube cluster and install Pixie using one of our \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/installing-pixie/install-guides/\"\n  }), \"install guides\"), \".\"), mdx(\"h3\", null, \"Java Support\"), mdx(\"p\", null, \"Support for Java profiling is included by default in Pixie.\"), mdx(\"p\", null, \"For best results, run Java applications with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"-XX:+PreserveFramePointer\"), \".\"), mdx(\"h2\", null, \"Setup\"), mdx(\"p\", null, \"We are going to be working with GCP's \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://github.com/GoogleCloudPlatform/microservices-demo\"\n  }), \"Online Boutique\"), \", a microservices demo application for a web-based e-commerce app where users can browse and purchase items.\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Install Pixie's modified version of Online Boutique on your cluster using Pixie's CLI. If you already have \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"px-online-boutique\"), \" running on your cluster, please re-deploy, as recent modifications have been made to this demo.\")), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeRenderer, {\n    language: \"bash\",\n    title: \"\",\n    mdxType: \"CodeRenderer\"\n  }, mdx(\"pre\", {\n    parentName: \"div\"\n  }, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"px demo deploy px-online-boutique\\n\"))))), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Check to see that the pods are ready and available:\")), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeRenderer, {\n    language: \"bash\",\n    title: \"\",\n    mdxType: \"CodeRenderer\"\n  }, mdx(\"pre\", {\n    parentName: \"div\"\n  }, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"kubectl get pods -n px-online-boutique\\n\"))))), mdx(\"p\", null, \"You should see something similar to the following:\"), mdx(\"div\", {\n    \"className\": \"image-l\"\n  }, mdx(\"svg\", {\n    title: \"Online Boutique deployed on a cluster.\",\n    src: \"profiler/online-boutique.png\"\n  })), mdx(\"h2\", null, \"Monitoring the Demo Application\"), mdx(\"p\", null, \"We are going to use Pixie to check the health of a specific pod.\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Open Pixie's \", mdx(CloudLink, {\n    url: \"/\",\n    mdxType: \"CloudLink\"\n  }, \"Live UI\"))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Select your cluster and the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"px/namespaces\"), \" script from the drop-down menus in the top bar.\"))), mdx(\"p\", null, \"The \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"px/namespaces\"), \" script lists the namespaces on the current cluster with their pod and service counts. You should see both Pixie's namespace (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"pl\"), \") as well as the Online Boutique namespace (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"px-online-boutique\"), \").\"), mdx(\"div\", {\n    \"className\": \"image-xl\"\n  }, mdx(\"svg\", {\n    title: \"Namespaces listed in the px/namespaces live view.\",\n    src: \"profiler/namespaces.png\"\n  })), mdx(\"ol\", {\n    \"start\": 3\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Click on \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"px-online-boutique\"), \" in the list of namespaces to be taken to the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"px/namespace\"), \" script.\")), mdx(\"p\", null, \"This script lists the services and pods within the selected namespace.\"), mdx(\"div\", {\n    \"className\": \"image-xl\"\n  }, mdx(\"svg\", {\n    title: \"Pods listed in the px/namespace live view.\",\n    src: \"profiler/namespace.png\"\n  })), mdx(\"ol\", {\n    \"start\": 4\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Scroll down to the \\\"Pod List\\\" table and click on the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"px-online-boutique/poductcatalogservice-...\"), \" pod.\")), mdx(\"p\", null, \"Selecting the pod name takes us to the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"px/pod\"), \" script which shows an overview of the high level application metrics (latency, error, throughput) and resource utilization for the selected pod. This pod's metrics look normal based on our knowledge of the app.\"), mdx(\"div\", {\n    \"className\": \"image-xl\"\n  }, mdx(\"svg\", {\n    title: \"High level app metrics + resource usage in the px/pod live view.\",\n    src: \"profiler/pod.png\"\n  })), mdx(\"h3\", null, \"Switching on a New Feature\"), mdx(\"p\", null, \"Our friends on the Product Catalog team have built a feature to dynamically reload the product catalog. Let's help them turn on this new feature.\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Turn on Dynamic Catalog Reloading by sending a USR1 signal to the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"productcatalogservice\"), \" pod:\")), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeRenderer, {\n    language: \"bash\",\n    title: \"\",\n    mdxType: \"CodeRenderer\"\n  }, mdx(\"pre\", {\n    parentName: \"div\"\n  }, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"kubectl exec -n px-online-boutique \\\\\\n    $(kubectl get pods -n px-online-boutique -l app=productcatalogservice -o jsonpath='{.items[0].metadata.name}') \\\\\\n    -c server -- kill -USR1 1\\n\"))))), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"After waiting a minute or two for these changes to take effect, switch back to the Live UI and re-run the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"px/pod\"), \" script using the RUN button in the top right.\")), mdx(\"p\", null, \"This chart shows some concerning information. Our HTTP throughput has plummeted from ~140 rps to  ~10 rps (\\\"HTTP Requests\\\" graph), the request latency has spiked to 16s (\\\"HTTP Latency\\\" graph), and our CPU usage has spiked from ~8% to ~18% (\\\"CPU Usage\\\" graph).\"), mdx(\"div\", {\n    \"className\": \"image-xl\"\n  }, mdx(\"svg\", {\n    title: \"px/pod live view showing HTTP throughput drop, latency spike and CPU utilization spike.\",\n    src: \"profiler/pod-bug.png\"\n  })), mdx(\"p\", null, \"Note: if your graph does not show similar changes to those shown above, try waiting another minute and re-running the script.\"), mdx(\"h2\", null, \"Reading the Flamegraph\"), mdx(\"p\", null, \"Let's take a look at the flamegraph for this pod and see if it can help us identify the root cause of this performance issue.\"), mdx(\"p\", null, \"Scroll down to the bottom of the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"px/pod\"), \" page, to take a look at the \\\"Pod Performance Flamegraph\\\".\"), mdx(\"div\", {\n    \"className\": \"image-xl\"\n  }, mdx(\"svg\", {\n    title: \"Flamegraph at bottom of px/pod live view.\",\n    src: \"profiler/flamegraph-bug.png\"\n  })), mdx(\"p\", null, \"Every ~10ms, the Pixie profiler samples the current stack trace on each CPU. The stack trace includes the function that was executing at the time of the sample, along with the ancestor functions that were called to get to this point in the code.\"), mdx(\"p\", null, \"The collected samples are aggregated across a larger 30 second window that includes thousands of stack traces. These stack traces are then grouped by their common ancestors. At any level, the wider the stack, the more often that function appeared in the stack traces. Wider stack traces are typically of more interest as it indicates a significant amount of the application time being spent in that function.\"), mdx(\"h3\", null, \"Colors\"), mdx(\"p\", null, \"The background color of each box in the flamegraph adds an extra dimension of data:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Dark blue bars indicate K8s metadata info (node, namespace, pod, container).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Light blue bars represent user space application code.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Green bars represent kernel code.\")), mdx(\"div\", {\n    \"className\": \"image-xl\"\n  }, mdx(\"svg\", {\n    title: \"Flamegraph colors provide extra context.\",\n    src: \"profiler/flamegraph-key.png\"\n  })), mdx(\"h3\", null, \"Navigation\"), mdx(\"p\", null, \"You can interact with Pixie's flamegraph widget in the following ways:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Scroll to zoom.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Click + drag to pan the view around (works for minimap & main view).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"ctrl\"), \" (Linux, Windows) / \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"cmd\"), \" (Mac) + click to center the view on the selected element. Click on the bottom most bar to reset the zoom.\")), mdx(\"div\", {\n    \"className\": \"image-xl\"\n  }, mdx(\"svg\", {\n    title: \"Zoom and pan to interact with the Flamegraph widget.\",\n    src: \"profiler/flamegraph-navigation.gif\"\n  })), mdx(\"h3\", null, \"Focus on Wider Stacks\"), mdx(\"p\", null, \"Starting at the base of the application code (light blue), hover over the widest bar to read the function names and percentage of time spent in each function.\"), mdx(\"p\", null, \"Working our way up the stack, we see that the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ProductHandler()\"), \" calls \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GetProduct()\"), \", which calls \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"parseCatalog()\"), \", which in turn calls \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"readCatalogFile()\"), \", which make calls to a JSON reader.\"), mdx(\"p\", null, \"It certainly seems odd that we should be reading the catalog's json file every time we get a product.\"), mdx(\"div\", {\n    \"className\": \"image-xl\"\n  }, mdx(\"svg\", {\n    title: \"These functions take up a significant amount of CPU resource.\",\n    src: \"profiler/flamegraph-bug.png\"\n  })), mdx(\"p\", null, \"Note: if your flamegraph does not show a very wide stack that includes the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"parseCatalog()\"), \" function, try waiting another minute and re-running the script.\"), mdx(\"h2\", null, \"Examining the Application Code\"), mdx(\"p\", null, \"Let's take a look at the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"productcatalog\"), \" \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://github.com/GoogleCloudPlatform/microservices-demo/blob/master/src/productcatalogservice/server.go\"\n  }), \"application code\"), \". \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"parseCatalog()\"), \" only calls \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"readCatalogFile()\"), \" if the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"reloadCatalog\"), \" flag is set or if the catalog is empty.\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeRenderer, {\n    language: \"golang\",\n    title: \"\",\n    mdxType: \"CodeRenderer\"\n  }, mdx(\"pre\", {\n    parentName: \"div\"\n  }, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-golang\"\n  }), \"func parseCatalog() []*pb.Product {\\n if reloadCatalog || len(cat.Products) == 0 {\\n  err := readCatalogFile(&cat)\\n  if err != nil {\\n   return []*pb.Product{}\\n  }\\n }\\n return cat.Products\\n}\\n\"))))), mdx(\"p\", null, \"Looking elsewhere in the code, we see that the  \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"reloadCatalog\"), \" flag was set when we sent a USR1 signal to enable the catalog reloading feature.\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeRenderer, {\n    language: \"golang\",\n    title: \"\",\n    mdxType: \"CodeRenderer\"\n  }, mdx(\"pre\", {\n    parentName: \"div\"\n  }, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-golang\"\n  }), \"sigs := make(chan os.Signal, 1)\\n signal.Notify(sigs, syscall.SIGUSR1, syscall.SIGUSR2)\\n go func() {\\n  for {\\n   sig := <-sigs\\n   log.Printf(\\\"Received signal: %s\\\", sig)\\n   if sig == syscall.SIGUSR1 {\\n    reloadCatalog = true\\n    log.Infof(\\\"Enable catalog reloading\\\")\\n   } else {\\n    reloadCatalog = false\\n    log.Infof(\\\"Disable catalog reloading\\\")\\n   }\\n  }\\n }()\\n\"))))), mdx(\"p\", null, \"The developers of this code have created a buggy feature - the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"reloadCatalog\"), \" flag is not getting set to false after a reload.  Instead, the catalog is read from file every single time the catalog is accessed.\"), mdx(\"h2\", null, \"Fixing the Bug\"), mdx(\"p\", null, \"To turn off the buggy \\\"dynamic catalog reloading\\\" feature, send a USR2 signal:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeRenderer, {\n    language: \"bash\",\n    title: \"\",\n    mdxType: \"CodeRenderer\"\n  }, mdx(\"pre\", {\n    parentName: \"div\"\n  }, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-bash\"\n  }), \"kubectl exec -n px-online-boutique \\\\\\n    $(kubectl get pods -n px-online-boutique -l app=productcatalogservice -o jsonpath='{.items[0].metadata.name}') \\\\\\n    -c server -- kill -USR2 1\\n\"))))), mdx(\"h3\", null, \"New Flamegraph\"), mdx(\"p\", null, \"Change the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"start_time\"), \" script argument (next to the RUN button) to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"-1m\"), \" and re-run the script.\"), mdx(\"p\", null, \"You should see CPU usage drop and HTTP request throughput increase. Scroll down to the flamegraph at the bottom of the page and you should see that considerably less time is spent in the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"parseCatalog()\"), \" function. This \\\"flame\\\" on the graph is now much more narrow.\"), mdx(\"div\", {\n    \"className\": \"image-xxl\"\n  }, mdx(\"svg\", {\n    title: \"Flamegraph after fixing the application code bug.\",\n    src: \"profiler/flamegraph.png\"\n  })), mdx(\"h2\", null, \"References\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"http://www.brendangregg.com/flamegraphs.html\"\n  }), \"Flame Graphs - Brendan Gregg\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"https://queue.acm.org/detail.cfm?id=2927301\"\n  }), \"The Flame Graph - Brendan Gregg\"), \", ACMQueue\")));\n}\n;\nMDXContent.isMDXComponent = true;","parent":{"__typename":"File","relativePath":"en/04-tutorials/01-pixie-101/06-profiler.md"},"frontmatter":{"metaTitle":"Tutorials | Pixie 101 | Continuous Application Profiling","metaDescription":"Learn how to use Pixie's continuous profiler."},"headings":[{"value":"Prerequisites","depth":2},{"value":"Java Support","depth":3},{"value":"Setup","depth":2},{"value":"Monitoring the Demo Application","depth":2},{"value":"Switching on a New Feature","depth":3},{"value":"Reading the Flamegraph","depth":2},{"value":"Colors","depth":3},{"value":"Navigation","depth":3},{"value":"Focus on Wider Stacks","depth":3},{"value":"Examining the Application Code","depth":2},{"value":"Fixing the Bug","depth":2},{"value":"New Flamegraph","depth":3},{"value":"References","depth":2}]},"allMdx":{"edges":[{"node":{"fields":{"slug":"/about-pixie","title":"About Pixie","level":1,"id":"250033c7-6bfc-5ed2-8855-bfae9d3d41b8","lang":"en"}}},{"node":{"fields":{"slug":"/about-pixie/what-is-pixie","title":"Pixie Overview","level":2,"id":"3d7111da-bb7e-58a6-acdb-af0bee4488fb","lang":"en"}}},{"node":{"fields":{"slug":"/about-pixie/data-sources","title":"Data Sources","level":2,"id":"ceef1554-49d1-5b10-a3fa-6dc84d90bf20","lang":"en"}}},{"node":{"fields":{"slug":"/about-pixie/pixie-ebpf","title":"How Pixie uses eBPF","level":2,"id":"5e9e1b8e-3181-52e0-a3d5-335a3367cb14","lang":"en"}}},{"node":{"fields":{"slug":"/about-pixie/roadmap","title":"Roadmap","level":2,"id":"15dcc722-a1a6-58e9-9c20-8d6f8d3762df","lang":"en"}}},{"node":{"fields":{"slug":"/about-pixie/faq","title":"FAQ","level":2,"id":"af60166c-104d-576d-8018-94d9907813f9","lang":"en"}}},{"node":{"fields":{"slug":"/about-pixie/troubleshooting","title":"Troubleshooting","level":2,"id":"739e15de-0d00-526a-80ed-51a13c2b6f5d","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie","title":"Installing Pixie","level":1,"id":"77fd1ffe-859b-5b56-9745-5c371bd47e6d","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/requirements","title":"Requirements","level":2,"id":"d3d8a31a-c579-5792-8e40-3076ae89d15e","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/setting-up-k8s","title":"Setting up Kubernetes (optional)","level":2,"id":"1b2c0456-0c8e-59f3-9859-73e664d277bc","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/setting-up-k8s/minikube-setup","title":"Minikube","level":3,"id":"8e37881c-b785-585f-9bf4-271d71297044","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/setting-up-k8s/eks-setup","title":"EKS","level":3,"id":"f9e46ba9-b438-5226-94c2-8c580311efb9","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/setting-up-k8s/gke-setup","title":"GKE","level":3,"id":"89fcc4ea-771a-5bdc-ae96-75fa080b2402","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/setting-up-k8s/aks-setup","title":"AKS","level":3,"id":"61a9efea-c52d-5b4a-ad01-7758292a1e6b","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/setting-up-k8s/k0s-setup","title":"k0s","level":3,"id":"db610fd7-59f7-50ee-b962-2395ded4213d","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/setting-up-k8s/other-environments","title":"Additional environments","level":3,"id":"456ab527-bcef-5f0b-9099-92524b0e1a60","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-guides","title":"Install Guides","level":2,"id":"f94cfa88-6add-5e46-86f8-7c89ad77886a","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-guides/hosted-pixie","title":"Hosted Pixie","level":3,"id":"e12f9502-f00b-5290-aabe-6952f1017919","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-guides/hosted-pixie/cosmic-cloud","title":"Cosmic Cloud","level":4,"id":"24145104-fa42-53e2-9cd4-207bc191da39","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-guides/hosted-pixie/new-relic-cloud","title":"New Relic Cloud","level":4,"id":"604f4893-db3e-5b9a-86a0-d487039b117b","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-guides/self-hosted-pixie","title":"Self-Hosted Pixie","level":3,"id":"60ea09cc-b8c7-52d5-b3f6-da39d78b8014","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-guides/self-hosted-pixie/airgap-pixie","title":"Air Gapped Pixie","level":4,"id":"2e215d50-3936-58fa-bc7e-7b9d56205705","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-guides/self-hosted-pixie/production-readiness","title":"Production Readiness","level":4,"id":"4bba186e-a4e9-52f9-a556-3367c6beb3cf","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-schemes","title":"Install Schemes (optional)","level":2,"id":"89aa8fa5-88de-57fa-ac9b-9d9cb4680190","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-schemes/cli","title":"CLI (Recommended)","level":3,"id":"c180d499-3bbe-5b18-aca2-fad92744f82b","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-schemes/yaml","title":"YAML","level":3,"id":"a07677ae-cdce-581a-a639-b2c6eb63ca2a","lang":"en"}}},{"node":{"fields":{"slug":"/installing-pixie/install-schemes/helm","title":"Helm","level":3,"id":"198fca51-0df6-5a68-82bc-c33777f6c452","lang":"en"}}},{"node":{"fields":{"slug":"/using-pixie","title":"Using Pixie","level":1,"id":"ee5c081e-d25d-50ac-b534-b26089cb7fa9","lang":"en"}}},{"node":{"fields":{"slug":"/using-pixie/using-live-ui","title":"Using the Live UI","level":2,"id":"f6358be5-5e72-5d5a-b802-37b7a1832a6e","lang":"en"}}},{"node":{"fields":{"slug":"/using-pixie/using-cli","title":"Using the CLI","level":2,"id":"68df7159-bf22-5cfe-8a81-1376fc49fe9e","lang":"en"}}},{"node":{"fields":{"slug":"/using-pixie/api-quick-start","title":"Using the API","level":2,"id":"1dc6c347-8d39-5536-8bdb-6c8b9a3c9cab","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials","title":"Tutorials","level":1,"id":"cca4356e-0565-5dcf-b2e0-80aa8b361993","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pixie-101","title":"Pixie 101","level":2,"id":"33c94a0b-7e15-50de-9749-c25f7cef4839","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pixie-101/network-monitoring","title":"Network Monitoring","level":3,"id":"07ab17ed-445b-56bb-a95a-03c2c4643606","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pixie-101/infra-health","title":"Infra Health","level":3,"id":"7d14f277-00f4-53bf-b4a0-8deb32615831","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pixie-101/service-performance","title":"Service Performance","level":3,"id":"b9843b3b-9061-5df8-bb5b-20a96ab7516b","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pixie-101/database-query-profiling","title":"Database Query Profiling","level":3,"id":"15b9c87a-215a-554b-9a09-3c4013e68e01","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pixie-101/request-tracing","title":"Request Tracing","level":3,"id":"e940076b-02be-5f2d-b951-6fa2fc5e430d","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pixie-101/profiler","title":"Continuous Application Profiling","level":3,"id":"9511d5a0-5e74-5165-9383-0fd475c23475","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pixie-101/kafka-monitoring","title":"Kafka Monitoring","level":3,"id":"2c806ace-110b-5395-a5b4-51d19005e151","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts","title":"PxL Scripts","level":2,"id":"78bb61b8-0d24-5d1a-9c05-acc2e750e2a7","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts/write-pxl-scripts","title":"How to Write a PxL Script","level":3,"id":"8676a620-9a59-5bd0-9b53-55e63802b395","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts/write-pxl-scripts/custom-pxl-scripts-1","title":"Tutorial #1: Write your first PxL script","level":4,"id":"5caa0251-970d-57e2-9c04-ff6c61fbdca5","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts/write-pxl-scripts/custom-pxl-scripts-2","title":"Tutorial #2: Finish your first PxL Script","level":4,"id":"303904f6-8f98-5e43-8679-9d19bf0a0945","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts/write-pxl-scripts/custom-pxl-scripts-3","title":"Tutorial #3: Write your first Vis Spec","level":4,"id":"895dc65f-6f9e-5a8c-8d4e-368116926e91","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts/write-pxl-scripts/custom-pxl-scripts-4","title":"Tutorial #4: Add a Timeseries chart to your Vis Spec","level":4,"id":"2b04efb0-129d-5df3-9a4c-e61d87190077","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts/write-pxl-scripts/custom-pxl-scripts-5","title":"Tutorial #5: Add a Graph to your Vis Spec","level":4,"id":"9d89ab55-95d1-5a65-b88b-ed7e69f76eec","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts/script-dev-environment","title":"Running the Script Dev Environment","level":3,"id":"a6251ead-6888-55c8-8ff2-b71355e973ea","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts/script-of-the-week","title":"Script of the Week","level":3,"id":"6200e2ac-1b2d-5f58-8b02-d525503ca923","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts/script-of-the-week/script-of-the-week-1","title":"SOTW #1: Network Flow Graph","level":4,"id":"eb9f1a63-f0bd-52ef-a481-4d239616af30","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/pxl-scripts/script-of-the-week/script-of-the-week-2","title":"SOTW #2: Detect redundant DNS requests caused by dnsConfig ndots setting","level":4,"id":"22e7fd79-7750-5f13-a21d-3d540a2c5c36","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/integrations","title":"Integrations and Alerts","level":2,"id":"fe423431-b224-5d0c-a88c-1f098066ccdf","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/integrations/slackbot-alert","title":"Slack Alerts using the Pixie API","level":3,"id":"1dc3e45e-b259-5d77-9bf3-3d4314cdb2eb","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/integrations/grafana","title":"Grafana Pixie Plugin","level":3,"id":"85eccf7d-3ec9-5511-ab5b-fa3e71725aa8","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/integrations/otel","title":"Export OpenTelemetry Data","level":3,"id":"4bab7cd9-681d-56d1-af53-de68b5b60dad","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/integrations/export-plugin","title":"Exporting PxL Scripts to a Plugin","level":3,"id":"eb57fb2e-c348-542c-98f1-655c88d3348b","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/custom-data","title":"Collecting Custom Data","level":2,"id":"ca5b9e99-5f1c-5ed4-93be-ebcf31699399","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/custom-data/distributed-bpftrace-deployment","title":"Distributed bpftrace Deployment","level":3,"id":"f1e1cc7a-5581-5676-8d9a-85bb14c52ce3","lang":"en"}}},{"node":{"fields":{"slug":"/tutorials/custom-data/dynamic-go-logging","title":"Dynamic Logging In Go (Alpha)","level":3,"id":"b1fa96bb-c032-5c32-bbd3-9d1dc00cb3e3","lang":"en"}}},{"node":{"fields":{"slug":"/reference","title":"Reference","level":1,"id":"972efda6-5ba8-5c1f-b409-e1961e60a697","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin","title":"Admin","level":2,"id":"e8b2b842-2589-5519-894a-95851f06ed1b","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/authentication","title":"Authentication","level":3,"id":"023db48c-efc1-5556-8428-f1b25a98b853","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/debug-info","title":"Debug Info","level":3,"id":"e334c6f5-0f9b-59b4-bd49-d79574c7a6d0","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/deploy-options","title":"Deploy Options","level":3,"id":"332629cf-447a-523d-97d5-9ecf5635adfb","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/environment-configs","title":"Environment-Specific Configurations","level":3,"id":"646bc1aa-e534-50a0-adf9-df13592f40da","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/cluster-id","title":"Find a Cluster ID","level":3,"id":"a8f5bac8-c7b4-5985-abcd-7ebb6a897673","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/api-keys","title":"Managing API Keys","level":3,"id":"589063fb-21f2-5877-aed8-b3673fcaecc5","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/deploy-keys","title":"Managing Deploy Keys","level":3,"id":"d1ce062f-9be2-5b3e-898a-08590163e618","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/tuning-mem-usage","title":"Tuning Memory Usage","level":3,"id":"5d943cc7-00cd-55fd-b465-e60961155dea","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/uninstall","title":"Uninstalling Pixie","level":3,"id":"95a9ed92-2b71-5f32-9618-398ffbe1aeca","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/updating-pixie","title":"Updating Pixie","level":3,"id":"02982707-1c80-570f-b226-aa46207feace","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/user-mgmt","title":"User Management & Sharing","level":3,"id":"3cc5d4b2-6779-5a7b-a1a1-690511981cf5","lang":"en"}}},{"node":{"fields":{"slug":"/reference/admin/verifying-images","title":"Verifying Images","level":3,"id":"4b741c31-3593-516e-b388-dec7288b2fd7","lang":"en"}}},{"node":{"fields":{"slug":"/reference/architecture","title":"Architecture","level":2,"id":"44dca647-e9a1-578f-b4a4-fdc40eeb46b2","lang":"en"}}},{"node":{"fields":{"slug":"/reference/api","title":"API","level":2,"id":"a144a102-4502-574a-9734-6d5463354591","lang":"en"}}},{"node":{"fields":{"slug":"/reference/api/overview","title":"Overview","level":3,"id":"546c5a9f-b1d7-5286-8f7d-47e2fd3c6535","lang":"en"}}},{"node":{"fields":{"slug":"/reference/api/go","title":"Go","level":3,"id":"7194578f-2940-5669-b681-7a7aa29378ce","lang":"en"}}},{"node":{"fields":{"slug":"/reference/plugins","title":"Plugins","level":2,"id":"be267788-7808-5c2f-a868-289b64556b88","lang":"en"}}},{"node":{"fields":{"slug":"/reference/plugins/plugin-system","title":"Pixie Plugin System","level":3,"id":"b687eff3-307a-53c9-bf8b-a3247293a0f9","lang":"en"}}},{"node":{"fields":{"slug":"/reference/plugins/grafana","title":"Grafana Datasource Plugin","level":3,"id":"ae420e44-f30e-5686-be06-61b609233a11","lang":"en"}}},{"node":{"fields":{"slug":"/reference/pxl","title":"PxL","level":2,"id":"e07ac997-01a5-5a7c-9689-52a6cf481c7a","lang":"en"}}}]}},"pageContext":{"id":"9511d5a0-5e74-5165-9383-0fd475c23475","lang":"en","languages":[{"id":"de","label":"Deutsch"}],"globalUrlTree":[{"lang":"en","slug":"/about-pixie/what-is-pixie"},{"lang":"en","slug":"/about-pixie/pixie-ebpf"},{"lang":"en","slug":"/about-pixie/data-sources"},{"lang":"en","slug":"/about-pixie/faq"},{"lang":"en","slug":"/about-pixie/roadmap"},{"lang":"en","slug":"/about-pixie"},{"lang":"en","slug":"/about-pixie/troubleshooting"},{"lang":"en","slug":"/installing-pixie"},{"lang":"en","slug":"/installing-pixie/requirements"},{"lang":"en","slug":"/using-pixie"},{"lang":"en","slug":"/using-pixie/api-quick-start"},{"lang":"en","slug":"/tutorials"},{"lang":"en","slug":"/reference"},{"lang":"en","slug":"/using-pixie/using-cli"},{"lang":"en","slug":"/using-pixie/using-live-ui"},{"lang":"en","slug":"/installing-pixie/setting-up-k8s/minikube-setup"},{"lang":"en","slug":"/installing-pixie/setting-up-k8s/eks-setup"},{"lang":"en","slug":"/installing-pixie/setting-up-k8s/gke-setup"},{"lang":"en","slug":"/installing-pixie/setting-up-k8s/other-environments"},{"lang":"en","slug":"/reference/architecture"},{"lang":"en","slug":"/installing-pixie/setting-up-k8s/k0s-setup"},{"lang":"en","slug":"/installing-pixie/setting-up-k8s/aks-setup"},{"lang":"en","slug":"/installing-pixie/setting-up-k8s"},{"lang":"en","slug":"/installing-pixie/install-guides"},{"lang":"en","slug":"/installing-pixie/install-schemes/cli"},{"lang":"en","slug":"/installing-pixie/install-schemes/helm"},{"lang":"en","slug":"/installing-pixie/install-schemes/yaml"},{"lang":"en","slug":"/installing-pixie/install-schemes"},{"lang":"en","slug":"/tutorials/pixie-101/network-monitoring"},{"lang":"en","slug":"/tutorials/pixie-101/infra-health"},{"lang":"en","slug":"/tutorials/pixie-101/service-performance"},{"lang":"en","slug":"/tutorials/pixie-101/request-tracing"},{"lang":"en","slug":"/tutorials/pixie-101/database-query-profiling"},{"lang":"en","slug":"/tutorials/pixie-101/kafka-monitoring"},{"lang":"en","slug":"/tutorials/pixie-101"},{"lang":"en","slug":"/tutorials/pxl-scripts"},{"lang":"en","slug":"/tutorials/pxl-scripts/script-dev-environment"},{"lang":"en","slug":"/tutorials/pixie-101/profiler"},{"lang":"en","slug":"/tutorials/integrations/slackbot-alert"},{"lang":"en","slug":"/tutorials/integrations"},{"lang":"en","slug":"/tutorials/integrations/export-plugin"},{"lang":"en","slug":"/tutorials/custom-data"},{"lang":"en","slug":"/tutorials/custom-data/dynamic-go-logging"},{"lang":"en","slug":"/reference/admin/authentication"},{"lang":"en","slug":"/reference/admin/debug-info"},{"lang":"en","slug":"/reference/admin/cluster-id"},{"lang":"en","slug":"/tutorials/custom-data/distributed-bpftrace-deployment"},{"lang":"en","slug":"/tutorials/integrations/grafana"},{"lang":"en","slug":"/tutorials/integrations/otel"},{"lang":"en","slug":"/reference/admin/environment-configs"},{"lang":"en","slug":"/reference/admin/api-keys"},{"lang":"en","slug":"/reference/admin/deploy-keys"},{"lang":"en","slug":"/reference/admin/deploy-options"},{"lang":"en","slug":"/reference/admin/verifying-images"},{"lang":"en","slug":"/reference/api/overview"},{"lang":"en","slug":"/reference/admin/tuning-mem-usage"},{"lang":"en","slug":"/reference/api/go"},{"lang":"en","slug":"/reference/admin/user-mgmt"},{"lang":"en","slug":"/reference/admin"},{"lang":"en","slug":"/reference/admin/updating-pixie"},{"lang":"en","slug":"/reference/api"},{"lang":"en","slug":"/reference/plugins/grafana"},{"lang":"en","slug":"/reference/plugins/plugin-system"},{"lang":"en","slug":"/reference/admin/uninstall"},{"lang":"en","slug":"/installing-pixie/install-guides/hosted-pixie/cosmic-cloud"},{"lang":"en","slug":"/reference/plugins"},{"lang":"en","slug":"/reference/pxl"},{"lang":"en","slug":"/installing-pixie/install-guides/hosted-pixie/new-relic-cloud"},{"lang":"en","slug":"/installing-pixie/install-guides/hosted-pixie"},{"lang":"en","slug":"/tutorials/pxl-scripts/write-pxl-scripts/custom-pxl-scripts-3"},{"lang":"en","slug":"/tutorials/pxl-scripts/write-pxl-scripts/custom-pxl-scripts-1"},{"lang":"en","slug":"/tutorials/pxl-scripts/write-pxl-scripts/custom-pxl-scripts-4"},{"lang":"en","slug":"/tutorials/pxl-scripts/write-pxl-scripts/custom-pxl-scripts-2"},{"lang":"en","slug":"/tutorials/pxl-scripts/write-pxl-scripts/custom-pxl-scripts-5"},{"lang":"en","slug":"/installing-pixie/install-guides/self-hosted-pixie/production-readiness"},{"lang":"en","slug":"/installing-pixie/install-guides/self-hosted-pixie/airgap-pixie"},{"lang":"en","slug":"/installing-pixie/install-guides/self-hosted-pixie"},{"lang":"en","slug":"/tutorials/pxl-scripts/write-pxl-scripts"},{"lang":"en","slug":"/tutorials/pxl-scripts/script-of-the-week/script-of-the-week-1"},{"lang":"en","slug":"/tutorials/pxl-scripts/script-of-the-week"},{"lang":"en","slug":"/tutorials/pxl-scripts/script-of-the-week/script-of-the-week-2"}],"availableLanguages":[{"slug":"/tutorials/pixie-101/profiler","lang":"en"}],"availableClouds":[{"name":"Cosmic Cloud","baseUrl":"https://work.getcosmic.ai","cloudAddr":"getcosmic.ai"},{"name":"New Relic Cloud","baseUrl":"https://work.withpixie.ai","cloudAddr":"withpixie.ai"}]}}}