Hi.

I'm Brendan.

Today, we're going to talk about Monitoring and Alerting in Kubernetes.

So Kubernetes itself actually comes with a large number of metrics available to you out-of-the-box, and that's great because it means you don't have to set up monitoring for your ports, for CPU, or memory, or network usage, or disk, all of these things are automatically taken from the containers that are running on the machines pushed into the Kubernetes metrics server.

From there, they can get pushed out to Cloud-based monitoring like Azure Monitor, or to an open-source monitoring solution like Prometheus.

So just by deploying your container into Kubernetes, you get access to a bunch of monitoring information that can be pretty useful for debugging what's going on.

But really for most applications, it's important to take it a step further.

Now, one way you can take it a step further is by adding a service mesh.

If you add a service mesh, well, then you're going to get things like HTTP latency, you're going to get an error codes.

Again, these can be pushed into Cloud-based monitoring solution or into Prometheus.

But really, in order to actually build good monitoring for your application, you're probably also going to need to add some things in code itself.

Now in this world, Prometheus is a great solution.

Prometheus is actually becoming the standard way of exposing metrics to the world.

It's easy to integrate Prometheus metrics obviously with Prometheus itself, but also with Cloud-based solutions like Azure Monitoring.

Now when you're using Prometheus, usually what you're going to do is, you're going to import the Prometheus libraries and then you're going to create a new metric that says, "How long did I spend processing a particular batch job?" So I'll say, new metric batch.

When you do this, that's going to expose a web interface so that Prometheus can come along and scrape that web interface, get the data that's custom to your solution, push it up into the monitoring solution of your choice.

So that's great, and that enables you to expose whatever arbitrary metrics make sense for your application.

Once you've done that, you hopefully have all of the metrics that you need in order to do good alerting.

There is actually a really big difference between the information you push out in terms of monitoring and the information that you push out in terms of alerting.

Because, of course, monitoring information is information that you take effectively on-demand.

So the only thing you really need to worry about with monitoring information is, do I have enough space? With a Cloud-based solution, that's not even really a problem.

Whereas with alerting, if you fire an alert, that wake somebody up, that sends a page, that sends an e-mail, and so you can't have too much alerting or else it just generates noise.

If you generate noise, then it's very difficult for your on-calls, your DRIs to know what they should pay attention to.

So the most important thing to think about when you're thinking about alerting is, we want to eliminate noise.

We can't have noise.

Every single alert that fires that you don't take an action on, that's a problem and it's a problem that should be fixed.

So in particular, when we're thinking about alerting in Kubernetes, you want to be alerting on what you care about which is, what's your customer experience? How is your customer experiencing your product? Usually, that's something like latency, and you're going to set some goal.

You're going to set an SLO or a service-level objective that says, "Hey, I think that at the 99th percentile, my latency should be less than 500 milliseconds." Now if you haven't seen notation like the 99th percentile before, that's talking about a distribution.

So if you have a distribution of latencies that your service provides for all of the requests at the 99th, that's going to be the value that you're going to be thinking about.

The reason that's important is because while measuring the average or the 50th percentile in the middle, is interesting, it can actually mask a lot of really bad problems.

Because if you're okay at the average but you're really slow one out of every 100 times, you're still providing one customer with a really bad customer experience, and over time, effectively the law of numbers says that every customer is going to have that bad experience.

So we focus both on the average, but more importantly, on the 99th percentile in order to really understand how our service is performing at scale.

So when you're identifying those alerts, think about the experience you want to deliver to your customer and then set alerts based on that experience.

So if the 99th percentile latency coming out of your service mesh ever exceeds 500 milliseconds, that's a good opportunity to fire a page off to, that's my best drawing of a cell phone going off, your DRIs cell phone so that they can then go into the monitoring system and figure out what's wrong.

That leads to the final part of monitoring and alerting in Kubernetes, which is visualization.

You need to take all of those metrics and put it into a great visualization tool and Grafana, for example, is a really fantastic visualization tool, that again, you can use with Prometheus, you can use with Azure monitoring.

That enables you to put all of those metrics together into whatever form of monitoring makes the most sense, maybe it's a dial or a graph, and that allows you to actually understand your data.

So it's not sufficient just to monitor the data, just to alert, is actually very important that you think about how do I put all those things together so that my on-calls can gain insights, and then eventually, put them together into tools.

So you're going to write command line tools that actually can automatically fix the problem for you, identify common causes, take action, and eventually build robotics, build agents that can call these tools for you and you never have to actually wake up a human in order to fix your application.

So that gives you a perspective about how you can start with the default metrics, add your own custom metrics, add alerting based on customer experience, add visualization and tools for mitigation to really deliver a reliable application on Kubernetes.


안녕하세요.

저는 Brendan입니다.

오늘은 Kubernetes의 모니터링 및 알림에 대해 이야기하겠습니다.

따라서 Kubernetes 자체에는 실제로 즉시 사용할 수있는 많은 수의 메트릭이 제공되며 이는 포트, CPU 또는 메모리 또는 네트워크 사용량에 대한 모니터링을 설정할 필요가 없음을 의미하기 때문에 좋습니다. 또는 디스크에서 이러한 모든 항목은 Kubernetes 메트릭 서버로 푸시 된 머신에서 실행중인 컨테이너에서 자동으로 가져옵니다.

여기에서 Azure Monitor와 같은 클라우드 기반 모니터링 또는 Prometheus와 같은 오픈 소스 모니터링 솔루션으로 푸시 될 수 있습니다.

따라서 컨테이너를 Kubernetes에 배포하는 것만으로 진행 상황을 디버깅하는 데 매우 유용한 모니터링 정보에 액세스 할 수 있습니다.

그러나 실제로 대부분의 응용 프로그램에서 한 단계 더 나아가는 것이 중요합니다.

이제 한 단계 더 나아갈 수있는 한 가지 방법은 서비스 메시를 추가하는 것입니다.

서비스 메시를 추가하면 HTTP 대기 시간과 같은 결과가 발생하고 오류 코드가 발생합니다.

다시 말하지만, 이들은 클라우드 기반 모니터링 솔루션 또는 Prometheus로 푸시 할 수 있습니다.

그러나 실제로 애플리케이션에 대한 좋은 모니터링을 실제로 구축하려면 코드 자체에 몇 가지를 추가해야 할 수도 있습니다.

이제이 세상에서 Prometheus는 훌륭한 솔루션입니다.

Prometheus는 실제로 세계에 메트릭을 노출하는 표준 방법이되고 있습니다.

Prometheus 메트릭은 분명히 Prometheus 자체뿐만 아니라 Azure Monitoring과 같은 클라우드 기반 솔루션과도 쉽게 통합 할 수 있습니다.

이제 Prometheus를 사용할 때 일반적으로 수행 할 작업은 Prometheus 라이브러리를 가져온 다음 "특정 작업을 처리하는 데 얼마나 오래 소비 했습니까?"라는 새 메트릭을 생성하는 것입니다. 일괄 작업? " 그래서 새로운 메트릭 배치라고 말씀 드리겠습니다.

이렇게하면 웹 인터페이스가 노출되어 Prometheus가 해당 웹 인터페이스를 스크래핑하고 솔루션에 맞춤화 된 데이터를 가져와 선택한 모니터링 솔루션으로 푸시 할 수 있습니다.

그래서 그것은 훌륭합니다. 그리고 그것은 당신이 당신의 애플리케이션에 맞는 임의의 메트릭을 노출 할 수있게 해줍니다.

이 작업을 마치면 좋은 경고를 수행하는 데 필요한 모든 메트릭을 갖기를 바랍니다.

모니터링 측면에서 푸시하는 정보와 경고 측면에서 푸시하는 정보 사이에는 실제로 큰 차이가 있습니다.

물론 모니터링 정보는 요청시 효과적으로 가져 오는 정보이기 때문입니다.

모니터링 정보에 대해 정말로 걱정해야 할 것은 공간이 충분합니까? 클라우드 기반 솔루션에서는 실제로 문제가되지 않습니다.

경고와는 달리 경고를 발동하면 누군가를 깨우고 페이지를 보내고 전자 메일을 보내므로 경고를 너무 많이 할 수 없거나 소음이 발생합니다.

소음이 발생하면 통화 중, DRI가주의해야 할 사항을 파악하기가 매우 어렵습니다.

따라서 경고에 대해 생각할 때 가장 중요한 것은 소음을 제거하는 것입니다.

우리는 소음을 낼 수 없습니다.

조치를 취하지 않고 발생하는 모든 경고는 문제이며 수정해야하는 문제입니다.

특히 Kubernetes의 알림에 대해 생각할 때 관심있는 것이 무엇인지, 고객 경험이 무엇인지 알림을 받고 싶습니까? 고객이 제품을 어떻게 경험하고 있습니까? 일반적으로 대기 시간과 같은 것이며 몇 가지 목표를 설정합니다.

"저는 99 번째 백분위 수에서 지연 시간이 500 밀리 초 미만이어야한다고 생각합니다."라는 SLO 또는 서비스 수준 목표를 설정할 것입니다. 이전에 99 번째 백분위 수와 같은 표기법을 본 적이 없다면 그것은 분포에 관한 것입니다.

따라서 서비스가 99 일에 모든 요청에 ​​대해 제공하는 지연 시간 분포가있는 경우 이것이 고려할 가치가 될 것입니다.

중요한 이유는 중간에있는 평균 또는 50 번째 백분위 수를 측정하는 동안 흥미롭지 만 실제로 많은 나쁜 문제를 가릴 수 있기 때문입니다.

평균적으로 괜찮지 만 100 번 중 한 번은 정말 느리다면 여전히 한 고객에게 정말 나쁜 고객 경험을 제공하고 있으며 시간이 지남에 따라 사실상 숫자의 법칙은 모든 고객이 나쁜 경험을 할 것입니다.

따라서 우리는 서비스가 대규모로 수행되는 방식을 실제로 이해하기 위해 평균에 초점을 두지 만 더 중요한 것은 99 번째 백분위 수에 초점을 맞 춥니 다.

따라서 이러한 경고를 식별 할 때 고객에게 제공 할 경험을 생각한 다음 해당 경험을 기반으로 경고를 설정하십시오.

따라서 서비스 메시에서 나오는 99 번째 백분위 수 대기 시간이 500 밀리 초를 초과하는 경우 페이지를 시작할 수있는 좋은 기회입니다. 이것이 바로 휴대 전화가 꺼지는 모습을 가장 잘 그린 그림입니다. DRI 휴대 전화가 모니터링 시스템과 무엇이 잘못되었는지 파악합니다.

이는 시각화 인 Kubernetes에서 모니터링 및 경고의 마지막 부분으로 이어집니다.

이러한 모든 메트릭을 가져 와서 훌륭한 시각화 도구에 넣어야합니다.

이를 통해 이러한 모든 측정 항목을 가장 합리적인 모니터링 형식 (예 : 다이얼 또는 그래프)에 통합하여 실제로 데이터를 이해할 수 있습니다.

따라서 데이터를 모니터링하는 것만으로는 충분하지 않습니다. 단지 경고 만하는 것이 아닙니다. 실제로 이러한 모든 것을 통합하여 통화중인 사람들이 통찰력을 얻고 결국에는이를 도구에 통합하는 방법에 대해 생각하는 것이 매우 중요합니다.

따라서 실제로 자동으로 문제를 해결하고, 일반적인 원인을 식별하고, 조치를 취하고, 결국 로봇 공학을 구축하고, 이러한 도구를 호출 할 수있는 에이전트를 구축하고 실제로 깨울 필요가없는 명령 줄 도구를 작성하게됩니다. 응용 프로그램을 수정하기 위해 인간.

따라서 기본 측정 항목으로 시작하고, 고유 한 맞춤 측정 항목을 추가하고, 고객 경험을 기반으로 경고를 추가하고, 완화를위한 시각화 및 도구를 추가하여 Kubernetes에서 신뢰할 수있는 애플리케이션을 실제로 제공하는 방법에 대한 관점을 제공합니다.

  • No labels
Write a comment…