小步快跑的公司可以最简化操作直接通过log4net将日志写入Elastic
?很多小步快跑的公司,开发人员多则3-4个,面对巨大业务压力,日连夜的赶着上线,快速试错,自然就没时间搭建一些基础设施,比如说logCenter,但初期 项目不稳定,bug又多,每次都跑到生产去找日志,确实也不大方便,用elk或者用hadoop做日志中心,虽然都是没问题的,但基于成本和人手还是怎么简化怎么来, 本篇就来说说直接使用log4net的ElasticSearchAppender扩展直接将log写入到es中。
? nuget下来的都是开箱可用,如果看源码的话可以在github上找一下log4net.ElasticSearch项目。。
nuget包下来之后,就可以配置config文件了,其实还是蛮简单的,大家可以根据自己的项目合理的配置里面的各项参数,为了方便大家理解,我在每个配置 项上加了详细的注释,大家可以仔细看看。
<span style="color: #0000ff;"></ <span style="color: #800000;">configuration<span style="color: #0000ff;">>上面有几点要特别注意一下:
? ? ? ? ? ?这个大家理解成缓存区,方便批量提交到es中,否则的话,过于频繁的和es进行交互,对带宽,对application,es都是比较大的压力。 ? ? ? ? ? ? 有时候我们有这样的需求,我希望ERROR,Fault这种级别的错误不要走buffer,直接提交给es,这样更容易让初创团队发现问题,找到问题,恭喜你, ? ? ? ? ? 上面这个配置就是解决这个事的。
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
ILog _log = LogManager.GetLogger(
</span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Main(<span style="color: #0000ff;">string</span><span style="color: #000000;">[] args)
{</span><span style="color: #0000ff;"> for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span>; i < <span style="color: #800080;">1000</span>; i++<span style="color: #000000;">)
{
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">
{
</span><span style="color: #0000ff;">var</span> m = <span style="color: #800000;">"</span><span style="color: #800000;">1</span><span style="color: #800000;">"</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">var</span> result = <span style="color: #800080;">100</span> /<span style="color: #000000;"> Convert.ToInt32(m);
_log.Info(</span><span style="color: #800000;">"</span><span style="color: #800000;">我要开始记录日志啦</span><span style="color: #800000;">"</span><span style="color: #000000;">);
}
</span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception ex)
{
_log.Error(</span><span style="color: #800000;">"</span><span style="color: #800000;">调用失败</span><span style="color: #800000;">"</span> +<span style="color: #000000;"> i,ex);
</span><span style="color: #008000;">//</span><span style="color: #008000;">_log.Info("调用失败" + i,ex);
</span><span style="color: #008000;">//</span><span style="color: #008000;">Console.WriteLine(i);</span>
<span style="color: #000000;"> }
} 然后通过elasticsearch-head 插件进行查看,各种数据就都在es中了。
关于这个插件的下载,因为google官网被屏蔽,大家如果有VPN的话,可以自行在chrome商店搜索,当然也可以直接下载我的zip包,。 在浏览器中加载插件的时候选择0.1.3.0 文件夹即可 完了之后点击右上边的 “放大镜“ 按钮就可以看到你想看到的UI了。
这是一个基于luncene的分布式搜索框架,用起来还是挺顺手的,你可以下载5.6.4版本。 [elsearch@localhost myapp]$ -...gz
一般来说,安装的过程中你可能会遇到3个坑。
[root@localhost bin]# ./--31T04::,][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:) ~[elasticsearch-..jar:.) ~[elasticsearch-..jar:.) ~[elasticsearch-..jar:.) ~[elasticsearch-..jar:.) ~[elasticsearch-..jar:.) ~[elasticsearch-..jar:.) ~[elasticsearch-..jar:.) ~[elasticsearch-..jar:.) ~[elasticsearch-..jar:.) ~[elasticsearch-..jar:.) ~[elasticsearch-..jar:.
? ? ? ? 这个简单,增加一个elasearch用户就可以了。 -g elsearch - -R elsearch:elsearch ./elasticsearch #指定elasticsearch所属elsearch组
[elsearch@localhost bin]$ ./elasticsearch
Java HotSpot(TM) 64-Bit Server VM warning: INFO:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1449590784 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/myapp/elasticsearch/bin/hs_err_pid33341
? ? ? 这是ES默认分配的堆内存是2g,如果出现这个问题,一般来说是你的虚拟机拥有的内存小于2g,只需要在jvm.options中将2g修改1g就可以了。 [root@localhost config]#
<span style="color: #ff0000;">-Xms1g
-Xmx1g
[elsearch@localhost bin]$ ./elasticsearch
[2018-05-30T20:44:56,484][INFO ][o.e.n.Node ] [] initializing ...
[2018-05-30T20:44:56,632][INFO ][o.e.e.NodeEnvironment ] [f9t2Sfl] using [1] data paths,mounts [[/ (rootfs)]],net usable_space [14.4gb],net total_space [22.1gb],spins? [unknown],types [rootfs]
[2018-05-30T20:44:56,632][INFO ][o.e.e.NodeEnvironment ] [f9t2Sfl] heap size [989.8mb],compressed ordinary object pointers [true]
[2018-05-30T20:44:56,634][INFO ][o.e.n.Node ] node name [f9t2Sfl] derived from node ID [f9t2SfljReiND4XeMLUbyA]; set [node.name] to override
[2018-05-30T20:44:56,634][INFO ][o.e.n.Node ] version[5.6.4],pid[33546],build[8bbedf5/2017-10-31T18:55:38.105Z],OS[Linux/3.10.0-327.el7.x86_64/amd64],JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_144/25.144-b01]
[2018-05-30T20:44:56,634][INFO ][o.e.n.Node ] JVM arguments [-Xms1g,-Xmx1g,-XX:+UseConcMarkSweepGC,-XX:CMSInitiatingOccupancyFraction=75,-XX:+UseCMSInitiatingOccupancyOnly,-XX:+AlwaysPreTouch,-Xss1m,-Djava.awt.headless=true,-Dfile.encoding=UTF-8,-Djna.nosys=true,-Djdk.io.permissionsUseCanonicalPath=true,-Dio.netty.noUnsafe=true,-Dio.netty.noKeySetOptimization=true,-Dio.netty.recycler.maxCapacityPerThread=0,-Dlog4j.shutdownHookEnabled=false,-Dlog4j2.disable.jmx=true,-Dlog4j.skipJansi=true,-XX:+HeapDumpOnOutOfMemoryError,-Des.path.home=/usr/myapp/elasticsearch]
[2018-05-30T20:44:57,530][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [aggs-matrix-stats]
[2018-05-30T20:44:57,530][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [ingest-common]
[2018-05-30T20:44:57,530][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [lang-expression]
[2018-05-30T20:44:57,531][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [lang-groovy]
[2018-05-30T20:44:57,531][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [lang-mustache]
[2018-05-30T20:44:57,531][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [lang-painless]
[2018-05-30T20:44:57,531][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [parent-join]
[2018-05-30T20:44:57,531][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [percolator]
[2018-05-30T20:44:57,531][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [reindex]
[2018-05-30T20:44:57,531][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [transport-netty3]
[2018-05-30T20:44:57,531][INFO ][o.e.p.PluginsService ] [f9t2Sfl] loaded module [transport-netty4]
[2018-05-30T20:44:57,532][INFO ][o.e.p.PluginsService ] [f9t2Sfl] no plugins loaded
[2018-05-30T20:44:59,469][INFO ][o.e.d.DiscoveryModule ] [f9t2Sfl] using discovery type [zen]
[2018-05-30T20:45:00,107][INFO ][o.e.n.Node ] initialized
[2018-05-30T20:45:00,107][INFO ][o.e.n.Node ] [f9t2Sfl] starting ...
[2018-05-30T20:45:00,339][INFO ][o.e.t.TransportService ] [f9t2Sfl] publish_address {192.168.23.143:9300},bound_addresses {[::]:9300}
[2018-05-30T20:45:00,356][INFO ][o.e.b.BootstrapChecks ] [f9t2Sfl] bound or publishing to a non-loopback or non-link-local address,enforcing bootstrap checks
ERROR: [2] bootstrap checks failed
[2018-05-30T20:45:00,365][INFO ][o.e.n.Node ] [f9t2Sfl] stopping ...
[2018-05-30T20:45:00,444][INFO ][o.e.n.Node ] [f9t2Sfl] stopped
[2018-05-30T20:45:00,444][INFO ][o.e.n.Node ] [f9t2Sfl] closing ...
[2018-05-30T20:45:00,455][INFO ][o.e.n.Node ] [f9t2Sfl] closed
? 这个max file descriptors 的问题,我只需要修改 vim /etc/security/limits.conf 文件增加句柄值即可。 ?虚拟内存的 max virtual memory areas vm.max_map_count [65530] is too low,increase to at least [262144] ?只需要在sysctl.conf 中修改max即可。 [root@localhost config]# vim /etc/vm.max_map_count=<span style="color: #800080;">655360
? ? ?这些坑解决的话,es就可以正常启动了,最后记得在elasticsearch.yml 中将host设为0.0.0.0 让远程机器可以访问。 network.host: <span style="color: #800080;">0.0.<span style="color: #800080;">0.0
? ? 最后执行 ./elasticsearch -d ?让es在后台执行。 [elsearch@localhost bin]$ ./elasticsearch -d
[elsearch@localhost bin]$ netstat -tlnp ? ? ? 好了,本篇就说这么多,如果你要更精细化的查询,可以再搭建一个配套版本的kibana即可。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |