How healthy is your Dockerized application?

Container technology isn't new. Linux Containers (LXC), which combine kernel control groups (cgroups) to isolate a process's resources and support isolated namespaces, have been around for at least 10 years. Until recently, however, the technology was primarily used by highly technical IT professionals who weren't truly using LXC because other virtualization technologies made operating-system-level kernel containers redundant. Then Docker came along several years ago and turned things around. It took a technical capability of the operating system and made it work for developers, finally delivering on the promise of application portability.

Portability sells

This was Docker's revolution. Developers jumped on this new opportunity, use skyrocketed, and the use of containerization exploded. Whereas applications once were contained in a single address space on a limited set of application servers, they now run as a set of microservices in a cluster of containers, with the network as the application fabric through which the microservices communicate to drive business results. But migrating to this kind of application architecture presents three challenges:

Orchestration: Deploying your application or service as a cluster of containers

Security: Having your app distributed as many microservices where each one runs in its own container

Monitoring: Ensuring that all your microservices are running well to keep providing the services you've promised your customers

These challenges have spawned a world of new solutions to support orchestration, security, and monitoring at an unprecedented scale.

Here's how to meet the challenge of monitoring a Docker-centric environment to ensure that workloads remain healthy and at peak performance. I'll also cover the five layers of monitoring you should engage in and the top vital signs to monitor at each layer to ensure your application is running well.

The challenge

One challenge is the frequency at which microservices are updated. As a small, distinct piece of functionality, a microservice has a short lifecycle; it may undergo frequent updates and be replaced each time. The notion of applying an application patch has been replaced by deploying new versions of the relevant microservices. The many orchestration, clustering, and native cloud-deployment services that have sprung up facilitate this rapid rate of change. But as your services scale up, your monitoring needs to ramp up to support them. You must constantly listen to the heartbeat of your application's environment to give you an accurate picture of how it's operating.

Another challenge is managing multiple versions of the same microservice. The process of replacing a microservice is not atomic. Your production environment may be running several instances of a microservice at any time to provide load balancing and scalability. When introducing a new version, you automatically phase in new instances, reroute network traffic to them, and phase out the old instances. That means there are periods of time in which both the old and new versions are running concurrently, so your monitoring system must be able to differentiate between them. If a failure is detected, you need to know if it's because of faults in your newly introduced revision or a bug in the old version you're replacing.

Different approaches to monitoring

In one approach to monitoring, the orchestration layer updates the monitoring system about changes. For example, you may need to change the management layers of your monitoring system to include a new component. But this approach doesn't adequately scale to cope with the high rate of change you get in a clustered system of containers. A better approach is automatic discovery. You need your monitoring system to be agnostic, to change, and to adjust automatically to new microservices you introduce. This adaptive approach is much better suited to monitoring a frequently changing cluster of containers.

Five levels to monitor

To adequately gauge the health of highly distributed clustered microservices running in Docker containers, you need to monitor your application on each of the five levels listed below. Here are the vital signs you need to monitor to detect health conditions at each level.

1. The cluster manager

The cluster manager manages the lifecycle for a cluster of containers as one execution machine. Docker Swarm is a native Docker option, but there are others, including Kubernetes.

Vital signs to look for:

Is the cluster manager up and running and in a healthy state?

Are all nodes connected as expected?

2. The cluster nodes

These are the compute units or virtual servers managed by the cluster manager.

The top metrics include:

CPU utilization—None of the nodes should be using more than 90 percent of the CPU

Free memory—All nodes should have at least 10 percent of free memory

Swap space used—Nodes should use no more than 90 percent of the allocated swap space

File disk space free—Make sure that free disk space stays above five percent

While the exact numbers shown above can vary, it's important to monitor these metrics and define the right alert levels in your implementations.

3. The Docker daemon

Ensure that the daemon running on each node is healthy and properly managing the container running on the node. To determine this, make sure the Docker daemon is up and running at all times.

4. The Docker container

Since your microservice runs inside a Docker container, you need to ensure that the container is always up and running.

The top metrics here include:

CPU utilization—Watch for actual CPU utilization rates above 95 percent of the allocated CPU

Memory utilization—Create an alert for when memory utilization exceeds 90 percent to avoid maxing out allocated memory

Network I/O—Monitor the network I/O for abnormal network activity

5. The microservice itself

The microservice is the workload that runs within the container. This one is a bit tricky because each proprietary microservice will have its own monitoring interfaces and measures of health. However, if your container is running code within a common framework, that framework may provide standard ways to gauge whether or not your microservice is running well. For example, you can scan the Docker file to automatically detect common services, such as Node.js, Postgres, or RabbitMQ that are specified within the file. You can then monitor a standard characteristic of that service.

For example, if you know that Postgres is running in your container, you can feed it a stream of test data to make sure that it's working correctly. While you can't automatically monitor every piece of proprietary code, you can automatically monitor the common frameworks in which it runs. In this case, your vital signs will depend on the framework you're monitoring. These may range from reading simple metrics using a single API call to sending more elaborate SQL statements.

By using an adaptive approach to monitoring Docker, you can automatically manage the rapidly changing set of containers that make up your Dockerized application. As long as your monitoring system can automatically detect new containers, you can get an accurate picture of health at each of the five levels in the Docker infrastructure hierarchy.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容