graylog2 / collector-sidecar Goto Github PK
View Code? Open in Web Editor NEWManage log collectors through Graylog
Home Page: https://www.graylog.org/
License: Other
Manage log collectors through Graylog
Home Page: https://www.graylog.org/
License: Other
nxlog CE (as of 2.9.17) does not currently send milliseconds in the GELF timestamp
field, so Graylog shows something like 2016-08-23 13:50:58.000
. Without doing some special handling (e.g. we're extracting the full timestamp from the message on the Graylog side and overwriting timestamp
) messages are out of order within a 1 second window. It may save others some time if this limitation is mentioned in the Collector Sidecar documentation.
See: https://nxlog.co/question/1855/gelf-timestamp-field-missing-millisecond-precision
I can't find any sign of RPM packages for RHEL 6/7 are they coming soon? Building from source really isn't a good option for me.
Inability to add "tail_files" flag to filebeats inputs in sidecar configuration.
While collecting large number of large log files that rotate hourly, after starting up the sidecar + filebeats, it burns down the whole GrayLog infrastructure. It starts to send huge amounts of data to graylog server (20k messages per second is a maximum our datastore is able to handle in testing environments, 40k on production) and causes graylog to be inaccessible untill it handles all the messages from all logfiles.
This may be related and could be solved by #13 but may need it's own solution.
Currenlty NXLog uses a short hostname when reporting which I am assuming gets used as the Source field in graylog, this is causing me some problems as the short hostnames are not unique across all my collectors. I currently can't see a way to work around it. NXLog does not let you configure this as a global option and suggests you override it by setting Exec $hostname...
but as described in #13, I can't affect the content in these blocks.
It may be worth having a "snippets" section that will be included in each input for fields that you want to include in all.
A short term solution could be to just place Exec $Hostname = hostname_fqdn();
in all inputs, which I think should be the default anyway.
generated nxlog.conf parse the collector-id including line break char
collector-id will add 0x0a at end after edited by vi/vim/nano
Graylog 2.0.1 (81e0187) on graylog (Oracle Corporation 1.8.0_77 on Linux 4.2.0-36-generic)
It would be nice to be able to include spinets in the inputs in graylog. like i show below, that way get can pull out some basic info like timestamps to start with.
<Input in>
Module im_file
File "C:\\tmp\\\\example-log.txt"
SavePos TRUE
Recursive TRUE
InputType multiline
exec if $raw_event =~ /(?:\{"([0-9]+?), ([0-9]+?), "(.+?)", "(.+?)", "(?:.+?)","(.+?)\n(?:[a-zA-Z0-9:,"\n\r\s\f\t\-\{\}\.\(\)]+?)New\sLogon:\s*(?:.+?)\n\s*Account\sName:\s*(.+?)\n(?:[a-zA-Z0-9:,"\n\r\s\f\t\-\{\}\.\(\)]+?)Source\sNetwork\sAddress:\s*([0-9\.]{7,15})\n(?:[a-zA-Z0-9:,"\n\r\s\f\t\-\{\}\.\(\)]+?)"\})/g;
$timestamp = $1;
$event = $2;
$status = $3;
$type = $4;
$short = $5;
$user = $6;
$source = $7;
</Input>
logrotate module defined twice in generated nxlog.conf
Thankfully the Filename
field was added in the release the other day, very useful, but it would be very nice to be able to add other arbitrary fields to an input to be able to tell them apart.
There's currently very little to be able to tell where messages came from, other than maintaining a all messages per host, and knowing what they do. Things like Application Name and Environment would save a lot of time and custom configuration.
The default configuration written for nxlog puts the modules directory as /usr/lib/nxlog/modules
but my CentOS 6.6 installation has it in /var/libexec/nxlog/modules
. If I change this and run nxlog manually to confirm then all is well.
Maybe this can be solved if there's a default nxlog config that could be pulled at startup to override these thing, binary location and UID/GID I imagine ought to be configurable too.
Using Graylog Collector Sidecar to configure NXLog on a CentOS 6.5 host.
Here is the resulting generated output in /etc/graylog/collector-sidecar/generated/nxlog.conf
<Output 57605344ed60c703b0fa7290>
Module om_tcp
Host scmgraylog-server.ghx.com
Port 12201
OutputType GELF_TCP
Exec $short_message = $raw_event; # Avoids truncation of the short_message field.
Exec $gl2_source_collector = '6f145fef-5841-49ad-8b36-80c4a69a1568';
Exec $Hostname = hostname_fqdn();
Unfortunately, the Hostname gets set to localhost.localdomain on this host which makes searching by source in Graylog a little difficult. I think if $Hostname could be set to hostname() rather than hostname_fqdn() in the above generated file, the problem would be solved. Even if hostname_fqdn() returned the "real" FQDN of this host, I would rather have the option to set to the shortname.
Is this possible? Something I can fix with a Snippet?
Thanks.
Using multiple tags, e.g. one for logging a generic CentOS log files and another for logging Nginx logs doesn't work:
Jul 01 10:31:07 i-4cd9dfbf graylog-collector-sidecar[17877]: time="2016-07-01T10:31:07+03:00" level=error msg="[nxlog] Error during configuration validation: exit status 1"
Jul 01 10:31:07 i-4cd9dfbf graylog-collector-sidecar[17877]: time="2016-07-01T10:31:07+03:00" level=info msg="[nxlog] Collector configuration file is not valid, waiting for update..."
Nxlog itself does seem to think that configuration is OK:
[root@i-4cd9dfbf-goserver ~]# nxlog -v -f /etc/graylog/collector-sidecar/generated/nxlog.conf
2016-07-01 10:41:44 INFO configuration OK
Deleting either one of the configurations having a tag defined gets logging working again. Am I configuring the tags somehow incorrectly, each different tag I have is configured only in their own configuration - so each configuration has only one tag?
Attached the nxlog.conf from both cases, one configuration and one tag, and 2 configurations with one tag in each.
nxlog_one_tag.conf.txt
nxlog_multiple_tags.conf.txt
We are trying to adjust graylog to our project and we think it's pretty helpful for us.
i think the collector-sidecar is great idea to gathering logs on the nodes file system.
you are providing packages for both and fortunately most developers are using ubuntu or centos .
i hopefully ask you to provide package for the solaris os.
actually we tried to build from source on the solaris os , it resulted to fail.
thank you.
When I start collector-sidecar on my vm whcih want to input log,
I see it auto connect to graylog but I cannot config it,
If I need click configurations,and then click on create configuration ?
If I do this but I got a 400 error.
while other regex' are noted without the surrounding slashes the multiline regex needs the slashes since nxlog wants them
define collector configuration
define output
define collector input using nxfile input
enable multiline
add a regex of your choice (without slashes)
save the input
examine the nxlog-logfile (usually /var/log/graylog/collector-sidecar/nxlog.log) for something like
2016-06-14 15:24:44 ERROR couldn't parse expression at line 11, character 14 in /etc/graylog/collector-sidecar/generated/nxlog.conf;syntax error, unexpected ^, expecting $end
2016-06-14 15:24:44 ERROR invalid expression in 'HeaderLine' at /etc/graylog/collector-sidecar/generated/nxlog.conf:11
as soon as you enclose the regex in slashes it works. but this is somewhat inconsistent to the other regex's used inside graylog. maybe the collector sidecar should do this for the user or there could at least be a hint inside the webinterface.
winlogbeats configuraton for TLS output includes an empty certificate_authorities entry that causes it to fail. Excluding the CA entry when no CA file is configured will fix this issue
output:
logstash:
hosts:
- graylog.example.com:5044
tls:
certificate_authorities:
- ""
insecure: true
nxlogs fill up your harddrive pretty quick with 2016-05-26 12:11:04 ERROR failed to open directory: /var/www/xxxxx: Permission denied entries when using a recursive file-input
define a collector entry with a wildcard-entry (/var/www/*.log) and enable recursion.
if nxlog can't access this path it puts an error into nxlog as well as in nxlog_stderr.log.
if you do this with some larger structure this can lead to logfiles using 60gb within 24 hours. so even logrotation doesnt help you much.
even if this is basically my own mistake it shouldnt break the system by filling its harddisks...
1.sudo nxlog -v -f /etc/graylog/collector-sidecar/generated/nxlog.conf
2016-06-28 08:15:56 INFO configuration OK
2.tail -f /var/log/messages
Jun 28 08:13:46 M3 /usr/bin/graylog-collector-sidecar[17473]: time="2016-06-28T08:13:46Z" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
Jun 28 08:13:56 M3 /usr/bin/graylog-collector-sidecar[17473]: time="2016-06-28T08:13:56Z" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
Jun 28 08:14:06 M3 /usr/bin/graylog-collector-sidecar[17473]: time="2016-06-28T08:14:06Z" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
Jun 28 08:14:16 M3 /usr/bin/graylog-collector-sidecar[17473]: time="2016-06-28T08:14:16Z" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
Jun 28 08:14:26 M3 /usr/bin/graylog-collector-sidecar[17473]: time="2016-06-28T08:14:26Z" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
Jun 28 08:14:36 M3 /usr/bin/graylog-collector-sidecar[17473]: time="2016-06-28T08:14:36Z" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
Jun 28 08:14:46 M3 /usr/bin/graylog-collector-sidecar[17473]: time="2016-06-28T08:14:46Z" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
3.[root@M3 neal]$cat /etc/graylog/collector-sidecar/collector_sidecar.yml
server_url: http://172.15.5.174:12900
tls_skip_verify: false
node_id: graylog-collector-sidecar
collector_id: file:/etc/graylog/collector-sidecar/collector-id
tags:
- linux
- apache
log_path: /var/log/graylog/collector-sidecar
update_interval: 10
backends:
- name: nxlog
enabled: true
binary_path: /usr/bin/nxlog
configuration_path: /etc/graylog/collector-sidecar/generated/nxlog.conf
4.cat /etc/graylog/collector-sidecar/generated/nxlog.conf
User root
Group root
LogFile /var/log/nxlog/nxlog.log
LogLevel INFO
[root@myfreebsd ~/work/src/collector-sidecar]# gmake build
go build -ldflags "-s -X github.com/Graylog2/collector-sidecar/common.GitRevision=d4c2910" -v -i -o graylog-collector-sidecar
github.com/Graylog2/collector-sidecar/vendor/github.com/cloudfoundry/gosigar
#github.com/Graylog2/collector-sidecar/vendor/github.com/cloudfoundry/gosigar
/usr/local/go/src/github.com/Graylog2/collector-sidecar/vendor/github.com/cloudfoundry/gosigar/sigar_unix.go:18: invalid operation: int64(stat.Blocks) * uint64(bsize) (mismatched types int64 and uint64)
/usr/local/go/src/github.com/Graylog2/collector-sidecar/vendor/github.com/cloudfoundry/gosigar/sigar_unix.go:19: invalid operation: int64(stat.Bfree) * uint64(bsize) (mismatched types int64 and uint64)
/usr/local/go/src/github.com/Graylog2/collector-sidecar/vendor/github.com/cloudfoundry/gosigar/sigar_unix.go:20: invalid operation: int64(stat.Bavail) * uint64(bsize) (mismatched types int64 and uint64)
/usr/local/go/src/github.com/Graylog2/collector-sidecar/vendor/github.com/cloudfoundry/gosigar/sigar_unix.go:23: stat.Free undefined (type syscall.Statfs_t has no field or method Free)
gmake: *** [Makefile:53: build] Error 2
anyone can help me ???
When the log
or config
don't exist, Sidecar should try to create them.
32bit/64bit versions of the Windows installer should use C:\Program Files
as target, not C:\Program Files (x86)
.
generated nxlog.conf parse the collector-id including line break char
collector-id will add 0x0a at end after edited by vi/vim/nano
Graylog 2.0.1 (81e0187) on graylog (Oracle Corporation 1.8.0_77 on Linux 4.2.0-36-generic)
On some of my collectors the "Show Messages" button that then querys the collector ID returns to resutls. I can server for the server the collector is installed on as the source and I see messages so I know the collector is working. I am using the NXLog backend and there seems to be no pattern bewteen the servers where the command works and where it doesnt. I cannot find any errors/messages on either server or client indicating a problem.
The graylog sidecar service eats up all ports, when listing ports using netstat the output is filled with:
Proto Local Address Foreign Address State
TCP x.x.x.x:52991 x.x.x.x:80 ESTABLISHED
this list continues to grow until all ports are exhausted.
The foreign address correlates with the API endpoint.
I have the same issue on all the machines i installed the Graylog Sidecar on.
Install Graylog collector, start service, wait.
RHEL 6.3
Sidecar is looking for NXlog modules in /usr/lib/ while RPM installs everything under /usr/libexec/
Name : collector-sidecar Relocations: /
Version : 0.0.7 Vendor: graylog
Release : 1 Build Date: Fri 13 May 2016 12:32:04 PM CEST
Install Date: Mon 23 May 2016 10:47:52 AM CEST Build Host: ubuntu
Group : optional Source RPM: collector-sidecar-0.0.7-1.src.rpm
Size : 11064832 License: GPLv3
Signature : (none)
Packager : Graylog, Inc. <[email protected]>
URL : https://graylog.org
Summary : Graylog collector sidecar
Description :
Graylog collector sidecar
Name : nxlog-ce Relocations: (not relocatable)
Version : 2.9.1504 Vendor: NXLog Ltd
Release : 1 Build Date: Tue 08 Dec 2015 02:07:49 PM CET
Install Date: Mon 23 May 2016 10:58:53 AM CEST Build Host: localhost
Group : System Environment/Daemons Source RPM: nxlog-ce-2.9.1504-1.src.rpm
Size : 5270620 License: NXLog Public License
Signature : (none)
URL : http://nxlog.org
Summary : nxlog is a modular, multi-threaded, high-performance log management solution
Description :
/var/log/graylog/collector-sidecar/nxlog.log:
2016-05-23 13:57:29 ERROR Failed to load module from /usr/lib/nxlog/modules/extension/xm_gelf.so, /usr/lib/nxlog/modules/extension/xm_gelf.so: cannot open shared object file: No such file or directory;DSO load failed
Installed:
# rpm -ql nxlog-ce | grep xm_gelf
/usr/libexec/nxlog/modules/extension/xm_gelf.so
From graylog-labs/graylog2-web-interface#1734.
@hryzec wrote:
After change of collector configuration input using options "Read since start" & "Save read position" Gaylog server seems to receive all the log messages at once causing Graylog to fill in disk journal and hang the processing until messages are processed. This however should not happen as it is expected from collector and nxLog to not process messages older than collector restart and older than collector read position.
I added 2 tags (linux, apache) to the .yml file. These two i configured in graylog with 2 configurations (each tag one configuration) and i let each read a file. this works (i could see the content of both logs in Graylog) but i get every 10 seconds a syslog entry:
2016-05-18 14:51:10.000 test-debian
May 18 14:51:09 test-debian /usr/bin/graylog-collector-sidecar[3389]: time="2016-05-18T14:51:09+02:00" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
2016-05-18 14:51:10.000 test-debian
May 18 14:51:09 test-debian graylog-collector-sidecar[3389]: time="2016-05-18T14:51:09+02:00" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
Why?? What does it mean?
What is the Syntax in yml file for more than one tag?
tags:
- apache linux
or
tags:
- apache, linux
or
tags:
- apache
- linux
yaml sytax should be the last one with dash but log tells me that the config file is corrupt.
level=error msg="[nxlog] Error during configuration validation: exit status 1
Having the backend process crash or beeing killed is not deteced by the sidecar service.
Leading to Lost logs
killall nxlog
)Need to add a Static Field to a Host, not only a Input
At the moment you would have to add the Field to every InputFile you define for a Host, (eg. environment=development)
tedious in large environments with multiple Microservices per Host.
fileInputsToString()
for outputsToString()
So you could add "global" Fieldscan't use nxlog buffer when using collector side car
Hi,
Is it possible to have windows installer file in msi format ?
It's more usefull to deploy with Active Directory.
Thank you
In my snippet I need to define an extension with the ShortMessageLength option. I get error messages saying the extension is already defined. Looking at the generated nxlog.conf I see the following:
define ROOT C:\Program Files (x86)\nxlog
<Extension gelf>
Module xm_gelf
</Extension>
I can't seem to control the first 5 lines of this config file. Collector Sidecar generates it automatically. In the snippet I've written the following:
<Extension gelf>
Module xm_gelf
ShortMessageLength -1
</Extension>
This conflicts with the extension definition that sidecar creates automagically and generates configuration error messages in NXLOG and ignores the "ShortMessageLength -1" line
In other words my config file looks like this:
<Extension gelf>
Module xm_gelf
</Extension>
Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
LogFile %ROOT%\data\nxlog.log
LogLevel DEBUG
<Extension gelf>
Module xm_gelf
ShortMessageLength -1
</Extension>
Instead of this:
Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
LogFile %ROOT%\data\nxlog.log
LogLevel DEBUG
<Extension gelf>
Module xm_gelf
ShortMessageLength -1
</Extension>
I can run nxlog on it's own and my config file works fine. The first 5 lines that graylog side adds to my config breaks it.
Create a new collector configuration and just use a custom snippet.
as far as i am aware nxlog comes with its own log rotation engine. wouldn't it be nice if one could configure this via the sidecar?
When creating a configuration for collector-sidecar with a file input type, it'd be good to be able to populate a field that stores the filename.
Right now, only the ID and type of the input are stored.
I'm using nxlog and I've installed the graylog sidecar. I'm manually starting it with my configuration file so I can monitor it. Just after reporting that nxlog is starting it gives a 400 error related to the property tags.
yml config below:
collector_sidecar.txt
Hello, thanks for your feedback about #20 and supporting that feature.
i had tested your build option for solarisOS and i successfully finished making binary file from your project.
but i found that service couldn't be started while executing binary.
the error message was "Service command not found" something like that, and i assume that github.com/kardianos/service causes the problem.
the project says "Currently supports Windows XP+, Linux/(systemd | Upstart | SysV), and OSX/Launchd" and there no comment for solarisOS.
thank you.
In my opinion it makes sense to show centralized the tags which i add in the yml file in the "Collectors in Cluster" overview.
Now i have to check each of my machines.
When using Sidecar Collector to centrally manage nxlog configuration files no logs are sent.
No logs are shipped - this can be seen on a Wireshark capture on the Windows server.
No logs are shipped, again this can be seen in Wireshark
Logs are now shipped.
When restarting the collector-sidecar service all monitored logs are completly resent to the graylog server when the "Read since start" checkbox is unchecked in the input section of the collector configuration whether or not you have "Save read position" checked.
I could be mistaken on the intent, but I would assume that checking "Save read position" and unchecking "Read since start" would send the entire log file on the first run and then only send changes from there on out.
When "read since start" is unchecked it appears that "save read position" has no effect.
In the collector configuration, inputs section.
1)Uncheck "Read since start"
2)Check "Save read position"
3)Restart the collector-sidecar service
The entire log file is sent every time the service is restarted.
Any trailing path in collector-sidecar's server_url is ignored. This prevents the use of a single port for Graylog Server web and API services on a proxy frontend.
All our Graylog servers are behind a single load balancer, thus the output for every input will be one of three options.
When selecting an output for an input, might be helpful to have a drop-down with global ones with one option being 'new'?
Also, as mentioned in the Google group, having the option to add a custom snippet to a specific input will be hugely helpful in our setup.
This encompasses mostly Exec statements, breaking up the log entry into key/value pairs via regex and adding some custom fields.
Maybe in the output as well seeing we add some specific fields/values to the log based on app name, environment etc.
This is similar to Graylog2/graylog-plugin-collector@be22699, but only for sidecar
I installed the NXLOG Ubuntu package and tried to run the sidecar with -collector-path /usr/bin/nxlog
.
This generates the following nxlog.conf
:
define ROOT /usr/bin/nxlog
Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
LogFile %ROOT%\data\nxlog.log
Two problems:
\
)ROOT
is wrong for the following settings.The separator issue should be easy to fix, but the second issue needs more thinking. When NXLOG gets installed via the DEB package, the directories are all over the place.
/usr/lib/nxlog/modules
/usr/bin/nxlog
The CacheDir
, Pidfile
, SpoolDir
and LogFile
directives should probably point to a configurable root directory. The binary path and the Moduledir
should probably be separate settings. Maybe we also need something that detects the module dir etc.
if you have to define several rather similar inputs for a collector a clone (or copy) button would be nice.
i know there are wildcards but sometimes this simply does not cut the mustard.
I added 2 tags (linux, apache) to the .yml file. These two i configured in graylog with 2 configurations (each tag one configuration) and i let each read a file. this works but i get every 10 seconds a syslog entry:
2016-05-18 14:51:10.000 test-debian
May 18 14:51:09 test-debian /usr/bin/graylog-collector-sidecar[3389]: time="2016-05-18T14:51:09+02:00" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
2016-05-18 14:51:10.000 test-debian
May 18 14:51:09 test-debian graylog-collector-sidecar[3389]: time="2016-05-18T14:51:09+02:00" level=info msg="[RequestConfiguration] No configuration found for configured tags!"
What does it mean?
What is the Syntax in yml file for more than one tag?
tags:
- apache linux
or
tags:
- apache, linux
or
tags:
- apache
- linux
Will Logstash backend be enhance? because nxlog backend configured by Collectors can not extract log at log client.
When I attempt to setup my collector_sidecar.yml file without a node_id entered graylog collector fails to start. I am given this error message when running the collector in debug mode, "Please provide a vaild node-id." I am also curious if there is something I do not understand about GitHub commits. I am using the installation for 0.0.8 downloaded from this link, https://github.com/Graylog2/collector-sidecar/releases, but it looks like that was released before the commit.
This is the yml file I am using. I have also tried with the node id line removed completely.
server_url: http://192.168.9.25:12900
collector_id: file:C:\Program Files\graylog\collector-sidecar\collector-id
node_id:
tags:
- IIS2003
log_path: C:\Program Files\graylog\collector-sidecar
update_interval: 10
backends:
- name: nxlog
enabled: true
binary_path: C:\Program Files\nxlog\nxlog.exe
configuration_path: C:\Program Files\nxlog\conf\nxlog.conf
To reduce the steps a user has to made till the Sidecar is ready to run, we could create a dialog in the Windows installer to ask for the most basic settings every installation needs. For most installations no further configuration would be needed.
Would it be possible to rework the inputs / outputs interface for just a generalized "options" text area? My use case is below. I realize I could do this with a query statement but NXLog's own functions make this easier and having an options area I could really do either/or since it would just place my text at this location. I could also see writing more advanced things here without having to resort to using a snippet for a full configuration. I hope I have explained this properly... Thoughts?
<Input WindowsEventLog>
Module im_msvistalog
PollInterval 1
SavePos True
ReadFromLast True
Exec if ($Channel == "Security") drop(); <-- An options textarea that would place options here
</Input>
https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html#loadbalance
I'm trying to setup collector sidecar with a nxlog backend to ship logs using TLS.
I've enabled TLS on my TCP GELF input, specifying the cert and private key. I then went on to configure the collector, only to find out that there are no TLS settings on the collector config.
nxlog.log on the client show the following error: "ERROR om_tcp detected a connection error;Connection reset by peer".
Am I missing something? Do I need to write a custom nxlog snippet to enable the ssl module?
Here is an example config just to make my question clear: #https://www.loggly.com/docs/nxlog-tls-configuration/
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.