Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ΪʲôҪ½øÐÐÈÕÖ¾²âÊÔºÍÈçºÎ½øÐÐÈÕÖ¾²âÊÔ
 
×÷ÕߣºMatthew Skelton À´Ô´£ºInfOQ  ·¢²¼ÓÚ£º 2016-12-1
  3030  次浏览      27
 

¹Ø¼üµã

1.ÔÚ·Ö²¼Ê½µÄ¡¢¿ÉÀ©Õ¹µÄϵͳ£¨Í¨³£°üº¬²»Îȶ¨µÄ»ù´¡ÉèÊ©£©ÖÐÅųý¹ÊÕϵÄЧÂÊͨ³£È¡¾öÓÚÊÇ·ñÓгä·ÖµÄÈÕÖ¾¼Ç¼ºÍËÑË÷É豸¡£

2.ΨһʼþID¡¢ÊÂÎñ×·×Ù¼¼ÊõºÍ½á¹¹»¯µÄÈÕÖ¾Êä³öµÈ¼¼Êõ£¬ÈÃÎÒÃǵÃÒÔ͸³¹µØÁ˽âÓ¦ÓóÌÐòµÄÐÐΪ£¬ÒÔ¼°Ó¦ÓóÌÐòÊÇ·ñÔÚÕý³£ÔË×÷¡£

3.ÈÕÖ¾¼Ç¼²»ÔٻᡰÍÏÂý¡±ÏµÍ³ÐÔÄÜ£¬Ïà·´µØ£¬ËüÔÚϵͳ¹ÊÕϻָ´ÖÐÓÐÖØÒªµÄËÙ¶ÈÔöÒæ£¬ÓÈÆäÊÇÔÚʹÓÃÁËÈÕÖ¾¾ÛºÏµÄÇé¿öÏ¡£

4.ÎÒÃÇÐèÒª²âÊÔºËÐIJÙ×÷ÐèÇó£¬ÈçÈÕÖ¾¼Ç¼¡£

5.ÎÒÃÇ¿ÉÒÔ²ÉÓÃÀàËÆ¹¦ÄÜÐÔÐèÇóµÄ·½Ê½À´²âÊÔÈÕÖ¾£¬±ÈÈçÓû§¹ÊʺÍBDD³¡¾°µÈ¡£

ÏÖ´úÈÕÖ¾¾ÛºÏºÍËÑË÷¹¤¾ßΪÍŶӵĽ¨Á¢¡¢²âÊÔºÍÔËÐÐÈí¼þϵͳÌṩÁËÖØÒªµÄй¦ÄÜ¡£Í¨¹ý°ÑÈÕÖ¾×÷Ϊһ¸öºËÐÄϵͳ×é¼þ£¬²¢Ê¹ÓÃÈçΨһʼþID¡¢ÊÂÎñ×·×Ù¼¼ÊõºÍ½á¹¹»¯µÄÈÕÖ¾Êä³öµÈ¼¼Êõ£¬ÎÒÃÇ¿ÉÒÔ»ñµÃ¶ÔÓ¦ÓóÌÐòµÄÐÐΪºÍÕý³£ÔË×÷µÄ·á¸»µÄ¼û½â£¬ÓÈÆäÊÇ¿ç×é¼þµÄÊÓͼ¡£ÕâÆªÎÄÕ½âÊÍÁËΪʲô²âÊÔÈÕÖ¾ÊÇÓмÛÖµµÄºÍÈçºÎÓÃÏÖ´úÈÕÖ¾¾ÛºÏ¹¤¾ß×öÈÕÖ¾²âÊÔ¡£ÕâÖÖ·½·¨Ê¹ÈÕÖ¾³ÉΪÁËÒ»ÖÖÇþµÀ£¬Ê¹·Ö²¼Ê½ÏµÍ³¸ü¾ß¿É²âÊÔÐÔ¡£

ÈÕÖ¾ÔÚÕûÌåÉÏ»áΪ¸÷·½ÃæÌáËÙ

°´Ò»Ö±ÒÔÀ´µÄ¹Ûµã£¬Ðí¶àÈËÈÏΪ£¬ÈÕÖ¾»á¡°ÍÏÂý¡±Èí¼þ¡£Èç¹ûʹÓõÄÊÇͬ²½ÎļþI / O¡¢ÂýËÙ´ÅÅÌ´æ´¢¡¢ÉõÖÁ¸üÂýµÄÍøÂçËÙ¶È£¬´ÓÕâЩ·½ÃæÀ´¿´ÕâÖÖ¹ÛµãÓÐÒ»¶¨µÄµÀÀí¡£Òò´Ë£¬ÎÒÃÇÍùÍù¶ÔÔÚÏÖ³¡»·¾³ÖÐÔËÐеÄÈí¼þÖмǼÏÂÀ´µÄÈÕÖ¾£¬±§×ÅÉóÉ÷µÄ̬¶È¡£È»¶ø£¬Òì²½ÎļþI/OºÍSSD´æ´¢ÕýÔÚ³ÉΪ³£Ì¬£¬1GB¡¢10GB£¬ÉõÖÁ100GbÒÔÌ«ÍøÒ²Ô½À´Ô½ÆÕ±é£¬ÈÕÖ¾µÄÐÔÄÜÌØÐÔÏÖÔÚÒѾ­±äµÃ²»Í¬¡£

ÏÖÔÚ£¬³ýÁËʱ¼ä¹Ø¼üÐ͵ÄÓ¦ÓóÌÐò£¬Èç½ðÈÚ½»Ò×ºÍÆäËû¸´ÔÓËã·¨µÄÇé¿öÏ£¬ÔÚÈí¼þϵͳÖÐÎÒÃÇÒѾ­ºÜÉÙµ¥´¿µØÓÅ»¯Èí¼þµÄÔËÐÐËÙ¶ÈÁË¡£ÌرðÊÇÔÚ·Ö²¼Ê½ÏµÍ³¡¢ÔƺÍÎïÁªÍø£¨IoT£©µÄ±³¾°Ï£¬ÎÒÃÇÐèÒª¿¼ÂǵÄÊÇÔÚ·¢Éú´íÎóºó£¬»Ö¸´·þÎñµÄʱ¼ä£¨Í¨³£±»³ÆÎª¡°Æ½¾ù»Ö¸´Ê±¼ä¡±£¬Mean Time to Recovery£¬MTTR£©¡£Í¬Ê±£¬ÎÒÃÇÒ²Òª¿¼ÂÇÔÚÉÏÓΣ¨²âÊÔ£©»·¾³Àȷ¶¨ÎÊÌâÔ­ÒòËùÐèÒªµÄʱ¼ä¡£

ÏÖ´úÈÕÖ¾¾ÛºÏºÍËÑË÷¹¤¾ß¡ª¡ª±ÈÈçElasticSearch¡¢Logstash¡¢Kibana¡¢LogEntries¡¢Loggly¡¢SematextµÈµÈ¡ª¡ª¸øÎÒÃÇÌṩÁ˷ḻµÄ·½·¨ÓëÎÒÃǵÄÈí¼þµÄ½øÐн»»¥£¬ËüÌṩÁ˷ḻµÄÓû§½Ó¿ÚÈ¥ÅжÏÓ¦ÓóÌÐòµÄÐÐΪ£¬Ò²ÌṩÁ˿ɱà³ÌµÄREST APIÀ´ÔÚ¶ą̀·þÎñÆ÷Ö®¼äËÑË÷ºÍ¹ØÁªÊ¼þ¡£

ËäÈ»¶îÍâµÄÈÕÖ¾¼Ç¼¿ÉÄܻᵼÖÂÈí¼þ³ÌÐòµÄÖ´ÐÐËÙ¶ÈϽµ5%-10%¡£µ«Èç¹ûÔÚÒªËÑË÷µÄλÖþßÓÐÏêϸµÄ¿ÉÓÃÐÅÏ¢¾Í¿ÉÒÔ°ïÖúÎÒÃǸüѸËÙµØÕï¶ÏÎÊÌ⣬¼Ó¿ìÎÒÃǶԹÊÕϵÄÏìÓ¦£¬²¢ÇÒÍùÍù¿ÉÒÔÏÔÖøµØ¼õÉÙ·¢ÏÖһЩÒþ²ØµÃ·Ç³£ÉîµÄ´íÎóµÄʱ¼ä£¡

¿ìËÙµÄI / OºÍ´æ´¢ÒÔ¼°ÏÖ´úÈÕÖ¾¹¤¾ßµÄ×éºÏ¡ª¡ªÌرðÊǵ±Óй¤¾ßÌṩ¸øËùÓвâÊÔÈËÔ±ºÍ¿ª·¢ÈËԱʱ£¬¾ÍʹÎÒÃÇÄܹ»°ÑÈÕÖ¾×÷ΪÎÒÃǵÄÈí¼þϵͳµÄÒ»¸öÖØÒª×é³É²¿·Ö£»Õâ»áÈÃÎÒÃDzúÉúÒÉÎÊ£ºÈç¹ûÈÕÖ¾ÊÇÎÒÃǵÄÈí¼þϵͳµÄÒ»¸öÖØÒª×é³É²¿·Ö£¬ÎÒÃǸÃÈçºÎ²âÊÔËüÄØ£¿

ÒÔ°ü¹ü×·×Ù×öÀà±È

ÎÒÃÇ´ó¶àÊýÈ˶¼·Ç³£ÊìϤÔÚÏß°ü¹ü×·×Ù¹¤¾ß¡£ÕâЩ¹¤¾ßʹÎÒÃÇÖ»ÒªÓÐÒ»¸ö×·×ÙID¾ÍÄܹ»¿´µ½ÎÒÃǵİü¹üÔÚÄÄÀï¡£ÕâЩ¹¤¾ßÓÐÁ½¸öÓÐȤµÄ¹¦ÄÜ£ºÍ¨¹ýÅÉËÍÍøÂçÄܹ»¸ú×ÙÒ»¸öÌØ¶¨µÄ°ü¹ü£¬²¢ÇÒÒ²¿ÉÒÔÏÔʾ³öÉæ¼°µ½µÄÕâ¸ö°ü¹üÔÚ²»Í¬µÄʱ¼äµÄ¸÷ÖÖ²»Í¬µÄ״̬£¨»òʼþ£©¡£

ÔÚ¸ú×ÙÒ»¸ö°ü¹üʱ£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÕâЩ״̬£¬±ÈÈç¡°µ½´ï²Ö¿â¡±¡¢¡°ÔËÊäÖС±ºÍ¡°ÒÑËʹµÈµÈ£»ÕâЩ¶¼´ú±íÁËÌØ¶¨µÄ״̬»òʼþ£¬²¢ÇÒÿһ¸ö¶¼ÓÐÒ»¸öϵͳÄÚµÄÄÚ²¿±êʶ·û£¨ID£©¡ª¡ªÊ¼þID¡£

ÔÚÏÖ´úµÄÒì²½·Ö²¼Ê½Èí¼þϵͳÖУ¬ÎÒÃÇ¿ÉÒÔʹÓÃÒ»ÖÖÀàËÆµÄ¼¼ÊõÀ´¸ú×ٿ粻ͬģ¿éµÄÔË×÷Ö´ÐÐÇé¿ö¡£ÎªÁ˰ïÖúÎÒÃÇ×öµ½ÕâÒ»µã£¬ÎÒÃǶ¨ÒåÁËһЩÎÒÃÇ×Ô¼ºµÄʼþID£¬²¢°ÑÕâЩʼþIDÓëÎÒÃÇÕýÔÚʹÓõÄϵͳÏà¹ØÁªÆðÀ´¡£

Ô¤ÆÚʼþºÍÏà¹ØÐÔIDµÄ²âÊÔ

ÎÒÃDz»Ó¦¸Ã°Ñʱ¼ä»¨ÔÚ²âÊÔÈÕÖ¾×Óϵͳ±¾ÉíÖ®ÉÏ£¬±ÈÈçlog4net¡¢log4j£¬µÈµÈ£»ÎÒÃÇÓ¦¸Ã¼ÙÉèÈÕÖ¾µÄ¹¦ÄÜ£¨Ð´Èë´ÅÅÌ¡¢ÇÐתÈÕÖ¾Îļþ¡¢Ë¢Ð»º³å£¬µÈµÈ£©¶¼ÒѾ­¾ÍÐ÷ÁË¡£Ïà·´£¬ÎÒÃÇÓ¦¸Ã¼¯Öо«Á¦È·±£Èý¸ö¶ÀÁ¢µ«Ïà¹ØµÄ¶«Î÷£º

1.ÎÒÃÇÏ£Íû·¢ÉúµÄʼþÒªÔÚÈÕÖ¾Á÷ÖÐÕýÈ·µØ³öÏÖ

2.ÊÂÎñ±êʶ·û£¨Ò²¾ÍÊǹØÁªID£©ÈçÔ¤ÆÚÒ»Ñùͨ¹ýÈÕÖ¾Á÷

3.ʼþ°´Êʵ±µÄ¼¶±ð±»¼Ç¼£¨Info¡¢Error¡¢DebugµÈ£©¡ª¡ªÈç¹ûÎÒÃÇÕýÔÚʹÓÿÉÅäÖõÄÈÕÖ¾¼¶±ð

µ±È»£¬Í¨¹ý¼ì²éÕâЩ¶«Î÷£¬ÎÒÃÇÒѾ­ÊÔÓÃÁËÈÕÖ¾×ÓϵͳºÍ²¢ÇÒÒþº¬µØ¶ÔËüÒ²½øÐÐÁ˲âÊÔ¡£Í¨¹ý°ÑÈÕÖ¾×÷Ϊһ¸ö¿É²âÊÔµÄϵͳ×é¼þ£¬ÎÒÃÇÒ²ÍùÍù»á¼õÉÙÎÊÌâµÄ¡°¼ì²âʱ¼ä¡±£¬Ôö¼ÓÍŶӲÎÓ룬¼ÓÇ¿ºÏ×÷£¬Ìá¸ßÈí¼þ¿É²Ù×÷ÐÔ¡£

ÎÒÃÇÐèÒª¶¨ÒåÒ»×éʼþÀàÐÍID£¬ÕâЩʼþÀàÐÍID¶ÔÓ¦ÓÚÎÒÃǵÄÈí¼þÖÐÓÐÓõĺ͹ؼüµÄ²Ù×÷»òÖ´Ðе㡣µ½µ×Òª¶¨Òå¶àÉÙÕâÑùµÄIDÈ¡¾öÓÚÄãµÄÈí¼þ£¬µ«ÖÁÉÙÎÒÃÇÓÐApplicationStartedºÍDatabaseConnectionFailed»òDocumentStoreUnavailableÀàËÆµÄ¶«Î÷£¨µ±ÒªÓõ½ÕâЩ¶«Î÷ʱÔÙÈ¥¶¨ÒåÏàÓ¦µÄ¶îÍâµÄID£¬²»ÒªÊÔͼÊÂÏȶ¨ÒåËùÓпÉÄܵÄʼþ£©¡£

ÀýÈ磬Èç¹ûÎÒÃÇÕýÔÚÓÃC#¹¹½¨µç×ÓÉÌÎñÓ¦ÓóÌÐò£¬ÎÒÃÇ¿ÉÄܻ᣺

public enum EventID
{
// Badly-initialised logging data
NotSet = 0,
// An unrecognised event has occurred
UnexpectedError = 10000,

ApplicationStarted = 20000,
ApplicationShutdownNoticeReceived = 20001,

PageGenerationStarted = 30000,
PageGenerationCompleted = 30001,

MessageQueued = 40000,
MessagePeeked = 40001,

BasketItemAdded = 60001,
BasketItemRemoved = 60002,

CreditCardDetailsSubmitted = 70001,

// ...
}

ÎÒÃÇʹÓÃÈËÀà¿É¶ÁµÄÃû³ÆÔÙ¼ÓÉÏÒ»¸öΨһÕûÊýÖµÒ»Æð×÷ΪʼþID£¬ÕâÑù¾Í¿ÉÒÔ½«Ïà¹Ø»òÏàÀàËÆÊ¼þ×éºÏÔÚÒ»Æð£ºÔÚÕâÀËùÓÐÓйء°Àº×Ó¡±µÄʼþÀàÐÍ»áʹÓÃ60000µ½69999Ö®¼äµÄÕûÊýID¡£µ±ÎÒÃǵÄÈí¼þÔÚ´úÂëÖд¦Àíµ½ÏàÓ¦µÄ״̬ʱ£¬Ëü»á½«Ïà¹ØµÄʼþÀàÐ͵ÄIDÓëÆäËûÈÕÖ¾Êý¾ÝÒ»ÆðдÈëÈÕÖ¾ÎļþÖС£Õâ·´¹ýÀ´ÓÖ±»ÈÕÖ¾¾ÛºÏϵͳÊÕ¼¯ÆðÀ´£¬¿ÉÒÔÌṩ¸øËÑË÷£¨Í¨¹ýä¯ÀÀÆ÷ºÍÒ»¸öAPI£©Ê¹Óá£

Èç¹ûÎÒÃÇÏë°ÑÒ»¸ö¹ØÓÚ·¢ÉúÔÚÈÕÖ¾Á÷ÖÐÔ¤ÆÚ»òÒâÍâʼþµÄ²âÊÔÓÃÀý×Ô¶¯»¯£¬ÎÒÃÇ¿ÉÒÔͨ¹ýcurl×öÒ»¸ö¼òµ¥µÄAPIµ÷ÓÃÀ´½øÐвéѯ¡£

ÀýÈ磬ÎÒÃÇ¿ÉÄÜÏë¼ì²é·¢ÉúÁËÒ»´ÎÊý¾Ý¿â²éѯ£¨Ô¤ÆÚ·¢ÉúʼþDatabasePreQuery ºÍDatabasePostQuery£©²¢ÇÒûÓгöÏÖÁ¬½ÓÎÊÌ⣨ͻ·¢Ê¼þDatabaseConnectionFailed£©¡£

ÕâÀïÊÇΪDatabasePreQueryʼþ£¨ÄãÒ²¿ÉÒÔÔÚGitHubÕÒµ½Ëü£©²éѯElasticsearch API £¨ÔÚ±¾µØÔËÐУ©µÄcurlÃüÁ

$ curl -XGET 'http://localhost:9200/_search?q=message:DatabasePreQuery&pretty'

Õâ¸ö²éѯµÄ½á¹û¿ÉÄÜÊÇ£¬ÀýÈ磨ΪÁËÇåÎú¶ÈÖØÐ¸ñʽ»¯¹ý£¬²¢Ìí¼ÓÁËÐÐÊýÒÔ¹©²Î¿¼£©£º

 {
2 "took" : 19,
3 "timed_out" : false,
4 "_shards" : {
5 "total" : 20,
6 "successful" : 20,
7 "failed" : 0
8 },
9 "hits" : {
10 "total" : 1,
11 "max_score" : 11.516103,
12 "hits" : [ {
13 "_index" : "logstash-2016.05.06",
14 "_type" : "logs",
15 "_id" : "gHEKyHasRb6GaUhM1gywpg",
16 "_score" : 11.516103,
17 "_source":{"message":
18 "[2016-05-06 17:07:42] slim-skeleton.INFO: DatabasePreQuery [] []",
19 "@version":"1",
20 "@timestamp":"2016-05-06T16:07:42.749Z",
21 "host":"vagrant-ubuntu-trusty-64",
22 "path":"/var/www/wibble/logs/app.log"}
23 } ]
24 }
24
25 }

ÒÔÉϵĵÚ10ÐбíÃ÷£¬²éѯ¾«È·µØÆ¥ÅäÉÏÁËÒ»ÌõÈÕÖ¾£¨×ÜÃüÖÐÁ¿Îª1£©£¬²¢ÔÚµÚ13ÐпªÊ¼ÊDzéѯÏìÓ¦£¬Êµ¼ÊµÄÈÕÖ¾ÏûÏ¢ÔÚµÚ18ÐпªÊ¼µÄ¡£

ÄÇô£¬ÎÒÃÇ¿ÉÒÔʹÓÃÎÒÃǵÄÑ¡Ôñ¹¤¾ß£¬½«ÕâЩËÑË÷½á¹ûÊäÈëµ½ÎÒÃǵÄÊý¾Ý¿âÖвéѯ²âÊÔ£¬ÒÔ½âÎöJSONµÄÏìÓ¦²¢ÇÒÈ·¶¨Ê¼þÊÇ·ñ·¢ÉúÁË¡£

ÀýÈ磬²âÊÔÓÃÀýµÄ»ù±¾RubyʵÏÖ£¨ÄãÒ²¿ÉÒÔÔÚGitHubÉÏÕÒµ½Ëü£©£º

require 'json'
2
3 file = open("Database_prequery_search.json")
4 prequery = JSON.parse(file.read)
5
6 file = open("Database_postquery_search.json")
7 postquery = JSON.parse(file.read)
8
9 file = open("Database_connectionfailed_search.json")
10 connectionfailed = JSON.parse(file.read)
11
12 expected_prequery_event = (prequery["hits"]["total"] == 1)
13 expected_postquery_event = (postquery["hits"]["total"] == 1)
14 unexpected_connectionfailed_event = (connectionfailed["hits"]["total"] == 0)
15
16 expected_prequery_event && expected_postquery_event && unexpected_connectionfailed_event

ÎÒÃÇʹÓÃ'json' Ruby gem°üÈ¥½âÎö²éѯǰºóµÄcurlËÑË÷½á¹û£¬ÕâЩ½á¹ûÊÇÎÒÃÇÏÈǰ±£´æÔÚÖØÃüÃûºóµÄÎļþÖеģ¨Ç°10ÐУ©¡£µÚ12Ðе½µÚ14ÐÐ˵Ã÷ÁËÎÒÃǶԲâÊÔ½á¹ûµÄÔ¤ÆÚ£¨¼´ÈÕÖ¾Á÷ÖÐÓ¦¸Ã°üº¬Ò»¸öµ¥Ò»µÄDatabasePreQueryʼþ£¬Ò»¸öµ¥Ò»µÄDatabasePostQueryʼþ£¬²¢ÇÒûÓÐDatabaseConnectionFailed»òÆäËûʼþ£©¡£×îºóÒ»ÐÐÊÇʵ¼ÊµÄ²âÊÔ£¨Èç¹ûÎÒÃÇµÄÆÚÍû¶¼ÊÇÕýÈ·µÄRuby½«·µ»Ø¡°ture¡±£¬·ñÔò¾Í»á·µ»Øfalse£©¡£

¸ü¸´ÔӵIJâÊÔ£¨»ò¶ÔʼþµÄ·ÖÎö£©¿ÉÄÜ£¬±ÈÈç˵£¬ÐèÒªÔÚ¸ø¶¨Ê±¼äÄÚËÑË÷ËùÓÐÊý¾Ý¿âʼþ¡¢¼ÆËã²éѯ´ÎÊý¡¢¹ÊÕϵȡ£È»¶ø£¬Ê¹Óõķ½·¨ºÍÉÏÃæÃèÊöµÄÊÇÒ»ÑùµÄ£¬Ö»ÊÇÔÚÒ»¸ö½Ï´óµÄJSONÏìÓ¦°üÖÐÒªÖ´ÐÐÉÔ΢¸´Ôӵĵü´ú´úÂë¡£

ÕâÊÇÒ»¸ö¶ÔÕâÀà²âÊÔ½øÐÐcurl²éѯµÄÀý×Ó£¨ÄãÒ²¿ÉÒÔÔÚGitHubÕÒµ½Ëü£©£º

$ curl -XGET 'http://localhost:9200/_search?q=message:Database*&pretty' -d '
{
"query" : {
"range" : {
"@timestamp" : {
"gte" : "now-10m/m"
}
}
}
}'

ÎÒÃÇÒ²¿ÉÒÔÔÚϵͳÖиú×ÙÒ»Ìõµ¥Ò»µÄÖ´Ðз¾¶£¬Ê¹Óõ±»î¶¯×î³õ±»Æô¶¯Ê±ÎÒÃÇ×¢ÈëϵͳµÄÏà¹ØµÄID£º±ÈÈ磬Óû§µã»÷Ò»¸ö°´Å¥»òÒ»¸öÅúÁ¿×÷Òµ¿ªÊ¼¡£Ö»Òª¹ØÁªID¶ÔÓÚÎÒÃÇÔÚÈÕÖ¾¾ÛºÏ¹¤¾ßÖеÄËÑË÷ÊÇÄܹ»±£Ö¤Î¨Ò»µÄ£¬ÎÒÃǽ«¿´µ½Ö»Óë¸Ã²éѯÓйصĽá¹û¡£

ͨ¹ýËÑË÷¹ØÁªID£¬ÎÒÃǾͿÉÒÔ¾«È·µØÈ·¶¨µ½µ×ÊÇÄÄЩ·þÎñÆ÷»òÈÝÆ÷²ÎÓëÁËÇëÇóµÄ´¦ÀíºÍÖØ½¨ÇëÇóµÄ¹ý³Ì¡£ÓÐһЩÉÌÒµ¹¤¾ßÄÜÌṩÕâÑùµÄ¹¦ÄÜ£¬µ«Í¨¹ýÎÒÃÇ×Ô¼º½¨Á¢ÕâЩ¹¦ÄÜÖеÄÒ»²¿·Ö¹¦ÄÜ£¬ÎÒÃÇÒ²¿ÉÒÔ»ñµÃ¶ÔϵͳÔËÐÐÇé¿öµÄÓÐÒæ¼û½â¡£

²âÊÔÈÕÖ¾µÄÓû§¹ÊÊÂ

±ÈÈç˵£¬ÎÒÃÇÓÐÒ»¸ö¹ØÓÚ·¨ÂÉÊг¡µÄ»ùÓÚä¯ÀÀÆ÷µÄϵͳ£¬Õâ¸öϵͳÔÊÐíרҵµÄ·¨ÂÉ´ÓÒµÕßÀ´±à¼­ºÍ±£´æÎĵµ¡£½«ÎĵµÊý¾Ý±£´æµ½Îĵµ´æ´¢Êý¾Ý¿â£¬²¢½«ÏûÏ¢·ÅÔÚÏûÏ¢¶ÓÁÐÉÏ¡£È»¶ø£¬×÷Ϊһ¸ö¹ú¼ÒµÄ¼à¹ÜÖÆ¶ÈµÄÒ»²¿·Ö£¬ÎÒÃÇÐèҪȷ±£¸ÃÎļþ·ûºÏÒ»¶¨µÄÒªÇó£¬ËùÒÔÐèÒªÌṩ¡°É󼯡±·þÎñ¼àÌýÏûÏ¢¶ÓÁÐÉϵÄÏûÏ¢£¬È»ºó¼ì²é×î½ü¸üйýµÄÎĵµ£º

ÔÚÕâÀÎÒÃÇÒѾ­ÓÐÁËÒ»¸öÒì²½µÄ¡¢·Ö²¼Ê½µÄϵͳ¡£µ±ÔÚä¯ÀÀÆ÷ÖÐÓ¦ÓóÌÐòÃ÷È·µØÏÔʾÁ˳ɹ¦¡ª¡ª¸ÃÎĵµÒѾ­³É¹¦¸üÐÂʱ£¬¿ÉÄÜʵ¼ÊÉÏ»¹ÐèÒªÆô¶¯½øÒ»²½µÄ¹¤×÷Á÷³Ì£¨ÀýÈ磬Èç¹ûÎĵµÉ󼯷¢ÏÖÁËÎļþµÄÎÊÌ⣩¡£

ͨ¹ýʹÓÃʼþIDºÍÊÂÎñ¸ú×ÙµÄÈÕÖ¾¾ÛºÏ¹¦ÄÜ£¬ÎÒÃǾÍÓÐÄÜÁ¦¶ÏÑÔ£¬»ùÓÚÔÚÖ÷ÒªÊÂÎñϵͳÖеÄijЩ²Ù×÷£¬Ä³Ð©Ìض¨µÄÈÕÖ¾ÏûÏ¢Ó¦¸Ã³öÏÖÔÚÈÕÖ¾¾ÛºÏϵͳ֮ÖУº

¾ßÌåÀ´Ëµ£¬Èç¹ûÎÒÃÇÖªµÀ£¬É󼯷þÎñÓ¦ÒÔʼþID¡°AuditRecordCreated¡±Ð´Ò»ÌõÈÕÖ¾ÐÅÏ¢£¬ÎÒÃÇÔÚWebÓ¦ÓóÌÐòµÄÓû§ËÑË÷Íê³Éºó£¬¾Í¿ÉÒÔÔËÐÐÒ»¸ö²âÊÔÀ´Ñ°ÕÒÄǸöID£º

ÓÐÁËÕâ¸öÄÜÁ¦È¥¶ÏÑÔÎÒÃǶÔϵͳµÄÐÐΪµÄÆÚÍûÖ®ºó£¬ÎÒÃÇ¿ÉÒÔд³öÀàËÆÕâÑùµÄÐÐΪˮƽ²âÊÔ£º

Given I run a scenario as a Lawyer 
And I create a document
[And I wait 5 seconds]
When I search the logs API
Then I should find a recent entry for ¡°AuditRecordCreated¡±

ÕâÒâζ×Å£¬ÈÕÖ¾¼Ç¼ÒѾ­³ÉΪÁËÒ»ÖÖ¿ÉÒÔÀ©Õ¹ÎÒÃǶԷֲ¼Ê½ÏµÍ³µÄ²âÊԵķ½Ê½£¬Ö»ÒªÄܹ»Ã÷È·ÔÚijЩ¾ßÌåʱ¿ÌÎÒÃÇÆÚÍûÄÄЩÐÐΪ»òʼþ»á±»¼Ç¼ÏÂÀ´£¬È»ºóÔÙÈ¥ËÑË÷¾ÍºÃÁË¡£

½áÂÛ

¶Ô·Ö²¼Ê½µÄ¡¢¿ÉÀ©Õ¹µÄϵͳ£¨Í¨³£°üº¬²»Îȶ¨µÄ»ù´¡ÉèÊ©£©½øÐйÊÕÏÅųý£¬È¡¾öÓÚÊÇ·ñÓÐ×ã¹»µÄÈÕÖ¾¼Ç¼ºÍËÑË÷É豸¡£ÎÒÃÇÐèÒª¼Ç¼·¢ÉúÔÚÎÒÃǵÄϵͳÖеÄÖØÒªµÄʼþ£¬²¢Í¨¹ýÒ»¸öΨһµÄ¹ØÁªID½«ËüÃǹØÁªµ½Ò»¸öÌØ¶¨µÄÒµÎñ½»Ò×£¨Èç°ü¹ü¿ìµÝ£©ÉÏ¡£ÈÕÖ¾¾ÛºÏºÍËÑË÷¹¤¾ßʹÎÒÃÇÄܹ»ÓÃÒ»¸ö¼òµ¥µÄID²éѯÀ´¸ú×ÙÖն˵½Öն˵ÄÒµÎñ½»Òס£ÎÒÃÇÒ²¿ÉÒÔ²éѯһ¸öÀà±ðµÄʼþÒÔµ÷²é×é¼þ»òϵͳ¹ÊÕÏ£¨ÀýÈ磬ΪÁËÕÒµ½µ¼ÖÂij´Î¹ÊÕϵÄËùÓеÄÊý¾Ý¿âʼþ£©¡£×îºó£¬ÎÒÃÇ¿´µ½£¬ÎÒÃÇ¿ÉÒÔ¶øÇÒÎÒÃÇÒ²Ó¦¸ÃÒÔÓ빦ÄÜÐèÇóÀàËÆµÄ·½Ê½À´²âÊÔÕâЩ²Ù×÷ÐèÇ󣬼´Í¨¹ýÓû§¹ÊʺÍBDDµÄ³¡¾°¡£

   
3030 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

LoadRunnerÐÔÄܲâÊÔ»ù´¡
Èí¼þ²âÊÔ½á¹û·ÖÎöºÍÖÊÁ¿±¨¸æ
ÃæÏò¶ÔÏóÈí¼þ²âÊÔ¼¼ÊõÑо¿
Éè¼Æ²âÊÔÓÃÀýµÄËÄÌõÔ­Ôò
¹¦ÄܲâÊÔÖйÊÕÏÄ£Ð͵Ľ¨Á¢
ÐÔÄܲâÊÔ×ÛÊö


ÐÔÄܲâÊÔ·½·¨Óë¼¼Êõ
²âÊÔ¹ý³ÌÓëÍŶӹÜÀí
LoadRunner½øÐÐÐÔÄܲâÊÔ
WEBÓ¦ÓõÄÈí¼þ²âÊÔ
ÊÖ»úÈí¼þ²âÊÔ
°×ºÐ²âÊÔ·½·¨Óë¼¼Êõ


ij²©²ÊÐÐÒµ Êý¾Ý¿â×Ô¶¯»¯²âÊÔ
IT·þÎñÉÌ Web°²È«²âÊÔ
IT·þÎñÉÌ ×Ô¶¯»¯²âÊÔ¿ò¼Ü
º£º½¹É·Ý µ¥Ôª²âÊÔ¡¢Öع¹
²âÊÔÐèÇó·ÖÎöÓë²âÊÔÓÃÀý·ÖÎö
»¥ÁªÍøweb²âÊÔ·½·¨Óëʵ¼ù
»ùÓÚSeleniumµÄWeb×Ô¶¯»¯²âÊÔ