Maison > Questions et réponses > le corps du texte
业务场景
目前公司采用的游戏日志采集方式为一个服对应于一个日志库,然而游戏后台希望可以实时对这些游戏日志进行分析,当服不多时,这个还可以实时查询,但是游戏服越来越多的时候,这个就有瓶颈了,因为查询的时候后台是希望选择多个服一起进行日志分析的,尽管可以利用多线程进行查询,但等待时间还是会很长(因为服的数量会逐渐比线程数高),甚至直接就超出了网页的等待时间,报504网关等待超时。
后来,针对于查询时间过长甚至查不出结果的情况,做了如下改善:把需要进行的日志分析封装成一个个的定时任务,利用每天的凌晨某个时间跑这个任务,一个任务就会有一个和该任务关联的结果集,并且这个结果集保存在后台本地。那么当用户在后台对相应的日志模块进行分析时,直接读取后台本地的该任务管理的结果集即可。这样一来,确实解决了查询时间过长的问题。但是,随着游戏服的越来越多,在凌晨跑的那些日志分析任务所需要的时间越来越长了,更极端的一个情况就是可能会出现,从第一天的凌晨开始跑(比如一个任务是凌晨1:00开始的),也许到了第二天的凌晨的这个任务时间段(第二天的凌晨1:00,这个任务又到了执行时间了),前一天的该任务都没跑完,新一天的该任务又要开始了。这样循环下去,所需时间会更长,也有可能分析出每天的日志分析结果。
数据库用的是mysql(不管是游戏服的日志库还是后台的结果集),如何在不需要更改数据库的情况下(因为游戏服的日志库那边暂时不可以更改库,即使有想过改成mongodb),在现有的方案上进行优化呢?(假设我那些任务中都不会存在慢查询的情况,但是还是需要很长时间,因为服多)。在此,希望各位有经验的大神给小弟指点指点(⊙o⊙)。小弟感激不尽~~~
ringa_lee2017-04-18 10:24:14
logstash
elasticsearch
Il s'agit d'une solution d'analyse de journaux très mature. Il est également très simple à utiliser. Utilisez simplement logback-encoder
pour écrire le journal dans logstash-logback-encoder
Même si vous ne modifiez pas le schéma de base de données actuel, vous pouvez utiliser elasticsearch
pour importer des données dans elasticsearch
.
PHP中文网2017-04-18 10:24:14
Ce qui précède est en effet une solution de collecte et d'analyse de journaux très recommandée. Elle convient aux types de journaux avec des formats de journaux clairs qui ne nécessitent pas de nettoyage ou de conversion supplémentaire. Si les données du journal doivent être nettoyées ou converties dans un nouveau format, il est recommandé d'utiliser la solution Kafka + Spark streaming + Hive on spark. En fait, il n'est pas recommandé de sauvegarder les résultats sur Mysql, car le stockage des résultats dans une base de données relationnelle telle que Mysql deviendra un goulot d'étranglement pour l'ensemble de la rapidité de l'analyse. De plus, les modalités d’utilisation de ces forfaits sont consultables en ligne.