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.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末含滴,一起剝皮案震驚了整個濱河市印叁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖茫因,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡挚赊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門济瓢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荠割,“玉大人,你說我怎么就攤上這事旺矾∶镳校” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵箕宙,是天一觀的道長嚎朽。 經(jīng)常有香客問我,道長柬帕,這世上最難降的妖魔是什么哟忍? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任狡门,我火速辦了婚禮,結(jié)果婚禮上锅很,老公的妹妹穿的比我還像新娘其馏。我一直安慰自己,他們只是感情好爆安,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布叛复。 她就那樣靜靜地躺著,像睡著了一般扔仓。 火紅的嫁衣襯著肌膚如雪褐奥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天当辐,我揣著相機與錄音抖僵,去河邊找鬼鲤看。 笑死缘揪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的义桂。 我是一名探鬼主播找筝,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼慷吊!你這毒婦竟也來了袖裕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤溉瓶,失蹤者是張志新(化名)和其女友劉穎急鳄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堰酿,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡疾宏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了触创。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坎藐。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖哼绑,靈堂內(nèi)的尸體忽然破棺而出岩馍,到底是詐尸還是另有隱情,我是刑警寧澤抖韩,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布蛀恩,位于F島的核電站,受9級特大地震影響茂浮,放射性物質(zhì)發(fā)生泄漏赦肋。R本人自食惡果不足惜块攒,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佃乘。 院中可真熱鬧囱井,春花似錦、人聲如沸趣避。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽程帕。三九已至住练,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愁拭,已是汗流浹背讲逛。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岭埠,地道東北人盏混。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像惜论,于是被迫代替她去往敵國和親许赃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容