急急急!!!船用分散控制系统统DCC20发生控制闭锁怎么办?

  .窗外的瓢泼大雨打在摇曳的小树上,小树艰难的挺着腰,一如我这个无依无靠的外乡人,怀揣着对儿研所的期望,等着ICU医生告知儿子的病情。 如果时间倒回到儿子出生前,将是多么美好。我和老公结束了4年的异地恋,还着2500/月的房贷,挣着3500/月的薪水,从农村来二线城市的我们,也算混的可以,那时对孩子的期待就是健康,做个对社会有用的人,预产期到了,但没有临产的迹象,现在想来,一阵心酸,可能儿子知道他一来世上就要受罪,所以选择迟来吧!5.8 经过8个小时的努力,我的宝贝终于没太折腾自己的妈妈,安静的躺在产床上了,虚弱的我无力去抱抱他,等过了一会孩子很小声的哭了,但嘴里吐了一堆沫沫,脸色似乎没有刚生下来红润,助产士还在缝我撕裂的伤口,护士就抱他出去给医生看了,这一别,等我再次看到他,已经是22天后了……
主帖获得的天涯分:0
楼主发言:571次 发图: | 更多
  第二天老公兴冲冲回来了,说我们的这个可以手术,手术医生很淡定,做了手术就没事了!真是让人兴奋的消息啊!然后开始筹钱全力准备手术了,现在想来,当时真是心硬啊,我的娃出生第四天就气管内插管全麻在右侧肩胛下划了10厘米长的刀口做了食管端端吻合手术,那是多大的手术啊!孩子坚强,挺过来了,我真的要好好感谢上苍,让他过了手术关!当时手术的医生说:你孩子是3b,孩子出生体重7.1斤,这些都是有利条件,手术很成功!当时真是以为一劳永逸了,以为孩子就经历那一次痛苦,现在看来,那只是孩子开始受罪的开始……  
  我月子期间,老公回来汇报我孩子的情况,比如说他脚很有劲,爱盯着他的胃管看,撒尿浇好高,爱让他爸爸摸他的小手,肚子没有刚开始胀了,嘴里泡泡少了……总之,状况一直不错!术后10天,复查造影,有漏!!意味着可能会有一堆后遗症,怎么办?事情已经发生了,只有祈祷能少一点并发症吧!孩子的漏慢慢长好了,开始从胃管打奶了,想想好心疼,出生后第十八天,才吃到第一口奶,还是从胃管打进去的,我一直在幻想,老天怎么没让我难产死了,只要换孩子健康,老公也会负责的把他拉扯大,可惜这只是幻想,多少次梦里都梦见食管,胃管,记不清具体的梦,但醒来都觉得很安心,想来应该是孩子没事了,可以放心吃奶,大口吃肉  
  第二十二天,孩子终于出了重症监护室,虽然有点肺炎,但床位紧张,可以安排出院了。此时的我,身体已略有恢复,父母也不再叮嘱我月子禁忌,终于可以抱着我的宝贝了!!那真是很神奇的感觉,一个小生命那么信赖,那么安详的躺在我的臂弯里,感觉多么生硬的心都可以被融化,好幸福啊!尽管那个时候的宝贝仍旧带着胃管,仍旧没法从嘴里吃奶,还要抱着拍嗝,但我都无所畏惧!孩子生下来已经受了大罪,再不能有个软弱的母亲没法照顾他了!  
  看的好心疼孩子的  
  加油!好辛苦
  这么小的宝宝真受罪,宝宝现在好点了吗?  
  加油!一切都会好起来的  
  心疼呀,好难过,为母则刚。加油。  
  加油!一切都会好起来的!  
  看了好难过哦  
  下午被接连不断的情况打击,唉!  
  有时候,内心的软弱没法给父母说,也不能给老公说,免得他们操心,也不能老给盆友们说,免得跟祥林嫂一样。  
  孩子带胃管期间喉咙老呼呼做响,也不能带他去外面透透气,偶尔他还会恶心,他老用自己的两只小手去蹭自己的小脸蛋,想把胃管抓下来,所以给他戴了一双小手套,而且不敢平睡,每次看他侧睡着,抱着自己的两只小手,那么信赖,安详的睡在自己身边,真是能触动内心最柔软的地方。术后一个月,该复查食道造影了,每天都期待,不要狭窄!!!唉,还是那句,人生不如意事,十之八九,造影的结果很不理想,最细内径0.4厘米,孩子将面临食管扩张,而且可能不是一次或者两次,孩子用无辜的眼神看着我们,然后又被我们抱回家,当时很犹豫,孩子刚经历了手术关,体重出月了才长了一斤,是要现在扩张还是过段时间,在当地扩还是去北京或者上海扩,扩的话还得攒攒钱,就这样犹犹豫豫中,孩子喉咙呼呼声是越来越大,头顶的囟门随着吸气深深的凹下去,然后去找手术的医生经他同意给孩子取了胃管,看着孩子一下子轻松好多,终于可以带出去晒晒太阳,心里着实轻松许多,现在想想,当时还是无知,那怎么说也是生命通道啊!  
  加油楼主!宝宝会好好的!  
  孩子取胃管时,医生说有些人选择发现狭窄就扩张,有些人选择有症状了扩张,就这样,我们夫妻优柔寡断的个性错过了扩张最好的时间。孩子取了胃管吃奶量一直不多,基本就是30毫升/2--3小时,但没引起我们的警惕,每天,我都记着宝贝的吃奶量,时间,大便的次数,但是,小家伙的奶量一直不多,没几天,有了小咳嗽,嘴里有小泡泡,跑去医院一拍胸片,支气管炎,如此,我的宝贝开始反复不停的住院,家里的花开了,没法给他看,每天因为扎针,抽血,被护士拉来拽去,病房吵闹,小孩休息也不佳.宝贝第60天是在病房过的,当时爸妈来看他,宝贝第一次对着大人不停的笑,而且咿咿呀呀,比起现在,那真是宝贝状态不错的一段时间,婆婆之前还曾不停抱怨,自孩子开始咿咿呀呀,她也开始很心疼他了  
  支气管治疗还是比较有效,出院回家小孩的精神一直不错,就是吃奶量一直不多,这期间有幸加了食道闭锁家长交流群,感谢群主,还有里面好多坚强,上进的家长,在我最无助时给我好多经验和鼓励,因为群里说扩张越早越好,我们选择了在当地手术医院给孩子在X线透视下介入扩张,现在对这个决定,真是肠子悔青了,因为我们轻率的决定,对手术医生自吹自擂的谈话太过信任,把孩子推到危险的境地,也被迫促成了这次儿研所之行  
  半个月前开始,宝贝出现呛咳,这是食管狭窄的表现,得扩了,当时,宝贝咿咿呀呀,天真无邪,被我们抱着交给第一次手术的新生儿外科主任,满怀期待他经过食管扩张能够顺畅的吃奶,唉!命运接连不断打击我苦命的宝宝,儿子被全麻半个小时后,手术医生冲出来喊:小孩这胃管下不进去,奇怪?!去拿个厚包被给他!之前隐约听造影师喊:别插了,都是气体!现在想想,我们可真是懦弱的父母,当时应该把小孩从手术室夺出来!  
  扩张失败了,小孩也被禁食了,当时全麻后肺炎也加重了,还开始发烧,嘴里不停吐泡沫,从嘴里擦出来鲜红的血丝,我觉得自己一直克制的悲伤再也控制不住,全然不顾同病房还有别的病友,抱着儿子在那痛哭失声,我觉得自己从来没有那么无助,那么痛苦,但是,我不能倒下,孩子还得靠我们啊!擦干眼泪想办法吧!  
  小孩的状况自在当地扩张失败后急转直下,我们开始急切的筹划来儿研所了,前面小孩花费了将近5万块,还没有报销,首先,得筹点钱才敢来北京啊,而且大医院没有床位,我们也不敢贸然带着宝贝前来,毕竟小孩肺炎重,禁食,全静脉营养已经一周了。经过四天的准备,我们终于凑足了4万块钱,和食道闭锁家长群里儿研所一位主任取得了联系,为了省钱,我们买了高铁票,踏上了去北京的希望之旅  
  宝妈坚持住,宝贝加油,一切会好的。  
  看哭了 加油宝宝 加油宝妈 当妈了 才理解孩子生病时候的那种揪心  
  儿研所的这位主任非常热心,看了儿子的造影片,他说这个可以扩张!只是小孩肺炎重,全静脉营养已经快10天了,先到ICU把肺炎稳定一下就可以扩张了!真是个让人安慰的好消息,儿子在高铁上也没闹腾,下了出租车经过门诊就被抱进ICU了,交了两万押金,唉!生病真不敢生大病啊!老百姓真是不敢生这么重的病,等安顿好孩子也晚上了,外面灯火阑珊,哥哥带我们在外面买了爬爬垫,晚上我们就睡在医院的门诊楼了,这样既省钱也离孩子近一点,几个月来,我第一次睡的如此踏实,也实在太累了,五点多冻醒来,发现医院的空调好凉啊!  
  到了儿研所第二天,儿子床头胸片说除了肺炎,心脏有点移位,这什么情况啊?唉!忐忑,下午,搞扩张的孔主任给儿子安排了扩张手术,扩张很成功,可是又发现新的问题,食管下段积液,类似脓,胃管下不到胃里,儿子又带着气管插管回ICU了。心脏彩超到是没事,我和老公被ICU大夫一会一个电话,一颗心七上八下,感觉操碎了心却对小孩的痛苦无能为力  
  好心疼,宝宝加油,妈妈加油!
  周末两天儿研所医生是不答疑的,我和老公,哥哥每天在ICU外面转悠,想得到点小孩的情况,但是没有任何消息,不过在ICU,没消息就是好消息。终于等到了周一,一查账,已经花了两万七了,一咬牙交了5000.老公说,希望我们借的这四万块够花了,早晨增强CT说心脏后面有比心脏大的囊腔,里面是积气,而半个月前的造影没这个东西啊!儿研所医生对此有很多怀疑,预约了明早的造影,希望孩子明天的造影是他们预期比较好的一种吧!老天保佑吧  
  老天,保佑我的宝贝吧!我们夫妻从来都与人为善,都那么遵守社会公德,别再折腾他了,让我的宝贝健健康康的活下来吧!期待明天的检查结果是对他有利的,最好的结果!  
  @小囡妈咪
15:39:00  看的好心疼孩子的   —————————————————  现在看到孩子,除了心疼就是心疼  
  @smile娜W
15:50:00  好心疼,宝宝加油。宝妈加油  —————————————————  谢谢你,希望孩子感受得到大家的祝福  
  @小猪薇薇
16:57:00  这么小的宝宝真受罪,宝宝现在好点了吗?   —————————————————  我后面还有写,现在的状况连儿研所医生也很感意外,期待明天的检查能有利于宝贝  
  @topchao2350
17:22:00  加油!一切都会好起来的   —————————————————  谢谢你,希望我的孩子感受得到大家的祝福  
  @大爷好粗鲁
17:32:00  心疼呀,好难过,为母则刚。加油。   —————————————————  对,我之前是个很软弱的人,像你说的,为母则刚,不坚强没办法  
  @ivylin7681
17:42:00  加油!一切都会好起来的!   —————————————————  谢谢你的祝福  
  @微风吹裙裙
20:15:00  加油楼主!宝宝会好好的!   —————————————————  谢谢对我儿子的祝福  
  宝贝加油啊
  @刀刀殿下
20:56:00  祈祷你的孩子快快好起来,看到你的孩子因为没有吃到初乳,我泪如雨下,我的孩子三个半月,因为出生黄疸值高转儿童医院照灯去了,也没有吃到初乳,没有什么比孩子的健康更重要了,一定要坚强!   —————————————————  我是为了宝贝才逼迫自己坚强的,在孩子最需要我们的时候,父母不能倒下,只是有时候看到孩子的痛苦我们大人无能为力,还有看病难,看病贵,真是让人沧桑不少,这就是生活吧!  
  @小丸子妈妈2012
21:00:00  宝妈坚持住,宝贝加油,一切会好的。   —————————————————  好的,谢谢你  
  @笨笨柒柒
21:09:00  看哭了 加油宝宝 加油宝妈 当妈了 才理解孩子生病时候的那种揪心   —————————————————  谢谢你,希望给孩子带来好运  
21:27:00  好心疼,宝宝加油,妈妈加油!  —————————————————  嗯!希望给宝贝带来好运  
  @zhangyu
21:46:00  宝贝加油啊  —————————————————  谢谢你对我儿子的祝福  
  宝贝加油,一定会康复的。,  
  @侯彤彤的老妈
22:07:00  宝贝加油,一定会康复的。,   —————————————————  谢谢你,希望宝贝感受得到这个世界的温暖  
  祝福,宝宝一定可以平安健康的  
  当了妈之后心里最柔软的和最坚强的部分,一下子被激发出来了。我儿子身上被蚊子叮个包,我都心疼的不得了,更别说这么大的病了,希望可爱的小宝贝尽快好起来,为你祈祷!  
  @surehui
22:13:00  祝福,宝宝一定可以平安健康的   —————————————————  谢谢你!我现在唯有心存感恩,希望能给孩子带来好运  
  宝宝加油,妈妈坚强,祝福  
  祝福宝宝!
  @丽丽怪
22:20:00  当了妈之后心里最柔软的和最坚强的部分,一下子被激发出来了。我儿子身上被蚊子叮个包,我都心疼的不得了,更别说这么大的病了,希望可爱的小宝贝尽快好起来,为你祈祷!   —————————————————  谢谢宝妈,希望我儿子感受得到,希望明天有好消息  
  @伊莹然
22:28:00  宝宝加油,妈妈坚强,祝福   —————————————————  谢谢宝妈  
  太明白这心情了,前几天我儿子喉咙发炎吃不下多少东西难受我都受不了了哭,恨不得替他承受甚至十倍的痛苦,希望你宝宝也早日康复~  
  @angleboy123雅雅
22:36:00  太明白这心情了,前几天我儿子喉咙发炎吃不下多少东西难受我都受不了了哭,恨不得替他承受甚至十倍的痛苦,希望你宝宝也早日康复~   —————————————————  我也恨不得让我来承受,我的孩子正开始咿咿呀呀,而且他特别爱笑,有两个小酒窝,现在被折腾的都不笑了  
  为楼主宝宝祈福。  
  加油楼主 一定会好的  
  加油楼主,这个病能治好的。后遗症虽说有一点,可能会有些食物吞咽困难。但是孩子能生存着,这就是最好的事情了。这个病现在治愈率可以有80%以上了,儿研所又是顶级的儿科,你也不要太担心了。费用这个问题是最没有办法的,见过很多家长因为后续费用不足,选择了放弃,真的太可惜了。。。希望你坚持下去,风雨之后是彩虹。  另外我记得这个食道闭锁,貌似上海新华医院做得更多一些。如果方便,建议可以先咨询一下,选择最合适的治疗方案。
  祝福宝宝 快点好起来。天下父母心阿   
  祝福孩子快点好起来,楼主也要挺住啊。  
  @jinzhiyun2010
14:19:00  .窗外的瓢泼大雨打在摇曳的小树上,小树艰难的挺着腰,一如我这个无依无靠的外乡人,怀揣着对儿研所的期望,等着ICU医生告知儿子的病情。 如果时间倒回到儿子出生前,将是多么美好。我和老公结束了4年的异地恋,还着2500/月的房贷,挣着3500/月的薪水,从农村来二线城市的我们,也算混的可以,那时对孩子的期待就是健康,做个对社会有用的人,预产期到了,但没有临产的迹象,  —————————————————  加油  
  @huangye988
22:59:00  为楼主宝宝祈福。   —————————————————  谢谢你  
  @妾不可一日无君
01:48:00  加油楼主 一定会好的   —————————————————  好的,谢谢你  
  @minmin0777
02:13:00  加油楼主,这个病能治好的。后遗症虽说有一点,可能会有些食物吞咽困难。但是孩子能生存着,这就是最好的事情了。这个病现在治愈率可以有80%以上了,儿研所又是顶级的儿科,你也不要太担心了。费用这个问题是最没有办法的,见过很多家长因为后续费用不足,选择了放弃,真的太可惜了。。。希望你坚持下去,风雨之后是彩虹。   另外我记得这个食道闭锁,貌似上海新华医院做得更多一些。如果方便,建议可以先咨询一下,选择最合适的治疗方案。  —————————————————  谢谢您的建议。我们了解了这个手术就儿研所李龙和新华医院王俊最权威,我们当初第一次的吻合手术是在当地医院做的,现在面临一堆意料之外的问题,我们会继续努力的,资金暂时就亲戚朋友跟前借点,后面就找工会,民政部门,也不知有没有作用,总之,想尽办法让孩子有尊严的活下来,我们来儿研所,就是希望孩子有个好的生活质量  
  @蚩魂丶烈焰红妆
02:16:00  祝福宝宝 快点好起来。天下父母心阿   —————————————————  养儿方知父母恩。我平时也是个乖巧孝顺的女儿,但我没有能力让父母享我的福,如今,他们年老体弱,还要操心和接济我的小家庭,我就祈祷他们身体好一点,老的慢一点,等我慢慢回报!  
  @我是shujing
04:53:00  祝福孩子快点好起来,楼主也要挺住啊。   —————————————————  恩,谢谢你的祝福!相信有这么多好心人祝福,孩子会感受到  
  @guiyingyiyu
09:00:00  @jinzhiyun2010 楼主
14:19:00   .窗外的瓢泼大雨打在摇曳的小树上,小树艰难的挺着腰,一如我这个无依无靠的外乡人,怀揣着对儿研所的期望,等着ICU医生告知儿子的病情。 如果时间倒回到儿子出生前,将是多么美好。我和老公结束了4年的异地恋,还着2500/月的房贷,挣着3500/月的薪水,从农村来二线城市的我们,也算混的可以,那时对孩子的期待就是健康,做个对社会有用的人,预产期到了,但没有临产的迹象,   —————————————————  加油   —————————————————  嗯  
  祝福楼主!祝福楼主宝贝早日康复!健康平安快乐!  
  加油,宝妈要坚强,挺住。祝福宝宝快点好起来
  虽然听了楼主的消息非常心疼,不过这个时候,坚强是最重要的,你可以这样想,孩子虽然因为弱小让大人看上去非常心疼,但是,其实孩子越小,对疼痛越不敏感的;  相信儿研所的医生吧(是北京儿研所吗?)无论怎么筹钱也好,楼主一定要记得,大病不去地方医院,手术不在地方医院。别说地方医院了,就算是北京城那么多三甲医院,真能给孩子治病的也就是北京儿童医院和儿研所两家,我真是深有体会的。  现在,医生说怎么办就怎么办吧,医生说的话楼主没有听明白的一定要弄明白。医生都忙,没功夫说细节,楼主一定要问好注意事项。楼主夫妇千万不要再优柔寡断了。
  希望宝宝赶快好起来!  
  看到出生的孩子要遭罪,真心疼,楼主有希望就要坚持啊,你们坚持的精神也会感染到宝宝,钱不够了,天涯上很多好心人大家都会能帮一下就帮一下的。
  孩子一定会好起来的!为他祈福!!!  
  宝贝加油!宝妈也要坚强!为母则刚!宝宝一定能好起来的!祝福所有的宝宝都能健康快乐!
  @提拉小妖精
12:29:00  祝福楼主!祝福楼主宝贝早日康复!健康平安快乐!   —————————————————  谢谢您  
  @雯女的粉
13:16:00  加油,宝妈要坚强,挺住。祝福宝宝快点好起来  —————————————————  谢谢您  
  祝福宝宝  
  宝妈辛苦了,祝愿你的宝贝早日康复  
  真心祝愿宝宝!  
  @提拉小妖精
12:29:00  祝福楼主!祝福楼主宝贝早日康复!健康平安快乐!   —————————————————  谢谢您  
  @雯女的粉
13:16:00  加油,宝妈要坚强,挺住。祝福宝宝快点好起来  —————————————————  嗯,现在是关键时刻,必须的  
  @tynepiuhg332
14:52:00  虽然听了楼主的消息非常心疼,不过这个时候,坚强是最重要的,你可以这样想,孩子虽然因为弱小让大人看上去非常心疼,但是,其实孩子越小,对疼痛越不敏感的;   相信儿研所的医生吧(是北京儿研所吗?)无论怎么筹钱也好,楼主一定要记得,大病不去地方医院,手术不在地方医院。别说地方医院了,就算是北京城那么多三甲医院,真能给孩子治病的也就是北京儿童医院和儿研所两家,我真是深有体会的。   现在,医生说怎么办就怎么办吧,医生说的话楼主没有听明白的一定要弄明白。医生都忙,没功夫说细节,楼主一定要问好注意事项。楼主夫妇千万不要再优柔寡断了。   —————————————————  您说的非常对!大病不在地方治,大手术不在地方做!我们算是领教了惨痛的教训,为了刚开始不成功的手术,现在落得后患无穷的境地,我们就在首都儿科研究所,现在等李龙主任的会诊意见。国家医疗保障体系不健全,医疗改革的失败,都是患者来承担,儿研所到处都是愁云密布的家长,昨天见到一位痛失爱子的母亲哭晕到住院部大厅,让我们的心情不由得沉重。庆幸,就算债台高筑,孩子还在,还有全国最优质的医疗资源在整合服务,悲伤,不知孩子下一步的治疗效果如何,愤恨,为了当地不成熟的手术水平,我的孩子反复被医疗创伤,迷茫,无助……  
  @我大手牵小手
23:51:00  真心祝愿宝宝!   —————————————————  谢谢您,好人一生平安  
  @念念不忘1122
22:30:00  宝妈辛苦了,祝愿你的宝贝早日康复   —————————————————  谢谢对宝贝的祝福  
  @黑色的2014年7月
21:56:00  宝妈加油,我也是初为人母,看了你的帖子很为宝宝心疼,但有你这么坚强的妈妈,相信宝贝一定会好的  —————————————————  为母则刚,天性吧!我当初孩子住院,没法吃母乳,还要用吸奶器保留母乳,我妈妈说;当母亲不容易,一定要给孩子留着母乳!我就体会了,做母亲,不坚强不行  
  加油宝妈,你的宝贝一定会挺过难关的,相信生命的奇迹
  抱抱楼主,希望孩子快点好起来,  
  我就在北京。北京的医疗的确集中了最优质了资源,和临床经验。但儿研所的问题是,太忙,专家没有时间和家长沟通,所以,楼主夫妇也不能只是等着,要利用网络渠道对这个病多了解一些,有疑问的地方一定要抓住医生沟通(以咨询的方式,不是以质疑的方式),这样医生在确定治疗方案的时候,你才能知道医生的这个方案是怎么解决问题的,会有哪些可能的后遗症。没办法,作家长的,有时候就是要逼着自己作大夫。
  看得我都要哭了,太心疼人了,祝福宝宝早点康复!  
  现在情况好点没的?好心疼啊看着
使用“←”“→”快捷翻页
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)kubernetes监控告警详解
1. 概述1.1 总体目标从监控平台本身的业务需求分析来看,我们至少应该希望通过Prometheus平台获取到以下监控数据:性能指标 1.容器相关的性能指标数据(如:cpu, memory, filesystem) 2.Pod相关的性能指标数据 3.主机节点相关的性能指标数据服务健康状态 1.Deployment相关的健康状态(health or unhealth) 2.Pod的健康状态 3.主机Node节点的健康状态除了获取监控数据意外,我们还需要对一些特定的异常情况进行告警,因此需要配合使用AlertManager使用告警通知。1.2 主流监控方案目前对于kubernetes的主流监控方案主要有以下两种:heapster+influxDB heapster为k8s而生,它从apiserver获取节点信息,每个节点的kubelet内含cAdvisor,暴露出api,heapster通过访问这些端点得到容器监控数据。它支持多种储存方式,常用的的是influxDB。这套方案的缺点是缺乏报警等功能以及influxDB的单点问题。prometheus 本方案下文详细叙述。2. 实现思路和要点2.1 容器和Pod相关的性能指标数据—cadvisorcAdvisor是谷歌开源的一个容器监控工具,目前cAdvisor集成到了kubelet组件内,可以在kube集群中每个启动了kubelet的节点使用cAdvisor来查看该节点的运行数据。因此可以直接用过cAdvisor提供的metrics接口获取到所有容器相关的性能指标数据。该工具提供了webUI和REST API两种方式来展示数据,从而可以帮助管理者了解主机以及容器的资源使用情况和性能数据。cAdvisor对外提供web服务的默认端口为4194(,prometheus格式数据提供接口:nodeIP:4194/metrics),rest API服务端口默认为10255().prometheus获取监控端点的方式有很多,其中就包括k8s,prometheu会通过调用master的apiserver获取到节点信息,然后去调取每个节点的数据。prometheus作为一个时间序列数据收集,处理,存储的服务,能够监控的对象必须直接或间接提供prometheus认可的数据模型,通过http api的形式暴露出来。我们知道cAdvisor支持prometheus,同样,包含了cAdivisor的kubelet也支持prometheus。每个节点都暴露了供prometheus调用的api。查看数据nodeIP:4194/metrics,可以看到是按prometheus的格式输出的数据:
cadvisor_version_info{cadvisorRevision="",cadvisorVersion="",dockerVersion="1.12.3",kernelVersion="4.9.0-1.2.el7.bclinux.x86_64",osVersion="Debian GNU/Linux 8 (jessie)"} 1
container_cpu_cfs_periods_total{container_name="",id="/kubepods/burstable/pod5aec9dff0eb421bc9d034fa",image="",name="",namespace="",pod_name=""} 3.
container_cpu_cfs_periods_total{container_name="",id="/kubepods/burstable/poda8a515dcc2d15d092f2d62",image="",name="",namespace="",pod_name=""} 4.
container_cpu_cfs_periods_total{container_name="",id="/kubepods/burstable/podafbee2634ceba6169a4e",image="",name="",namespace="",pod_name=""} 2.
container_cpu_cfs_periods_total{container_name="",id="/kubepods/burstable/podef773c7b69c",image="",name="",namespace="",pod_name=""} 8.
container_cpu_cfs_periods_total{container_name="",id="/kubepods/pod5f9a1823-fb84-11e7-85c5-e8",image="",name="",namespace="",pod_name=""} 47539
container_cpu_cfs_periods_total{container_name="kube-apiserver",id="/kubepods/burstable/pod5aec9dff0eb421bc9d034fa/36cb499de1f4fc407decccdefdbfda22",image="quay.io/coreos/hyperkube@sha256:cc14505c0baecedff7beb6ca95e8b376bac",name="k8s_kube-apiserver_kube-apiserver-k8smaster01_kube-system_5aec9dff0eb421bc9d034fa_0",namespace="kube-system",pod_name="kube-apiserver-k8smaster01"} 2.
container_cpu_cfs_periods_total{container_name="kube-controller-manager",id="/kubepods/burstable/poda8a515dcc2d15d092f2d62/4b8b29de375e8ad98b8da3bb7df7ea1fafc1e41e5074b",image="quay.io/coreos/hyperkube@sha256:cc14505c0baecedff7beb6ca95e8b376bac",name="k8s_kube-controller-manager_kube-controller-manager-k8smaster01_kube-system_a8a515dcc2d15d092f2d62_6",namespace="kube-system",pod_name="kube-controller-manager-k8smaster01"} 1.
container_cpu_cfs_periods_total{container_name="kube-proxy",id="/kubepods/burstable/podef773c7b69c/badb2b011c0a36c312dfee49",image="quay.io/coreos/hyperkube@sha256:cc14505c0baecedff7beb6ca95e8b376bac",name="k8s_kube-proxy_kube-proxy-k8smaster01_kube-system_ef773c7b69c_4",namespace="kube-system",pod_name="kube-proxy-k8smaster01"} 8.
container_cpu_cfs_periods_total{container_name="kube-scheduler",id="/kubepods/burstable/podafbee2634ceba6169a4e/a04e8db7b50a3e947ace4d60a1d08e14afbb26b545",image="quay.io/coreos/hyperkube@sha256:cc14505c0baecedff7beb6ca95e8b376bac",name="k8s_kube-scheduler_kube-scheduler-k8smaster01_kube-system_afbee2634ceba",namespace="kube-system",pod_name="kube-scheduler-k8smaster01"} 2.
...123456789101112131415在prometheus的target中可以看到采到的信息: 备注:在1.7.3以后版本中cadvisor的metrics被从kubelet metrics的endpoint中独立出来了,在prometheus采集的时候变成两个scrape的jobcadvisor 的接口: 以上是cadvisor的metrics接口,在集群内部用kube-apiserver做proxy,如:,获取到的数据和直接访问nodeIP:4194/metrics获取到的一样。kubelet metrics接口: 以上是kubelet的metrics接口,在集群内部用kube-apiserver做proxy,如:2.2 主机节点性能指标数据—node-exporterPrometheus社区提供的NodeExporter项目可以对于主机的关键度量指标状态监控,通过kubernetes的Deamon Set我们可以确保在各个主机节点上部署单独的NodeExporter实例,从而实现对主机数据的监控附我的node-exporter-daemonset.yaml文件(相关文件请见:):apiVersion: extensions/v1beta1
kind: DaemonSet
name: prometheus-node-exporter
namespace: kube-system
app: prometheus-node-exporter
name: prometheus-node-exporter
app: prometheus-node-exporter
containers:
- image: prom/node-exporter:v0.15.0
imagePullPolicy: IfNotPresent
name: prometheus-node-exporter
- name: prom-node-exp
containerPort: 9100
hostPort: 9100
tolerations:
- key: "master"
operator: "Equal"
value: "true"
effect: "NoSchedule"
hostNetwork: true
hostPID: true
restartPolicy: Always
apiVersion: v1
kind: Service
annotations:
prometheus.io/scrape: 'true'
name: prometheus-node-exporter
namespace: kube-system
app: prometheus-node-exporter
clusterIP: None
- name: prometheus-node-exporter
port: 9100
protocol: TCP
app: prometheus-node-exporter
type: ClusterIP1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950备注: 1.在Service中定义标注prometheus.io/scrape: ‘true’,表明该Service需要被promethues发现并采集数据 2.Promethues可以在容器内通过DNS地址
访问kubernetes的Rest API. 3.node-exporter使用hostNetwork模式查看数据:nodeIP:9100/metrics,可以看到是按prometheus的格式输出的数据:# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 3.4159e-05
go_gc_duration_seconds{quantile="0.25"} 4.5062e-05
go_gc_duration_seconds{quantile="0.5"} 5.6108e-05
go_gc_duration_seconds{quantile="0.75"} 7.5753e-05
go_gc_duration_seconds{quantile="1"} 0.
go_gc_duration_seconds_sum 3.
go_gc_duration_seconds_count 22665
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 14
# HELP go_info Information about the Go environment.
# TYPE go_info gauge
go_info{version="go1.9.1"} 1
# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
# TYPE go_memstats_alloc_bytes gauge
go_memstats_alloc_bytes 1.
# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
# TYPE go_memstats_alloc_bytes_total counter
...123456789101112131415161718192021在prometheus的target中可以看到采到信息: 2.3 资源对象的状态(deployment、pod等)—kube-state-metrics附我的kube-state-metrics-deployment.yaml文件,包含serviceaccount、deployment、service():apiVersion: v1
kind: ServiceAccount
name: kube-state-metrics
namespace: kube-system
apiVersion: extensions/v1beta1
kind: Deployment
name: kube-state-metrics
namespace: kube-system
app: kube-state-metrics
replicas: 2
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
app: kube-state-metrics
serviceAccountName: kube-state-metrics
containers:
- name: kube-state-metrics
image: gcr.io/google_containers/kube-state-metrics:v1.1.0
- containerPort: 8080
restartPolicy: Always
apiVersion: v1
kind: Service
annotations:
prometheus.io/scrape: 'true'
name: kube-state-metrics
namespace: kube-system
app: kube-state-metrics
type: NodePort
- name: kube-state-metrics
port: 8080
targetPort: 8080
nodePort: 30008
app: kube-state-metrics123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051备注: 1.在Service中定义标注prometheus.io/scrape: ‘true’,表明该Service需要被promethues发现并采集数据 2.Promethues可以在容器内通过DNS地址
访问kubernetes的Rest API.查看数据:,可以看到是以prometheus的格式输出:在prometheus的target中可以看到采到信息(也是在kubernetes-service-endpoints里):3. Prometheus部署和配置前面第二章介绍了k8s平台的监控数据怎么采集出来,接下来介绍怎么用prometheus收集和处理,我的相关启动和配置文件请见:3.1 prometheus收集信息源的配置文件configmap-prom-config-ssl.yaml这个是prometheus的收集信息源的配置的相应configmap文件,我参考的这里:,然后做适当改动并增加了一些注释。prometheus的config文件的语法请见官网:我改好的文件请见这里:,其中有详细的注释。3.2 prometheus告警规则配置文件configmap-prom-rule.yaml,这个是prometheus的采集信息源的配置的相应configmap文件。3.2.1 报警规则报警规则允许你定义基于Prometheus语言表达的报警条件,并发送报警通知到外部服务。3.2.1.1 定义报警规则报警规则通过以下格式定义:ALERT &alert name&
IF &expression&
[ FOR &duration& ]
[ LABELS &label set& ]
[ ANNOTATIONS &label set& ]12345备注:FOR子句使得Prometheus等待第一个传进来的向量元素(例如高HTTP错误的实例),并计数一个警报。如果元素是active,但是没有firing的,就处于pending状态。LABELS(标签)子句允许指定一组附加的标签附到警报上。现有的任何标签都会被覆盖,标签值可以被模板化。ANNOTATIONS(注释)子句指定另一组未查明警报实例的标签,它们被用于存储更长的其他信息,例如警报描述或者链接,注释值可以被模板化。3.2.1.2 报警规则示例# Alert for any instance that is unreachable for &5 minutes.
ALERT InstanceDown
IF up == 0
LABELS { severity = "page" }
ANNOTATIONS {
summary = "Instance {{ $labels.instance }} down",
description = "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.",
# Alert for any instance that have a median request latency &1s.
ALERT APIHighRequestLatency
IF api_http_request_latencies_second{quantile="0.5"} & 1
ANNOTATIONS {
summary = "High request latency on {{ $labels.instance }}",
description = "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)",
}123456789101112131415161718rules的config文件的详细语法请见:我写好的文件请见这里:3.3 prometheus启动文件prometheus.yaml是prometheus以deployment起在kubernetes上的配置文件。我写好的文件请见这里:启动后可以访问ip:nodePort/targets4 告警组件Alertmanager介绍及部署4.1 overviewAlertmanager与Prometheus是相互分离的两个部分。Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将silencing、inhibition、aggregation等消息通过电子邮件、PaperDuty和HipChat发送通知。设置警报和通知的主要步骤:安装配置Alertmanager配置Prometheus通过-alertmanager.url标志与Alertmanager通信在Prometheus中创建告警规则4.2 Alertmanager简介及机制Alertmanager处理由类似Prometheus服务器等客户端发来的警报,之后需要删除重复、分组,并将它们通过路由发送到正确的接收器,比如电子邮件、Slack等。Alertmanager还支持沉默和警报抑制的机制。分组分组是指当出现问题时,Alertmanager会收到一个单一的通知,而当系统宕机时,很有可能成百上千的警报会同时生成,这种机制在较大的中断中特别有用。例如,当数十或数百个服务的实例在运行,网络发生故障时,有可能服务实例的一半不可达数据库。在告警规则中配置为每一个服务实例都发送警报的话,那么结果是数百警报被发送至Alertmanager。但是作为用户只想看到单一的报警页面,同时仍然能够清楚的看到哪些实例受到影响,因此,人们通过配置Alertmanager将警报分组打包,并发送一个相对看起来紧凑的通知。分组警报、警报时间,以及接收警报的receiver是在配置文件中通过路由树配置的。抑制抑制是指当警报发出后,停止重复发送由此警报引发其他错误的警报的机制。例如,当警报被触发,通知整个集群不可达,可以配置Alertmanager忽略由该警报触发而产生的所有其他警报,这可以防止通知数百或数千与此问题不相关的其他警报。抑制机制可以通过Alertmanager的配置文件来配置。沉默沉默是一种简单的特定时间静音提醒的机制。一种沉默是通过匹配器来配置,就像路由树一样。传入的警报会匹配RE,如果匹配,将不会为此警报发送通知。沉默机制可以通过Alertmanager的Web页面进行配置。4.3 Alertmanager的配置Alertmanager通过命令行flag和一个配置文件进行配置。命令行flag配置不变的系统参数、配置文件定义禁止规则、通知路由和通知接收器。要查看所有可用的命令行flag,运行alertmanager -h。Alertmanager在运行时加载配置,如果不能很好的形成新的配置,更改将不会被应用,并记录错误。alertmanager详细配置说明请见官网:Alertmanager can reload its configuration at runtime. If the new configuration is not well-formed, the changes will not be applied and an error is logged. A configuration reload is triggered by sending a SIGHUP to the process or sending a HTTP POST request to the /-/reload endpoint.4.3.1 配置文件概要介绍要指定加载的配置文件,需要使用-config.file标志(./alertmanager -config.file=simple.yml)。该文件使用YAML来完成,通过下面的描述来定义。括号内的参数是可选的,对于非列表的参数的值设置为指定的缺省值。&duration&: a duration matching the regular expression [0-9]+(ms|[smhdwy])
&labelname&: a string matching the regular expression [a-zA-Z_][a-zA-Z0-9_]*
&labelvalue&: a string of unicode characters
&filepath&: a valid path in the current working directory
&boolean&: a boolean that can take the values true or false
&string&: a regular string
&secret&: a regular string that is a secret, such as a password
&tmpl_string&: a string which is template-expanded before usage
&tmpl_secret&: a string which is template-expanded before usage that is a secret123456789例子:global:
[ resolve_timeout: &duration& | default = 5m ]
[ smtp_from: &tmpl_string& ]
[ smtp_smarthost: &string& ]
[ smtp_auth_username: &string& ]
[ smtp_auth_password: &secret& ]
[ smtp_auth_secret: &secret& ]
[ smtp_auth_identity: &string& ]
[ smtp_require_tls: &bool& | default = true ]
[ slack_api_url: &string& ]
[ victorops_api_key: &string& ]
[ victorops_api_url: &string& | default = "https://alert.victorops.com/integrations/generic//alert/" ]
[ pagerduty_url: &string& | default = "https://events.pagerduty.com/generic//create_event.json" ]
[ opsgenie_api_url: &string& | default = "https://api.opsgenie.com/" ]
[ hipchat_url: &string& | default = "https://api.hipchat.com/" ]
[ hipchat_auth_token: &secret& ]
templates:
[ - &filepath& ... ]
route: &route&
receivers:
- &receiver& ...
inhibit_rules:
[ - &inhibit_rule& ... ]12345678910111213141516171819202122232425262728293031323334353637383940414.3.2 模块详解4.3.2.1 路由模块 &route&路由模块定义了路由树及其子节点。如果没有设置的话,子节点的可选配置参数从其父节点继承。每个警报进入配置的路由树的顶级路径,顶级路径必须匹配所有警报(即没有任何形式的匹配)。然后匹配子节点。如果continue的值设置为false,它在匹配第一个孩子后就停止;如果在子节点匹配,continue的值为true,警报将继续进行后续兄弟姐妹的匹配。如果警报不匹配任何节点的任何子节点(没有匹配的子节点,或不存在),该警报基于当前节点的配置处理。路由配置格式[ receiver: &string& ]
[ group_by: '[' &labelname&, ... ']' ]
[ continue: &boolean& | default = false ]
[ &labelname&: &labelvalue&, ... ]
[ &labelname&: &regex&, ... ]
[ group_wait: &duration& | default = 30s ]
[ group_interval: &duration& | default = 5m ]
[ repeat_interval: &duration& | default = 4h ]
[ - &route& ... ]12345678910111213141516171819202122232425262728293031示例:# The root route with all parameters, which are inherited by the child
# routes if they are not overwritten.
receiver: 'default-receiver'
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
group_by: [cluster, alertname]
# All alerts that do not match the following child routes
# will remain at the root node and be dispatched to 'default-receiver'.
# All alerts with service=mysql or service=cassandra
# are dispatched to the database pager.
- receiver: 'database-pager'
group_wait: 10s
service: mysql|cassandra
# All alerts with the team=frontend label match this sub-route.
# They are grouped by product and environment rather than cluster
# and alertname.
- receiver: 'frontend-pager'
group_by: [product, environment]
team: frontend1234567891011121314151617181920212223244.3.2.2 抑制规则模块 &inhibit_rule&抑制规则,是存在另一组匹配器匹配的情况下,静音其他被引发警报的规则。这两个警报,必须有一组相同的标签。抑制配置格式
target_match:
[ &labelname&: &labelvalue&, ... ]
target_match_re:
[ &labelname&: &regex&, ... ]
source_match:
[ &labelname&: &labelvalue&, ... ]
source_match_re:
[ &labelname&: &regex&, ... ]
[ equal: '[' &labelname&, ... ']' ]123456789101112131415164.3.2.3 接收器 &receiver&顾名思义,警报接收的配置。通用配置格式:
name: &string&
email_configs:
[ - &email_config&, ... ]
hipchat_configs:
[ - &hipchat_config&, ... ]
pagerduty_configs:
[ - &pagerduty_config&, ... ]
pushover_configs:
[ - &pushover_config&, ... ]
slack_configs:
[ - &slack_config&, ... ]
opsgenie_configs:
[ - &opsgenie_config&, ... ]
webhook_configs:
[ - &webhook_config&, ... ]
victorops_configs:
[ - &victorops_config&, ... ]1234567891011121314151617181920每个接收器具体怎么配,请看官方文档:Alertmanager会使用以下的格式向配置端点发送HTTP POST请求:{
"version": "4",
"groupKey": &string&,
"status": "&resolved|firing&",
"receiver": &string&,
"groupLabels": &object&,
"commonLabels": &object&,
"commonAnnotations": &object&,
"externalURL": &string&,
"alerts": [
"labels": &object&,
"annotations": &object&,
"startsAt": "&rfc3339&",
"endsAt": "&rfc3339&"
}123456789101112131415161718194.4 alertmanager启动相关文件请见: 1.configmap-alertmanager.yaml 2.alertmanager.yaml启动后可以在webui上查看告警信息:5.可视化展示安装grafana,grafana.yaml如下:apiVersion: extensions/v1beta1
kind: Deployment
name: monitoring-grafana
namespace: kube-system
replicas: 1
task: monitoring
k8s-app: grafana
containers:
- name: grafana
image: daocloud.io/liukuan73/heapster-grafana:v4.4.3
imagePullPolicy: IfNotPresent
- containerPort: 3000
protocol: TCP
volumeMounts:
- mountPath: /etc/ssl/certs
name: ca-certificates
readOnly: true
- mountPath: /var
name: grafana-storage
- name: INFLUXDB_HOST
value: monitoring-influxdb
- name: GF_SERVER_HTTP_PORT
value: "3000"
- name: GF_AUTH_BASIC_ENABLED
value: "false"
- name: GF_AUTH_ANONYMOUS_ENABLED
value: "true"
- name: GF_AUTH_ANONYMOUS_ORG_ROLE
value: Admin
- name: GF_SERVER_ROOT_URL
- name: ca-certificates
path: /etc/ssl/certs
- name: grafana-storage
emptyDir: {}
nodeSelector:
node-type: master
tolerations:
- key: "master"
operator: "Equal"
value: "yes"
effect: "NoSchedule"
apiVersion: v1
kind: Service
kubernetes.io/cluster-service: 'true'
kubernetes.io/name: monitoring-grafana
name: monitoring-grafana
namespace: kube-system
type: NodePort
- port: 80
targetPort: 3000
nodePort: 30002
k8s-app: grafana123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081826. Prometheus介绍Prometheus是CNCF 下继 K8S 之后第二个项目。它们的开发人员都是原 Google 的 SRE,通过 HTTP 的方式来做数据收集,对其最深远的应该是其被设计成一个 self sustained 的系统,也就是说它是完全独立的系统,不需要外部依赖。它是独立的一个系统,它自己的存储都是存在本地,没有考虑用一些外部存储来持久化这些数据,所以它不是持久的数据库。它只可以保存一周或者几周的数据,方便你去做一个监控。组成及架构架构图如下: Prometheus server 主要负责数据采集和存储,提供PromQL查询语言的支持客户端sdk 官方提供的客户端类库有go、java、scala、python、ruby,其他还有很多第三方开发的类库,支持nodejs、php、erlang等Push Gateway 支持临时性Job主动推送指标的中间网关PromDash 使用rails开发的dashboard,用于可视化指标数据exporters 支持其他数据源的指标导入到Prometheus,支持数据库、硬件、消息中间件、存储系统、http服务器、jmx等alertmanager 实验性组件、用来进行报警prometheus_cli 命令行工具其他辅助性工具它的服务过程是这样的 Prometheus daemon 负责定时去目标上抓取 metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。 Prometheus支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。 Alertmanager 是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。 Prometheus支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。 PushGateway这个组件是支持Client主动推送 metrics 到PushGateway,而Prometheus只是定时去Gateway上抓取数据。Prometheus特点多维数据模型(时序列数据由metric名和一组key/value组成)在多维度上灵活的查询语言(PromQl)不依赖分布式存储,单主节点工作.通过基于HTTP的pull方式采集时序数据可以通过push gateway进行时序列数据推送(pushing)可以通过服务发现或者静态配置去获取要采集的目标服务器多种可视化图表及仪表盘支持Prometheus 的数据模型Prometheus 从根本上所有的存储都是按时间序列去实现的,相同的 metrics(指标名称) 和 label(一个或多个标签) 组成一条时间序列,不同的label表示不同的时间序列。为了支持一些查询,有时还会临时产生一些时间序列存储。metrics name & label 指标名称和标签每条时间序列是由唯一的 指标名称 和 一组 标签 (key=value)的形式组成。指标名称一般是给监测对像起一名字,例如 http_requests_total 这样,它有一些命名规则,可以包字母数字之类的的。通常是以应用名称开头监测对像数值类型单位这样。例如:push_total
userlogin_mysql_duration_seconds
app_memory_usage_bytes123标签就是对一条时间序列不同维度的识别了,例如一个http请求用的是POST还是GET,它的endpoint是什么,这时候就要用标签去标记了。 最终形成的标识便是这样:http_requests_total{method="POST",endpoint="/api/tracks"}1记住,针对http_requests_total这个metrics name 无论是增加标签还是删除标签都会形成一条新的时间序列。查询语句就可以跟据上面标签的组合来查询聚合结果了。 如果以传统数据库的理解来看这条语句,则可以考虑 http_requests_total是表名,标签是字段,而timestamp是主键,还有一个float64字段是值(Prometheus里面所有值都是按float64存储)Prometheus 的四种数据类型CounterCounter 用于累计值,例如记录请求次数、任务完成数、错误发生次数。一直增加,不会减少。重启进程后,会被重置。例如:http_response_total{method="GET",endpoint="/api/tracks"} 100
10秒后抓取 http_response_total{method="GET",endpoint="/api/tracks"} 10012GaugeGauge 常规数值,例如 温度变化、内存使用变化。可变大,可变小。重启进程后,会被重置{host="master-01"} 100 & 抓取值
memory_usage_bytes{host="master-01"} 30
memory_usage_bytes{host="master-01"} 50
memory_usage_bytes{host="master-01"} 80 & 抓取值1234HistogramHistogram 可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供 count 和 sum 全部值的功能。例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值 SummarySummary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。例如:count=7次,sum=7次的值求值它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。Prometheus数据采集方式pull方式 Prometheus采集数据是用的pull也就是拉模型,通过HTTP协议去采集指标,只要应用系统能够提供HTTP接口就可以接入监控系统,相比于私有协议或二进制协议来说开发、简单。push方式 对于定时任务这种短周期的指标采集,如果采用pull模式,可能造成任务结束了,Prometheus还没有来得及采集,这个时候可以使用加一个中转层,客户端推数据到Push Gateway缓存一下,由Prometheus从push gateway pull指标过来。(需要额外搭建Push Gateway,同时需要新增job去从gateway采数据)STORAGE 存储 Prometheus有一个复杂的本地存储子系统。对于索引,它使用levelDB。对于批量的样本数据,它由自己的自定义存储层,并以固定大小(1024个字节有效负载)的块组织样本数据。然后将这些块存储在每个时间序列的一个文件中的磁盘上。其他Memory usage 内存使用量 Prometheus将所有当前使用的块保留在内存中。此外,它将最新使用的块保留在内存中,最大内存可以通过storage.local.memory-chunks标志配置。如果你有较多的可用内存,你可能希望将其增加到默认值1048576字节以上(反之亦然,如果遇到RAM问题,可以尝试减少内存值)。请注意,服务器的实际RAM使用率将高于将storage.local.memory-chunks*1024字节所期望的RAM使用率。管理存储层中的样本数据是不可避免的开销。此外,服务器正在做更多的事情,而不仅仅存储样本数据。实际开销取决于你的使用模式。在极端情况下,Prometheus必须保持更多的内存块,而不是配置,因为所有这些块都在同一时间使用。你必须试一下。Prometheus导出导出的度量指标prometheus_local_storage_memory_chunks和process_resident_memory_bytes将派上用场。作为经验法则,你应该至少拥有内存块所需三倍以上。设计到大量时间序列的PromQL查询大量使用LevelDB支持的索引。如果需要运行这种查询,则可能需要调整索引缓存大小。以下标志是相关的:-storage.local.index-cache-size.label-name-to-label-values: 正则表达式匹配 -storage.local.index-cache-size.label-pair-to-fingerprints: 如果大量的时间序列共享相同的标签,增加内存大小 -storage.local.index-cache-size.fingerprint-to-metric and -storage.local.index-cache-size.fingerprint-to-timerange: 如果你有大量的目标时间序列,例如:一段时间还没有被接收的样本数据时间序列,但是数据又还没有失效。这时也需要增加内存. 你必须尝试使用flag,才能找出有用的。如果一个查询触及到100000多个时间序列数据,几百M内存使用可能是合理的。如果你有足够的内存可用,对于LevelDB使用更多的内存不会有任何伤害。磁盘使用量 disk usage Prometheus存储时间序列在磁盘上,目录由flag storage.local.path指定。默认path是./data(关联到工作目录),这是很好的快速尝试,但很可能不是你想要的实际操作。这个flagstroage.local.retention允许你配置这个保留的样本数据。根据你的需求和你的可用磁盘空间做出合适的调整。Chunking encoding Prometheus当前提供三种不同类型的块编码(chunk encodings)。对于新创建块的编码由flag -storage.local.chunk-encoding-version决定。 有效值分别是0,1和2.对于Prometheus的第一块存储存,类型值为0实现了delta编码。类型值为1是当前默认编码, 这是有更好的压缩算法的双delta编码,比类型值为0的delta编码要好。这两种编码在整个块中都具有固定的每个样本字节宽度,这允许快速随机访问。然而类型值为0 的delta编码是最快的编码,与类型值为1的编码相比,编码成本的差异很小。由于具有更好的压缩算法的编码1,除了兼容Prometheus更老的版本,一般建议使用编码1。类型2是可变宽度的编码,例如:在块中的每个样本能够使用一个不同数量的bit位数。时间戳也是双delta编码。但是算法稍微有点不同。一些不同编码范式对于样本值都是可用的。根据样本值类型来决定使用哪种编码范式,样本值类型有:constant,int型,递增,随机等编码2的主要部分的灵感来源于Facebook工程师发表的一篇论文:Gorilla: A Fast, Scalable, In-Memory Time Series Database编码2必须顺序地访问块,并且编解码的代价比较高。总体来看,对比编码1,编码2造成了更高的CPU使用量和增加了查询延时,但是它提供一个改进的压缩比。准确值非常依赖于数据集和查询类型。下面的结果来自典型的生产环境的服务器中: | 块编码类型 | 每个样本数据占用的比特位数 | CPU核数 | 规则评估时间 | | ———- | ————————-: | ——-:| :———-: | | 1 | 3.3 | 1.6 | 2.9s | | 2 | 1.3 | 2.4 | 4.9s |每次启动Prometheus服务时,你可以改变块的编码类型,因此在实验中测试不同编码类型是我们非常鼓励的。但是考虑到,仅仅是新创建的块会使用新选择块编码,因此你将需要一段时间才能看到效果。设置大量时间序列数据 Prometheus能够处理百万级别的时间序列数据。然而,你必须调整存储设置到处理多余100000活跃的时间序列。基本上,对于每个时间序列要存储到内存中,你想要允许这几个确定数量的块。对于storage.local.memory-chunksflag标志的默认值是1048567。高达300000个时间序列时,平均来看,每个时间序列仍然有三个可用的块。对于更多的时间序列,应该增加storage.local.memory-chunks值。三倍于时间序列的数量是一个非常好的近似值。但请注意内存使用的含义(见上文)。如果你比配置的内存块有更多的时间序列数据,Prometheus不可避免地遇到一种情况,它必须保持比配置更多的内存块。如果使用块数量超过配置限制的10%, Prometheus将会减少获取的样本数据量(通过skip scrape和rule evaluation)直到减少到超过配置的5%。减少获取样本数量是非常糟糕的情况,这是你我都不愿意看到的。同样重要地,特别是如果写入磁盘,会增长storage.local.max-chunks-to-persistflag值。根据经验,保持它是storage.local.memory-chunks值的50%是比较好的。storage.local.max-chunks-to-persist控制了多少块等待写入到你的存储设备,它既可以是spinning磁盘,也可以是SSD。如果等待块过多,这Prometheus将会减少获取样本数量,知道等待写入的样本数量下降到配置值的95%以下。在发生这种情况之前,Prometheus试着加速写入块。详见文档每个时间序列可以保留更多的内存块,你就可以批量编写更多的写操作。对spinning磁盘是相当重要的。注意每个活跃的时间序列将会有个不完整的头块,目前还不能被持久化。它是在内存的块,不是磁盘块数据。如果你有1M的活跃时间序列数据,你需要3Mstorage.local.memory-chunks块,为每个时间序列提供可用的3块内存。仅仅有2M可持久化,因此设置storage.local.max-to-persist值大于2M,可以很容易地让内存超过3M块。尽管存储storage.local.memory-chunks的设置,这再次导致可怕的减少样本数量(Prometheus服务将尽快再此出现之前加速消费)。等待持久性块的高价值的另一个缺点是检查点较大。如果将大量时间序列与非常快速和/或较大的scrapes相结合,则预先分配的时间序列互斥所可能不会很奏效。如果你在Prometheus服务正在编写检查点或者处理代价大的查询时,看到获取较慢,请尝试增加storage.local.num-fingerprint-mutexesflag值。有时需要数万甚至更多。持续压力和“冲动模式” Persist pressure and “rushed mode” 本质上,Prometheus服务将尽可能快递将完成的块持久化到磁盘上。这样的策略可能会导致许多小的写入操作,会占用更多的I/O带宽并保持服务器的繁忙。spinning磁盘在这里更加敏感,但是即使是SSD也不会喜欢这样。Prometheus试图尽可能的批量编写写操作,如果允许使用更多的内存,这样做法更好。因此,将上述flag设置为导致充分利用可用内存的值对于高性能非常重要。Prometheus还将在每次写入后同步时间序列文件(使用storage.local.series-sync-strategy = adaptive, 这是默认值), 并将磁盘带宽用于更频繁的检查点(根据“脏的时间序列”的计数,见下文),都试图在崩溃的情况下最小化数据丢失。但是,如果等待写入的块数量增长太多,怎么办?Prometheus计算一个持久块的紧急度分数,这取决于等待与storage.local.max-chunks-to-persist值相关的持久性的快数量,以及内存中的快数量超过存储空间的数量。local.memory-chunks值(如果有的话,只有等待持久性的块的最小数量,以便更快的帮助)。分数在0~1.其中1是指对应于最高的紧急程度。根据得分,Prometheus将更频繁地写入磁盘。如果得分超过0.8的门槛,Prometheus将进入“冲动模式”(你可以在日志中国看到)。在冲动模式下,采用以下策略来加速持久化块:时间序列文件不再在写操作之后同步(更好地利用操作系统的页面缓存,在服务器崩溃的情况下,丢失数据的风险会增加), 这个行为通过storage.local.series-sync-strategyflag。 检查点仅仅通过storage.local.checkpoint-intervalflag启动配置时创建(对于持久化块,以崩溃的情况下更多丢失数据的代码和运行随后崩溃恢复的时间增加,来释放更多的磁盘带宽) 对于持久化块的写操作不再被限制,并且尽可能快地执行。 一段得分下降到0.7以下,Prometheus将退出冲动模式。设置更长的保留时间 setting for very long retention time 如果你有通过storage.local.retentionflag(超过一个月), 设置一个更长的留存时间,你可能想要增加storage.local.series-file-shrink-ratioflag值。每当Prometheus需要从一系列文件的开头切断一些块时,它将简单地重写整个文件。(某些文件系统支持“头截断”,Prometheus目前由于几个原因目前不使用)。为了不重写一个非常大的系列文件来摆脱很少的块,重写只会发生在至少10%的块中 系列文件被删除。 该值可以通过上述的storage.local.series-file-shrink-ratioflag来更改。 如果您有很多磁盘空间,但希望最小化重写(以浪费磁盘空间为代价),请将标志值增加到更高的值,例如。 30%所需的块删除为0.3。有用的度量指标 在Prometheus暴露自己的度量指标之外,以下内容对于调整上述flag特别有用:prometheus_local_storage_memory_series: 时间序列持有的内存当前块数量 prometheus_local_storage_memory_chunks: 在内存中持久块的当前数量 prometheus_local_storage_chunks_to_persist: 当前仍然需要持久化到磁盘的的内存块数量 prometheus_local_storage_persistence_urgency_score: 上述讨论的紧急程度分数 如果Prometheus处于冲动模式下,prometheus_local_storage_rushed_mode值等于1; 否则等于0. Crash恢复 Carsh Recovery Prometheus在完成后尽快将块保存到磁盘。常规检查点中不完整的块保存到磁盘。您可以使用storage.local.checkpoint-intervalflag配置检查点间隔。如果太多的时间序列处于“脏”状态,那么Prometheus更频繁地创建检查点,即它们当前的不完整的头部块不是包含在最近检查点中的。此限制可通过storage.local.checkpoint-dirty-series-limitflag进行配置。然而,如果您的服务器崩溃,您可能仍然丢失数据,并且您的存储空间可能处于不一致的状态。因此,Prometheus在意外关机后执行崩溃恢复,类似于文件系统的fsck运行。将记录关于崩溃恢复的详细信息,因此如果需要,您可以将其用于取证。无法恢复的数据被移动到名为孤立的目录(位于storage.local.path下)。如果不再需要,请记住删除该数据。崩溃恢复通常需要不到一分钟。如果需要更长时间,请咨询日志,以了解出现的问题。Data corrution 数据损坏 如果您怀疑数据库中的损坏引起的问题,则可以通过使用storage.local.dirtyflag启动服务器来强制执行崩溃恢复。如果没有帮助,或者如果您只想删除现有的数据库,可以通过删除存储目录的内容轻松地启动:stop prometheus. rm -r /* start prometheus?1. 2.??3. 4. 5. 6. 7. 8.
扫码向博主提问
非学,无以致疑;非问,无以广识
没有更多推荐了,}

我要回帖

更多关于 智能家居控制系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信