“ Yuema约吗?一起学技术,一起成长!学海无涯 高人带路系列”
程序的世界,就是有坑的地方!分享踩坑的心得与体验!每天分享一点点!
关注公众号,进入学海无涯,高人带路模式!!
Filebeat再难,有人带路,轻松搞定
max_procs: 1
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
namespace LogAuto
{
class Program
{
static void Main(string[] args)
{
String siteName = ConfigurationManager.AppSettings["siteName"]??"default Site";
// 模拟 100个站点
List<LogThread> logThreadPool = new List<LogThread>();
for(int i=0;i<100;i++){
LogThread logThread = new LogThread();
logThread.logTag = String.Format("{0}", i);
logThread.siteName = siteName;
logThreadPool.Add(logThread);
new Thread(new ThreadStart(logThread.WriteLog)).Start();
}
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace LogAuto
{
class LogThread
{
public String logTag { get;set;}
public String siteName { get;set;}
public void WriteLog() {
while (true)
{
File.AppendAllText(String.Format("{0}.log.log", logTag), String.Format("产生一条日志 {0} {1}\r\n", siteName, DateTime.Now));
Console.WriteLine(String.Format("{2}输出一条日志:{0} {1}", siteName, DateTime.Now, logTag));
//Thread.Sleep(1000);
}
}
}
}
不管启多少个LogAuto,生成日志,filebeat采集日志,完全看不出Filebeat有什么不爽,于是,这个模拟算是失败了。连多行日志都没有模拟出来,也没有让Filebeat有任何压力。
2.2 模拟大量线上日志
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
namespace LoadTest
{
class Program
{
static void Main(string[] args)
{
int threadCount = int.Parse(ConfigurationManager.AppSettings["ThreadCount"] ?? "1000");
int threadSleep = int.Parse(ConfigurationManager.AppSettings["ThreadSleep"] ?? "1000");
String targetUrl = ConfigurationManager.AppSettings["TargetUrl"] ?? "http://yue.ma/?fbtest";
List<Thread> logThreadPool = new List<Thread>();
for (int i = 0; i < threadCount; i++)
{
Thread tread = new Thread((m) =>
{
while (true) {
try
{
WebClient wc = new WebClient();
String data = wc.DownloadString(String.Format("{0}?r={1}", targetUrl, DateTime.Now));
Console.WriteLine(String.Format("线程 {0} 返回结果 {1} 时间 {2}", m, data, DateTime.Now));
Thread.Sleep(threadSleep);
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
});
logThreadPool.Add(tread);
tread.Start(i);
}
Console.WriteLine("输入任意字符退出");
Console.ReadKey();
}
}
}
启动了多个LoadTest实例,线程数都1000,压力是上去了。发现FileBeat没有任何压力,完全不对劲。查看FileBeat日志,filebeat压根就没有工作,kafka\logstash\elasticsearch统统没有工作。
2.3 完整的日志收集环境+模拟大量线上日志
这里要推荐linux下实用的history命令,可以查看前辈们使用的命令。
history
从history命令历史中去揣摩命令,其实是一种乐趣,但是效率不高。再次分享一下前辈总结出来的命令清单
玩日志系统必备的17条操作命令|启动zookeeper kafka logstash storm 查看日志 我手上最珍贵的命令集
测试结果压力一上去,w2wp.exe占用的cpu自己都能跑满100%,有没有filebeat,这cpu都能到100%,开着filebeat,filebeat能抢走40%到80%的cpu,随着日志压力大小会有所变化。
2.4 完整的日志收集环境+模拟大量线上日志+Filebeat限制cpu
当业务忙的时候,日志也多,这个时候,日志收集就不要抢戏了。做为测试环境,配置低,就限制1个cpu内核。开启压测后,显示Filebeat的cpu被限制在20%以下,不会出现Filebeat抢占过高的业务资源。
小结:本次Filebeat占用CPU过高的case处理,最终的结论是max_procs: 1,为了这13个字符,设计了多种压测环境,回过头来想想,其实一开始就想限制cpu使用,万万没有想到是max_procs。资源是有限的, cpu、内存,都是这样子。嗯,cpu就这么控制一下!
作者:钟代麒
出处:http://www.jishudao.com/
版权归作者所有,转载请注明出处